mirror of
https://github.com/NapNeko/NapCatQQ.git
synced 2025-12-26 19:01:28 +08:00
x
This commit is contained in:
parent
d8b2ebc01e
commit
b9a9438bf0
@ -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: [],
|
||||
|
||||
@ -96,7 +96,7 @@ export interface NodeIKernelSearchListener {
|
||||
}): any;
|
||||
|
||||
onSearchMsgKeywordsResult(params: {
|
||||
searchId: string,
|
||||
searchId: number,
|
||||
hasMore: boolean,
|
||||
resultItems: Array<{
|
||||
msgId: string,
|
||||
|
||||
@ -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
|
||||
|
||||
|
||||
@ -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);
|
||||
}
|
||||
}
|
||||
};
|
||||
Loading…
Reference in New Issue
Block a user