我找了一下好像koishi没有支持这个,只能通过调用onebot的底层接口来实现,如
koishi+onebot+napcat 如何回应表情 - 交流讨论 - Koishi Forum
里面提到的方法(对收到的消息):
先写个接口
interface OneBotLike {
_request(action: string, params: Record<string, unknown>): Promise<unknown>
}
type OneBotSession = Session & {
onebot?: OneBotLike
}
function getOneBot(session: Session) {
const onebot = (session as OneBotSession).onebot
if (onebot && typeof onebot._request === 'function') return onebot
}
然后调接口
const onebot = getOneBot(session)
await onebot._request(
"set_msg_emoji_like",
{
message_id: session.event.message.id,
emoji_id: 324,
}
).catch((err) => {
ctx.logger.error(`napcat添加表情失败: ${err.message}`);
})
主动对某个 messageID 贴表情的话也要先写个接口:
interface OneBotLike {
platform?: string
isActive?: boolean
sendMessage?: (...args: any[]) => any
internal?: {
_request?: (action: string, params: Record<string, unknown>) => Promise<unknown>
}
}
在ctx.bot里面通过 platform 和 isActive 选择正确的bot,然后再使用
bot.internal._request {...}
像前面那样发请求。
这就是我目前的做法,但是感觉这样转换有点蠢(
大佬们有没有更好的方法?