PlatformTranslator 开发¶
Translator 负责把平台 Session 转成 Core 的 Message/Event record。
接口¶
import type { Translator } from "koishi-plugin-yesimbot";
import type { ChannelResources, MessageRecord } from "koishi-plugin-yesimbot";
import type { Session } from "koishi";
const translator: Translator = {
platform: "my-platform",
async translate(session: Session, resources: ChannelResources) {
if (session.type !== "message-created") return null;
// 使用 session 和 resources 构造 MessageRecord
return {
platform: session.platform,
selfId: session.selfId,
channel: { id: session.channelId, type: session.isDirect ? 1 : 0 },
messageId: session.messageId,
elements: session.elements,
author: { id: session.userId, name: session.username },
timestamp: Date.now(),
};
},
};
注册¶
export function apply(ctx: Context) {
const dispose = ctx.yesimbot.messenger.use(translator);
ctx.on("dispose", dispose);
}
一个 platform 只能注册一个 Translator。注册 "*" 作为 fallback,匹配所有未精确注册的平台。
媒体持久化¶
Translator 通过 resources.assets(AssetStore)持久化媒体:
返回的 img 元素携带 asset://<id> URI,模型投影和发送解析都使用本地资源。
默认透传¶
没有注册精确或 * Translator 时,message-created 且 message ID 非空的消息走内置默认透传。自定义事件和复杂媒体仍需显式 Translator。
事件转换示例¶
OneBot 内置 Translator 把 notice.poke 转为事件记录: