MiraiForum

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

    CuteReimu 发布的帖子

    • Go语言的SDK

      因为自己的需要,写了一个Go的SDK:https://github.com/CuteReimu/mirai-sdk-http ,欢迎自取
      相较于直接使用mirai-core和mirai-console而言,mirai-api-http的好处是,在你更新代码时,你无需重新登录QQ,减少登录次数在最近非常容易风控的环境下是一个非常好的优点。
      目前实现了常用的 (我可能会用到的) 功能,后续慢慢补充吧。

      用法也非常简单:

      package main
      
      import (
          . "github.com/CuteReimu/mirai-sdk-http"
          "github.com/CuteReimu/mirai-sdk-http/utils"
          "github.com/sirupsen/logrus"
      )
      
      func main() {
          logrus.SetLevel(logrus.DebugLevel)
          utils.InitLogger("./logs", utils.LogDebugLevel, utils.LogWithStack)
          log := utils.GetModuleLogger("robot")
          b, _ := Connect("localhost", 8080, WsChannelAll, "ABCDEFGHIJK", 123456789, false)
          b.ListenGroupMessage(func(message *GroupMessage) bool {
              _, err := b.SendGroupMessage(message.Sender.Group.Id, 0,
                  append(MessageChain(&Plain{Text: "你说了:\n"}), message.MessageChain[1:]...),
              )
              if err != nil {
                  log.Println("发送失败: ", err)
              }
              return true
          })
          select {}
      }
      

      断线重连还没做,后续会做 (不过如果机器人和mirai是在同一台机器的话,一般也不会断线)

      发布在 HTTP API和第三方SDK
      C
      CuteReimu
    • RE: 想问一下现在大家都是怎么debug插件的

      不推荐登录调试,实在想调试的话就写kotlin的单元测试

      发布在 技术交流板块
      C
      CuteReimu
    • RE: 怎么修改插件的源码

      gradlew buildPlugin 打成比较小的包
      gradlew buildPluginLegacy 打成比较大的包
      gradlew runConsole 本地启动一个mirai console调试

      发布在 开发交流
      C
      CuteReimu
    • RE: 想用多线程

      所以为啥要用线程池,kotlin协程不香吗

      发布在 开发交流
      C
      CuteReimu
    • 如果我想要做一个词条功能,词条里有图片,序列化图片的时候

      我用的 MessageChain.serializeToJsonString 和 MessageChain.deserializeFromJsonString ,但是图片会只有图片id以及图片大小等一些信息。当这个图片过期被腾讯清除之后,再发这个消息时,用客户端点开图片就会提示图片已失效。

      这种情况,你们有没有什么好的办法处理?

      发布在 开发交流
      C
      CuteReimu
    • 这个 AutoSavePluginData 有没有定时自动备份功能

      或者有没有哪个方法,调用之后可以额外生成一个bak文件

      发布在 开发交流
      C
      CuteReimu
    • RE: 【求助】消息发送失败时,从代码上如何得知?

      @Cdm2883 在 【求助】消息发送失败时,从代码上如何得知? 中说:

      可以参考MrXiaoM的mirai-console-dev-qrlogin插件

      判断消息发送失败的代码在这里src/main/kotlin/QRLogin.kt#L63

      照这样的话,直接拿 sendMessage 函数返回的 MessageReceipt 可以不?例如:

      suspend fun handle(e: GroupMessageEvent) {
          val receipt: MessageReceipt<Group> = e.group.sendMessage(groupMsg)
          val ids = receipt.source.ids
          if (ids.isEmpty() || ids.any { it < 0 }) {
              logger.warning("群消息发送失败,你的账号可能已被风控")
          }
      }
      
      发布在 开发交流
      C
      CuteReimu
    • 【求助】消息发送失败时,从代码上如何得知?

      例如:

      fun handle(e: GroupMessageEvent) {
          e.group.sendMessage(groupMsg)
      }
      

      但是 sendMessage 的定义是这样

      public interface Group {
          /**
           * 向这个对象发送消息.
           *
           * @throws EventCancelledException 当发送消息事件被取消时抛出
           * @throws BotIsBeingMutedException 发送群消息时若 [Bot] 被禁言抛出
           * @throws MessageTooLargeException 当消息过长时抛出
           * @throws IllegalArgumentException 当消息内容为空时抛出
           *
           * @return 消息回执. 可进行撤回 ([MessageReceipt.recall])
           */
          public override suspend fun sendMessage(message: Message): MessageReceipt<Group>
      }
      

      在被风控、或者协议被改了等原因导致发送失败的时候,并不会抛出异常。在这种情况下,我应该如何得知发送失败了?(例如我希望打印一个错误日志)

      发布在 开发交流
      C
      CuteReimu
    • 1 / 1