This commit is contained in:
手瓜一十雪 2025-03-23 16:53:06 +08:00
parent d8b2ebc01e
commit b9a9438bf0
4 changed files with 129 additions and 9 deletions

View File

@ -12,11 +12,29 @@ export class NTQQMsgApi {
this.context = context;
this.core = core;
}
async clickInlineKeyboardButton(...params: Parameters<NodeIKernelMsgService['clickInlineKeyboardButton']>) {
return this.context.session.getMsgService().clickInlineKeyboardButton(...params);
}
async searchMsgWithKeywords(keyWords: string[], param: Peer & { searchFields: number, pageLimit: number }) {
let outputSearchId = 0;
return this.core.eventWrapper.callNormalEventV2(
'NodeIKernelSearchService/searchMsgWithKeywords',
'NodeIKernelSearchListener/onSearchMsgKeywordsResult',
[keyWords, param],
(searchId) => {
outputSearchId = searchId;
return true;
},
(event) => {
return event.searchId == outputSearchId;
},
1,
5000
);
}
getMsgByClientSeqAndTime(peer: Peer, replyMsgClientSeq: string, replyMsgTime: string) {
// https://bot.q.qq.com/wiki/develop/api-v2/openapi/emoji/model.html#EmojiType 可以用过特殊方式拉取
return this.context.session.getMsgService().getMsgByClientSeqAndTime(peer, replyMsgClientSeq, replyMsgTime);
@ -137,7 +155,6 @@ export class NTQQMsgApi {
}
async queryFirstMsgBySender(peer: Peer, SendersUid: string[]) {
console.log(peer, SendersUid);
return await this.context.session.getMsgService().queryMsgsWithFilterEx('0', '0', '0', {
chatInfo: peer,
filterMsgType: [],

View File

@ -96,7 +96,7 @@ export interface NodeIKernelSearchListener {
}): any;
onSearchMsgKeywordsResult(params: {
searchId: string,
searchId: number,
hasMore: boolean,
resultItems: Array<{
msgId: string,

View File

@ -54,7 +54,7 @@ export interface NodeIKernelSearchService {
cancelSearchChatMsgs(...args: unknown[]): unknown;// needs 3 arguments
searchMsgWithKeywords(keyWords: string[], param: Peer & { searchFields: number, pageLimit: number }): Promise<GeneralCallResult>;
searchMsgWithKeywords(keyWords: string[], param: Peer & { searchFields: number, pageLimit: number }): number;
searchMoreMsgWithKeywords(...args: unknown[]): unknown;// needs 1 arguments

View File

@ -1,15 +1,19 @@
import { NapCatOneBot11Adapter, OB11Message, OB11MessageDataType } from '@/onebot';
import { NapCatCore } from '@/core';
import { ChatType, NapCatCore } from '@/core';
import { ActionMap } from '@/onebot/action';
import { OB11PluginAdapter } from '@/onebot/network/plugin';
import { MsgData } from '@/core/packet/client/nativeClient';
import { ProtoBufDecode } from 'napcat.protobuf';
import { drawJsonContent } from '@/shell/napcat';
import appidList from "@/core/external/appid.json";
import { MessageUnique } from '@/common/message-unique';
function timestampToDateText(timestamp: string): string {
const date = new Date(+(timestamp + '000'));
return date.toLocaleString('zh-CN', { timeZone: 'Asia/Shanghai' });
}
export const plugin_onmessage = async (adapter: string, _core: NapCatCore, _obCtx: NapCatOneBot11Adapter, message: OB11Message, action: ActionMap, instance: OB11PluginAdapter) => {
if (typeof message.message === 'string' || !message.raw) return;
if (!message.message.find(e => e.type == 'text' && e.data.text == '#取')) {
if (message.message.find(e => e.type == 'text' && e.data.text == '#取')) {
let reply = message.raw.elements.find(e => e.replyElement)?.replyElement?.replayMsgSeq;
if (!reply) return;
@ -73,7 +77,106 @@ export const plugin_onmessage = async (adapter: string, _core: NapCatCore, _obCt
message: msgList as any
}, adapter, instance.config);
}
if(!message.message.find(e => e.type == 'text' && e.data.text.startsWith('#谁说过'))){
if (message.message.find(e => e.type == 'text' && e.data.text.startsWith('#谁说过'))) {
let text = message.message.find(e => e.type == 'text')?.data.text;
if (!text) return;
let keyWords = text.slice(4);
let search_result = await _core.apis.MsgApi.searchMsgWithKeywords([keyWords], {
chatType: ChatType.KCHATTYPEGROUP,
peerUid: message.group_id?.toString() ?? "",
searchFields: 1,
pageLimit: 20
});
type typeinner = typeof search_result[1]['resultItems'];
let msgItems: typeinner = [];
for (let i = 0; i < search_result[1].resultItems.length; i++) {
let data = search_result[1].resultItems[i];
if (data && data.fieldText.indexOf('#谁说过') === -1) {
msgItems.push(data);
}
}
let item = msgItems.length;
if (item > 0) {
let randomIndex = Math.floor(Math.random() * item);
let msg = msgItems[randomIndex];
let onebotmsgid = MessageUnique.createUniqueMsgId({ chatType: ChatType.KCHATTYPEGROUP, peerUid: message.group_id?.toString() ?? "" }, msg?.msgId ?? '');
let msgJson = '关键词是:' + keyWords + '\n';
for (const msgitem of msgItems) {
msgJson += msgitem.senderNick + ' 在 ' + timestampToDateText(msgitem.msgTime) + ' 也说过哦' + '\n';
}
msgJson = msgJson.slice(0, -1);
await action.get('send_group_msg')?.handle({
group_id: String(message.group_id),
message: [{
type: OB11MessageDataType.reply,
data: {
id: onebotmsgid.toString(),
}
},
{
type: OB11MessageDataType.text,
data: {
text: '抓到你啦',
}
}, {
type: OB11MessageDataType.image,
data: {
file: await drawJsonContent(msgJson)
}
}]
}, adapter, instance.config);
}
}
if (message.message.find(e => e.type == 'text' && e.data.text.startsWith('#谁经常说'))) {
let text = message.message.find(e => e.type == 'text')?.data.text;
if (!text) return;
let keyWords = text.slice(5);
let search_result = await _core.apis.MsgApi.searchMsgWithKeywords([keyWords], {
chatType: ChatType.KCHATTYPEGROUP,
peerUid: message.group_id?.toString() ?? "",
searchFields: 1,
pageLimit: 500
});
type typeinner = typeof search_result[1]['resultItems'];
let msgItems: typeinner = [];
let senderUinMap = new Map<string, number>();
for (let i = 0; i < search_result[1].resultItems.length; i++) {
let data = search_result[1].resultItems[i];
if (data && data.fieldText.indexOf('#谁经常说') === -1) {
senderUinMap.set(data.senderUin, (senderUinMap.get(data.senderUin) ?? 0) + 1);
msgItems.push(data);
}
}
let rank = Array.from(senderUinMap.entries()).sort((a, b) => b[1] - a[1]);
let rankOne = rank[0];
msgItems = msgItems.filter(e => e.senderUin == rankOne?.[0]);
let item = msgItems.length;
if (item > 0) {
let msgJson = '关键词是:' + keyWords + '\n' + '' + rankOne?.[0] + ' 说过 ' + rankOne?.[1] + ' 次\n';
for (const msgitem of msgItems) {
msgJson += msgitem.senderNick + ' 说 ' + msgitem.fieldText + '\n';
}
msgJson = msgJson.slice(0, -1);
await action.get('send_group_msg')?.handle({
group_id: String(message.group_id),
message: [{
type: OB11MessageDataType.at,
data: {
qq: rankOne?.[0] ?? message.user_id.toString(),
}
},
{
type: OB11MessageDataType.text,
data: {
text: ' 抓到你啦',
}
}, {
type: OB11MessageDataType.image,
data: {
file: await drawJsonContent(msgJson)
}
}]
}, adapter, instance.config);
}
}
};