import { Message } from './CQHelper'; import { HttpPlugin } from './HttpPlugin'; import { HistoryMessage } from './Session'; declare type OrPromise = T | Promise; export declare enum Scope { user = "user", group = "group", both = "both" } export declare enum TriggerType { at = "at", noAt = "noAt", both = "both" } export declare enum TriggerScope { 'all' = 7, 'owner' = 4, 'admin' = 2, 'member' = 1 } export declare enum MessageFromType { 'userFriend' = "userFriend", 'userGroup' = "userGroup", 'userOther' = "userOther", 'qqGroupNormal' = "qqGroupNormal", 'qqGroupAnonymous' = "qqGroupAnonymous", 'unknown' = "unknown" } export interface RequestIdentity { robot: number; messageFromType: MessageFromType; fromUser: number | AnonymousUser; fromGroup: number | undefined; } export interface AnonymousUser { id: number; name: string; flag: string; } export interface UserMessageInfo extends RequestIdentity { messageFromType: MessageFromType.userFriend | MessageFromType.userGroup | MessageFromType.userOther; fromUser: number; fromGroup: undefined; } export interface QQGroupNormalMessageInfo extends RequestIdentity { messageFromType: MessageFromType.qqGroupNormal; fromUser: number; fromGroup: number; } export interface QQGroupAnonymousMessageInfo extends RequestIdentity { messageFromType: MessageFromType.qqGroupAnonymous; fromUser: AnonymousUser; fromGroup: number; } interface BaseParams { message: Message[]; rawMessage: string; requestBody: any; } declare type SetNextFn = (sessionFunctionName: string, expireSeconds?: number) => Promise; declare type SetEndFn = () => Promise; export interface ParseParams extends BaseParams, RequestIdentity { } export declare type ParseReturn = any; interface HandlerBaseParams extends BaseParams { setNext: SetNextFn; } export interface UserHandlerParams extends HandlerBaseParams, UserMessageInfo { data: D; } interface GroupHandlerBaseParams extends HandlerBaseParams { isAt: boolean; data: D; } export declare type GroupHandlerParams = GroupHandlerBaseParams & (QQGroupAnonymousMessageInfo | QQGroupNormalMessageInfo); export interface BothHandlerParams extends HandlerBaseParams, RequestIdentity { data: D; } export interface SessionHandlerParams extends HandlerBaseParams { setEnd: SetEndFn; historyMessage: HistoryMessage; } export declare type HandlerReturn = { atSender: boolean; content: string; } | string[] | string | void; export declare type UserHandlerReturn = HandlerReturn; export declare type GroupHandlerReturn = HandlerReturn; export declare type BothHandlerReturn = HandlerReturn; export declare type SessionHandlerReturn = HandlerReturn; export declare abstract class Command { static blackList: string[]; scope: Scope; directives: string[]; context: C; httpPlugin: HttpPlugin; includeGroup?: number[]; excludeGroup?: number[]; includeUser?: number[]; excludeUser?: number[]; triggerType?: TriggerType; triggerScope?: TriggerScope; constructor(); static validate(cmd: Command): void; directive?(): string[]; parse?(params: ParseParams): OrPromise; user?(params: UserHandlerParams): OrPromise; group?(params: GroupHandlerParams): OrPromise; both?(params: BothHandlerParams): OrPromise; } export declare function include(include: number[]): (proto: any, name: any, descriptor: any) => void; export declare function exclude(exclude: number[]): (proto: any, name: any, descriptor: any) => void; export declare function trigger(type: TriggerType): (proto: any, name: any, descriptor: any) => void; export declare function scope(role: TriggerScope): (proto: any, name: any, descriptor: any) => void; declare type HandlerParams = UserHandlerParams | GroupHandlerParams | BothHandlerParams; export declare function fromUserMessage(p: HandlerParams): p is UserHandlerParams; export declare function fromQQGroupMessage(p: HandlerParams): p is GroupHandlerBaseParams & (QQGroupNormalMessageInfo | QQGroupAnonymousMessageInfo); export declare function fromQQGroupNormalMessage(p: HandlerParams): p is GroupHandlerBaseParams & QQGroupNormalMessageInfo; export declare function fromQQGroupAnonymousMessage(p: HandlerParams): p is GroupHandlerBaseParams & QQGroupAnonymousMessageInfo; export {};