onebots 0.4.23 → 0.4.25

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (77) hide show
  1. package/README.md +25 -3
  2. package/lib/adapter.d.ts +55 -0
  3. package/lib/adapter.js +60 -0
  4. package/lib/adapters/icqq/index.d.ts +36 -0
  5. package/lib/adapters/icqq/index.js +300 -0
  6. package/lib/adapters/qq/bot.d.ts +24 -0
  7. package/lib/adapters/qq/bot.js +20 -0
  8. package/lib/adapters/qq/constans.d.ts +69 -0
  9. package/lib/adapters/qq/constans.js +128 -0
  10. package/lib/adapters/qq/elements.d.ts +125 -0
  11. package/lib/adapters/qq/elements.js +8 -0
  12. package/lib/adapters/qq/entries/channel.d.ts +17 -0
  13. package/lib/adapters/qq/entries/channel.js +2 -0
  14. package/lib/adapters/qq/entries/friend.d.ts +8 -0
  15. package/lib/adapters/qq/entries/friend.js +2 -0
  16. package/lib/adapters/qq/entries/group.d.ts +6 -0
  17. package/lib/adapters/qq/entries/group.js +2 -0
  18. package/lib/adapters/qq/entries/groupMember.d.ts +7 -0
  19. package/lib/adapters/qq/entries/groupMember.js +2 -0
  20. package/lib/adapters/qq/entries/guild.d.ts +21 -0
  21. package/lib/adapters/qq/entries/guild.js +2 -0
  22. package/lib/adapters/qq/entries/guildMember.d.ts +9 -0
  23. package/lib/adapters/qq/entries/guildMember.js +2 -0
  24. package/lib/adapters/qq/entries/user.d.ts +9 -0
  25. package/lib/adapters/qq/entries/user.js +2 -0
  26. package/lib/adapters/qq/event.d.ts +28 -0
  27. package/lib/adapters/qq/event.js +24 -0
  28. package/lib/adapters/qq/index.d.ts +35 -0
  29. package/lib/adapters/qq/index.js +170 -0
  30. package/lib/adapters/qq/message.d.ts +83 -0
  31. package/lib/adapters/qq/message.js +272 -0
  32. package/lib/adapters/qq/qqBot.d.ts +122 -0
  33. package/lib/adapters/qq/qqBot.js +438 -0
  34. package/lib/adapters/qq/sessionManager.d.ts +33 -0
  35. package/lib/adapters/qq/sessionManager.js +257 -0
  36. package/lib/adapters/qq/types.d.ts +45 -0
  37. package/lib/adapters/qq/types.js +2 -0
  38. package/lib/adapters/qq/utils.d.ts +12 -0
  39. package/lib/adapters/qq/utils.js +86 -0
  40. package/lib/bin.js +17 -2
  41. package/lib/config.sample.yaml +11 -5
  42. package/lib/onebot.d.ts +32 -24
  43. package/lib/onebot.js +51 -188
  44. package/lib/server/app.d.ts +22 -12
  45. package/lib/server/app.js +97 -71
  46. package/lib/service/V11/action/common.d.ts +9 -11
  47. package/lib/service/V11/action/common.js +27 -64
  48. package/lib/service/V11/action/friend.d.ts +5 -13
  49. package/lib/service/V11/action/friend.js +6 -16
  50. package/lib/service/V11/action/group.d.ts +19 -22
  51. package/lib/service/V11/action/group.js +20 -30
  52. package/lib/service/V11/action/index.d.ts +1 -1
  53. package/lib/service/V11/db_entities.d.ts +1 -1
  54. package/lib/service/V11/db_entities.js +1 -1
  55. package/lib/service/V11/db_sqlite.d.ts +1 -1
  56. package/lib/service/V11/index.d.ts +47 -16
  57. package/lib/service/V11/index.js +142 -164
  58. package/lib/service/V12/action/common.d.ts +3 -67
  59. package/lib/service/V12/action/common.js +9 -63
  60. package/lib/service/V12/action/friend.d.ts +4 -10
  61. package/lib/service/V12/action/friend.js +4 -12
  62. package/lib/service/V12/action/group.d.ts +19 -21
  63. package/lib/service/V12/action/group.js +19 -27
  64. package/lib/service/V12/action/guild.d.ts +40 -13
  65. package/lib/service/V12/action/guild.js +99 -11
  66. package/lib/service/V12/action/index.d.ts +1 -1
  67. package/lib/service/V12/index.d.ts +37 -13
  68. package/lib/service/V12/index.js +44 -72
  69. package/lib/service.d.ts +7 -2
  70. package/lib/service.js +32 -30
  71. package/lib/utils.d.ts +7 -4
  72. package/lib/utils.js +33 -28
  73. package/package.json +5 -4
  74. package/lib/service/V12/utils.d.ts +0 -8
  75. package/lib/service/V12/utils.js +0 -47
  76. /package/lib/{service/V11 → adapters/icqq}/utils.d.ts +0 -0
  77. /package/lib/{service/V11 → adapters/icqq}/utils.js +0 -0
@@ -0,0 +1,83 @@
1
+ import { MessageElem, Quotable, Sendable } from "./elements";
2
+ import { QQBot } from "./qqBot";
3
+ import { Dict } from "./types";
4
+ import { Bot } from "./bot";
5
+ export declare class Message {
6
+ bot: Bot;
7
+ sub_type: Message.SubType;
8
+ get self_id(): string;
9
+ guild_id?: string;
10
+ channel_id?: string;
11
+ group_id?: string;
12
+ message_id: string;
13
+ sender: Message.Sender;
14
+ user_id: string;
15
+ constructor(bot: Bot, attrs: Partial<Message>);
16
+ raw_message: string;
17
+ message_reference?: {
18
+ message_id: string;
19
+ };
20
+ message: Sendable;
21
+ get [Symbol.unscopables](): {
22
+ bot: boolean;
23
+ };
24
+ toJSON(): {
25
+ [k: string]: any;
26
+ };
27
+ }
28
+ export interface MessageEvent {
29
+ reply(message: Sendable, quote?: boolean): Promise<any>;
30
+ }
31
+ export declare class PrivateMessageEvent extends Message implements MessageEvent {
32
+ constructor(bot: Bot, payload: Partial<Message>);
33
+ reply(message: Sendable): Promise<{
34
+ message_id: string;
35
+ timestamp: number;
36
+ }>;
37
+ }
38
+ export declare class GroupMessageEvent extends Message implements MessageEvent {
39
+ group_id: string;
40
+ group_name: string;
41
+ constructor(bot: Bot, payload: Partial<Message>);
42
+ reply(message: Sendable): Promise<{
43
+ message_id: string;
44
+ timestamp: number;
45
+ }>;
46
+ }
47
+ export declare class DirectMessageEvent extends Message implements MessageEvent {
48
+ user_id: string;
49
+ channel_id: string;
50
+ constructor(bot: Bot, payload: Partial<Message>);
51
+ reply(message: Sendable): Promise<{
52
+ message_id: string;
53
+ timestamp: number;
54
+ }>;
55
+ }
56
+ export declare class GuildMessageEvent extends Message implements MessageEvent {
57
+ guild_id: string;
58
+ guild_name: string;
59
+ channel_id: string;
60
+ channel_name: string;
61
+ constructor(bot: Bot, payload: Partial<Message>);
62
+ asAnnounce(): Promise<any>;
63
+ pin(): Promise<any>;
64
+ reply(message: Sendable): Promise<{
65
+ message_id: string;
66
+ timestamp: number;
67
+ }>;
68
+ }
69
+ export declare namespace Message {
70
+ interface Sender {
71
+ user_id: string;
72
+ user_name: string;
73
+ }
74
+ type SubType = 'private' | 'group' | 'guild' | 'direct';
75
+ function parse(this: QQBot, payload: Dict): (string | MessageElem[])[];
76
+ function format(this: QQBot, message: Sendable, source?: Quotable): Promise<{
77
+ messages: Dict;
78
+ hasFiles: boolean;
79
+ hasMessages: boolean;
80
+ brief: string;
81
+ files: Dict;
82
+ }>;
83
+ }
@@ -0,0 +1,272 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.GuildMessageEvent = exports.DirectMessageEvent = exports.GroupMessageEvent = exports.PrivateMessageEvent = exports.Message = void 0;
4
+ const qqBot_1 = require("./qqBot");
5
+ const utils_1 = require("./utils");
6
+ const crypto_1 = require("crypto");
7
+ class Message {
8
+ get self_id() {
9
+ return this.bot.self_id;
10
+ }
11
+ constructor(bot, attrs) {
12
+ this.bot = bot;
13
+ Object.assign(this, attrs);
14
+ }
15
+ get [Symbol.unscopables]() {
16
+ return {
17
+ bot: true
18
+ };
19
+ }
20
+ toJSON() {
21
+ return Object.fromEntries(Object.keys(this)
22
+ .filter(key => {
23
+ return typeof this[key] !== "function" && !(this[key] instanceof qqBot_1.QQBot);
24
+ })
25
+ .map(key => [key, this[key]]));
26
+ }
27
+ }
28
+ exports.Message = Message;
29
+ class PrivateMessageEvent extends Message {
30
+ constructor(bot, payload) {
31
+ super(bot, payload);
32
+ this.sub_type = 'private';
33
+ }
34
+ async reply(message) {
35
+ return this.bot.sendPrivateMessage(this.user_id, message, this);
36
+ }
37
+ }
38
+ exports.PrivateMessageEvent = PrivateMessageEvent;
39
+ class GroupMessageEvent extends Message {
40
+ constructor(bot, payload) {
41
+ super(bot, payload);
42
+ this.sub_type = 'group';
43
+ }
44
+ async reply(message) {
45
+ return this.bot.sendGroupMessage(this.group_id, message, this);
46
+ }
47
+ }
48
+ exports.GroupMessageEvent = GroupMessageEvent;
49
+ class DirectMessageEvent extends Message {
50
+ constructor(bot, payload) {
51
+ super(bot, payload);
52
+ this.sub_type = 'direct';
53
+ }
54
+ reply(message) {
55
+ return this.bot.sendDirectMessage(this.guild_id, message, this);
56
+ }
57
+ }
58
+ exports.DirectMessageEvent = DirectMessageEvent;
59
+ class GuildMessageEvent extends Message {
60
+ constructor(bot, payload) {
61
+ super(bot, payload);
62
+ this.sub_type = 'guild';
63
+ }
64
+ async asAnnounce() {
65
+ return this.bot.setChannelAnnounce(this.guild_id, this.channel_id, this.message_id);
66
+ }
67
+ async pin() {
68
+ return this.bot.pinChannelMessage(this.channel_id, this.message_id);
69
+ }
70
+ async reply(message) {
71
+ return this.bot.sendGuildMessage(this.channel_id, message, this);
72
+ }
73
+ }
74
+ exports.GuildMessageEvent = GuildMessageEvent;
75
+ (function (Message) {
76
+ function parse(payload) {
77
+ let template = payload.content || '';
78
+ let result = [];
79
+ let brief = '';
80
+ // 1. 处理文字表情混排
81
+ const regex = /("[^"]*?"|'[^']*?'|`[^`]*?`|“[^”]*?”|‘[^’]*?’|<[^>]+?>)/;
82
+ while (template.length) {
83
+ const [match] = template.match(regex) || [];
84
+ if (!match)
85
+ break;
86
+ const index = template.indexOf(match);
87
+ const prevText = template.slice(0, index);
88
+ if (prevText) {
89
+ result.push({
90
+ type: 'text',
91
+ text: prevText
92
+ });
93
+ brief += prevText;
94
+ }
95
+ template = template.slice(index + match.length);
96
+ if (match.startsWith('<')) {
97
+ let [type, ...attrs] = match.slice(1, -1).split(',');
98
+ if (type.startsWith('faceType')) {
99
+ type = 'face';
100
+ attrs = attrs.map((attr) => attr.replace('faceId', 'id'));
101
+ }
102
+ else if (type.startsWith('@')) {
103
+ if (type.startsWith('@!')) {
104
+ const id = type.slice(2);
105
+ type = 'at';
106
+ attrs = Object.entries(payload.mentions.find((u) => u.id === id) || {})
107
+ .map(([key, value]) => `${key}=${value}`);
108
+ }
109
+ else if (type === '@everyone') {
110
+ type = 'at';
111
+ attrs = [['all', true]];
112
+ }
113
+ }
114
+ else if (/^[a-z]+:[0-9]+$/.test(type)) {
115
+ attrs = [['id', type.split(':')[1]]];
116
+ type = 'face';
117
+ }
118
+ result.push({
119
+ type,
120
+ ...Object.fromEntries(attrs.map((attr) => {
121
+ const [key, ...values] = attr.split('=');
122
+ return [key.toLowerCase(), (0, utils_1.trimQuote)(values.join('='))];
123
+ }))
124
+ });
125
+ brief += `<${type}:${attrs.join(',')}>`;
126
+ }
127
+ }
128
+ if (template) {
129
+ result.push({
130
+ type: 'text',
131
+ text: template
132
+ });
133
+ brief += template;
134
+ }
135
+ // 2. 将附件添加到消息中
136
+ if (payload.attachments) {
137
+ for (const attachment of payload.attachments) {
138
+ let { content_type, ...data } = attachment;
139
+ const [type] = content_type.split('/');
140
+ result.push({
141
+ type,
142
+ ...data,
143
+ src: data.src || data.url,
144
+ url: data.url || data.src
145
+ });
146
+ brief += `<$${type},${Object.entries(data).map(([key, value]) => `${key}=${value}`).join(',')}>`;
147
+ }
148
+ }
149
+ delete payload.attachments;
150
+ delete payload.mentions;
151
+ return [result, brief];
152
+ }
153
+ Message.parse = parse;
154
+ async function format(message, source = {}) {
155
+ const getType = (type) => {
156
+ return ['image', 'video', 'audio'].indexOf(type) + 1;
157
+ };
158
+ let brief = '';
159
+ const messages = {
160
+ msg_type: 0,
161
+ content: '',
162
+ msg_id: source?.message_id,
163
+ msg_seq: (0, crypto_1.randomInt)(1, 1000000),
164
+ timestamp: Number((Date.now() / 1000).toFixed(0))
165
+ };
166
+ const files = {
167
+ msg_id: source?.message_id,
168
+ msg_seq: (0, crypto_1.randomInt)(1, 1000000),
169
+ timestamp: Number((Date.now() / 1000).toFixed(0))
170
+ };
171
+ let hasMessages = false, hasFiles = false, buttons = [];
172
+ if (!Array.isArray(message))
173
+ message = [message];
174
+ for (let elem of message) {
175
+ if (typeof elem === 'string') {
176
+ elem = { type: 'text', text: elem };
177
+ }
178
+ switch (elem.type) {
179
+ case 'reply':
180
+ messages.msg_id = elem.message_id;
181
+ files.msg_id = elem.message_id;
182
+ brief += `<$reply,message_id=${elem.message_id}>`;
183
+ break;
184
+ case "at":
185
+ if (messages.content) {
186
+ messages.content += `<@${elem.id || 'everyone'}>`;
187
+ }
188
+ else {
189
+ messages.content = `<@${elem.id || 'everyone'}>`;
190
+ }
191
+ brief += `<$at,user=${elem.id || 'everyone'}>`;
192
+ break;
193
+ case 'link':
194
+ if (messages.content) {
195
+ messages.content += `<#${elem.channel_id}>`;
196
+ }
197
+ else {
198
+ messages.content = `<#${elem.channel_id}>`;
199
+ }
200
+ brief += `<$link,channel=${elem.channel_id}>`;
201
+ break;
202
+ case 'text':
203
+ if (messages.content) {
204
+ messages.content += elem.text;
205
+ }
206
+ else {
207
+ messages.content = elem.text;
208
+ }
209
+ hasMessages = true;
210
+ brief += elem.text;
211
+ break;
212
+ case 'face':
213
+ if (messages.content) {
214
+ messages.content += `<emoji:${elem.id}>`;
215
+ }
216
+ else {
217
+ messages.content = `<emoji:${elem.id}>`;
218
+ }
219
+ brief += `<$face,id=${elem.id}>`;
220
+ hasMessages = true;
221
+ break;
222
+ case 'image':
223
+ case 'audio':
224
+ case 'video':
225
+ files.file_type = getType(elem.type);
226
+ files.content = 'file';
227
+ files.url = elem.file;
228
+ files.event_id = source.event_id;
229
+ files.msg_id = source?.message_id;
230
+ files.srv_send_msg = true;
231
+ hasFiles = true;
232
+ brief += `<${elem.type},file=${elem.file}>`;
233
+ break;
234
+ case 'markdown':
235
+ messages.markdown = {
236
+ content: elem.content
237
+ };
238
+ messages.msg_type = 2;
239
+ hasMessages = true;
240
+ brief += `<#markdown,content=${elem.content}>`;
241
+ break;
242
+ case 'button':
243
+ buttons.push(elem.data);
244
+ brief += `<$button,data=${JSON.stringify(elem.data)}>`;
245
+ break;
246
+ }
247
+ }
248
+ if (buttons.length) {
249
+ const rows = [];
250
+ for (let i = 0; i < buttons.length; i += 4) {
251
+ rows.push(buttons.slice(i, i + 4));
252
+ }
253
+ messages.keyboard = {
254
+ content: {
255
+ rows: rows.map(row => {
256
+ return {
257
+ buttons: row
258
+ };
259
+ })
260
+ }
261
+ };
262
+ }
263
+ return {
264
+ messages: messages,
265
+ hasFiles,
266
+ hasMessages,
267
+ brief,
268
+ files
269
+ };
270
+ }
271
+ Message.format = format;
272
+ })(Message || (exports.Message = Message = {}));
@@ -0,0 +1,122 @@
1
+ /// <reference types="node" />
2
+ import { AxiosInstance } from "axios";
3
+ import { WebSocket } from "ws";
4
+ import * as log4js from 'log4js';
5
+ import { EventEmitter } from "events";
6
+ import { SessionManager } from "./sessionManager";
7
+ import { Quotable, Sendable } from "./elements";
8
+ import { ApiBaseInfo, Dict, LogLevel, UpdatePermissionParams } from "./types";
9
+ import { DirectMessageEvent, GroupMessageEvent, GuildMessageEvent, PrivateMessageEvent } from "./message";
10
+ import { EventMap } from "./event";
11
+ import { Channel } from "../../adapters/qq/entries/channel";
12
+ import { Guild } from "../../adapters/qq/entries/guild";
13
+ export declare class QQBot extends EventEmitter {
14
+ config: QQBot.Config;
15
+ request: AxiosInstance;
16
+ self_id: string;
17
+ nickname: string;
18
+ status: number;
19
+ logger: log4js.Logger;
20
+ ws: WebSocket;
21
+ sessionManager: SessionManager;
22
+ constructor(config: QQBot.Config);
23
+ removeAt(payload: Dict): void;
24
+ processPayload(event_id: string, event: string, payload: Dict): GroupMessageEvent | PrivateMessageEvent | GuildMessageEvent | DirectMessageEvent | Dict;
25
+ getSelfInfo(): Promise<any>;
26
+ getChannelPermissionOfRole(channel_id: string, role_id: string): Promise<any>;
27
+ setChannelAnnounce(guild_id: string, channel_id: string, message_id: string): Promise<any>;
28
+ updateChannelPermissionOfRole(channel_id: string, role_id: string, permission: UpdatePermissionParams): Promise<boolean>;
29
+ getChannelMemberPermission(channel_id: string, member_id: string): Promise<any>;
30
+ updateChannelMemberPermission(channel_id: string, member_id: string, permission: UpdatePermissionParams): Promise<boolean>;
31
+ getChannelPins(channel_id: string): Promise<string[]>;
32
+ pinChannelMessage(channel_id: string, message_id: string): Promise<any>;
33
+ unPinChannelMessage(channel_id: string, message_id: string): Promise<any>;
34
+ createChannel(guild_id: string, channelInfo: Omit<Channel.Info, 'id'>): Promise<Channel.Info>;
35
+ updateChannel({ channel_id, ...updateInfo }: {
36
+ channel_id: string;
37
+ } & Partial<Pick<Channel.Info, 'name' | 'position' | 'parent_id' | 'private_type' | 'speak_permission'>>): Promise<Channel.Info>;
38
+ deleteChannel(channel_id: string): Promise<boolean>;
39
+ getGuildRoles(guild_id: string): Promise<any>;
40
+ creatGuildRole(guild_id: string, role: Pick<Guild.Role, 'name' | 'color' | 'hoist'>): Promise<Guild.Role>;
41
+ updateGuildRole(guild_id: string, { id, ...role }: Pick<Guild.Role, 'id' | 'name' | 'color' | 'hoist'>): Promise<any>;
42
+ deleteGuildRole(role_id: string): Promise<boolean>;
43
+ getGuildAccessApis(guild_id: string): Promise<any>;
44
+ applyGuildAccess(guild_id: string, channel_id: string, apiInfo: ApiBaseInfo, desc?: string): Promise<any>;
45
+ unMuteGuild(guild_id: string): Promise<boolean>;
46
+ muteGuild(guild_id: string, seconds: number, end_time?: number): Promise<boolean>;
47
+ unMuteGuildMembers(guild_id: string, member_ids: string[]): Promise<boolean>;
48
+ muteGuildMembers(guild_id: string, member_ids: string[], seconds: number, end_time?: number): Promise<boolean>;
49
+ addGuildMemberRoles(guild_id: string, channel_id: string, member_id: string, role_id: string): Promise<boolean>;
50
+ removeGuildMemberRoles(guild_id: string, channel_id: string, member_id: string, role_id: string): Promise<boolean>;
51
+ kickGuildMember(guild_id: string, member_id: string, clean?: -1 | 0 | 3 | 7 | 15 | 30, blacklist?: boolean): Promise<boolean>;
52
+ unMuteGuildMember(guild_id: string, member_id: string): Promise<boolean>;
53
+ muteGuildMember(guild_id: string, member_id: string, seconds: number, end_time?: number): Promise<boolean>;
54
+ getGuildList(): Promise<any>;
55
+ getGuildMemberList(guild_id: string): Promise<any>;
56
+ getGuildMemberInfo(guild_id: string, member_id: string): Promise<any>;
57
+ getChannelInfo(channel_id: string): Promise<any>;
58
+ getGroupMemberList(group_id: string): Promise<void>;
59
+ getGroupMemberInfo(group_id: string, member_id: string): Promise<void>;
60
+ getFriendList(): Promise<void>;
61
+ getFriendInfo(friend_id: string): Promise<void>;
62
+ getChannelList(guild_id: string): Promise<any>;
63
+ sendPrivateMessage(user_id: string, message: Sendable, source?: Quotable): Promise<{
64
+ message_id: string;
65
+ timestamp: number;
66
+ }>;
67
+ createDirectSession(guild_id: string, user_id: string): Promise<any>;
68
+ sendDirectMessage(guild_id: string, message: Sendable, source?: Quotable): Promise<{
69
+ message_id: string;
70
+ timestamp: number;
71
+ }>;
72
+ sendGuildMessage(channel_id: string, message: Sendable, source?: Quotable): Promise<{
73
+ message_id: string;
74
+ timestamp: number;
75
+ }>;
76
+ sendGroupMessage(group_id: string, message: Sendable, source?: Quotable): Promise<{
77
+ message_id: string;
78
+ timestamp: number;
79
+ }>;
80
+ dispatchEvent(event: string, wsRes: any): void;
81
+ em(event: string, payload: Dict): void;
82
+ }
83
+ export interface QQBot {
84
+ on<T extends keyof EventMap>(event: T, callback: EventMap[T]): this;
85
+ on<S extends string | symbol>(event: S & Exclude<string | symbol, keyof EventMap>, callback: (...args: any[]) => void): this;
86
+ once<T extends keyof EventMap>(event: T, callback: EventMap[T]): this;
87
+ once<S extends string | symbol>(event: S & Exclude<string | symbol, keyof EventMap>, callback: (...args: any[]) => void): this;
88
+ off<T extends keyof EventMap>(event: T, callback?: EventMap[T]): this;
89
+ off<S extends string | symbol>(event: S & Exclude<string | symbol, keyof EventMap>, callback?: (...args: any[]) => void): this;
90
+ emit<T extends keyof EventMap>(event: T, ...args: Parameters<EventMap[T]>): boolean;
91
+ emit<S extends string | symbol>(event: S & Exclude<string | symbol, keyof EventMap>, ...args: any[]): boolean;
92
+ addListener<T extends keyof EventMap>(event: T, callback: EventMap[T]): this;
93
+ addListener<S extends string | symbol>(event: S & Exclude<string | symbol, keyof EventMap>, callback: (...args: any[]) => void): this;
94
+ addListenerOnce<T extends keyof EventMap>(event: T, callback: EventMap[T]): this;
95
+ addListenerOnce<S extends string | symbol>(event: S & Exclude<string | symbol, keyof EventMap>, callback: (...args: any[]) => void): this;
96
+ removeListener<T extends keyof EventMap>(event: T, callback?: EventMap[T]): this;
97
+ removeListener<S extends string | symbol>(event: S & Exclude<string | symbol, keyof EventMap>, callback?: (...args: any[]) => void): this;
98
+ removeAllListeners<T extends keyof EventMap>(event: T): this;
99
+ removeAllListeners<S extends string | symbol>(event: S & Exclude<string | symbol, keyof EventMap>): this;
100
+ }
101
+ export declare namespace QQBot {
102
+ interface Token {
103
+ access_token: string;
104
+ expires_in: number;
105
+ cache: string;
106
+ }
107
+ interface Config {
108
+ appid: string;
109
+ secret: string;
110
+ token?: string;
111
+ sandbox?: boolean;
112
+ maxRetry?: number;
113
+ /**
114
+ * 是否移除第一个@
115
+ */
116
+ removeAt?: boolean;
117
+ delay?: Dict<number>;
118
+ intents?: string[];
119
+ logLevel?: LogLevel;
120
+ }
121
+ function getFullTargetId(message: GuildMessageEvent | GroupMessageEvent | PrivateMessageEvent): string;
122
+ }