你直接或者间接引用了 windows.h (比如你引用了 httplib 这个库)
在所有 #include 最下面加
#ifdef SendMessage
#undef SendMessage
C
cyanray 发布的最佳帖子
-
RE: mirai-cpp】Cyan::MiraiBot没有成员SendMessageA
-
RE: mirai-cpp】string的api出错,但旁边用来测试的都正常
在 On 函数里抛出异常是不会导致程序崩溃的,所以一定要在里面捕捉异常,否则会错过很多东西。
mirai-api-http 返回的数据都是 utf-8 编码的,如果你的 C++ 代码里有字符串字面量,那么你要保证你的源文件的编码也是 utf-8 编码的,才能用
if (send.substr(0, 4) == "名字")
这种判断。
还有就是 utf-8 编码下,中文一般占用 3 个字节,两个汉字你只取4个字节,等于第二个汉字只取了一部分,nlohmann遇到不正确的utf-8编码会报错。
我更建议你使用 正则表达式 或者 start_with。
如果你可以使用 C++20:
string msg_str = m.MessageChain.GetPlainTextFirst(); string_view msg_view(msg_str); if (!msg_view.starts_with("指令名称")) return;
或者用 string::find
string msg_str = m.MessageChain.GetPlainTextFirst(); if(msg_str.find("指令名称") != 0) return;
当然你的代码我没测试过,我只是猜测了下错误的原因,你可以去试试能不能解决。
cyanray 发布的最新帖子
-
RE: mirai-cpp】Cyan::MiraiBot没有成员SendMessageA
你直接或者间接引用了 windows.h (比如你引用了 httplib 这个库)
在所有 #include 最下面加
#ifdef SendMessage
#undef SendMessage -
RE: mirai-cpp】string的api出错,但旁边用来测试的都正常
在 On 函数里抛出异常是不会导致程序崩溃的,所以一定要在里面捕捉异常,否则会错过很多东西。
mirai-api-http 返回的数据都是 utf-8 编码的,如果你的 C++ 代码里有字符串字面量,那么你要保证你的源文件的编码也是 utf-8 编码的,才能用
if (send.substr(0, 4) == "名字")
这种判断。
还有就是 utf-8 编码下,中文一般占用 3 个字节,两个汉字你只取4个字节,等于第二个汉字只取了一部分,nlohmann遇到不正确的utf-8编码会报错。
我更建议你使用 正则表达式 或者 start_with。
如果你可以使用 C++20:
string msg_str = m.MessageChain.GetPlainTextFirst(); string_view msg_view(msg_str); if (!msg_view.starts_with("指令名称")) return;
或者用 string::find
string msg_str = m.MessageChain.GetPlainTextFirst(); if(msg_str.find("指令名称") != 0) return;
当然你的代码我没测试过,我只是猜测了下错误的原因,你可以去试试能不能解决。