Skip to content

渲染楼层

提示

请务必先阅读如何正确使用酒馆助手

以下函数用于调整楼层的渲染, 仅影响显示而不影响实际的聊天数据, 重新加载消息或刷新网页等操作后就会回到原样.

点击查看对应类型定义文件 (可发给 AI 或 IDE 使用, 酒馆助手界面中提供了打包下载)

retrieveDisplayedMessage

获取消息楼层号对应的消息内容 jquery

相比于一个实用函数, 这更像是一个告诉你可以这样用 jquery 的示例 (如何正确使用酒馆助手).

ts
function retrieveDisplayedMessage(message_id: number): JQuery<HTMLDivElement> {
  return $(`.mes[mesid = "${message_id}"]`, window.parent).find(`.mes_text`);
}

参数

message_id

  • 类型: number
  • 描述: 要获取的消息楼层号, 必须要酒馆页面显示了该消息楼层才能获取到

返回值

  • 对应的 jquery: 如果能获取到该消息楼层的 html, 则返回对应的 jquery; 否则返回空 jquery

示例

ts
const text = retrieveDisplayedMessage(0).text();
ts
// 这样的修改只会影响本次显示, 不会保存到消息文件中, 因此重新加载消息或刷新网页等操作后就会回到原样;
// 如果需要实际修改消息文件, 请使用 `setChatMessages`
retrieveDisplayedMessage(0).text("new text");
retrieveDisplayedMessage(0).append("<pre>new text</pre>");
retrieveDisplayedMessage(0).append(
  formatAsDisplayedMessage("{{char}} speaks in {{lastMessageId}}")
);

formatAsDisplayedMessage

将字符串处理为酒馆用于显示的 html 格式

  1. 替换字符串中的酒馆宏
  2. 对字符串应用对应的酒馆正则
  3. 将字符串调整为 html 格式
ts
function formatAsDisplayedMessage(text: string, option: FormatAsDisplayedMessageOption = {}): string;
ts
type FormatAsDisplayedMessageOption = {
  message_id?: "last" | "last_user" | "last_char" | number; // 消息所在的楼层, 要求该楼层已经存在, 即在 `[0, await getLastMessageId()]` 范围内; 默认为 'last'
}

参数

text

  • 类型: string
  • 描述: 要处理的字符串

message_id?

  • 类型: 'last' | 'last_user' | 'last_char' | number
  • 描述: 消息所在的楼层, 要求该楼层已经存在, 即在 [0, await getLastMessageId()] 范围内; 默认为 'last'

返回值

  • 处理结果: string

示例

ts
const text = formatAsDisplayedMessage(
  "{{char}} speaks in {{lastMessageId}}"
);
text == "<p>少女歌剧 speaks in 5</p>";

builtin.addOneMessage

向网页添加一条楼层渲染, 例如显示区间消息就是用它实现的.

ts
addOneMessage(mes: Record<string, any>, options?: {
  type?: string;
  insertAfter?: number;
  scroll?: boolean;
  insertBefore?: number;
  forceId?: number;
  showSwipes?: boolean;
}): void;

该函数的具体内容和 builtin 内的更多功能请参考接口访问.

刷新当前聊天的渲染

  • SillyTavern.reloadCurrent: 完全刷新当前聊天 (这和在酒馆里修改正则所触发的刷新相同, 高频使用可能导致聊天记录丢失; 因此酒馆助手额外提供了下面两个函数)
  • builtin.reloadChatWithoutEvents: 刷新当前聊天但不触发任何事件
  • builtin.reloadAndRenderChatWithoutEvents: 刷新当前聊天并触发 CHARACTER_MESSAGE_RENDEREDUSER_MESSAGE_RENDERED 事件从而重新渲染前端界面

具体请参考接口访问.

作者:KAKAA, 青空莉想做舞台少女的狗