refactor: kill any ()

* refactor: kill any stage 1

* refactor: kill any stage 2

* refactor: kill any stage 3
This commit is contained in:
pk5ls20 2024-10-30 09:10:30 +08:00 committed by GitHub
parent 4d2fccdfb4
commit 9fa6083bed
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
16 changed files with 76 additions and 76 deletions

@ -9,6 +9,15 @@ interface InternalMapKey {
checker: ((...args: any[]) => boolean) | undefined; checker: ((...args: any[]) => boolean) | undefined;
} }
type EnsureFunc<T> = T extends (...args: any) => any ? T : never;
type FuncKeys<T> = Extract<
{
[K in keyof T]: EnsureFunc<T[K]> extends never ? never : K;
}[keyof T],
string
>;
export type ListenerClassBase = Record<string, string>; export type ListenerClassBase = Record<string, string>;
export class NTEventWrapper { export class NTEventWrapper {
@ -43,10 +52,8 @@ export class NTEventWrapper {
createEventFunction< createEventFunction<
Service extends keyof ServiceNamingMapping, Service extends keyof ServiceNamingMapping,
ServiceMethod extends Exclude<keyof ServiceNamingMapping[Service], symbol>, ServiceMethod extends FuncKeys<ServiceNamingMapping[Service]>,
// eslint-disable-next-line T extends (...args: any) => any = EnsureFunc<ServiceNamingMapping[Service][ServiceMethod]>,
// @ts-ignore
T extends (...args: any) => any = ServiceNamingMapping[Service][ServiceMethod],
>(eventName: `${Service}/${ServiceMethod}`): T | undefined { >(eventName: `${Service}/${ServiceMethod}`): T | undefined {
const eventNameArr = eventName.split('/'); const eventNameArr = eventName.split('/');
type eventType = { type eventType = {
@ -98,10 +105,8 @@ export class NTEventWrapper {
async callNoListenerEvent< async callNoListenerEvent<
Service extends keyof ServiceNamingMapping, Service extends keyof ServiceNamingMapping,
ServiceMethod extends Exclude<keyof ServiceNamingMapping[Service], symbol>, ServiceMethod extends FuncKeys<ServiceNamingMapping[Service]>,
// eslint-disable-next-line EventType extends (...args: any) => any = EnsureFunc<ServiceNamingMapping[Service][ServiceMethod]>,
// @ts-ignore
EventType extends (...args: any) => any = ServiceNamingMapping[Service][ServiceMethod],
>( >(
serviceAndMethod: `${Service}/${ServiceMethod}`, serviceAndMethod: `${Service}/${ServiceMethod}`,
...args: Parameters<EventType> ...args: Parameters<EventType>
@ -111,10 +116,8 @@ export class NTEventWrapper {
async registerListen< async registerListen<
Listener extends keyof ListenerNamingMapping, Listener extends keyof ListenerNamingMapping,
ListenerMethod extends Exclude<keyof ListenerNamingMapping[Listener], symbol>, ListenerMethod extends FuncKeys<ListenerNamingMapping[Listener]>,
// eslint-disable-next-line ListenerType extends (...args: any) => any = EnsureFunc<ListenerNamingMapping[Listener][ListenerMethod]>,
// @ts-ignore
ListenerType extends (...args: any) => any = ListenerNamingMapping[Listener][ListenerMethod],
>( >(
listenerAndMethod: `${Listener}/${ListenerMethod}`, listenerAndMethod: `${Listener}/${ListenerMethod}`,
waitTimes = 1, waitTimes = 1,
@ -164,15 +167,11 @@ export class NTEventWrapper {
async callNormalEventV2< async callNormalEventV2<
Service extends keyof ServiceNamingMapping, Service extends keyof ServiceNamingMapping,
ServiceMethod extends Exclude<keyof ServiceNamingMapping[Service], symbol>, ServiceMethod extends FuncKeys<ServiceNamingMapping[Service]>,
Listener extends keyof ListenerNamingMapping, Listener extends keyof ListenerNamingMapping,
ListenerMethod extends Exclude<keyof ListenerNamingMapping[Listener], symbol>, ListenerMethod extends FuncKeys<ListenerNamingMapping[Listener]>,
// eslint-disable-next-line EventType extends (...args: any) => any = EnsureFunc<ServiceNamingMapping[Service][ServiceMethod]>,
// @ts-ignore ListenerType extends (...args: any) => any = EnsureFunc<ListenerNamingMapping[Listener][ListenerMethod]>
EventType extends (...args: any) => any = ServiceNamingMapping[Service][ServiceMethod],
// eslint-disable-next-line
// @ts-ignore
ListenerType extends (...args: any) => any = ListenerNamingMapping[Listener][ListenerMethod]
>( >(
serviceAndMethod: `${Service}/${ServiceMethod}`, serviceAndMethod: `${Service}/${ServiceMethod}`,
listenerAndMethod: `${Listener}/${ListenerMethod}`, listenerAndMethod: `${Listener}/${ListenerMethod}`,

@ -52,7 +52,7 @@ export class FileNapCatOneBotUUID {
const [, , chatType, peerUid, modelId, fileId, fileUUID = undefined] = data; const [, , chatType, peerUid, modelId, fileId, fileUUID = undefined] = data;
return { return {
peer: { peer: {
chatType: chatType as any, chatType: +chatType,
peerUid: peerUid, peerUid: peerUid,
}, },
modelId, modelId,
@ -89,7 +89,7 @@ export class FileNapCatOneBotUUID {
const [, , chatType, peerUid, msgId, elementId, fileUUID = undefined] = data; const [, , chatType, peerUid, msgId, elementId, fileUUID = undefined] = data;
return { return {
peer: { peer: {
chatType: chatType as any, chatType: +chatType,
peerUid: peerUid, peerUid: peerUid,
}, },
msgId, msgId,

@ -23,10 +23,10 @@ export class LimitedHashTable<K, V> {
} }
while (this.keyToValue.size > this.maxSize || this.valueToKey.size > this.maxSize) { while (this.keyToValue.size > this.maxSize || this.valueToKey.size > this.maxSize) {
const oldestKey = this.keyToValue.keys().next().value; const oldestKey = this.keyToValue.keys().next().value;
// @ts-ignore if (oldestKey !== undefined) {
this.valueToKey.delete(this.keyToValue.get(oldestKey)!); this.valueToKey.delete(this.keyToValue.get(oldestKey) as V);
// @ts-ignore this.keyToValue.delete(oldestKey);
this.keyToValue.delete(oldestKey); }
} }
} }

@ -64,7 +64,7 @@ type ElementFullBase = Omit<MessageElement, 'elementType' | 'elementId' | 'extBu
type ElementBase< type ElementBase<
K extends keyof ElementFullBase, K extends keyof ElementFullBase,
S extends Partial<{ [P in K]: keyof NonNullable<ElementFullBase[P]> | Array<keyof NonNullable<ElementFullBase[P]>> }> = {} S extends Partial<{ [P in K]: keyof NonNullable<ElementFullBase[P]> | Array<keyof NonNullable<ElementFullBase[P]>> }> = object
> = { > = {
[P in K]: [P in K]:
S[P] extends Array<infer U> S[P] extends Array<infer U>

@ -140,7 +140,7 @@ export class NapCatCore {
}; };
//await sleep(2500); //await sleep(2500);
this.context.session.getMsgService().addKernelMsgListener( this.context.session.getMsgService().addKernelMsgListener(
proxiedListenerOf(msgListener, this.context.logger) as any, proxiedListenerOf(msgListener, this.context.logger),
); );
const profileListener = new NodeIKernelProfileListener(); const profileListener = new NodeIKernelProfileListener();
@ -236,7 +236,7 @@ export class NapCatCore {
} }
}; };
this.context.session.getGroupService().addKernelGroupListener( this.context.session.getGroupService().addKernelGroupListener(
proxiedListenerOf(groupListener, this.context.logger) as any, proxiedListenerOf(groupListener, this.context.logger),
); );
} }

@ -61,35 +61,35 @@ export function ProtoField(no: number, type: ScalarType | (() => ProtoMessageTyp
} }
} }
type ProtoFieldReturnType<T extends unknown, E extends boolean> = NonNullable<T> extends ScalarProtoFieldType<infer S, infer O, infer R> type ProtoFieldReturnType<T, E extends boolean> = NonNullable<T> extends ScalarProtoFieldType<infer S, infer O, infer R>
? ScalarTypeToTsType<S> ? ScalarTypeToTsType<S>
: T extends NonNullable<MessageProtoFieldType<infer S, infer O, infer R>> : T extends NonNullable<MessageProtoFieldType<infer S, infer O, infer R>>
? NonNullable<NapProtoStructType<ReturnType<S>, E>> ? NonNullable<NapProtoStructType<ReturnType<S>, E>>
: never; : never;
type RequiredFieldsBaseType<T extends unknown, E extends boolean> = { type RequiredFieldsBaseType<T, E extends boolean> = {
[K in keyof T as T[K] extends { optional: true } ? never : LowerCamelCase<K & string>]: [K in keyof T as T[K] extends { optional: true } ? never : LowerCamelCase<K & string>]:
T[K] extends { repeat: true } T[K] extends { repeat: true }
? ProtoFieldReturnType<T[K], E>[] ? ProtoFieldReturnType<T[K], E>[]
: ProtoFieldReturnType<T[K], E> : ProtoFieldReturnType<T[K], E>
} }
type OptionalFieldsBaseType<T extends unknown, E extends boolean> = { type OptionalFieldsBaseType<T, E extends boolean> = {
[K in keyof T as T[K] extends { optional: true } ? LowerCamelCase<K & string> : never]?: [K in keyof T as T[K] extends { optional: true } ? LowerCamelCase<K & string> : never]?:
T[K] extends { repeat: true } T[K] extends { repeat: true }
? ProtoFieldReturnType<T[K], E>[] ? ProtoFieldReturnType<T[K], E>[]
: ProtoFieldReturnType<T[K], E> : ProtoFieldReturnType<T[K], E>
} }
type RequiredFieldsType<T extends unknown, E extends boolean> = E extends true ? Partial<RequiredFieldsBaseType<T, E>> : RequiredFieldsBaseType<T, E>; type RequiredFieldsType<T, E extends boolean> = E extends true ? Partial<RequiredFieldsBaseType<T, E>> : RequiredFieldsBaseType<T, E>;
type OptionalFieldsType<T extends unknown, E extends boolean> = E extends true ? Partial<OptionalFieldsBaseType<T, E>> : OptionalFieldsBaseType<T, E>; type OptionalFieldsType<T, E extends boolean> = E extends true ? Partial<OptionalFieldsBaseType<T, E>> : OptionalFieldsBaseType<T, E>;
type NapProtoStructType<T extends unknown, E extends boolean> = RequiredFieldsType<T, E> & OptionalFieldsType<T, E>; type NapProtoStructType<T, E extends boolean> = RequiredFieldsType<T, E> & OptionalFieldsType<T, E>;
export type NapProtoEncodeStructType<T extends unknown> = NapProtoStructType<T, true>; export type NapProtoEncodeStructType<T> = NapProtoStructType<T, true>;
export type NapProtoDecodeStructType<T extends unknown> = NapProtoStructType<T, false>; export type NapProtoDecodeStructType<T> = NapProtoStructType<T, false>;
const NapProtoMsgCache = new Map<ProtoMessageType, MessageType<NapProtoStructType<ProtoMessageType, boolean>>>(); const NapProtoMsgCache = new Map<ProtoMessageType, MessageType<NapProtoStructType<ProtoMessageType, boolean>>>();

@ -111,7 +111,7 @@ export interface NodeIKernelGroupService {
} }
}>; }>;
setHeader(uid: string, path: string): unknown; setHeader(uid: string, path: string): Promise<GeneralCallResult>;
addKernelGroupListener(listener: NodeIKernelGroupListener): number; addKernelGroupListener(listener: NodeIKernelGroupListener): number;

@ -41,7 +41,7 @@ export async function NCoreInitFramework(
online: true, online: true,
}); });
}; };
loginService.addKernelLoginListener(proxiedListenerOf(loginListener, logger) as any); loginService.addKernelLoginListener(proxiedListenerOf(loginListener, logger));
}); });
// 过早进入会导致addKernelMsgListener等Listener添加失败 // 过早进入会导致addKernelMsgListener等Listener添加失败
// await sleep(2500); // await sleep(2500);

@ -38,11 +38,10 @@ export default class SetAvatar extends BaseAction<Payload, null> {
throw `头像${payload.file}设置失败,api无返回`; throw `头像${payload.file}设置失败,api无返回`;
} }
// log(`头像设置返回:${JSON.stringify(ret)}`) // log(`头像设置返回:${JSON.stringify(ret)}`)
// @ts-ignore if (ret.result as number == 1004022) {
if (ret['result'] == 1004022) {
throw `头像${payload.file}设置失败,文件可能不是图片格式`; throw `头像${payload.file}设置失败,文件可能不是图片格式`;
} else if (ret['result'] != 0) { } else if (ret.result != 0) {
throw `头像${payload.file}设置失败,未知的错误,${ret['result']}:${ret['errMsg']}`; throw `头像${payload.file}设置失败,未知的错误,${ret.result}:${ret.errMsg}`;
} }
} else { } else {
fs.unlink(path, () => { }); fs.unlink(path, () => { });

@ -31,15 +31,15 @@ export default class SetGroupPortrait extends BaseAction<Payload, any> {
} }
if (path) { if (path) {
await checkFileReceived(path, 5000); // 文件不存在QQ会崩溃需要提前判断 await checkFileReceived(path, 5000); // 文件不存在QQ会崩溃需要提前判断
const ret = await this.core.apis.GroupApi.setGroupAvatar(payload.group_id.toString(), path) as any; const ret = await this.core.apis.GroupApi.setGroupAvatar(payload.group_id.toString(), path);
fs.unlink(path, () => { }); fs.unlink(path, () => { });
if (!ret) { if (!ret) {
throw `头像${payload.file}设置失败,api无返回`; throw `头像${payload.file}设置失败,api无返回`;
} }
if (ret['result'] == 1004022) { if (ret.result as number == 1004022) {
throw `头像${payload.file}设置失败,文件可能不是图片格式或权限不足`; throw `头像${payload.file}设置失败,文件可能不是图片格式或权限不足`;
} else if (ret['result'] != 0) { } else if (ret.result != 0) {
throw `头像${payload.file}设置失败,未知的错误,${ret['result']}:${ret['errMsg']}`; throw `头像${payload.file}设置失败,未知的错误,${ret.result}:${ret.errMsg}`;
} }
return ret; return ret;
} else { } else {

@ -236,12 +236,11 @@ export class SendMsg extends BaseAction<OB11PostSendMsg, ReturnDataType> {
message: RawMessage | null, message: RawMessage | null,
res_id?: string res_id?: string
}> { }> {
let returnMsg: RawMessage | undefined, res_id: string | undefined;
const uploadReturnData = await this.uploadForwardedNodesPacket(msgPeer, messageNodes, source, news, summary, prompt); const uploadReturnData = await this.uploadForwardedNodesPacket(msgPeer, messageNodes, source, news, summary, prompt);
res_id = uploadReturnData?.res_id; const res_id = uploadReturnData?.res_id;
const finallySendElements = uploadReturnData?.finallySendElements; const finallySendElements = uploadReturnData?.finallySendElements;
if (!finallySendElements) throw Error('转发消息失败,生成节点为空'); if (!finallySendElements) throw Error('转发消息失败,生成节点为空');
returnMsg = await this.obContext.apis.MsgApi.sendMsgWithOb11UniqueId(msgPeer, [finallySendElements], [], true).catch(_ => undefined); const returnMsg = await this.obContext.apis.MsgApi.sendMsgWithOb11UniqueId(msgPeer, [finallySendElements], [], true).catch(_ => undefined);
return { message: returnMsg ?? null, res_id }; return { message: returnMsg ?? null, res_id };
} }
@ -276,7 +275,6 @@ export class SendMsg extends BaseAction<OB11PostSendMsg, ReturnDataType> {
logger.logError.bind(this.core.context.logger)('子消息中包含非node消息 跳过不合法部分'); logger.logError.bind(this.core.context.logger)('子消息中包含非node消息 跳过不合法部分');
continue; continue;
} }
// @ts-ignore
const nodeMsg = await this.handleForwardedNodes(selfPeer, OB11Data.filter(e => e.type === OB11MessageDataType.node)); const nodeMsg = await this.handleForwardedNodes(selfPeer, OB11Data.filter(e => e.type === OB11MessageDataType.node));
if (nodeMsg) { if (nodeMsg) {
nodeMsgIds.push(nodeMsg.message!.msgId); nodeMsgIds.push(nodeMsg.message!.msgId);

@ -24,7 +24,6 @@ import {
OB11MessageData, OB11MessageData,
OB11MessageDataType, OB11MessageDataType,
OB11MessageFileBase, OB11MessageFileBase,
OB11MessageForward,
} from '@/onebot'; } from '@/onebot';
import { OB11Entities } from '@/onebot/entities'; import { OB11Entities } from '@/onebot/entities';
import { EventType } from '@/onebot/event/OB11BaseEvent'; import { EventType } from '@/onebot/event/OB11BaseEvent';
@ -327,11 +326,11 @@ export class OneBotMsgApi {
}, },
multiForwardMsgElement: async (_, msg) => { multiForwardMsgElement: async (_, msg) => {
const message_data: OB11MessageForward = { // const message_data: OB11MessageForward = {
data: {} as any, // data: {} as any,
type: OB11MessageDataType.forward, // type: OB11MessageDataType.forward,
}; // };
message_data.data.id = msg.msgId; // message_data.data.id = msg.msgId;
const parentMsgPeer = msg.parentMsgPeer ?? { const parentMsgPeer = msg.parentMsgPeer ?? {
chatType: msg.chatType, chatType: msg.chatType,
guildId: '', guildId: '',
@ -743,9 +742,12 @@ export class OneBotMsgApi {
async (element) => { async (element) => {
for (const key in element) { for (const key in element) {
if (keyCanBeParsed(key, this.rawToOb11Converters) && element[key]) { if (keyCanBeParsed(key, this.rawToOb11Converters) && element[key]) {
const parsedElement = await this.rawToOb11Converters[key]?.( const converters = this.rawToOb11Converters[key] as (
// eslint-disable-next-line element: Exclude<MessageElement[keyof RawToOb11Converters], null | undefined>,
// @ts-ignore msg: RawMessage,
elementWrapper: MessageElement,
) => PromiseLike<OB11MessageData | null>;
const parsedElement = await converters?.(
element[key], element[key],
msg, msg,
element, element,
@ -794,9 +796,11 @@ export class OneBotMsgApi {
if (ignoreTypes.includes(sendMsg.type)) { if (ignoreTypes.includes(sendMsg.type)) {
continue; continue;
} }
const callResult = this.ob11ToRawConverters[sendMsg.type]( const converter = this.ob11ToRawConverters[sendMsg.type] as (
// eslint-disable-next-line sendMsg: Extract<OB11MessageData, { type: OB11MessageData['type'] }>,
// @ts-ignore context: MessageContext,
) => Promise<SendMessageElement | undefined>;
const callResult = converter(
sendMsg, sendMsg,
{ peer, deleteAfterSentFiles }, { peer, deleteAfterSentFiles },
)?.catch(undefined); )?.catch(undefined);

@ -68,13 +68,13 @@ export function encodeCQCode(data: OB11MessageData) {
let result = '[CQ:' + data.type; let result = '[CQ:' + data.type;
for (const name in data.data) { for (const name in data.data) {
const value = (data.data as any)[name]; const value = (data.data as Record<string, unknown>)[name];
if (value === undefined) { if (value === undefined) {
continue; continue;
} }
try { try {
const text = value.toString(); const text = value?.toString();
result += `,${name}=${CQCodeEscape(text)}`; if (text) result += `,${name}=${CQCodeEscape(text)}`;
} catch (error) { } catch (error) {
// If it can't be converted, skip this name-value pair // If it can't be converted, skip this name-value pair
} }

@ -341,7 +341,7 @@ export class NapCatOneBot11Adapter {
}; };
this.context.session.getMsgService().addKernelMsgListener( this.context.session.getMsgService().addKernelMsgListener(
proxiedListenerOf(msgListener, this.context.logger) as any, proxiedListenerOf(msgListener, this.context.logger),
); );
} }
@ -370,7 +370,7 @@ export class NapCatOneBot11Adapter {
}; };
this.context.session.getBuddyService().addKernelBuddyListener( this.context.session.getBuddyService().addKernelBuddyListener(
proxiedListenerOf(buddyListener, this.context.logger) as any, proxiedListenerOf(buddyListener, this.context.logger),
); );
} }

@ -64,9 +64,9 @@ export class OB11PassiveHttpAdapter implements IOB11NetworkAdapter {
}); });
this.app.use((req, res, next) => this.authorize(this.token, req, res, next)); this.app.use((req, res, next) => this.authorize(this.token, req, res, next));
// @ts-ignore this.app.use(async (req, res, _) => {
this.app.use((req, res) => this.handleRequest(req, res)); await this.handleRequest(req, res);
});
this.server.listen(this.port, () => { this.server.listen(this.port, () => {
this.core.context.logger.log(`[OneBot] [HTTP Server Adapter] Start On Port ${this.port}`); this.core.context.logger.log(`[OneBot] [HTTP Server Adapter] Start On Port ${this.port}`);
}); });

@ -165,7 +165,7 @@ export async function NCoreInitShell() {
logger.logError.bind(logger)('[Core] [Login] Login Error , ErrInfo: ', args); logger.logError.bind(logger)('[Core] [Login] Login Error , ErrInfo: ', args);
}; };
loginService.addKernelLoginListener(proxiedListenerOf(loginListener, logger) as any); loginService.addKernelLoginListener(proxiedListenerOf(loginListener, logger));
const isConnect = loginService.connect(); const isConnect = loginService.connect();
if (!isConnect) { if (!isConnect) {
logger.logError.bind(logger)('核心登录服务连接失败!'); logger.logError.bind(logger)('核心登录服务连接失败!');