Skip to content

聊天室 Markdown 格式完整教程(v2 标准)

本教程详细讲解聊天室(Lobby)支持的所有 Markdown 格式,包括标准 Markdown聊天室扩展语法。 所有示例均可直接复制到聊天室测试。 语法规范详见《MD扩展编写规则.md》。


目录

  1. 标准 Markdown 语法
  2. 扩展语法基础结构
  3. 动作按钮
  4. 交互组件
  5. 内容组件
  6. 通用参数
  7. 操作体系
  8. 值引用与数学表达式
  9. 特殊语法
  10. 完整示例合集

一、标准 Markdown 语法

聊天室使用 marked(GFM 模式)渲染标准 Markdown。

1.1 标题

markdown
# 一级标题
## 二级标题
### 三级标题

1.2 文本样式

markdown
**粗体文字**
*斜体文字*
~~删除线文字~~
> 引用文字
`行内代码`

1.3 列表

markdown
- 无序列表项
- 第二个

1. 有序列表
2. 第二项

1.4 任务列表

markdown
- [x] 已完成
- [ ] 未完成

渲染为 ☑ / ☐ 符号,不可点击。

1.5 代码块

markdown
```js
console.log('hello');
```

1.6 链接

markdown
[点击访问](https://example.com)

站外链接点击会弹出安全确认框。

1.7 图片

markdown
![图片描述](https://example.com/image.png)

⚠️ 消息内禁止图片(防流量攻击);仅在弹窗内容里允许。图片 URL 必须为 http(s) 且是图片扩展名(png/jpg/gif/webp/bmp/svg/ico)。

1.8 表格(GFM)

markdown
| 列1 | 列2 |
|-----|-----|
| a   | b   |

1.9 分割线

markdown
---

二、扩展语法基础结构

所有聊天室扩展组件统一格式:

[!显示文本](类型:主参数|键=值|键=值|...)
部分说明必填
显示文本组件上显示的文字
类型组件类型(小写单词)
主参数该类型的核心参数
键=值命名参数,`` 分隔,顺序任意

规则

  • | 是参数分隔符,参数值内不能包含 |
  • 命名参数键用小写字母/点(如 idcolor.bg
  • 所有状态(输入框内容、变量、倒计时)仅当前消息内有效
  • 单条消息总长度上限 3500 字符
  • 所有展示文本自动 HTML 转义(防注入)
markdown
[!发送](send:你好)                    ← 最简
[!输入](input:占位符|id=name)         ← 带命名参数
[!确认](ok:ans|right=send:对|wrong=send:错)

三、动作按钮

点击后触发动作的组件。

3.1 跳转按钮 btn

markdown
[!打开官网](btn:https://example.com)
[!打开官网](btn:https://example.com|color=#ff0000)
参数说明
主参数目标 URL

也可以直接写 [!文字](https://example.com)(省略 btn:)。

3.2 发送按钮 send

markdown
[!发送](send:你好呀)
[!发送](send:我选了%choice%)
参数说明
主参数要发送的消息内容(支持 %引用%

3.3 复制按钮 copy

markdown
[!复制](copy:这段文字会被复制)
参数说明
主参数要复制的内容

3.4 弹窗按钮 modal

markdown
[!查看详情](modal:这是标题|这是弹窗内容)
[!提示](modal:内容|t=自定义标题)
参数说明
主参数标题|内容(第一个 | 前是标题)
t指定标题(可选)

3.5 内嵌网页 embed

markdown
[!预览](embed:https://example.com)
参数说明
主参数要内嵌的 URL

3.6 确认按钮 confirm

markdown
[!删除](confirm:确定删除吗?|send:已删除)
[!离开](confirm:确定离开?|copy:再见)
参数说明
主参数提示语|动作(动作见第七章)

点击先弹确认框,确认后执行动作。

3.7 折叠面板 details

markdown
[!展开更多](details:更多信息|这里是折叠的内容)
参数说明
主参数标题|内容

3.8 随机按钮 rand

markdown
[!抽一个](rand:你好|哈哈|嗨)              ← 随机发送一个
[!抽奖](rand:奖品A|奖品B|奖品C|mode=modal) ← 随机弹窗显示
[!抽奖](rand:奖品A|奖品B|t=抽奖结果|mode=modal)
参数说明
主参数多个值用 | 分隔
mode=modal随机弹窗(默认随机发送)
t弹窗标题

3.9 隐藏按钮 hide

markdown
[!点这里](hide:send:你好)         ← 普通文字外观,点击发送
[!复制](hide:copy:内容)           ← 普通文字外观,点击复制
[!选择](hide:switch:红|绿|蓝|id=h1)
参数说明
主参数动作(send:/copy:/switch: 等)

外观是带虚线下划线的普通文字,无按钮样式。不能color


四、交互组件

用户可交互的输入/选择组件。

4.1 输入框 input

markdown
[!答案](input:请输入答案|id=ans)
[!密码](input:|id=pwd|ok=123456)
参数说明
主参数占位提示文字(可空)
id输入框标识(必填
ok期望的正确内容(配合 ok: 按钮校验;多答案用 / 分隔,如 ok=红/蓝/绿
on输入时触发的动作(联动)
color颜色

4.2 内容显示 get

markdown
[!显示](get:ans)
参数说明
主参数组件 id

实时显示对应组件的值(输入框内容 / 变量值 / switch 当前值均可,仅当前消息内)。

4.3 确认校验按钮 ok

markdown
[!输入](input:请输入答案|id=ans|ok=42)
[!确认](ok:ans|right=send:答对了🎉|wrong=send:答错了)
参数说明
主参数绑定的输入框 id
right输入正确时执行的动作
wrong输入错误时执行的动作
lock倒计时锁定组

4.4 取消按钮 cancel

markdown
[!取消](cancel:)              ← 纯取消按钮
[!取消](cancel:reset:ans)     ← 取消并重置输入框
参数说明
主参数动作(可空)

4.5 关闭按钮 close

markdown
[!关闭](close:)              ← 关闭消息内所有交互区
[!关闭](close:ans)           ← 关闭指定组件(id=ans)
参数说明
主参数要关闭的组件 id(可空=全部)

4.6 可改变内容 switch

markdown
[!出拳](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

markdown
[!分数](var:score|init=0)
参数说明
主参数变量名
init初始值

显示变量当前值,通过操作(set/incr/decr)修改。

4.8 隐藏定义值 def

markdown
[!定义](def:url|init=https://example.com)
[!打开](send:%url%)
参数说明
主参数变量名
init定义的内容

不显示任何内容,仅注册变量,其他处用 %名字% 引用。用于避免重复输入长内容。

4.9 条件显示 if

markdown
[!输入](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

markdown
[!查看密码](cipher:秘密内容|key=我的密钥)
参数说明
主参数明文内容
key密钥

渲染时加密存储(F12 看不到明文),点击解密弹窗显示。

5.2 自定义表格 table

markdown
[!表格](table:col=3|姓名|年龄|城市|张三|18|北京|李四|20|上海)
参数说明
col列数
主参数单元格,首行 col 个为表头

单元格支持 %值% 引用自动替换(如 %site%)。

5.3 音乐播放器 music

markdown
[!试听](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

markdown
[!倒计时](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

markdown
[!进度](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

markdown
[!公告](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

markdown
[!画板](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,y2line:0,0,10,10:#f00
矩形rect:x,y,w,hrect:2,2,5,3:#0f0
circle:cx,cy,rcircle:5,5,3:#00f
dot:x,ydot:3,4:#000
三角形triangle:x1,y1,x2,y2,x3,y3triangle:0,0,10,0,5,8:#f80
菱形diamond:cx,cy,rdiamond:10,10,5:#0ff
五角星star:cx,cy,rstar:10,10,5:#ff0
心形heart:cx,cy,sheart:10,10,4:#f00
边框frame:x,y,w,hframe: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 弹窗显示。

文字自定义(位置/字号/颜色):

markdown
[!文字自定义](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

markdown
[!投票](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

markdown
[!掷骰](dice:1d20|id=d20)
[!掷骰](dice:2d6+3|id=dmg)
[!显示结果](send:你掷出了 %d20%!)
参数说明
主参数骰子表达式 XdY±ZdY 省略 X、纯数字;非法回退 1d6,骰子数上限 100)
id结果存入变量(%id% 可引用)

点击显示每个骰子点数与总和,并写入变量供其他组件引用。

5.10 定时到点 at

markdown
[!定时](at:21:30|end=send:⏰ 开饭啦!|id=dinner)
[!每日提醒](at:08:00:00|end=send:🌅 早上好!|repeat=1)
参数说明
主参数目标时间 HH:MMHH:MM:SS
end到点执行的动作
repeatrepeat=1 每天重复触发

实时显示剩余时间;已过今日自动顺延到明天;到点执行 end 并显示「已触发」。

markdown
[!图集](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

markdown
[!红字](btn:https://x.com|color=#ff0000)
[!红底蓝字](btn:https://x.com|color=#0000ff|color.bg=#ff0000)
[!透明](btn:https://x.com|color.bg=-1)   ← 透明背景

颜色支持 #RGB / #RRGGBBRGB / RRGGBB

6.2 权限 perm

markdown
[!管理](send:管理员消息|perm=@管理员)       ← 仅"管理员"可用
[!全员](send:普通消息|perm=!@黑名单)        ← 黑名单不可用
[!个性化](send:%内容%|perm=@张三=专属内容)  ← 张三看到/发送专属内容

多个权限用 , 分隔:perm=@a,@b(白名单)或 perm=!@a(黑名单)或 perm=@名=内容(内容映射)。

6.3 点击次数 click

markdown
[!按钮](send:抽奖|click=5)               ← 全局共享 5 次
[!按钮](send:签到|click=*5)              ← 每人独立 5 次
[!按钮](send:专属|click=@张三:2)         ← 仅张三 2 次,其他人无限
[!按钮](send:混合|click=5@张三:2)        ← 全局 5 次 + 张三 2 次

全局模式由服务端计数(刷新页面不重置),每人模式前端本地计数。

6.4 音效 sound / 动画 anim

markdown
[!按钮](send:你好|sound=https://x.com/ding.mp3|anim=3)

sound 音频白名单同 musicanim 为点击动画秒数。

6.5 联动 on

markdown
[!选择](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:变量=起始;条件;步进;循环体

markdown
[!连发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(变量不前进)直接拒绝
条件/步进有界必须 变量 运算符 数字 格式且变量一致
仅按钮触发写在按钮动作里,渲染不自动执行

动作可嵌套在按钮里

markdown
[!加分](cancel:incr:score=10)
[!进度+](cancel:bar.add:bp=10)

八、值引用与数学表达式

8.1 值引用

%名称%{名称} 引用:输入框内容 / 变量值 / switch 当前值。 支持默认值%名称|默认值%(引用为空时返回默认值)。

markdown
[!输入](input:你的名字|id=name)
[!发送](send:你好,%name%!)
[!发送](send:当前血量 %hp|100% / 100)

8.2 数学表达式

set: 操作中自动求值,仅支持 数字 + - * / ( )

markdown
[!输入](input:1+1=?|id=q|ok=2)
[!确认](ok:q|right=set:score=%score%+10|wrong=set:score=%score%)

非纯数字内容保持字符串(如 set:name=张三)。


九、特殊语法

9.1 字符画(自动识别)

消息含连续空格(≥2 个)且无 Markdown 标记时,自动用等宽字体对齐显示。

markdown
  __  __
 |  \/  |

9.2 B站 / 抖音视频(自动解析)

markdown
https://www.bilibili.com/video/BV1xx411c7mD
BV1xx411c7mD
https://v.douyin.com/xxxxx/

自动解析为内嵌视频播放器(懒加载)。

9.3 @提及

markdown
@昵称 你好

输入 @ 会弹出在线用户选择列表,被提及者会收到通知。

9.4 回复引用

右键消息 → 回复,引用块显示消息内容。


十、完整示例合集

示例 1:答题游戏(输入 + 校验 + 变量 + 条件)

markdown
[!定义](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:倒计时抢答(倒计时 + 锁定 + 进度条)

markdown
[!倒计时](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 + 联动 + 发送)

markdown
[!出拳](switch:石头|剪刀|布|id=choice)
[!出招](ok:choice|right=send:我出了%choice%!|wrong=send:请先出拳)

示例 4:血量条(进度条 + 变量 + 增减)

markdown
[!变量](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:完整表单(定义值 + 多个输入框 + 加密 + 表格)

markdown
[!定义](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 标准,如有功能更新请同步更新。

最近更新