官Q被动Markdown消息群聊与私聊表现不同求解

最近官 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 个赞

你的markdown消息里有at用户的内容吗?

私聊的markdown不能发出at用户的内容

我之前用的发送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是啥:thinking:

请问现在qq官方机器人想发markdown是啥流程捏:thinking:

1 个赞

感觉官q还是太难用了 除了md我找不到优点

3 个赞

awa 教教md

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 个赞

啊嘞,这在QQ的开放平台文档上没有吧

在他官网后台,一个链接指向的腾讯文档里跳转的另一个腾讯文档里有,里面说的是频道消息,我试了试,群聊也管用。

你就说这玩意多坑人吧。

1 个赞