mirror of
https://github.com/LLOneBot/LLOneBot.git
synced 2024-11-22 01:56:33 +00:00
Compare commits
12 Commits
Author | SHA1 | Date | |
---|---|---|---|
![]() |
15e7afed62 | ||
![]() |
bf71328650 | ||
![]() |
b3299ba1e3 | ||
![]() |
d36ea93e63 | ||
![]() |
0bd3f8f1a2 | ||
![]() |
4bf79e021e | ||
![]() |
2dac109e58 | ||
![]() |
2637a5da6d | ||
![]() |
f8b2be246f | ||
![]() |
44921e85ad | ||
![]() |
388e016365 | ||
![]() |
a2056a43f3 |
@@ -4,7 +4,7 @@
|
||||
"name": "LLOneBot",
|
||||
"slug": "LLOneBot",
|
||||
"description": "实现 OneBot 11 协议,用于 QQ 机器人开发",
|
||||
"version": "3.31.2",
|
||||
"version": "3.31.4",
|
||||
"icon": "./icon.webp",
|
||||
"authors": [
|
||||
{
|
||||
|
@@ -82,7 +82,7 @@ class MessageUniqueWrapper {
|
||||
return ret.map((t) => t?.MsgId).filter((t) => t !== undefined)
|
||||
}
|
||||
|
||||
createMsg(peer: Peer, msgId: string): number | undefined {
|
||||
createMsg(peer: Peer, msgId: string): number {
|
||||
const key = `${msgId}|${peer.chatType}|${peer.peerUid}`
|
||||
const hash = createHash('md5').update(key).digest()
|
||||
//设置第一个bit为0 保证shortId为正数
|
||||
|
5
src/global.d.ts
vendored
5
src/global.d.ts
vendored
@@ -2,9 +2,6 @@ import type { LLOneBot } from './preload'
|
||||
import { Dict } from 'cosmokit'
|
||||
|
||||
declare global {
|
||||
interface Window {
|
||||
llonebot: LLOneBot
|
||||
LiteLoader: Dict
|
||||
}
|
||||
var llonebot: LLOneBot
|
||||
var LiteLoader: Dict
|
||||
}
|
@@ -4,7 +4,6 @@ import { invoke, NTMethod, NTClass } from '../ntcall'
|
||||
import { getSession } from '@/ntqqapi/wrapper'
|
||||
import { BuddyListReqType, NodeIKernelProfileService } from '../services'
|
||||
import { NTEventDispatch } from '@/common/utils/eventTask'
|
||||
import { LimitedHashTable } from '@/common/utils/table'
|
||||
import { pick } from 'cosmokit'
|
||||
import { Service, Context } from 'cordis'
|
||||
|
||||
@@ -101,8 +100,9 @@ export class NTQQFriendApi extends Service {
|
||||
}
|
||||
}
|
||||
|
||||
async getBuddyIdMap(refresh = false): Promise<LimitedHashTable<string, string>> {
|
||||
const retMap: LimitedHashTable<string, string> = new LimitedHashTable<string, string>(5000)
|
||||
/** uid => uin */
|
||||
async getBuddyIdMap(refresh = false): Promise<Map<string, string>> {
|
||||
const retMap: Map<string, string> = new Map()
|
||||
const session = getSession()
|
||||
if (session) {
|
||||
const uids: string[] = []
|
||||
@@ -112,9 +112,12 @@ export class NTQQFriendApi extends Service {
|
||||
const data = await NTEventDispatch.CallNoListenerEvent<NodeIKernelProfileService['getCoreAndBaseInfo']>(
|
||||
'NodeIKernelProfileService/getCoreAndBaseInfo', 5000, 'nodeStore', uids
|
||||
)
|
||||
data.forEach((value, key) => {
|
||||
retMap.set(value.uin!, value.uid!)
|
||||
})
|
||||
for (const [, item] of data) {
|
||||
if (retMap.size > 5000) {
|
||||
break
|
||||
}
|
||||
retMap.set(item.uid!, item.uin!)
|
||||
}
|
||||
} else {
|
||||
const data = await invoke<{
|
||||
buddyCategory: CategoryFriend[]
|
||||
@@ -129,7 +132,10 @@ export class NTQQFriendApi extends Service {
|
||||
}
|
||||
)
|
||||
for (const item of Object.values(data.userSimpleInfos)) {
|
||||
retMap.set(item.uin!, item.uid!)
|
||||
if (retMap.size > 5000) {
|
||||
break
|
||||
}
|
||||
retMap.set(item.uid!, item.uin!)
|
||||
}
|
||||
}
|
||||
return retMap
|
||||
|
@@ -246,7 +246,7 @@ export class NTQQGroupApi extends Service {
|
||||
}
|
||||
}
|
||||
|
||||
async getGroupAtAllRemainCount(groupCode: string) {
|
||||
async getGroupRemainAtTimes(groupCode: string) {
|
||||
return await invoke<
|
||||
GeneralCallResult & {
|
||||
atInfo: {
|
||||
|
@@ -144,7 +144,7 @@ export class NTQQUserApi extends Service {
|
||||
}
|
||||
const uin = selfInfo.uin
|
||||
const requestUrl = 'https://ssl.ptlogin2.qq.com/jump?ptlang=1033&clientuin=' + uin + '&clientkey=' + clientKeyData.clientKey + '&u1=https%3A%2F%2F' + domain + '%2F' + uin + '%2Finfocenter&keyindex=19%27'
|
||||
const cookies: { [key: string]: string; } = await RequestUtil.HttpsGetCookies(requestUrl)
|
||||
const cookies: { [key: string]: string } = await RequestUtil.HttpsGetCookies(requestUrl)
|
||||
return cookies
|
||||
}
|
||||
|
||||
@@ -187,12 +187,12 @@ export class NTQQUserApi extends Service {
|
||||
}
|
||||
}
|
||||
|
||||
async getUidByUinV1(Uin: string) {
|
||||
async getUidByUinV1(uin: string) {
|
||||
const session = getSession()
|
||||
// 通用转换开始尝试
|
||||
let uid = (await session?.getUixConvertService().getUid([Uin]))?.uidInfo.get(Uin)
|
||||
let uid = (await session?.getUixConvertService().getUid([uin]))?.uidInfo.get(uin)
|
||||
if (!uid) {
|
||||
let unveifyUid = (await this.getUserDetailInfoByUin(Uin)).info.uid;//从QQ Native 特殊转换 方法三
|
||||
let unveifyUid = (await this.getUserDetailInfoByUin(uin)).info.uid //从QQ Native 特殊转换 方法三
|
||||
if (unveifyUid.indexOf('*') == -1) {
|
||||
uid = unveifyUid
|
||||
}
|
||||
@@ -210,22 +210,22 @@ export class NTQQUserApi extends Service {
|
||||
uid = (await session.getUixConvertService().getUid([uin])).uidInfo.get(uin)
|
||||
if (uid) return uid
|
||||
} else {
|
||||
let uid = (await invoke('nodeIKernelGroupService/getUidByUins', [{ uin: [uin] }, null])).uids.get(uin)
|
||||
let uid = (await invoke('nodeIKernelGroupService/getUidByUins', [{ uin: [uin] }])).uids.get(uin)
|
||||
if (uid) return uid
|
||||
uid = (await invoke('nodeIKernelProfileService/getUidByUin', [{ callFrom: 'FriendsServiceImpl', uin: [uin] }, null])).get(uin)
|
||||
uid = (await invoke('nodeIKernelProfileService/getUidByUin', [{ callFrom: 'FriendsServiceImpl', uin: [uin] }])).get(uin)
|
||||
if (uid) return uid
|
||||
uid = (await invoke('nodeIKernelUixConvertService/getUid', [{ uin: [uin] }, null])).uidInfo.get(uin)
|
||||
uid = (await invoke('nodeIKernelUixConvertService/getUid', [{ uins: [uin] }])).uidInfo.get(uin)
|
||||
if (uid) return uid
|
||||
}
|
||||
const unveifyUid = (await this.getUserDetailInfoByUinV2(uin)).detail.uid //从QQ Native 特殊转换
|
||||
if (unveifyUid.indexOf('*') == -1) return unveifyUid
|
||||
}
|
||||
|
||||
async getUidByUin(Uin: string) {
|
||||
async getUidByUin(uin: string) {
|
||||
if (getBuildVersion() >= 26702) {
|
||||
return await this.getUidByUinV2(Uin)
|
||||
return this.getUidByUinV2(uin)
|
||||
}
|
||||
return await this.getUidByUinV1(Uin)
|
||||
return this.getUidByUinV1(uin)
|
||||
}
|
||||
|
||||
async getUserDetailInfoByUinV2(uin: string) {
|
||||
@@ -247,25 +247,25 @@ export class NTQQUserApi extends Service {
|
||||
}
|
||||
}
|
||||
|
||||
async getUserDetailInfoByUin(Uin: string) {
|
||||
async getUserDetailInfoByUin(uin: string) {
|
||||
return NTEventDispatch.CallNoListenerEvent
|
||||
<(Uin: string) => Promise<UserDetailInfoByUin>>(
|
||||
'NodeIKernelProfileService/getUserDetailInfoByUin',
|
||||
5000,
|
||||
Uin
|
||||
uin
|
||||
)
|
||||
}
|
||||
|
||||
async getUinByUidV1(Uid: string) {
|
||||
async getUinByUidV1(uid: string) {
|
||||
const ret = await NTEventDispatch.CallNoListenerEvent
|
||||
<(Uin: string[]) => Promise<{ uinInfo: Map<string, string> }>>(
|
||||
'NodeIKernelUixConvertService/getUin',
|
||||
5000,
|
||||
[Uid]
|
||||
[uid]
|
||||
)
|
||||
let uin = ret.uinInfo.get(Uid)
|
||||
let uin = ret.uinInfo.get(uid)
|
||||
if (!uin) {
|
||||
uin = (await this.getUserDetailInfo(Uid)).uin //从QQ Native 转换
|
||||
uin = (await this.getUserDetailInfo(uid)).uin //从QQ Native 转换
|
||||
}
|
||||
return uin
|
||||
}
|
||||
@@ -280,24 +280,24 @@ export class NTQQUserApi extends Service {
|
||||
uin = (await session.getUixConvertService().getUin([uid])).uinInfo.get(uid)
|
||||
if (uin) return uin
|
||||
} else {
|
||||
let uin = (await invoke('nodeIKernelGroupService/getUinByUids', [{ uid: [uid] }, null])).uins.get(uid)
|
||||
let uin = (await invoke('nodeIKernelGroupService/getUinByUids', [{ uid: [uid] }])).uins.get(uid)
|
||||
if (uin) return uin
|
||||
uin = (await invoke('nodeIKernelProfileService/getUinByUid', [{ callFrom: 'FriendsServiceImpl', uid: [uid] }, null])).get(uid)
|
||||
uin = (await invoke('nodeIKernelProfileService/getUinByUid', [{ callFrom: 'FriendsServiceImpl', uid: [uid] }])).get(uid)
|
||||
if (uin) return uin
|
||||
uin = (await invoke('nodeIKernelUixConvertService/getUin', [{ uid: [uid] }, null])).uinInfo.get(uid)
|
||||
uin = (await invoke('nodeIKernelUixConvertService/getUin', [{ uids: [uid] }])).uinInfo.get(uid)
|
||||
if (uin) return uin
|
||||
}
|
||||
let uin = (await this.ctx.ntFriendApi.getBuddyIdMap(true)).getKey(uid)
|
||||
let uin = (await this.ctx.ntFriendApi.getBuddyIdMap(true)).get(uid)
|
||||
if (uin) return uin
|
||||
uin = (await this.getUserDetailInfo(uid)).uin //从QQ Native 转换
|
||||
return uin
|
||||
}
|
||||
|
||||
async getUinByUid(Uid: string) {
|
||||
async getUinByUid(uid: string) {
|
||||
if (getBuildVersion() >= 26702) {
|
||||
return (await this.getUinByUidV2(Uid))!
|
||||
return this.getUinByUidV2(uid)
|
||||
}
|
||||
return await this.getUinByUidV1(Uid)
|
||||
return this.getUinByUidV1(uid)
|
||||
}
|
||||
|
||||
async forceFetchClientKey() {
|
||||
|
@@ -136,25 +136,24 @@ export function invoke<
|
||||
R extends Awaited<ReturnType<NTService[S][M] extends (...args: any) => any ? NTService[S][M] : any>>,
|
||||
S extends keyof NTService = any,
|
||||
M extends keyof NTService[S] & string = any
|
||||
>(method: `${unknown extends `${S}/${M}` ? `${S}/${M}` : string}`, args?: unknown[], options: InvokeOptions<R> = {}) {
|
||||
>(method: `${unknown extends `${S}/${M}` ? `${S}/${M}` : string}`, args: unknown[], options: InvokeOptions<R> = {}) {
|
||||
const className = options.className ?? NTClass.NT_API
|
||||
const channel = options.channel ?? NTChannel.IPC_UP_2
|
||||
const timeout = options.timeout ?? 5000
|
||||
const afterFirstCmd = options.afterFirstCmd ?? true
|
||||
const uuid = randomUUID()
|
||||
let eventName = className + '-' + channel[channel.length - 1]
|
||||
if (options.classNameIsRegister) {
|
||||
eventName += '-register'
|
||||
}
|
||||
const apiArgs = [method, ...(args ?? [])]
|
||||
//log('callNTQQApi', channel, eventName, apiArgs, uuid)
|
||||
return new Promise((resolve: (data: R) => void, reject) => {
|
||||
return new Promise<R>((resolve, reject) => {
|
||||
const apiArgs = [method, ...args]
|
||||
const callbackId = randomUUID()
|
||||
let success = false
|
||||
if (!options.cbCmd) {
|
||||
// QQ后端会返回结果,并且可以根据uuid识别
|
||||
hookApiCallbacks[uuid] = (r: R) => {
|
||||
hookApiCallbacks[callbackId] = res => {
|
||||
success = true
|
||||
resolve(r)
|
||||
resolve(res)
|
||||
}
|
||||
}
|
||||
else {
|
||||
@@ -177,7 +176,7 @@ export function invoke<
|
||||
})
|
||||
}
|
||||
!afterFirstCmd && secondCallback()
|
||||
hookApiCallbacks[uuid] = (result: GeneralCallResult) => {
|
||||
hookApiCallbacks[callbackId] = (result: GeneralCallResult) => {
|
||||
if (result?.result === 0 || result === undefined) {
|
||||
//log(`${params.methodName} callback`, result)
|
||||
afterFirstCmd && secondCallback()
|
||||
@@ -203,7 +202,7 @@ export function invoke<
|
||||
},
|
||||
},
|
||||
},
|
||||
{ type: 'request', callbackId: uuid, eventName },
|
||||
{ type: 'request', callbackId, eventName },
|
||||
apiArgs,
|
||||
)
|
||||
})
|
||||
|
@@ -177,8 +177,6 @@ export interface NodeIKernelRichMediaService {
|
||||
|
||||
renameGroupFolder(arg1: unknown, arg2: unknown, arg3: unknown): unknown
|
||||
|
||||
deleteGroupFolder(arg1: unknown, arg2: unknown): unknown
|
||||
|
||||
deleteTransferInfo(arg1: unknown, arg2: unknown): unknown
|
||||
|
||||
cancelTransferTask(arg1: unknown, arg2: unknown, arg3: unknown): unknown
|
||||
|
@@ -7,7 +7,7 @@ interface Payload {
|
||||
parent_id?: '/'
|
||||
}
|
||||
|
||||
export class GoCQHTTPCreateGroupFileFolder extends BaseAction<Payload, null> {
|
||||
export class CreateGroupFileFolder extends BaseAction<Payload, null> {
|
||||
actionName = ActionName.GoCQHTTP_CreateGroupFileFolder
|
||||
|
||||
async _handle(payload: Payload) {
|
||||
|
@@ -6,7 +6,7 @@ interface Payload {
|
||||
message_id: number | string
|
||||
}
|
||||
|
||||
export default class GoCQHTTPDelEssenceMsg extends BaseAction<Payload, any> {
|
||||
export class DelEssenceMsg extends BaseAction<Payload, any> {
|
||||
actionName = ActionName.GoCQHTTP_DelEssenceMsg;
|
||||
|
||||
protected async _handle(payload: Payload): Promise<any> {
|
||||
|
@@ -7,7 +7,7 @@ interface Payload {
|
||||
busid?: 102
|
||||
}
|
||||
|
||||
export class GoCQHTTPDelGroupFile extends BaseAction<Payload, null> {
|
||||
export class DelGroupFile extends BaseAction<Payload, null> {
|
||||
actionName = ActionName.GoCQHTTP_DelGroupFile
|
||||
|
||||
async _handle(payload: Payload) {
|
||||
|
@@ -6,7 +6,7 @@ interface Payload {
|
||||
folder_id: string
|
||||
}
|
||||
|
||||
export class GoCQHTTPDelGroupFolder extends BaseAction<Payload, null> {
|
||||
export class DelGroupFolder extends BaseAction<Payload, null> {
|
||||
actionName = ActionName.GoCQHTTP_DelGroupFolder
|
||||
|
||||
async _handle(payload: Payload) {
|
||||
|
@@ -19,7 +19,7 @@ interface FileResponse {
|
||||
file: string
|
||||
}
|
||||
|
||||
export default class GoCQHTTPDownloadFile extends BaseAction<Payload, FileResponse> {
|
||||
export class DownloadFile extends BaseAction<Payload, FileResponse> {
|
||||
actionName = ActionName.GoCQHTTP_DownloadFile
|
||||
|
||||
protected async _handle(payload: Payload): Promise<FileResponse> {
|
||||
|
@@ -13,7 +13,7 @@ interface Response {
|
||||
messages: (OB11Message & { content: OB11MessageData })[]
|
||||
}
|
||||
|
||||
export class GoCQHTTGetForwardMsgAction extends BaseAction<Payload, Response> {
|
||||
export class GetForwardMsg extends BaseAction<Payload, Response> {
|
||||
actionName = ActionName.GoCQHTTP_GetForwardMsg
|
||||
protected async _handle(payload: Payload): Promise<any> {
|
||||
const msgId = payload.id || payload.message_id
|
||||
|
25
src/onebot11/action/go-cqhttp/GetGroupAtAllRemain.ts
Normal file
25
src/onebot11/action/go-cqhttp/GetGroupAtAllRemain.ts
Normal file
@@ -0,0 +1,25 @@
|
||||
import BaseAction from '../BaseAction'
|
||||
import { ActionName } from '../types'
|
||||
|
||||
interface Payload {
|
||||
group_id: number | string
|
||||
}
|
||||
|
||||
interface Response {
|
||||
can_at_all: boolean
|
||||
remain_at_all_count_for_group: number
|
||||
remain_at_all_count_for_uin: number
|
||||
}
|
||||
|
||||
export class GetGroupAtAllRemain extends BaseAction<Payload, Response> {
|
||||
actionName = ActionName.GoCQHTTP_GetGroupAtAllRemain
|
||||
|
||||
async _handle(payload: Payload) {
|
||||
const data = await this.ctx.ntGroupApi.getGroupRemainAtTimes(payload.group_id.toString())
|
||||
return {
|
||||
can_at_all: data.atInfo.canAtAll,
|
||||
remain_at_all_count_for_group: data.atInfo.RemainAtAllCountForGroup,
|
||||
remain_at_all_count_for_uin: data.atInfo.RemainAtAllCountForUin
|
||||
}
|
||||
}
|
||||
}
|
@@ -17,7 +17,7 @@ interface Response {
|
||||
messages: OB11Message[]
|
||||
}
|
||||
|
||||
export default class GoCQHTTPGetGroupMsgHistory extends BaseAction<Payload, Response> {
|
||||
export class GetGroupMsgHistory extends BaseAction<Payload, Response> {
|
||||
actionName = ActionName.GoCQHTTP_GetGroupMsgHistory
|
||||
|
||||
protected async _handle(payload: Payload): Promise<Response> {
|
||||
|
@@ -24,7 +24,7 @@ interface Response {
|
||||
}[]
|
||||
}
|
||||
|
||||
export class GoCQHTTPGetGroupSystemMsg extends BaseAction<void, Response> {
|
||||
export class GetGroupSystemMsg extends BaseAction<void, Response> {
|
||||
actionName = ActionName.GoCQHTTP_GetGroupSystemMsg
|
||||
|
||||
async _handle(payload: void) {
|
||||
|
@@ -10,7 +10,7 @@ interface Payload {
|
||||
user_id: number | string
|
||||
}
|
||||
|
||||
export default class GoCQHTTPGetStrangerInfo extends BaseAction<Payload, OB11User> {
|
||||
export class GetStrangerInfo extends BaseAction<Payload, OB11User> {
|
||||
actionName = ActionName.GoCQHTTP_GetStrangerInfo
|
||||
|
||||
protected async _handle(payload: Payload): Promise<OB11User> {
|
||||
|
@@ -5,7 +5,7 @@ interface Payload {
|
||||
message_id: number
|
||||
}
|
||||
|
||||
export default class GoCQHTTPMarkMsgAsRead extends BaseAction<Payload, null> {
|
||||
export class MarkMsgAsRead extends BaseAction<Payload, null> {
|
||||
actionName = ActionName.GoCQHTTP_MarkMsgAsRead
|
||||
|
||||
protected async _handle(payload: Payload): Promise<null> {
|
@@ -7,7 +7,7 @@ interface Payload {
|
||||
operation: QuickOperation
|
||||
}
|
||||
|
||||
export class GoCQHTTHandleQuickOperation extends BaseAction<Payload, null> {
|
||||
export class HandleQuickOperation extends BaseAction<Payload, null> {
|
||||
actionName = ActionName.GoCQHTTP_HandleQuickOperation
|
||||
protected async _handle(payload: Payload): Promise<null> {
|
||||
handleQuickOperation(this.ctx, payload.context, payload.operation).catch(e => this.ctx.logger.error(e))
|
||||
|
@@ -3,7 +3,7 @@ import { OB11PostSendMsg } from '../../types'
|
||||
import { ActionName } from '../types'
|
||||
import { convertMessage2List } from '../../helper/createMessage'
|
||||
|
||||
export class GoCQHTTPSendForwardMsg extends SendMsg {
|
||||
export class SendForwardMsg extends SendMsg {
|
||||
actionName = ActionName.GoCQHTTP_SendForwardMsg
|
||||
|
||||
protected async check(payload: OB11PostSendMsg) {
|
||||
@@ -12,10 +12,10 @@ export class GoCQHTTPSendForwardMsg extends SendMsg {
|
||||
}
|
||||
}
|
||||
|
||||
export class GoCQHTTPSendPrivateForwardMsg extends GoCQHTTPSendForwardMsg {
|
||||
export class SendPrivateForwardMsg extends SendForwardMsg {
|
||||
actionName = ActionName.GoCQHTTP_SendPrivateForwardMsg
|
||||
}
|
||||
|
||||
export class GoCQHTTPSendGroupForwardMsg extends GoCQHTTPSendForwardMsg {
|
||||
export class SendGroupForwardMsg extends SendForwardMsg {
|
||||
actionName = ActionName.GoCQHTTP_SendGroupForwardMsg
|
||||
}
|
||||
|
@@ -6,7 +6,7 @@ interface Payload {
|
||||
message_id: number | string
|
||||
}
|
||||
|
||||
export default class GoCQHTTPSetEssenceMsg extends BaseAction<Payload, any> {
|
||||
export class SetEssenceMsg extends BaseAction<Payload, any> {
|
||||
actionName = ActionName.GoCQHTTP_SetEssenceMsg;
|
||||
|
||||
protected async _handle(payload: Payload): Promise<any> {
|
||||
|
@@ -16,7 +16,7 @@ interface Payload {
|
||||
folder_id?: string
|
||||
}
|
||||
|
||||
export class GoCQHTTPUploadGroupFile extends BaseAction<Payload, null> {
|
||||
export class UploadGroupFile extends BaseAction<Payload, null> {
|
||||
actionName = ActionName.GoCQHTTP_UploadGroupFile
|
||||
|
||||
protected async _handle(payload: Payload): Promise<null> {
|
||||
@@ -37,7 +37,7 @@ export class GoCQHTTPUploadGroupFile extends BaseAction<Payload, null> {
|
||||
}
|
||||
}
|
||||
|
||||
export class GoCQHTTPUploadPrivateFile extends BaseAction<Payload, null> {
|
||||
export class UploadPrivateFile extends BaseAction<Payload, null> {
|
||||
actionName = ActionName.GoCQHTTP_UploadPrivateFile
|
||||
|
||||
async getPeer(payload: Payload): Promise<Peer> {
|
||||
|
@@ -16,11 +16,11 @@ import CanSendRecord from './system/CanSendRecord'
|
||||
import CanSendImage from './system/CanSendImage'
|
||||
import GetStatus from './system/GetStatus'
|
||||
import {
|
||||
GoCQHTTPSendForwardMsg,
|
||||
GoCQHTTPSendGroupForwardMsg,
|
||||
GoCQHTTPSendPrivateForwardMsg,
|
||||
SendForwardMsg,
|
||||
SendGroupForwardMsg,
|
||||
SendPrivateForwardMsg,
|
||||
} from './go-cqhttp/SendForwardMsg'
|
||||
import GoCQHTTPGetStrangerInfo from './go-cqhttp/GetStrangerInfo'
|
||||
import { GetStrangerInfo } from './go-cqhttp/GetStrangerInfo'
|
||||
import SendLike from './user/SendLike'
|
||||
import SetGroupAddRequest from './group/SetGroupAddRequest'
|
||||
import SetGroupLeave from './group/SetGroupLeave'
|
||||
@@ -35,29 +35,30 @@ import SetGroupAdmin from './group/SetGroupAdmin'
|
||||
import SetGroupCard from './group/SetGroupCard'
|
||||
import GetImage from './file/GetImage'
|
||||
import GetRecord from './file/GetRecord'
|
||||
import GoCQHTTPMarkMsgAsRead from './msg/MarkMsgAsRead'
|
||||
import { MarkMsgAsRead } from './go-cqhttp/MarkMsgAsRead'
|
||||
import CleanCache from './system/CleanCache'
|
||||
import { GoCQHTTPUploadGroupFile, GoCQHTTPUploadPrivateFile } from './go-cqhttp/UploadFile'
|
||||
import { UploadGroupFile, UploadPrivateFile } from './go-cqhttp/UploadFile'
|
||||
import { GetConfigAction, SetConfigAction } from './llonebot/Config'
|
||||
import GetGroupAddRequest from './llonebot/GetGroupAddRequest'
|
||||
import SetQQAvatar from './llonebot/SetQQAvatar'
|
||||
import GoCQHTTPDownloadFile from './go-cqhttp/DownloadFile'
|
||||
import GoCQHTTPGetGroupMsgHistory from './go-cqhttp/GetGroupMsgHistory'
|
||||
import { DownloadFile } from './go-cqhttp/DownloadFile'
|
||||
import { GetGroupMsgHistory } from './go-cqhttp/GetGroupMsgHistory'
|
||||
import GetFile from './file/GetFile'
|
||||
import { GoCQHTTGetForwardMsgAction } from './go-cqhttp/GetForwardMsg'
|
||||
import { GetForwardMsg } from './go-cqhttp/GetForwardMsg'
|
||||
import { GetCookies } from './user/GetCookie'
|
||||
import { SetMsgEmojiLike } from './msg/SetMsgEmojiLike'
|
||||
import { ForwardFriendSingleMsg, ForwardGroupSingleMsg } from './msg/ForwardSingleMsg'
|
||||
import { GetGroupEssence } from './group/GetGroupEssence'
|
||||
import { GetGroupHonorInfo } from './group/GetGroupHonorInfo'
|
||||
import { GoCQHTTHandleQuickOperation } from './go-cqhttp/QuickOperation'
|
||||
import GoCQHTTPSetEssenceMsg from './go-cqhttp/SetEssenceMsg'
|
||||
import GoCQHTTPDelEssenceMsg from './go-cqhttp/DelEssenceMsg'
|
||||
import { HandleQuickOperation } from './go-cqhttp/QuickOperation'
|
||||
import { SetEssenceMsg } from './go-cqhttp/SetEssenceMsg'
|
||||
import { DelEssenceMsg } from './go-cqhttp/DelEssenceMsg'
|
||||
import GetEvent from './llonebot/GetEvent'
|
||||
import { GoCQHTTPDelGroupFile } from './go-cqhttp/DelGroupFile'
|
||||
import { GoCQHTTPGetGroupSystemMsg } from './go-cqhttp/GetGroupSystemMsg'
|
||||
import { GoCQHTTPCreateGroupFileFolder } from './go-cqhttp/CreateGroupFileFolder'
|
||||
import { GoCQHTTPDelGroupFolder } from './go-cqhttp/DelGroupFolder'
|
||||
import { DelGroupFile } from './go-cqhttp/DelGroupFile'
|
||||
import { GetGroupSystemMsg } from './go-cqhttp/GetGroupSystemMsg'
|
||||
import { CreateGroupFileFolder } from './go-cqhttp/CreateGroupFileFolder'
|
||||
import { DelGroupFolder } from './go-cqhttp/DelGroupFolder'
|
||||
import { GetGroupAtAllRemain } from './go-cqhttp/GetGroupAtAllRemain'
|
||||
|
||||
export function initActionMap(adapter: Adapter) {
|
||||
const actionHandlers = [
|
||||
@@ -105,24 +106,25 @@ export function initActionMap(adapter: Adapter) {
|
||||
//以下为go-cqhttp api
|
||||
new GetGroupEssence(adapter),
|
||||
new GetGroupHonorInfo(adapter),
|
||||
new GoCQHTTPSendForwardMsg(adapter),
|
||||
new GoCQHTTPSendGroupForwardMsg(adapter),
|
||||
new GoCQHTTPSendPrivateForwardMsg(adapter),
|
||||
new GoCQHTTPGetStrangerInfo(adapter),
|
||||
new GoCQHTTPDownloadFile(adapter),
|
||||
new SendForwardMsg(adapter),
|
||||
new SendGroupForwardMsg(adapter),
|
||||
new SendPrivateForwardMsg(adapter),
|
||||
new GetStrangerInfo(adapter),
|
||||
new DownloadFile(adapter),
|
||||
new GetGuildList(adapter),
|
||||
new GoCQHTTPMarkMsgAsRead(adapter),
|
||||
new GoCQHTTPUploadGroupFile(adapter),
|
||||
new GoCQHTTPUploadPrivateFile(adapter),
|
||||
new GoCQHTTPGetGroupMsgHistory(adapter),
|
||||
new GoCQHTTGetForwardMsgAction(adapter),
|
||||
new GoCQHTTHandleQuickOperation(adapter),
|
||||
new GoCQHTTPSetEssenceMsg(adapter),
|
||||
new GoCQHTTPDelEssenceMsg(adapter),
|
||||
new GoCQHTTPDelGroupFile(adapter),
|
||||
new GoCQHTTPGetGroupSystemMsg(adapter),
|
||||
new GoCQHTTPCreateGroupFileFolder(adapter),
|
||||
new GoCQHTTPDelGroupFolder(adapter)
|
||||
new MarkMsgAsRead(adapter),
|
||||
new UploadGroupFile(adapter),
|
||||
new UploadPrivateFile(adapter),
|
||||
new GetGroupMsgHistory(adapter),
|
||||
new GetForwardMsg(adapter),
|
||||
new HandleQuickOperation(adapter),
|
||||
new SetEssenceMsg(adapter),
|
||||
new DelEssenceMsg(adapter),
|
||||
new DelGroupFile(adapter),
|
||||
new GetGroupSystemMsg(adapter),
|
||||
new CreateGroupFileFolder(adapter),
|
||||
new DelGroupFolder(adapter),
|
||||
new GetGroupAtAllRemain(adapter)
|
||||
]
|
||||
const actionMap = new Map<string, BaseAction<any, any>>()
|
||||
for (const action of actionHandlers) {
|
||||
|
@@ -76,5 +76,6 @@ export enum ActionName {
|
||||
GoCQHTTP_DelGroupFile = 'delete_group_file',
|
||||
GoCQHTTP_GetGroupSystemMsg = 'get_group_system_msg',
|
||||
GoCQHTTP_CreateGroupFileFolder = 'create_group_file_folder',
|
||||
GoCQHTTP_DelGroupFolder = 'delete_group_folder'
|
||||
GoCQHTTP_DelGroupFolder = 'delete_group_folder',
|
||||
GoCQHTTP_GetGroupAtAllRemain = 'get_group_at_all_remain'
|
||||
}
|
||||
|
@@ -146,34 +146,31 @@ export namespace OB11Entities {
|
||||
message_data['data']['text'] = text
|
||||
}
|
||||
else if (element.replyElement) {
|
||||
message_data['type'] = OB11MessageDataType.reply
|
||||
const { replyElement } = element
|
||||
const peer = {
|
||||
chatType: msg.chatType,
|
||||
peerUid: msg.peerUid,
|
||||
guildId: ''
|
||||
}
|
||||
try {
|
||||
const records = msg.records.find(msgRecord => msgRecord.msgId === element.replyElement.sourceMsgIdInRecords)
|
||||
const records = msg.records.find(msgRecord => msgRecord.msgId === replyElement.sourceMsgIdInRecords)
|
||||
if (!records) throw new Error('找不到回复消息')
|
||||
let replyMsg = (await ctx.ntMsgApi.getMsgsBySeqAndCount({
|
||||
peerUid: msg.peerUid,
|
||||
guildId: '',
|
||||
chatType: msg.chatType,
|
||||
}, element.replyElement.replayMsgSeq, 1, true, true))?.msgList[0]
|
||||
let replyMsg = (await ctx.ntMsgApi.getMsgsBySeqAndCount(peer, replyElement.replayMsgSeq, 1, true, true)).msgList[0]
|
||||
if (!replyMsg || records.msgRandom !== replyMsg.msgRandom) {
|
||||
const peer = {
|
||||
chatType: msg.chatType,
|
||||
peerUid: msg.peerUid,
|
||||
guildId: '',
|
||||
}
|
||||
replyMsg = (await ctx.ntMsgApi.getSingleMsg(peer, element.replyElement.replayMsgSeq))?.msgList[0]
|
||||
replyMsg = (await ctx.ntMsgApi.getSingleMsg(peer, replyElement.replayMsgSeq)).msgList[0]
|
||||
}
|
||||
// 284840486: 合并消息内侧 消息具体定位不到
|
||||
if ((!replyMsg || records.msgRandom !== replyMsg.msgRandom) && msg.peerUin !== '284840486') {
|
||||
throw new Error('回复消息消息验证失败')
|
||||
}
|
||||
message_data['data']['id'] = replyMsg && MessageUnique.createMsg({
|
||||
peerUid: msg.peerUid,
|
||||
guildId: '',
|
||||
chatType: msg.chatType,
|
||||
}, replyMsg.msgId)?.toString()
|
||||
message_data = {
|
||||
type: OB11MessageDataType.reply,
|
||||
data: {
|
||||
id: MessageUnique.createMsg(peer, replyMsg ? replyMsg.msgId : records.msgId).toString()
|
||||
}
|
||||
}
|
||||
} catch (e: any) {
|
||||
ctx.logger.error('获取不到引用的消息', e.stack, element.replyElement.replayMsgSeq)
|
||||
ctx.logger.error('获取不到引用的消息', replyElement.replayMsgSeq, e.stack)
|
||||
continue
|
||||
}
|
||||
}
|
||||
|
@@ -54,7 +54,7 @@ export async function createSendElements(
|
||||
let isAdmin: boolean = true
|
||||
if (groupCode) {
|
||||
try {
|
||||
remainAtAllCount = (await ctx.ntGroupApi.getGroupAtAllRemainCount(groupCode)).atInfo
|
||||
remainAtAllCount = (await ctx.ntGroupApi.getGroupRemainAtTimes(groupCode)).atInfo
|
||||
.RemainAtAllCountForUin
|
||||
ctx.logger.info(`群${groupCode}剩余at全体次数`, remainAtAllCount)
|
||||
const self = await ctx.ntGroupApi.getGroupMember(groupCode, selfInfo.uin)
|
||||
|
@@ -1 +1 @@
|
||||
export const version = '3.31.2'
|
||||
export const version = '3.31.4'
|
||||
|
Reference in New Issue
Block a user