MiraiForum

    • 注册
    • 登录
    • 搜索
    • 热门
    • 最新
    • 未解决
    • 标签
    • 群组
    • 友情链接
    1. 主页
    2. cyanray
    C
    • 资料
    • 关注 0
    • 粉丝 0
    • 主题 0
    • 帖子 3
    • 最佳 2
    • 有争议的 0
    • 群组 0

    cyanray

    @cyanray

    2
    声望
    4
    资料浏览
    3
    帖子
    0
    粉丝
    0
    关注
    注册时间 最后登录

    cyanray 取消关注 关注

    cyanray 发布的最佳帖子

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

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

      发布在 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;
      

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

      发布在 开发交流
      C
      cyanray

    cyanray 发布的最新帖子

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

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

      发布在 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;
      

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

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

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

      发布在 HTTP API和第三方SDK
      C
      cyanray