尝试使用 ctx.bots[0].getMessageList(channel.id) 出错
但是群聊历史消息是可以这样获得的
2 个赞
getMessageList() 目前仅支持群聊历史消息,因为标准的 OneBot 11 协议只提供了 get_group_msg_history API,没有对应的私聊历史消息接口。
不过,如果你使用的是 NapCat 协议端,它提供了扩展 API get_friend_msg_history 来获取私聊历史记录。
参考文档:https://napneko.github.io/develop/api/doc#get-friend-msg-history-获取私聊历史记录
无独有偶,llonebot 也有这样的API支持 https://llonebot.apifox.cn/api-227239657
使用方法
你可以通过 bot.internal._request() 直接调用扩展 API:
import { Universal, Bot } from "koishi";
// 获取指定的 bot 实例
const bot = (Object.values(ctx.bots) as Bot[]).find(
b => b.selfId === "你的botId" || b.user?.id === "你的botId"
);
if (!bot || bot.status !== Universal.Status.ONLINE) {
ctx.logger.error(`机器人离线或未找到。`);
return;
}
// 调用 NapCat 的 get_friend_msg_history API
const result = await bot.internal._request('get_friend_msg_history', {
user_id: 123456789, // 好友 QQ 号
message_seq: 0, // 起始消息序号(可选)
count: 20, // 获取消息数量(可选)
reverseOrder: false // 倒序(可选)
});
ctx.logger.info(result);
注意事项
- 此方法仅适用于支持此API的协议端
_request()是底层 API 调用方法,返回的是原始 OneBot 协议数据
另外,我觉得各协议端达成一致的API 理应内置在adapter-onebot适配器里去实现调用,你可以关注一下此仓库的PR情况 → https://github.com/koishijs/koishi-plugin-adapter-onebot/pull/75#issuecomment-4013326875
2 个赞
谢谢!我尝试一下!
3 个赞
上文我提及到的 Pull Request 目前已经通过,你可以像这样子调用来获取私聊的历史记录。
ctx.command('历史记录')
.action(async ({ session }, id) => {
const aaa = await session.bot.internal.getFriendMsgHistory(session.userId)
ctx.logger.info(aaa)
return
})