GO-CQHTTP合并轉(zhuǎn)發(fā)消息無法發(fā)送

最近,在寫機(jī)器人的時(shí)候遇到了一個(gè)問題,合并轉(zhuǎn)發(fā)實(shí)現(xiàn)不了,這里記錄一下。

使用合并轉(zhuǎn)發(fā)主要是為了縮短消息,不然發(fā)一長(zhǎng)串消息在群里嚴(yán)重影響群里聊天吹水。

然鵝,按照官方文檔折騰了半天,最后還是報(bào)錯(cuò),消息發(fā)不出去:
(這里本來應(yīng)該有圖片的,但是之前報(bào)錯(cuò)的時(shí)候沒來得及寫博客,于是沒存,現(xiàn)在代碼改了,找不到了)

最終經(jīng)過各方查找,發(fā)現(xiàn)了一個(gè)關(guān)鍵點(diǎn):


關(guān)鍵點(diǎn)

于是,經(jīng)過啟發(fā),也許是版本問題,原先用的是0.9X的版本,可能這個(gè)接口支持得不是很好。

于是最終解決方案如下:

  1. 升級(jí)go-cqhttp到最新版(1.0.0.4 beta)

  2. 正確書寫代碼
    原文檔的代碼屬實(shí)有點(diǎn)混亂,可以看到,涉及該接口的文檔有這么兩個(gè)部分:發(fā)送合并轉(zhuǎn)發(fā)API、合并轉(zhuǎn)發(fā)CQCode

    發(fā)送合并轉(zhuǎn)發(fā)API

    合并轉(zhuǎn)發(fā)CQCode

而在CQCode的介紹后面還有三種類型的示例代碼,每種看起來都不太簡(jiǎn)單的樣子。

因此,正確書寫代碼也是一種挑戰(zhàn)。

這里,給出第二種示例代碼的簡(jiǎn)化版本:

[
    {
        "type": "node",
        "data": {
            "name": "消息發(fā)送者A",
            "uin": "10086",
            "content": "hello world"
        }
    },
    {
        "type": "node",
        "data": {
            "name": "消息發(fā)送者B",
            "uin": "10087",
            "content": "[CQ:image,file=xxxxx]測(cè)試消息2"
        }
    }
]

其發(fā)送合并轉(zhuǎn)發(fā)消息的代碼也就為:

msg = [
    {
        "type": "node",
        "data": {
            "name": "消息發(fā)送者A",
            "uin": "10086",
            "content": "hello world"
        }
    },
    {
        "type": "node",
        "data": {
            "name": "消息發(fā)送者B",
            "uin": "10087",
            "content": "[CQ:image,file=xxxxx]測(cè)試消息2"
        }
    }
]
data = {
    'group_id':123456787, # '消息發(fā)送的QQ群號(hào)'
    'messages':msg
}
# cq_url = "http://127.0.0.1:5700/send_group_forward_msg"
# rev3 = requests.post(cq_url,data=data)
# logging.info(rev3.json())
action = "send_group_forward_msg"
post_data = json.dumps({"action": action, "params": data})
rev = ws.send(post_data)

考慮到合并轉(zhuǎn)發(fā)消息的消息發(fā)送者一般為同一人,略微簡(jiǎn)化一下,發(fā)送多條消息的代碼為:

msg = ['測(cè)試消息1', '測(cè)試消息2', '測(cè)試消息3']
group_msg = []
for item in msg:
    each_msg = {
        "type": "node",
        "data": {
            "name": "QQ昵稱",
            "uin": "自己的QQ號(hào)",
            "content": item
        }
    }
    group_msg.append(each_msg)
data = {
    'group_id':123456787, # '消息發(fā)送的QQ群號(hào)'
    'messages':group_msg
}
# cq_url = "http://127.0.0.1:5700/send_group_forward_msg"
# rev3 = requests.post(cq_url,data=data)
# logging.info(rev3.json())
action = "send_group_forward_msg"
post_data = json.dumps({"action": action, "params": data})
rev = ws.send(post_data)

在此基礎(chǔ)上,封裝為函數(shù):

def send_forward(msg, group_id, ws, sender):
    group_msg = []
    for item in msg:
        each_msg = {
            "type": "node",
            "data": {
                "name": "QQ昵稱",
                "uin": "自己的QQ號(hào)",
                "content": item
            }
        }
        group_msg.append(each_msg)
    data = {
        'group_id':group_id,
        'messages':group_msg
    }
    # cq_url = "http://127.0.0.1:5700/send_group_forward_msg"
    # rev3 = requests.post(cq_url,data=data)
    # logging.info(rev3.json())
    action = "send_group_forward_msg"
    post_data = json.dumps({"action": action, "params": data})
    rev = ws.send(post_data)
    returnStr = "[CQ:at,qq={sender}]".format(sender=sender)
    return returnStr

調(diào)用函數(shù)示例:

send_forward(["hello world", "test2", "test3"], "123456789", ws, '987654321')

該函數(shù)的功能為,給定一個(gè)消息列表和群號(hào),發(fā)送合并轉(zhuǎn)發(fā)消息到特定群,并返回艾特發(fā)送者的信息,其中字段說明如下:

  • msg為待發(fā)送的消息列表,例如:msg=["hello world", "test2", "test3"]
  • group_id為發(fā)送消息的群號(hào)
  • wswebsocket的應(yīng)用,因?yàn)檫@里采用的是正向ws連接,因此使用該參數(shù),若使用http連接可不用該字段,使用注釋的語句發(fā)送消息即可
  • sender為需要回復(fù)的人的QQ號(hào),即觸發(fā)該消息的群成員QQ
  • name為合并轉(zhuǎn)發(fā)消息的人的昵稱,可以隨便填
  • uin為合并轉(zhuǎn)發(fā)的消息的人的qq,這里填機(jī)器人的qq

注意:原代碼為正向ws通信的代碼,注釋部分為http通信方式的代碼

最終實(shí)現(xiàn)效果:


實(shí)現(xiàn)效果

合并轉(zhuǎn)發(fā)消息
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容