MiraiForum

    • 注册
    • 登录
    • 搜索
    • 热门
    • 最新
    • 未解决
    • 标签
    • 群组
    • 友情链接

    机器人自己发送的消息,MessageEvent事件监听不到

    BUG反馈
    2
    4
    325
    正在加载更多帖子
    • 从旧到新
    • 从新到旧
    • 最多赞同
    回复
    • 在新帖中回复
    登录后回复
    此主题已被删除。只有拥有主题管理权限的用户可以查看。
    • 2
      2446694 最后由 编辑

      使用组件:Mirai-core 2.15-M1

      前因

      我想要将数据存储到数据库中,以从别人的引用消息中获取原数据
      但是当别人引用除机器人以外其他消息是,数据库可以查询到
      当别人引用机器人发的消息时,数据库查询不到

      控制台输出,发现机器人并没有将自己发送的消息存储到数据库

      于是我尝试使用MessagePostSendEvent事件,将原数据添加到数据库中
      但MessagePostSendEvent并不附带MessageSource,所以无法获取ids等信息

      我想要

      希望修复这个bug,让MessageEvent可以监听到机器人自己发送的消息

      PS:我测试用其他设备发送消息,MessageEvent可以监听到,但就是监听不到Mirai自己发的消息

      1 条回复 最后回复 回复 引用 0
      • cssxsh
        cssxsh 最后由 cssxsh 编辑

        MessagePostSendEvent.receipt.source

        2 2 条回复 最后回复 回复 引用 1
        • 2
          2446694 @cssxsh 最后由 编辑

          @cssxsh 牛啦,这是我的实现

              private void messagePostSendEventListener() {
                  logger.info("MessagePostSendEventListener Running");
                  GlobalEventChannel.INSTANCE.subscribeAlways(MessagePostSendEvent.class, event -> {
                      logger.info("MessagePostSendEvent...");
                      // 这里新构造了一个带source的chain,存储到数据库中
                      MessageChain chain = Objects.requireNonNull(event.getReceipt()).getSource().plus(event.getMessage());
                      if (!chainService.insertMessageChain(new MessageChainData(chain)))
                          logger.warn("存储失败: " + chain.contentToString());
                  });
              }
          
          1 条回复 最后回复 回复 引用 0
          • 2
            2446694 @cssxsh 最后由 编辑

            此回复已被删除!
            1 条回复 最后回复 回复 引用 0
            • 1 / 1
            • First post
              Last post
            Powered by Mamoe Technologies & NodeBB | 友情链接 | 服务监控 | Contact