跳转至

消息模板

在 nmBot 部分可发送消息的功能中,您可以设置“消息模板”。

消息模板是预设置的通用消息,可在同一对话的多个设置中互通。

例如,您希望某群组中的入群欢迎消息反应群规,同时希望群组中有人发送“群规”时也向他们展示群规,则您可以为入群欢迎和关键词回复设置相同的消息模板。

如何为消息模板添加格式

在消息模板中,您可以使用 MarkdownHTMLMarkdownV2 解析模式。 每种解析模式有其自己的方式来添加格式。

我们在此提及的 MarkdownMarkdownV2 格式由 Telegram 定义,与我们常说的 Markdown 格式不同。

请参阅 Telegram 官方的格式化选项了解如何设置格式。 我们在此提供一份中文翻译版本供参考:

Bot API 支持对消息进行基本格式化。 你可以在机器人消息中使用粗体、斜体、下划线、删除线、剧透文本、引用块以及超链接和预格式化代码。 Telegram 客户端会相应地渲染它们。 你可以使用 Markdown 风格或 HTML 风格来格式化。

请注意,Telegram 客户端在打开超链接前会向用户显示一个提示(“打开此链接?”以及完整的 URL)。

消息实体1可以嵌套,但须满足以下限制:

  • 如果两个实体有公共字符,则其中一个必须完全包含在另一个内。
  • 粗体、斜体、下划线、删除线和剧透实体中可以包含其他任何实体,也可以成为其他实体的一部分,预格式化和代码实体除外。
  • 引用块和可展开引用块实体不能嵌套。
  • 所有其他实体不能相互包含。

链接 tg://user?id=<user_id> 可用于通过用户 ID2 而不使用用户名来提及用户。请注意:

  • 这些链接仅在超链接或内联键盘按钮中使用时有效。 例如,当在消息文本中使用时,它们将无法工作。
  • 除非该被提及的用户是对话成员,否则只有当用户曾经私下联系过机器人或通过内联按钮向机器人发送过回调查询,并且未对机器人启用转发消息隐私设置时,这些提及才能得到保证。

你可以在 libprisma#supported-languages 中找到支持语法高亮的编程和标记语言列表。

MarkdownV2 风格

使用此模式时,在 parse_mode 字段中传入 MarkdownV2。 在消息中使用以下语法:

*加粗 \*文本*
_斜体 \*文本_
__下划线__
~删除线~
||剧透||
*加粗 _斜体 加粗 ~斜体 加粗 删除线 ||斜体 加粗 删除线 剧透||~ __下划线 斜体 加粗___ 加粗*
[行内 URL](http://www.example.com/)
[行内提及用户](tg://user?id=123456789)
![👍](tg://emoji?id=5368324170671202286)
`行内 等宽 代码`
\`\`\`
预格式化等宽代码块
\`\`\`
\`\`\`python
使用 Python 编程语言撰写的预格式化等宽代码块
\`\`\`
>引用块开始
>引用块继续
>引用块继续
>引用块继续
>引用块的最后一行
**>上一个引用块后紧跟的可展开引用块开始
>通过一个空白的加粗实体分割了这两个引用块
>可展开引用块继续
>可展开引用块默认隐藏的部分开始
>可展开引用块继续
>带可展开标记的可展开引用块的最后一行||

请注意:

  • 任何字符(代码介于 1 到 126 之间)均可在任意位置用前导 '\' 转义,此时该字符被视为普通字符而非标记的一部分。 这意味着 '\' 字符通常必须用前导 '\' 进行转义。 在预格式化和代码实体内,所有 '`' 和 '\' 字符必须用前导 '\' 进行转义。 在超链接和自定义表情定义的 (...) 部分内,所有 ')' 和 '\' 必须用前导 '\' 进行转义。
  • 在所有其他地方,字符 '_', '*', '[', ']', '(', ')', '\~', '`', '>', '#', '+', '-', '\=', '|', '{', '}', '.', '!' 均必须用前导 '\' 进行转义。
  • 如果斜体和下划线实体之间存在歧义,__ 总是从左到右优先视为下划线实体的开始或结束,因此请使用 ___斜体 下划线_**__ 替代 ___斜体 下划线___,在中间添加一个空的粗体实体作为分隔。
  • 必须为自定义表情提供一个有效的备用表情。自定义表情在无法显示自定义表情(例如系统通知)或当消息被非 Premium 用户转发时,会显示该备用表情。 建议使用自定义表情贴纸的 emoji 字段中的表情。
  • 自定义表情实体仅可被购买了额外用户名的机器人使用。3

HTML 风格

使用此模式时,在 parse_mode 字段中传入 HTML。 当前支持以下标签:

<b>加粗</b>, <strong>加粗</strong>
<i>斜体</i>, <em>斜体</em>
<u>下划线</u>, <ins>下划线</ins>
<s>删除线</s>, <strike>删除线</strike>, <del>删除线</del>
<span class="tg-spoiler">剧透</span>, <tg-spoiler>剧透</tg-spoiler>
<b>加粗 <i>斜体 加粗 <s>斜体 加粗 删除线 <span class="tg-spoiler">斜体 加粗 删除线 剧透</span></s> <u>下划线 斜体 加粗</u></i> 加粗</b>
<a href="http://www.example.com/">行内 URL</a>
<a href="tg://user?id=123456789">行内提及用户</a>
<tg-emoji emoji-id="5368324170671202286">👍</tg-emoji>
<code>行内 等宽 代码</code>
<pre>预格式化等宽代码块</pre>
<pre><code class="language-python">使用 Python 编程语言撰写的预格式化等宽代码块</code></pre>
<blockquote>引用块开始\n引用块继续\n引用块的最后一行</blockquote>
<blockquote expandable>可展开引用块开始\n可展开引用块继续\n可展开引用块继续\nHidden by default part of the 引用块开始\n可展开引用块继续\n引用块的最后一行</blockquote>

请注意:

  • 仅支持上述标签。
  • 所有不属于标签或 HTML 实体部分的 <, > 和 & 符号必须替换为相应的 HTML 实体(< 替换为 &lt;,> 替换为 &gt;,& 替换为 &amp;)。
  • 支持所有数值 HTML 实体。
  • 当前 API 仅支持以下命名 HTML 实体:&lt;, &gt;, &amp; 和 &quot;。
  • 使用嵌套的 precode 标签来为 pre 实体定义编程语言。
  • 单独的 code 标签无法指定编程语言。
  • 必须在 tg-emoji 标签的内容中使用有效的表情符号。如果无法显示自定义表情(例如系统通知)或消息被非 Premium 用户转发时,将显示该表情。建议使用自定义表情贴纸的 emoji 字段中的表情。
  • 自定义表情实体仅可被购买了额外用户名的机器人使用。3

Markdown 风格

这是一种遗留模式,为向后兼容而保留。 使用此模式时,在 parse_mode 字段中传入 Markdown。 在消息中使用以下语法:

*加粗 文本*
_斜体 文本_
[行内 URL](http://www.example.com/)
[行内提及用户](tg://user?id=123456789)
`行内 等宽 代码`
\`\`\`
预格式化等宽代码块
\`\`\`
\`\`\`python
使用 Python 编程语言撰写的预格式化等宽代码块
\`\`\`

请注意:

  • 实体不得嵌套,建议使用 MarkdownV2 解析模式。
  • 无法指定“下划线”、“删除线”、“剧透”、“引用块”、“可展开引用块”和“自定义表情”实体,请使用 MarkdownV2 解析模式。
  • 在实体外部转义字符 '_', '*', '`', '[' 时,请在它们前面加上 '\'。
  • 实体内部不允许转义,因此必须先关闭实体再重新打开:例如,对于斜体 snake_case,请使用 _snake_\__case_;对于粗体 2*2=4,请使用 *2*\**2=4*

消息模板常见问题

消息模板发送失败

由于错误的设置,消息模板可能出现发送失败的问题。

nmBot 通常会在消息模板发送失败时向您发送错误消息。根据功能的不同,错误消息可能会有所不同。


  1. “消息实体”指消息中使用的格式化选项,例如粗体、斜体、下划线等。 

  2. 用户 ID 是 Telegram 中唯一标识用户的数字 ID。您可以通过 nmBot 的 /id 指令获取用户 ID。 

  3. 目前仅“商业关键词回复”功能中支持自定义表情。