Labs · 酒馆宏预览

{{char}} {{random}}
到底展开成什么,贴进来看

写卡的时候宏全靠背,开局才发现拼错了。把开场白或提示词片段贴进来:每个宏的展开产物当场高亮, 悬停看它从哪个宏来,{{random}}{{roll}} 一键重抽。页面下半是逐项核对过引擎实现的宏支持对照表。

免费浏览器本地运行不上传

贴一段带 {{char}}、{{random}} 的文本,展开结果出现在这里。

宏支持对照表

逐项对照引擎实际实现列出,写「支持」的都能在上面的输入框里当场验证。

语法作用支持状态
{{char}} · {{character}}角色名(V3 卡的 nickname 优先)✓ 支持
{{user}} · {{name}}用户名 / 你的身份名✓ 支持
{{persona}}用户人设描述✓ 支持(演示值)本页留空演示
{{scenario}}场景设定✓ 支持(演示值)本页留空演示
{{model}}当前模型 id✓ 支持(演示值)本页用演示值
{{lastMessage}} · {{lastUserMessage}} · {{lastCharMessage}}最近一条消息 / 用户消息 / 角色消息✓ 支持(演示值)依赖聊天状态,本页用占位值
{{group}} · {{charIfNotGroup}} · {{groupNotMuted}}群成员名单(单聊回退角色名)✓ 支持(演示值)本页按单聊演示
{{time}} · {{time::UTC+8}}当前时间(可带 UTC 偏移)✓ 支持按浏览器时间;App 按设备时间
{{date}} · {{datetime}} · {{isodate}} · {{isotime}} · {{weekday}}日期 / 日期时间 / 星期✓ 支持
{{idleDuration}}距你上一条消息过了多久✓ 支持(演示值)无聊天状态,恒为 just now
{{random:a,b,c}} · {{random::a::b::c}} · {{pick}}等概率抽一个✓ 支持
{{roll:1d20}} · {{roll 1d100}} · {{roll:20}}掷骰(NdM;裸数字 = 1dN)✓ 支持
{{if::条件::甲::乙}}行内条件(条件非空且非 false/0 走甲)✓ 支持
{{newline::N}} · {{space::N}}换行 / 空格(可计数)✓ 支持
{{noop}} · {{comment}} · {{// 注释}}空操作 / 注释(展开为空)✓ 支持
{{reverse::文本}}反转字符✓ 支持
{{setvar::k::v}} · {{getvar::k}} · {{addvar}} · {{incvar}} · {{decvar}} · {{deletevar}} · {{hasvar}}聊天变量族✓ 支持本页在单次展开内生效;App 里跨轮持久
{{setglobalvar::k::v}} 等 global 族全局变量族✓ 支持同上
{{$名字}}变量简写读取✓ 支持
\{{char}}转义:按字面输出✓ 支持
{{outlet::名字}}取用世界书 outlet 条目— 本页不适用需要世界书激活语境,本页恒空(与「未激活输出空」的运行时行为同形)
{{wi::name}} · {{getarg}}STscript 闭包宏✗ 不支持App 同样未实现
{{if}}…{{else}}…{{/if}} 块级块级条件✗ 不支持App 用行内 {{if::…}} 代替

这个工具怎么来的

宏引擎从 Foreverse App 的宏展开器移植——那套实现对齐酒馆 macros/definitions 的行为子集,覆盖身份宏(char/user/persona)、时间宏(time/date/weekday,含 UTC 偏移)、随机宏(random/pick/roll 的全部形态)、行内条件 {{if}}、变量宏全家(setvar/getvar/addvar/incvar 及 global 变体、{{$名字}} 简写),以及转义与注释语法。展开顺序(先写变量、再读变量、最后其余宏)与 App 三段管线一致,代表性用例搬进网页引擎自测全过。2026-07 移植。

上面的支持对照表不是照文档抄的——每一行都对着引擎实际实现核过,写「支持」的都能在输入框里当场验证。

它做不到什么

时间宏({{time}}/{{date}})按你浏览器的当前时间展开,App 里按设备时间——两边都是「本地时间」语义,但你现在看到的数字和聊天时的数字自然不同。

依赖聊天状态的宏({{lastMessage}}、{{idleDuration}})这里用占位值演示;{{outlet}} 需要世界书激活语境,这里恒为空。变量宏在单次展开内生效,App 里聊天变量跨轮持久。

常见问题

{{random:a,b,c}} 和 {{random::a::b::c}} 有区别吗?

没有,两种分隔符都合法:双冒号优先,没有双冒号时按逗号切。选项里本身要带逗号时用双冒号形态。每次生成时等概率抽一个——这也是开场白做「随机开局」的标准写法。

{{roll:d20}} 的完整语法是什么?

NdM 掷 N 个 M 面骰取总和:{{roll:2d6}} 是两个六面骰。N 省略默认 1({{roll:d20}}),裸数字当面数({{roll:20}} 等于 {{roll:1d20}}),还有个空格形态 {{roll 1d100}} 也认——检定类角色卡的高频写法。写错了(比如 {{roll:abc}})不会报错,按原参数输出。

宏会互相嵌套展开吗?

不会。展开是单遍的:{{getvar}} 取出来的值里就算带着 {{char}},也原样保留不再展开——酒馆和 App 的引擎都是这个行为,防止套娃失控。这个工具的标注模式能直接看到「产物里的宏形态没有被二次展开」。

未识别的宏会怎样?

原样发给模型——不报错也不消失。这正是「卡里写错宏名导致模型看到一堆花括号」的事故来源。这个工具会给未识别的宏画虚线下划线,写完卡先贴进来扫一眼,比开局后再发现便宜。

相关工具与阅读

← 全部免费工具

酒馆宏预览器 — {{char}} {{user}} {{random}} 在线展开,带完整宏支持对照表 · Foreverse · 新梦