聊天室 Markdown 格式完整教程(v2 标准)
本教程详细讲解聊天室(Lobby)支持的所有 Markdown 格式,包括标准 Markdown 和 聊天室扩展语法。 所有示例均可直接复制到聊天室测试。 语法规范详见《MD扩展编写规则.md》。
目录
一、标准 Markdown 语法
聊天室使用 marked(GFM 模式)渲染标准 Markdown。
1.1 标题
# 一级标题
## 二级标题
### 三级标题1.2 文本样式
**粗体文字**
*斜体文字*
~~删除线文字~~
> 引用文字
`行内代码`1.3 列表
- 无序列表项
- 第二个
1. 有序列表
2. 第二项1.4 任务列表
- [x] 已完成
- [ ] 未完成渲染为 ☑ / ☐ 符号,不可点击。
1.5 代码块
```js
console.log('hello');
```1.6 链接
[点击访问](https://example.com)站外链接点击会弹出安全确认框。
1.7 图片
⚠️ 消息内禁止图片(防流量攻击);仅在弹窗内容里允许。图片 URL 必须为 http(s) 且是图片扩展名(png/jpg/gif/webp/bmp/svg/ico)。
1.8 表格(GFM)
| 列1 | 列2 |
|-----|-----|
| a | b |1.9 分割线
---二、扩展语法基础结构
所有聊天室扩展组件统一格式:
[!显示文本](类型:主参数|键=值|键=值|...)| 部分 | 说明 | 必填 |
|---|---|---|
显示文本 | 组件上显示的文字 | 是 |
类型 | 组件类型(小写单词) | 是 |
主参数 | 该类型的核心参数 | 是 |
键=值 | 命名参数,` | ` 分隔,顺序任意 |
规则:
|是参数分隔符,参数值内不能包含|- 命名参数键用小写字母/点(如
id、color.bg) - 所有状态(输入框内容、变量、倒计时)仅当前消息内有效
- 单条消息总长度上限 3500 字符
- 所有展示文本自动 HTML 转义(防注入)
[!发送](send:你好) ← 最简
[!输入](input:占位符|id=name) ← 带命名参数
[!确认](ok:ans|right=send:对|wrong=send:错)三、动作按钮
点击后触发动作的组件。
3.1 跳转按钮 btn
[!打开官网](btn:https://example.com)
[!打开官网](btn:https://example.com|color=#ff0000)| 参数 | 说明 |
|---|---|
| 主参数 | 目标 URL |
也可以直接写
[!文字](https://example.com)(省略btn:)。
3.2 发送按钮 send
[!发送](send:你好呀)
[!发送](send:我选了%choice%)| 参数 | 说明 |
|---|---|
| 主参数 | 要发送的消息内容(支持 %引用%) |
3.3 复制按钮 copy
[!复制](copy:这段文字会被复制)| 参数 | 说明 |
|---|---|
| 主参数 | 要复制的内容 |
3.4 弹窗按钮 modal
[!查看详情](modal:这是标题|这是弹窗内容)
[!提示](modal:内容|t=自定义标题)| 参数 | 说明 |
|---|---|
| 主参数 | 标题|内容(第一个 | 前是标题) |
t | 指定标题(可选) |
3.5 内嵌网页 embed
[!预览](embed:https://example.com)| 参数 | 说明 |
|---|---|
| 主参数 | 要内嵌的 URL |
3.6 确认按钮 confirm
[!删除](confirm:确定删除吗?|send:已删除)
[!离开](confirm:确定离开?|copy:再见)| 参数 | 说明 |
|---|---|
| 主参数 | 提示语|动作(动作见第七章) |
点击先弹确认框,确认后执行动作。
3.7 折叠面板 details
[!展开更多](details:更多信息|这里是折叠的内容)| 参数 | 说明 |
|---|---|
| 主参数 | 标题|内容 |
3.8 随机按钮 rand
[!抽一个](rand:你好|哈哈|嗨) ← 随机发送一个
[!抽奖](rand:奖品A|奖品B|奖品C|mode=modal) ← 随机弹窗显示
[!抽奖](rand:奖品A|奖品B|t=抽奖结果|mode=modal)| 参数 | 说明 |
|---|---|
| 主参数 | 多个值用 | 分隔 |
mode=modal | 随机弹窗(默认随机发送) |
t | 弹窗标题 |
3.9 隐藏按钮 hide
[!点这里](hide:send:你好) ← 普通文字外观,点击发送
[!复制](hide:copy:内容) ← 普通文字外观,点击复制
[!选择](hide:switch:红|绿|蓝|id=h1)| 参数 | 说明 |
|---|---|
| 主参数 | 动作(send:/copy:/switch: 等) |
外观是带虚线下划线的普通文字,无按钮样式。不能用
color。
四、交互组件
用户可交互的输入/选择组件。
4.1 输入框 input
[!答案](input:请输入答案|id=ans)
[!密码](input:|id=pwd|ok=123456)| 参数 | 说明 |
|---|---|
| 主参数 | 占位提示文字(可空) |
id | 输入框标识(必填) |
ok | 期望的正确内容(配合 ok: 按钮校验;多答案用 / 分隔,如 ok=红/蓝/绿) |
on | 输入时触发的动作(联动) |
color | 颜色 |
4.2 内容显示 get
[!显示](get:ans)| 参数 | 说明 |
|---|---|
| 主参数 | 组件 id |
实时显示对应组件的值(输入框内容 / 变量值 / switch 当前值均可,仅当前消息内)。
4.3 确认校验按钮 ok
[!输入](input:请输入答案|id=ans|ok=42)
[!确认](ok:ans|right=send:答对了🎉|wrong=send:答错了)| 参数 | 说明 |
|---|---|
| 主参数 | 绑定的输入框 id |
right | 输入正确时执行的动作 |
wrong | 输入错误时执行的动作 |
lock | 倒计时锁定组 |
4.4 取消按钮 cancel
[!取消](cancel:) ← 纯取消按钮
[!取消](cancel:reset:ans) ← 取消并重置输入框| 参数 | 说明 |
|---|---|
| 主参数 | 动作(可空) |
4.5 关闭按钮 close
[!关闭](close:) ← 关闭消息内所有交互区
[!关闭](close:ans) ← 关闭指定组件(id=ans)| 参数 | 说明 |
|---|---|
| 主参数 | 要关闭的组件 id(可空=全部) |
4.6 可改变内容 switch
[!出拳](switch:石头|剪刀|布|id=choice)
[!颜色](switch:红|绿|蓝|id=col|c=1)
[!日期](switch:周一|周二|id=day|c=1|cc=#ef4444/#22c55e)| 参数 | 说明 |
|---|---|
| 主参数 | 值列表(点击循环切换) |
id | 标识(必填) |
c=1 | 颜色模式(背景色跟随) |
cc | 独立颜色列表(/ 分隔,与值一一对应) |
on | 切换时触发的动作(联动) |
lock | 倒计时锁定组 |
4.7 变量显示 var
[!分数](var:score|init=0)| 参数 | 说明 |
|---|---|
| 主参数 | 变量名 |
init | 初始值 |
显示变量当前值,通过操作(
set/incr/decr)修改。
4.8 隐藏定义值 def
[!定义](def:url|init=https://example.com)
[!打开](send:%url%)| 参数 | 说明 |
|---|---|
| 主参数 | 变量名 |
init | 定义的内容 |
不显示任何内容,仅注册变量,其他处用
%名字%引用。用于避免重复输入长内容。
4.9 条件显示 if
[!输入](input:请输入答案|id=ans|ok=42)
[!结果](if:ans=42|then=✅ 答对了!)
[!提示](if:name|then=已填写姓名)| 参数 | 说明 |
|---|---|
| 主参数 | 条件:id(非空)/ id=期望值 / id==值 / id!=值 / id>数字 / id>=数字 / id<数字 / id<=数字 |
then | 条件满足时显示的内容 |
条件来源:输入框内容 / 变量值 / switch 当前值。条件变化自动刷新。数值比较时双方需为数字。 示例:
if:score>=60|then=✅ 及格!、if:hp<30|then=⚠️ 血量告急!
五、内容组件
展示型组件。
5.1 加密内容 cipher
[!查看密码](cipher:秘密内容|key=我的密钥)| 参数 | 说明 |
|---|---|
| 主参数 | 明文内容 |
key | 密钥 |
渲染时加密存储(F12 看不到明文),点击解密弹窗显示。
5.2 自定义表格 table
[!表格](table:col=3|姓名|年龄|城市|张三|18|北京|李四|20|上海)| 参数 | 说明 |
|---|---|
col | 列数 |
| 主参数 | 单元格,首行 col 个为表头 |
单元格支持
%值%引用自动替换(如%site%)。
5.3 音乐播放器 music
[!试听](music:https://example.com/song.mp3)
[!试听](music:https://example.com/song.mp3|t=我的歌)| 参数 | 说明 |
|---|---|
| 主参数 | 音频 URL |
t | 标题 |
音频扩展名白名单:
mp3 wav ogg aac m4a flac opus webm weba wma mid midi(可带?参数)。非法链接显示[音频链接不合法]。
5.4 倒计时 timer
[!倒计时](timer:30|id=t1)
[!倒计时](timer:60|id=t1|end=send:时间到!|lock=quiz|bar=bp)| 参数 | 说明 |
|---|---|
| 主参数 | 秒数 |
id | 标识(必填) |
end | 倒计时结束执行的动作 |
lock | 锁定组名(组内按钮倒计时期间禁用) |
bar | 联动进度条 id(每秒同步减少) |
渲染后自动开始倒数。锁定示例:
ok:ans|...|lock=quiz的按钮在倒计时期间不可点,结束后解锁。
5.5 进度条 bar
[!进度](bar:50/100|id=bp)
[!受伤](cancel:bar.sub:bp=10)
[!治疗](cancel:bar.add:bp=5)
[!满血](cancel:bar.set:bp=100)| 参数 | 说明 |
|---|---|
| 主参数 | 当前值/最大值(支持 %值% 引用) |
id | 标识(必填) |
通过操作增减:
bar.add:id=值bar.sub:id=值bar.set:id=值。 ⚠️ 主参数里的%值%引用渲染时不解析(此时变量尚未建立),进度条按0/最大值显示,需用bar.set:id=值手动同步(见示例 4)。
5.6 文本框 text
[!公告](text:服务器维护中|t=📢 公告|align=center|size=lg|style=warn)
[!提示](text:恭喜获得奖励!|t=🎉 成功|color=#16a34a|color.bg=#d4edda|style=success)| 参数 | 说明 |
|---|---|
| 主参数 | 文本内容 |
t | 标题 |
color / color.bg | 文字/背景色 |
align | 对齐(left/center/right) |
size | 字号(sm/md/lg) |
style | 样式(note/info/warn/success/danger) |
带边框的样式化文本展示框。内容支持
%值%引用自动替换。
5.7 画板 board
[!画板](board:20|bg=#e0f2fe|id=house|shapes=rect:3,9,14,9:#eab308;triangle:2,9,18,9,10,2:#ef4444;rect:8,14,4,4:#7c3aed)
[!查看地图](board:20|id=map|modal=1|grid=0|shapes=circle:10,10,6:#3b82f6;star:10,10,3:#ff0)| 参数 | 说明 |
|---|---|
| 主参数 | 画板大小(1-20,最大 20×20 方形) |
shapes | 图形定义(; 分隔多个图形) |
text | 画板内文本(默认居中、字号=尺寸/8、黑色) |
tx / ty | 文本位置坐标(省略=居中) |
ts | 文本字号(省略=默认) |
tc | 文本颜色(省略=黑) |
bg | 背景色 |
grid | 网格线显示(0 关闭,默认显示) |
id | 画板标识(联动开关用) |
modal=1 | 内置到弹窗(点击按钮显示) |
hide=1 | 初始隐藏 |
图形语法(类型:坐标:颜色,多个用 ; 分隔):
| 图形 | 语法 | 示例 |
|---|---|---|
| 线条 | line:x1,y1,x2,y2 | line:0,0,10,10:#f00 |
| 矩形 | rect:x,y,w,h | rect:2,2,5,3:#0f0 |
| 圆 | circle:cx,cy,r | circle:5,5,3:#00f |
| 点 | dot:x,y | dot:3,4:#000 |
| 三角形 | triangle:x1,y1,x2,y2,x3,y3 | triangle:0,0,10,0,5,8:#f80 |
| 菱形 | diamond:cx,cy,r | diamond:10,10,5:#0ff |
| 五角星 | star:cx,cy,r | star:10,10,5:#ff0 |
| 心形 | heart:cx,cy,s | heart:10,10,4:#f00 |
| 边框 | frame:x,y,w,h | frame:1,1,18,18:#888 |
| 文本 | text:x,y,字号:内容(内容可含逗号,可选 :#颜色) | text:10,10,1.5:Hi / text:10,10,1.5,Hi:#f00 |
坐标/颜色支持
%值%引用实时更新;show:画板id/hide:画板id联动开关;modal=1弹窗显示。
文字自定义(位置/字号/颜色):
[!文字自定义](board:20|text=我家|tx=5|ty=3|ts=2|tc=#ff0000)
[!右上角](board:20|text=LOGO|tx=15|ty=3|ts=1.5|tc=#3b82f6)
[!大字标题](board:20|text=🎮 游戏开始|tx=10|ty=10|ts=3|tc=#16a34a)5.8 投票 vote
[!投票](vote:今晚玩什么?|狼人杀|剧本杀|UNO|id=v1|max=1)
[!投票](vote:多选:喜欢哪些?|A|B|C|D|id=v2|max=3)| 参数 | 说明 |
|---|---|
| 主参数 | 问题|选项1|选项2...(第一个 | 前是问题) |
id | 投票标识(localStorage 防重复,刷新不重置) |
max | 最多可选几项(默认 1=单选,超出提示) |
mode | 显示模式(bar 进度条 / list 列表,默认 bar) |
点击选项投票、再次点击取消;
max=1时点击新选项自动切换。计数为本地消息级。
5.9 骰子 dice
[!掷骰](dice:1d20|id=d20)
[!掷骰](dice:2d6+3|id=dmg)
[!显示结果](send:你掷出了 %d20%!)| 参数 | 说明 |
|---|---|
| 主参数 | 骰子表达式 XdY±Z(dY 省略 X、纯数字;非法回退 1d6,骰子数上限 100) |
id | 结果存入变量(%id% 可引用) |
点击显示每个骰子点数与总和,并写入变量供其他组件引用。
5.10 定时到点 at
[!定时](at:21:30|end=send:⏰ 开饭啦!|id=dinner)
[!每日提醒](at:08:00:00|end=send:🌅 早上好!|repeat=1)| 参数 | 说明 |
|---|---|
| 主参数 | 目标时间 HH:MM 或 HH:MM:SS |
end | 到点执行的动作 |
repeat | repeat=1 每天重复触发 |
实时显示剩余时间;已过今日自动顺延到明天;到点执行
end并显示「已触发」。
5.11 图集轮播 gallery
[!图集](gallery:旅行相册|https://x.com/1.png|https://x.com/2.jpg|https://x.com/3.webp|autoplay=3)| 参数 | 说明 |
|---|---|
| 主参数 | 标题|图片URL列表(URL 必须过图片白名单) |
autoplay | 自动轮播间隔秒数(默认 0=关闭) |
弹窗轮播:左右箭头 + 指示点 + 页码 + 键盘 ←→ 切换;手动切换重置自动计时。
六、通用参数
任意类型可用(| 分隔,顺序任意)。
| 参数 | 说明 | 示例 |
|---|---|---|
id=名称 | 组件唯一标识 | id=foo |
t=标题 | 附加标题 | t=标题 |
init=值 | 初始值 | init=0 |
color=前景色 | 前景色 | color=#ff0000 |
color.bg=背景色 | 背景色 | color.bg=#00ff00 |
perm=权限 | 权限控制 | perm=@admin,!@ban |
sound=URL | 点击音效 | sound=https://x.com/a.mp3 |
anim=秒数 | 点击动画时长 | anim=3 |
click=规则 | 点击次数限制 | click=5 |
on=动作 | 值变化联动 | on=send:%sel% |
lock=组名 | 倒计时锁定组 | lock=quiz |
6.1 颜色 color
[!红字](btn:https://x.com|color=#ff0000)
[!红底蓝字](btn:https://x.com|color=#0000ff|color.bg=#ff0000)
[!透明](btn:https://x.com|color.bg=-1) ← 透明背景颜色支持
#RGB/#RRGGBB或RGB/RRGGBB。
6.2 权限 perm
[!管理](send:管理员消息|perm=@管理员) ← 仅"管理员"可用
[!全员](send:普通消息|perm=!@黑名单) ← 黑名单不可用
[!个性化](send:%内容%|perm=@张三=专属内容) ← 张三看到/发送专属内容多个权限用
,分隔:perm=@a,@b(白名单)或perm=!@a(黑名单)或perm=@名=内容(内容映射)。
6.3 点击次数 click
[!按钮](send:抽奖|click=5) ← 全局共享 5 次
[!按钮](send:签到|click=*5) ← 每人独立 5 次
[!按钮](send:专属|click=@张三:2) ← 仅张三 2 次,其他人无限
[!按钮](send:混合|click=5@张三:2) ← 全局 5 次 + 张三 2 次全局模式由服务端计数(刷新页面不重置),每人模式前端本地计数。
6.4 音效 sound / 动画 anim
[!按钮](send:你好|sound=https://x.com/ding.mp3|anim=3)
sound音频白名单同music;anim为点击动画秒数。
6.5 联动 on
[!选择](switch:A|B|C|id=sel|on=send:你选了%sel%)
[!输入](input:输入内容|id=txt|on=set:last=%txt%)组件值变化时自动执行动作。
七、操作体系
right / wrong / on / end / cancel / close / confirm / hide 中填写的动作。
| 操作 | 说明 | 示例 |
|---|---|---|
send:内容 | 发送消息 | send:你好%name% |
copy:内容 | 复制内容 | copy:文字 |
set:变量=值 | 设置变量(支持表达式) | set:score=%score%+10 |
incr:变量 / incr:变量=n | 变量自增 | incr:score=5 |
decr:变量 / decr:变量=n | 变量自减 | decr:score |
reset:输入框id | 重置输入框 | reset:name |
switch:switch_id | 切换可改变内容 | switch:sel |
close: / close:id | 关闭交互区 / 指定组件 | close: |
bar.add:id=值 | 进度条增加 | bar.add:bp=10 |
bar.sub:id=值 | 进度条减少 | bar.sub:bp=10 |
bar.set:id=值 | 进度条设置 | bar.set:bp=50 |
timer.start:id | 启动倒计时 | timer.start:t1 |
timer.stop:id | 停止倒计时 | timer.stop:t1 |
show:id | 显示组件(画板等) | show:map |
hide:id | 隐藏组件(画板等) | hide:map |
for:变量=起始;条件;步进;循环体 | for 循环 | for:i=0;i<5;i+1;send:第%i%次 |
7.1 for 循环(安全限制)
格式:for:变量=起始;条件;步进;循环体
[!连发3条](cancel:for:i=0;i<3;i+1;send:消息%i%)
[!加分10次](cancel:for:i=0;i<10;i+1;incr:score=1)
[!进度+10](cancel:for:i=0;i<5;i+1;bar.add:bp=2)
[!倒计时抢答](ok:ans|right=for:i=0;i<3;i+1;send:答对了%i%次|wrong=send:答错了)| 限制 | 说明 |
|---|---|
| 最高 300 次 | 超出自动中断(兜底防线) |
| 禁止嵌套 | 循环体内含 for: 直接忽略 |
| 方向检测 | 上界条件(< <=)必须递增步进,下界条件(> >=)必须递减步进,方向矛盾直接拒绝 |
| 零值步进拦截 | +0/-0/*1//1(变量不前进)直接拒绝 |
| 条件/步进有界 | 必须 变量 运算符 数字 格式且变量一致 |
| 仅按钮触发 | 写在按钮动作里,渲染不自动执行 |
动作可嵌套在按钮里:
[!加分](cancel:incr:score=10)
[!进度+](cancel:bar.add:bp=10)八、值引用与数学表达式
8.1 值引用
用 %名称% 或 {名称} 引用:输入框内容 / 变量值 / switch 当前值。 支持默认值:%名称|默认值%(引用为空时返回默认值)。
[!输入](input:你的名字|id=name)
[!发送](send:你好,%name%!)
[!发送](send:当前血量 %hp|100% / 100)8.2 数学表达式
set: 操作中自动求值,仅支持 数字 + - * / ( )。
[!输入](input:1+1=?|id=q|ok=2)
[!确认](ok:q|right=set:score=%score%+10|wrong=set:score=%score%)非纯数字内容保持字符串(如
set:name=张三)。
九、特殊语法
9.1 字符画(自动识别)
消息含连续空格(≥2 个)且无 Markdown 标记时,自动用等宽字体对齐显示。
__ __
| \/ |9.2 B站 / 抖音视频(自动解析)
https://www.bilibili.com/video/BV1xx411c7mD
BV1xx411c7mD
https://v.douyin.com/xxxxx/自动解析为内嵌视频播放器(懒加载)。
9.3 @提及
@昵称 你好输入
@会弹出在线用户选择列表,被提及者会收到通知。
9.4 回复引用
右键消息 → 回复,引用块显示消息内容。
十、完整示例合集
示例 1:答题游戏(输入 + 校验 + 变量 + 条件)
[!定义](def:prize|init=🎁 大礼包)
[!变量](var:score|init=0)
[!输入](input:1+1=?|id=q1|ok=2)
[!输入](input:2+2=?|id=q2|ok=4)
[!确认](ok:q1|right=set:score=%score%+10|wrong=set:score=%score%)
[!确认](ok:q2|right=set:score=%score%+10|wrong=set:score=%score%)
[!满分](if:score=20|then=🎉 全对!领取%prize%!)
[!发送](hide:send:我得了%score%分)示例 2:倒计时抢答(倒计时 + 锁定 + 进度条)
[!倒计时](timer:30|id=t1|lock=quiz|bar=bp|end=send:⏰ 时间到!)
[!进度](bar:30/30|id=bp)
[!输入](input:答案|id=ans|ok=答案)
[!抢答](ok:ans|right=send:我答对了!|wrong=send:答错了|lock=quiz)示例 3:石头剪刀布(switch + 联动 + 发送)
[!出拳](switch:石头|剪刀|布|id=choice)
[!出招](ok:choice|right=send:我出了%choice%!|wrong=send:请先出拳)示例 4:血量条(进度条 + 变量 + 增减)
[!变量](var:hp|init=100)
[!血量](bar:%hp%/100|id=bp)
[!受伤-10](cancel:decr:hp=10)
[!治疗+5](cancel:incr:hp=5)
[!同步进度条](cancel:bar.set:bp=%hp%)
[!倒了](if:hp=0|then=💀 角色倒下)说明:
bar:%hp%/100渲染时变量未解析,进度条初始显示0/100,每次增减血量后点「同步进度条」用bar.set刷新显示。
示例 5:完整表单(定义值 + 多个输入框 + 加密 + 表格)
[!定义](def:site|init=https://example.com)
[!输入](input:用户名|id=user)
[!输入](input:密码|id=pwd)
[!确认](ok:pwd|right=send:欢迎%user%!|wrong=send:密码错误)
[!表格](table:col=3|项目|说明|链接|官网|%site%|%site%|文档|教程|%site%/docs)
[!查看](cipher:这是加密内容|key=secret)十一、使用须知
| 项目 | 说明 |
|---|---|
| 消息长度 | 单条消息总长度上限 3500 字符 |
| 图片 | 消息内禁止,仅弹窗内容允许(需图片扩展名) |
| 音频 | 白名单:mp3 wav ogg aac m4a flac opus webm weba wma mid midi |
| for 循环 | 仅按钮触发、最高 300 次、禁止嵌套、方向检测防死循环 |
| 组件状态 | 输入框/变量/倒计时等仅当前消息内有效,消息销毁自动回收 |
| 安全性 | 展示文本自动 HTML 转义;数学表达式严格过滤;加密内容渲染时加密存储 |
本教程基于 v2 标准,如有功能更新请同步更新。