MiraiForum

    • Register
    • Login
    • Search
    • Popular
    • Recent
    • Unsolved
    • Tags
    • Groups
    • 友情链接
    1. Home
    2. cyanray
    C
    • Profile
    • Following 0
    • Followers 0
    • Topics 0
    • Posts 3
    • Best 2
    • Controversial 0
    • Groups 0

    cyanray

    @cyanray

    2
    Reputation
    4
    Profile views
    3
    Posts
    0
    Followers
    0
    Following
    Joined Last Online

    cyanray Unfollow Follow

    Best posts made by cyanray

    • RE: mirai-cpp】Cyan::MiraiBot没有成员SendMessageA

      你直接或者间接引用了 windows.h (比如你引用了 httplib 这个库)
      在所有 #include 最下面加
      #ifdef SendMessage
      #undef SendMessage

      posted in HTTP API和第三方SDK
      C
      cyanray
    • 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;
      

      当然你的代码我没测试过,我只是猜测了下错误的原因,你可以去试试能不能解决。

      posted in 开发交流
      C
      cyanray

    Latest posts made by cyanray

    • RE: mirai-cpp】Cyan::MiraiBot没有成员SendMessageA

      你直接或者间接引用了 windows.h (比如你引用了 httplib 这个库)
      在所有 #include 最下面加
      #ifdef SendMessage
      #undef SendMessage

      posted in HTTP API和第三方SDK
      C
      cyanray
    • 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;
      

      当然你的代码我没测试过,我只是猜测了下错误的原因,你可以去试试能不能解决。

      posted in 开发交流
      C
      cyanray
    • RE: 催更!咕咕鸽游戏通了吗?

      支持催更,没有新特性我要死了

      posted in HTTP API和第三方SDK
      C
      cyanray