fix: 尝试修复onebot无法获取群聊记录及图片tools发图异常

1.类比shamrock,onebot使用e.group.getChatHistory(0, num, false)可以直接取到记录历史记录
2.我这边napcat的onebot得到的e.bot.getGroupList()是数组这。不同协议差别这么大吗。。先这样能发送了
This commit is contained in:
127Wzc 2025-03-11 23:13:23 +08:00
parent 4900f40502
commit aaaee383a8
2 changed files with 43 additions and 42 deletions

View file

@ -2,54 +2,54 @@ import { Config } from './config.js'
import { newFetch } from './proxy.js' import { newFetch } from './proxy.js'
export async function getChatHistoryGroup (e, num) { export async function getChatHistoryGroup (e, num) {
// if (e.adapter === 'shamrock') { if (e.adapter_name && e.adapter_name === 'OneBotv11') {
// return await e.group.getChatHistory(0, num, false) return await e.group.getChatHistory(0, num, false)
// } else { } else {
let latestChats = await e.group.getChatHistory(e.seq || e.message_id, 1) let latestChats = await e.group.getChatHistory(e.seq || e.message_id, 1)
if (latestChats.length > 0) { if (latestChats.length > 0) {
let latestChat = latestChats[0] let latestChat = latestChats[0]
if (latestChat) { if (latestChat) {
let seq = latestChat.seq || latestChat.message_id let seq = latestChat.seq || latestChat.message_id
let chats = [] let chats = []
while (chats.length < num) { while (chats.length < num) {
let chatHistory = await e.group.getChatHistory(seq, 20) let chatHistory = await e.group.getChatHistory(seq, 20)
if (!chatHistory || chatHistory.length === 0) { if (!chatHistory || chatHistory.length === 0) {
break break
}
chats.push(...chatHistory.reverse())
if (seq === chatHistory[chatHistory.length - 1].seq || seq === chatHistory[chatHistory.length - 1].message_id) {
break
}
seq = chatHistory[chatHistory.length - 1].seq || chatHistory[chatHistory.length - 1].message_id
} }
chats.push(...chatHistory.reverse()) chats = chats.slice(0, num).reverse()
if (seq === chatHistory[chatHistory.length - 1].seq || seq === chatHistory[chatHistory.length - 1].message_id) { try {
break let mm = await e.bot.gml
} for (const chat of chats) {
seq = chatHistory[chatHistory.length - 1].seq || chatHistory[chatHistory.length - 1].message_id if (e.adapter === 'shamrock') {
} if (chat.sender?.user_id === 0) {
chats = chats.slice(0, num).reverse() // 奇怪格式的历史消息,过滤掉
try { continue
let mm = await e.bot.gml }
for (const chat of chats) { let sender = await pickMemberAsync(e, chat.sender.user_id)
if (e.adapter === 'shamrock') { if (sender) {
if (chat.sender?.user_id === 0) { chat.sender = sender
// 奇怪格式的历史消息,过滤掉 }
continue } else {
} let sender = mm.get(chat.sender.user_id)
let sender = await pickMemberAsync(e, chat.sender.user_id) if (sender) {
if (sender) { chat.sender = sender
chat.sender = sender }
}
} else {
let sender = mm.get(chat.sender.user_id)
if (sender) {
chat.sender = sender
} }
} }
} catch (err) {
logger.warn(err)
} }
} catch (err) { // console.log(chats)
logger.warn(err) return chats
} }
// console.log(chats)
return chats
} }
} }
// }
return [] return []
} }

View file

@ -45,7 +45,8 @@ export class SendPictureTool extends AbstractTool {
} }
let errs = [] let errs = []
try { try {
if (groupList.get(target)) { if ((typeof groupList.get === 'function' && groupList.get(target)) ||
(Array.isArray(groupList) && groupList.includes(target))) {
let group = await e.bot.pickGroup(target) let group = await e.bot.pickGroup(target)
for (let pic of pictures) { for (let pic of pictures) {
try { try {