最近官 Q 放开了被动 Markdown 消息,使用如下方式回复 Markdown 消息,群聊场景回复正常,但私聊场景回复提示 400 Bad Request:
await session.qq.sendMessage(session.channelId, mdMsgQQ);
尝试在私聊场景改成 sendPrivateMessage,使用 userId,也不行:
await session.qq.sendPrivateMessage(session.userId, mdMsgQQ);
尝试在 sendPrivateMessage 也使用 channelId,也不行:
await session.qq.sendPrivateMessage(session.channelId, mdMsgQQ);
请问各位大佬,是我使用的姿势不对还是被动Markdown权限群聊与私聊不一致?
谢谢。
1 个赞
我之前用的发送QQ的md的函数这样的
你可以改一改用看看
export async function sendmarkdownMessage(ctx, session, message, config?: Config) {
if (config) logInfo(config, "正在调用sendmarkdownMessage发送md")
try {
const { guild, user } = session.event;
const { qq, qqguild, channelId } = session;
if (guild?.id) {
if (qq) {
await qq.sendMessage(channelId, message);
} else if (qqguild) {
await qqguild.sendMessage(channelId, message);
}
} else if (user?.id && qq) {
await qq.sendPrivateMessage(user.id, message);
}
} catch (error) {
ctx.logger.error(`发送markdown消息时出错:`, error);
}
}
细说 被动markdown是啥
请问现在qq官方机器人想发markdown是啥流程捏
1 个赞
大佬,我之前没用 @,不知道怎么搞得,现在私聊用sendPrivateMessage又好使了。
关于@的问题,我尝试添加了一个新模板,开头带一个变量 user,群聊和私聊共用一个模板,根据是否是私聊还是群聊给这个变量填充普通文本或QQ@字符串,比如:
key: "user",
values: [ (config.disableMDAt || argv.session.isDirect) ?
"你"
: `<qqbot-at-user id="${argv.session.userId}" />`]
这种模式下,私聊正常(变量user是“你”),群聊回复消息会 400(变量user是 <qqbot-at-user id=“xxxx”>),拼装的群聊回复完整消息如下:
{
"content": "111",
"msg_type": 2,
"msg_id": "XXXXXXXXXXX",
"timestamp": 1768115291000,
"markdown": {
"custom_template_id": "XXXXXXXXXXXXXXX",
"params": [
{
"key": "user",
"values": [
"<qqbot-at-user id=\"XXXXXXXXXXXXXXX\" />"
]
}
]
},
"keyboard": {
"id": "XXXXXXXXXXXXXXX"
}
}
之后我又改了下,QQ 机器人后台添加了个新模板,提审的 MD 模板里直接加上"<qqbot-at-user id=“{变量}” />",仅通过消息变量填充 id 的话,可以回复 @ 成功。
目前的情况变成了:群聊的@,如果是预先把 qqbot 这串@配置在 MD 模板里,仅填充 id,可以,如果是把这一整串通过变量传,不可以。
请问这种情况是正常的吗?
1 个赞
被动回复现在直接能返回 MD 格式的消息和按钮了,我自己简称为被动 MD,效果如图:
发送方式,可以参考楼上 shangxue 之前发的帖子。
1 个赞
呜啊不是很正常
我也不懂最新的md发送特性了
不过我以前没遇到过这样的情况
会不会是你的
<qqbot-at-user id=“{变量}” />
的尖括号被转义了 导致md发不出去呢?
会不会是因为写死在QQ开放平台的这个
<qqbot-at-user id=“{变量}” />
没有被转义所以才会正常发出呢
试了,不是字符串转义问题,无论如何在我的机器人里用不了,但我也找到了另一种@的方法:
在变量里传@字符串,用<@userId>这种写法可以正常在群聊内发出@:
而 <qqbot-at-user id="" /> 这种写法,在我的机器人这块的 MD 里,只在模板后台里写才管用,以上,算是变相解决了问题。
1 个赞
在他官网后台,一个链接指向的腾讯文档里跳转的另一个腾讯文档里有,里面说的是频道消息,我试了试,群聊也管用。
你就说这玩意多坑人吧。
1 个赞