Mrs4s / go-cqhttp

cqhttp的golang实现,轻量、原生跨平台.
GNU Affero General Public License v3.0
10.37k stars 1.63k forks source link

[Bug]: 频道里at多人,只有第一位被at的人能正常at到 #1182

Open WsureDev opened 2 years ago

WsureDev commented 2 years ago

请确保您已阅读以上注意事项,并勾选下方的确认框。

go-cqhttp 版本

v1.0.0-beta8-fix1

旧的 go-cqhttp 版本 (请注意,我们对更低版本的 go-cqhttp 不提供完全支持;您的 Issue 有可能会被关闭。)

No response

运行环境

Windows (64)

其它系统版本

No response

运行架构

AMD

其它系统架构

No response

连接方式

WebSocket (正向)

使用协议

0 | iPad

在最新的 Release 版本中能否复现

重现步骤

在正向ws连接下,构造消息内容为 {"action":"send_guild_channel_msg","params":{"guild_id":6000051636714649,"channel_id":1454836,"message":"[CQ:at,qq=144115218678097866] [CQ:at,qq=144115218677969464] \n10010943"}}

期望的结果是什么?

期望结果收到 {"channel_id":1454836,"guild_id":6000051636714649,"message":"[CQ:at,qq=144115218678097866] \n[CQ:at,qq=144115218677969464] \n10010943","message_id":"294-2151023719","message_type":"guild","post_type":"message","self_id":2060856340,"self_tiny_id":144115218678182288,"sender":{"nickname":"Icarus","user_id":144115218678182288},"sub_type":"channel","time":1637408108,"user_id":144115218678182288}

实际的结果是什么?

{"channel_id":1454836,"guild_id":6000051636714649,"message":"[CQ:at,qq=144115218678097866] \n[CQ:at,qq=537342520] \n10010943","message_id":"294-2151023719","message_type":"guild","post_type":"message","self_id":2060856340,"self_tiny_id":144115218678182288,"sender":{"nickname":"Icarus","user_id":144115218678182288},"sub_type":"channel","time":1637408108,"user_id":144115218678182288}

简单的复现代码/链接(可选)

可以明显看到第二位的被at对象userid发生了变化

日志记录(可选)

No response

补充说明(可选)

由于tx官方机器人使用另一套guildId、channelId、userId,且只能被动接受at消息。 目前想实现自动发牌子(频道身份)功能:1.让用户at官方接口机器人 + 需要的牌子

  1. 直接在特定子频 发需要的牌子,cqhttp收到后,同时at官方机器人和用户+牌子信息(触发官方bot的at事件拿到用户的官方userid)
Mrs4s commented 2 years ago

请问官方API的各类ID大概长啥样?

WsureDev commented 2 years ago

@Mrs4s 具体可以看下tx bot wiki 官方的各类id也是一串数字,和go-cqhttp拿到的长度有些区别。 区别最大的应该是消息id,官方bot只能接受at事件的消息(私聊事件目前没法私聊机器人),它的消息id是非常长的一串英文混合数字,官方bot用来调用http api回复用户时使用的

Mrs4s commented 2 years ago

@Mrs4s 具体可以看下tx bot wiki 官方的各类id也是一串数字,和go-cqhttp拿到的长度有些区别。 区别最大的应该是消息id,官方bot只能接受at事件的消息(私聊事件目前没法私聊机器人),它的消息id是非常长的一串英文混合数字,官方bot用来调用http api回复用户时使用的

目前个人还无法注册官方API, 具体可能需要拿到API进行对比后尝试转换

WsureDev commented 2 years ago

@Mrs4s 其实现在可以先不用在意官方api,先修复频道at多人的问题就好了,官方那边的频道id和channelId可以手动映射,at多人修复后可以利用官方的at事件实现userId的转换

Mrs4s commented 2 years ago

image 我这边似乎无法复现emmmm

WsureDev commented 2 years ago

啊,这 。难道是我手动构造CQ码格式的at消息导致的嘛?因为我刚开始用go-cqhttp,不太清楚怎么用对象构造at消息,所以直接拼cq码了

foxwhite25 commented 2 years ago

@Mrs4s 具体可以看下tx bot wiki 官方的各类id也是一串数字,和go-cqhttp拿到的长度有些区别。 区别最大的应该是消息id,官方bot只能接受at事件的消息(私聊事件目前没法私聊机器人),它的消息id是非常长的一串英文混合数字,官方bot用来调用http api回复用户时使用的

目前个人还无法注册官方API, 具体可能需要拿到API进行对比后尝试转换

现在个人已经能注册了,可以去试试看API

Mrs4s commented 2 years ago

@Mrs4s 具体可以看下tx bot wiki 官方的各类id也是一串数字,和go-cqhttp拿到的长度有些区别。 区别最大的应该是消息id,官方bot只能接受at事件的消息(私聊事件目前没法私聊机器人),它的消息id是非常长的一串英文混合数字,官方bot用来调用http api回复用户时使用的

目前个人还无法注册官方API, 具体可能需要拿到API进行对比后尝试转换

现在个人已经能注册了,可以去试试看API

已经看过了 暂时还没办法做到转换 官方应该是使用原ID通过某种算法转换后交给BOT的