@zhin.js/adapter-discord 1.0.24 → 1.0.26

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.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,25 @@
1
1
  # @zhin.js/adapter-discord
2
2
 
3
+ ## 1.0.26
4
+
5
+ ### Patch Changes
6
+
7
+ - 106d357: fix: ai
8
+ - Updated dependencies [106d357]
9
+ - @zhin.js/http@1.0.17
10
+ - zhin.js@1.0.26
11
+
12
+ ## 1.0.25
13
+
14
+ ### Patch Changes
15
+
16
+ - 26d2942: fix: ai
17
+ - 6b02c41: fix: ai
18
+ - Updated dependencies [26d2942]
19
+ - Updated dependencies [6b02c41]
20
+ - zhin.js@1.0.25
21
+ - @zhin.js/http@1.0.16
22
+
3
23
  ## 1.0.24
4
24
 
5
25
  ### Patch Changes
package/README.md CHANGED
@@ -1,612 +1,124 @@
1
1
  # @zhin.js/adapter-discord
2
2
 
3
- Zhin.js Discord 适配器,基于 `discord.js` v14 实现,支持 **Gateway** 和 **Interactions** 两种模式。
3
+ Zhin.js Discord 适配器,支持 Discord 机器人的消息收发和服务器管理。
4
+
5
+ ## 功能特性
6
+
7
+ - 支持 Gateway(WebSocket)和 Interactions(HTTP Webhook)两种模式
8
+ - 斜杠命令(Slash Commands)支持
9
+ - 可配置 Intents 和默认活动状态
10
+ - 服务器管理 AI 工具(通过 declareSkill 暴露给 AI)
11
+ - 基于 discord.js 库
4
12
 
5
13
  ## 安装
6
14
 
7
15
  ```bash
8
- pnpm add @zhin.js/adapter-discord
16
+ pnpm add @zhin.js/adapter-discord discord.js
9
17
  ```
10
18
 
19
+ ## 依赖
20
+
21
+ - `@zhin.js/http` — HTTP 服务(Interactions 模式需要)
22
+
11
23
  ## 配置
12
24
 
13
- ### Gateway 模式配置(推荐常规使用)
25
+ ### Gateway 模式(推荐)
26
+
27
+ ```yaml
28
+ # zhin.config.yml
29
+ bots:
30
+ - context: discord
31
+ name: my-discord-bot
32
+ token: ${DISCORD_BOT_TOKEN}
33
+ # 可选配置
34
+ # intents:
35
+ # - Guilds
36
+ # - GuildMessages
37
+ # - MessageContent
38
+ # enableSlashCommands: true
39
+ # defaultActivity:
40
+ # name: Zhin.js
41
+ # type: Playing
42
+
43
+ plugins:
44
+ - adapter-discord
45
+ - http
46
+ ```
14
47
 
15
- ```typescript
16
- // zhin.config.ts
17
- import { defineConfig } from 'zhin.js'
48
+ ### Interactions 模式(Webhook)
18
49
 
19
- export default defineConfig({
20
- bots: [
21
- {
22
- context: 'discord',
23
- name: 'my-discord-bot',
24
- token: process.env.DISCORD_TOKEN, // 从 Discord Developer Portal 获取的 Bot Token
25
- }
26
- ],
27
- plugins: ['adapter-discord']
28
- })
50
+ ```yaml
51
+ bots:
52
+ - context: discord-interactions
53
+ name: my-discord-bot
54
+ token: ${DISCORD_BOT_TOKEN}
55
+ applicationId: ${DISCORD_APP_ID}
56
+ publicKey: ${DISCORD_PUBLIC_KEY}
57
+ interactionsPath: /discord/interactions
29
58
  ```
30
59
 
31
- ### Interactions 端点模式配置(推荐高性能场景)
60
+ ### TypeScript 配置
32
61
 
33
62
  ```typescript
34
- // zhin.config.ts
35
63
  import { defineConfig } from 'zhin.js'
36
64
 
37
65
  export default defineConfig({
38
66
  bots: [
39
67
  {
40
- context: 'discord-interactions',
68
+ context: 'discord',
41
69
  name: 'my-discord-bot',
42
- token: process.env.DISCORD_TOKEN,
43
- applicationId: process.env.DISCORD_APPLICATION_ID, // Discord 应用 ID
44
- publicKey: process.env.DISCORD_PUBLIC_KEY, // Discord 应用的 Public Key
45
- interactionsPath: '/discord/interactions', // 交互端点路径
46
- useGateway: false // 是否同时使用 Gateway(可选)
70
+ token: process.env.DISCORD_BOT_TOKEN!,
47
71
  }
48
72
  ],
49
- plugins: ['adapter-discord']
73
+ plugins: ['adapter-discord', 'http']
50
74
  })
51
75
  ```
52
76
 
53
- ### 通用配置参数
54
-
55
- - `token` (必需): Discord Bot Token,从 [Discord Developer Portal](https://discord.com/developers/applications) 获取
56
- - `name`: 机器人名称
57
- - `intents`: Gateway Intents 配置(可选,有默认值)
58
- - `enableSlashCommands`: 是否启用斜杠命令支持(默认: false)
59
- - `globalCommands`: 是否注册全局命令(默认: false,全局命令更新较慢)
60
- - `slashCommands`: Slash Commands 定义数组(使用 SlashCommandBuilder 创建)
61
- - `defaultActivity`: 默认活动状态配置(可选)
62
- - `name`: 活动名称
63
- - `type`: 活动类型('PLAYING' | 'STREAMING' | 'LISTENING' | 'WATCHING' | 'COMPETING')
64
- - `url`: 活动URL(流媒体类型需要)
65
-
66
- ### 完整配置示例
67
-
68
- #### Gateway 模式完整配置
69
-
70
- ```typescript
71
- import { GatewayIntentBits, SlashCommandBuilder } from 'discord.js';
72
-
73
- const config: DiscordBotConfig = {
74
- context: 'discord',
75
- name: 'my-discord-bot',
76
- token: 'YOUR_BOT_TOKEN',
77
- intents: [
78
- GatewayIntentBits.Guilds,
79
- GatewayIntentBits.GuildMessages,
80
- GatewayIntentBits.MessageContent,
81
- GatewayIntentBits.DirectMessages,
82
- GatewayIntentBits.GuildMembers,
83
- GatewayIntentBits.GuildMessageReactions
84
- ],
85
- enableSlashCommands: true,
86
- globalCommands: false,
87
- defaultActivity: {
88
- name: '正在为用户服务',
89
- type: 'PLAYING'
90
- },
91
- slashCommands: [
92
- new SlashCommandBuilder()
93
- .setName('help')
94
- .setDescription('显示帮助信息')
95
- .toJSON()
96
- ]
97
- }
98
- ```
99
-
100
- #### Interactions 模式完整配置
101
-
102
- ```typescript
103
- import { SlashCommandBuilder } from 'discord.js';
104
-
105
- const config: DiscordInteractionsConfig = {
106
- context: 'discord-interactions',
107
- name: 'interactions-bot',
108
- token: 'YOUR_BOT_TOKEN',
109
- applicationId: 'YOUR_APPLICATION_ID',
110
- publicKey: 'YOUR_PUBLIC_KEY',
111
- interactionsPath: '/discord/interactions',
112
- useGateway: false, // 纯 Interactions 模式
113
- slashCommands: [
114
- new SlashCommandBuilder()
115
- .setName('ping')
116
- .setDescription('测试命令')
117
- .toJSON(),
118
- new SlashCommandBuilder()
119
- .setName('weather')
120
- .setDescription('获取天气信息')
121
- .addStringOption(option =>
122
- option.setName('city')
123
- .setDescription('城市名称')
124
- .setRequired(true)
125
- )
126
- .toJSON()
127
- ],
128
- globalCommands: true // Interactions 模式推荐使用全局命令
129
- }
130
- ```
131
-
132
- ## 获取配置信息
133
-
134
- ### 获取 Bot Token
135
-
136
- 1. 访问 [Discord Developer Portal](https://discord.com/developers/applications)
137
- 2. 创建新的应用程序(New Application)
138
- 3. 在左侧菜单选择 "Bot"
139
- 4. 点击 "Reset Token" 获取新的 Token
140
- 5. 复制 Token(注意保密)
141
- 6. 在 "Privileged Gateway Intents" 中启用需要的权限
142
-
143
- ### 获取 Application ID 和 Public Key(Interactions 模式需要)
144
-
145
- 1. 在 Discord Developer Portal 的应用详情页
146
- 2. **Application ID**: 在 "General Information" 页面可以找到
147
- 3. **Public Key**: 在 "General Information" 页面的 "Public Key" 字段
148
-
149
77
  ## 使用示例
150
78
 
151
- ### Gateway 模式使用
79
+ ### 注册命令
152
80
 
153
81
  ```typescript
154
- import { createApp } from 'zhin.js';
155
- import '@zhin.js/adapter-discord';
156
-
157
- const app = createApp();
158
-
159
- app.adapter('discord', {
160
- context: 'discord',
161
- name: 'my-bot',
162
- token: 'YOUR_BOT_TOKEN'
163
- });
164
-
165
- app.middleware((session, next) => {
166
- console.log(`收到消息: ${session.content}`);
167
- return next();
168
- });
169
-
170
- app.command('ping').action((session) => {
171
- session.send('Pong! 🏓');
172
- });
173
-
174
- app.start();
175
- ```
82
+ import { usePlugin, MessageCommand } from 'zhin.js'
176
83
 
177
- ### Interactions 端点模式使用
84
+ const { addCommand } = usePlugin()
178
85
 
179
- ```typescript
180
- import { createApp } from 'zhin.js';
181
- import '@zhin.js/adapter-discord';
182
- import '@zhin.js/http'; // 需要 HTTP 插件支持
183
-
184
- const app = createApp();
185
-
186
- // 先加载 HTTP 插件
187
- app.plugin(require('@zhin.js/http'));
188
-
189
- // 配置 Discord Interactions
190
- app.adapter('discord-interactions', {
191
- context: 'discord-interactions',
192
- name: 'interactions-bot',
193
- token: 'YOUR_BOT_TOKEN',
194
- applicationId: 'YOUR_APPLICATION_ID',
195
- publicKey: 'YOUR_PUBLIC_KEY',
196
- interactionsPath: '/discord/interactions'
197
- });
198
-
199
- // 处理 Slash Commands
200
- app.command('ping').action((session) => {
201
- session.send('Pong from Interactions! ⚡');
202
- });
203
-
204
- app.start();
86
+ addCommand(
87
+ new MessageCommand('ping')
88
+ .desc('测试延迟')
89
+ .action(() => 'Pong!')
90
+ )
205
91
  ```
206
92
 
207
- ### 高级功能使用
93
+ ### 消息中间件
208
94
 
209
95
  ```typescript
210
- import { createApp } from 'zhin.js';
211
- import '@zhin.js/adapter-discord';
212
-
213
- const app = createApp();
214
-
215
- app.adapter('discord', {
216
- context: 'discord',
217
- name: 'advanced-bot',
218
- token: 'YOUR_BOT_TOKEN',
219
- defaultActivity: {
220
- name: '正在处理消息',
221
- type: 'LISTENING'
222
- }
223
- });
96
+ import { usePlugin } from 'zhin.js'
224
97
 
225
- // 处理提及消息
226
- app.middleware((session, next) => {
227
- const mentions = session.content.filter(seg => seg.type === 'at');
228
- if (mentions.length > 0) {
229
- console.log('收到提及:', mentions.map(seg => seg.data.name));
230
- }
231
- return next();
232
- });
98
+ const { addMiddleware } = usePlugin()
233
99
 
234
- // 发送富媒体消息
235
- app.command('embed').action(async (session) => {
236
- await session.send([
237
- {
238
- type: 'embed',
239
- data: {
240
- title: '这是一个 Embed 消息',
241
- description: '支持丰富的格式化内容',
242
- color: 0x00ff00,
243
- fields: [
244
- { name: '字段1', value: '值1', inline: true },
245
- { name: '字段2', value: '值2', inline: true }
246
- ],
247
- thumbnail: { url: 'https://example.com/thumbnail.png' },
248
- footer: { text: '底部文字' },
249
- timestamp: new Date().toISOString()
250
- }
251
- }
252
- ]);
253
- });
254
-
255
- // 处理图片消息
256
- app.middleware((session, next) => {
257
- const imageSegments = session.content.filter(seg => seg.type === 'image');
258
- if (imageSegments.length > 0) {
259
- console.log('收到图片:', imageSegments.map(seg => seg.data.url));
100
+ addMiddleware(async (message, next) => {
101
+ if (message.$adapter === 'discord') {
102
+ console.log('Discord 消息:', message.$content)
260
103
  }
261
- return next();
262
- });
263
-
264
- app.start();
265
- ```
266
-
267
- ## 两种模式对比
268
-
269
- | 特性 | Gateway 模式 | Interactions 端点模式 |
270
- |------|-------------|---------------------|
271
- | **连接方式** | WebSocket 长连接 | HTTP 端点接收 |
272
- | **实时性** | 高(实时推送) | 高(实时推送) |
273
- | **消息处理** | 全部消息类型 | 主要是 Slash Commands |
274
- | **资源消耗** | 中等(保持连接) | 低(按需处理) |
275
- | **网络要求** | 稳定网络连接 | 需要公网 HTTPS |
276
- | **适用场景** | 全功能机器人 | 命令型机器人 |
277
- | **响应速度** | 一般 | 极快 |
278
- | **配置复杂度** | 简单 | 中等 |
279
-
280
- ### 选择建议
281
-
282
- - **全功能机器人**: 使用 `discord` (Gateway 模式)
283
- - **命令型机器人**: 使用 `discord-interactions` (Interactions 模式)
284
- - **高性能场景**: 优先考虑 Interactions 模式
285
- - **开发阶段**: Gateway 模式更方便调试
286
-
287
- ## 支持的消息类型
288
-
289
- ### 接收消息 (Gateway 模式)
290
- - **文本消息**: 支持 Discord 格式化语法(**粗体**、*斜体*、`代码`等)
291
- - **用户提及**: 解析 @用户 提及,包含用户 ID 和显示名
292
- - **频道提及**: 解析 #频道 提及,包含频道信息
293
- - **角色提及**: 解析 @角色 提及,包含角色信息
294
- - **自定义表情**: 解析服务器自定义表情
295
- - **图片消息**: 支持图片附件和 URL
296
- - **音频消息**: 支持音频文件附件
297
- - **视频消息**: 支持视频文件附件
298
- - **文件消息**: 支持任意格式的文件附件
299
- - **Embed 消息**: 支持富文本嵌入消息
300
- - **回复消息**: 支持消息回复和引用
301
-
302
- ### 接收消息 (Interactions 模式)
303
- - **Slash Commands**: 接收并解析 Discord 斜杠命令
304
- - **命令参数**: 自动解析命令的各种参数类型
305
- - **上下文信息**: 包含用户、频道、服务器等上下文信息
306
-
307
- ### 发送消息 (两种模式)
308
- - **文本消息**: 支持 Discord 格式化语法
309
- - **用户提及**: 发送 @用户 提及
310
- - **频道提及**: 发送 #频道 提及
311
- - **角色提及**: 发送 @角色 提及
312
- - **自定义表情**: 发送服务器自定义表情
313
- - **图片消息**: 发送图片文件、URL或Buffer
314
- - **音频消息**: 发送音频文件
315
- - **视频消息**: 发送视频文件
316
- - **文件消息**: 发送任意格式的文件
317
- - **Embed 消息**: 发送富文本嵌入消息
318
- - **回复消息**: 回复到指定消息
319
-
320
- ## 聊天类型支持
321
-
322
- - `private`: 私信(DM)
323
- - `group`: 群组私信(Group DM)
324
- - `channel`: 服务器频道(Guild Text Channel)
325
-
326
- ## Discord 特色功能
327
-
328
- ### Slash Commands
329
-
330
- #### Gateway 模式中的 Slash Commands
331
-
332
- ```typescript
333
- import { SlashCommandBuilder } from 'discord.js';
334
-
335
- // 定义 Slash Commands
336
- const slashCommands = [
337
- new SlashCommandBuilder()
338
- .setName('weather')
339
- .setDescription('获取天气信息')
340
- .addStringOption(option =>
341
- option.setName('city')
342
- .setDescription('城市名称')
343
- .setRequired(true)
344
- )
345
- .addBooleanOption(option =>
346
- option.setName('detailed')
347
- .setDescription('是否显示详细信息')
348
- .setRequired(false)
349
- )
350
- .toJSON()
351
- ];
352
-
353
- // 配置 Bot
354
- const bot = app.adapter('discord', {
355
- // ... 其他配置
356
- enableSlashCommands: true,
357
- slashCommands
358
- });
359
-
360
- // 添加处理器
361
- bot.addSlashCommandHandler('weather', async (interaction) => {
362
- const city = interaction.options.getString('city');
363
- const detailed = interaction.options.getBoolean('detailed') || false;
364
-
365
- // 处理命令逻辑
366
- await interaction.reply(`${city} 的天气信息...`);
367
- });
368
- ```
369
-
370
- #### Interactions 模式中的 Slash Commands
371
-
372
- ```typescript
373
- // Interactions 模式自动处理 Slash Commands
374
- app.command('weather <city:string> [detailed:boolean]').action((session) => {
375
- const city = session.argv.city;
376
- const detailed = session.argv.detailed || false;
377
-
378
- session.send(`${city} 的天气信息...`);
379
- });
380
- ```
381
-
382
- ### Embed 消息
383
-
384
- Discord 的嵌入消息支持丰富的格式化内容:
385
-
386
- ```typescript
387
- app.command('rich').action(async (session) => {
388
- await session.send([
389
- {
390
- type: 'embed',
391
- data: {
392
- title: '丰富的嵌入消息',
393
- description: '这是一个包含多种元素的 Embed',
394
- url: 'https://example.com',
395
- color: 0x00ff00, // 绿色
396
-
397
- // 作者信息
398
- author: {
399
- name: '作者名称',
400
- icon_url: 'https://example.com/author.png',
401
- url: 'https://example.com/author'
402
- },
403
-
404
- // 缩略图
405
- thumbnail: {
406
- url: 'https://example.com/thumb.png'
407
- },
408
-
409
- // 字段
410
- fields: [
411
- {
412
- name: '字段1',
413
- value: '这是第一个字段的内容',
414
- inline: true
415
- },
416
- {
417
- name: '字段2',
418
- value: '这是第二个字段的内容',
419
- inline: true
420
- },
421
- {
422
- name: '完整宽度字段',
423
- value: '这个字段占据完整宽度',
424
- inline: false
425
- }
426
- ],
427
-
428
- // 图片
429
- image: {
430
- url: 'https://example.com/image.png'
431
- },
432
-
433
- // 底部信息
434
- footer: {
435
- text: '底部文字',
436
- icon_url: 'https://example.com/footer.png'
437
- },
438
-
439
- // 时间戳
440
- timestamp: new Date().toISOString()
441
- }
442
- }
443
- ]);
444
- });
445
- ```
446
-
447
- ### 权限管理
448
-
449
- Discord 机器人需要适当的权限才能正常工作:
450
-
451
- ```typescript
452
- // 常用权限示例
453
- const requiredPermissions = [
454
- 'VIEW_CHANNEL', // 查看频道
455
- 'SEND_MESSAGES', // 发送消息
456
- 'READ_MESSAGE_HISTORY', // 读取消息历史
457
- 'USE_SLASH_COMMANDS', // 使用斜杠命令
458
- 'EMBED_LINKS', // 嵌入链接
459
- 'ATTACH_FILES', // 附加文件
460
- 'ADD_REACTIONS', // 添加反应
461
- 'MENTION_EVERYONE' // 提及所有人(谨慎使用)
462
- ];
104
+ await next()
105
+ })
463
106
  ```
464
107
 
465
- ## 最佳实践
108
+ ## AI 工具(Skill)
466
109
 
467
- ### 1. Intent 选择
110
+ 适配器内置 Discord 服务器管理 Skill,工具供 AI 调用。
468
111
 
469
- 只启用需要的 Intent 以提高性能和安全性:
112
+ > 工具使用 Discord 的 Snowflake ID 格式标识 `guild_id`、`user_id`、`channel_id`。
470
113
 
471
- ```typescript
472
- import { GatewayIntentBits } from 'discord.js';
473
-
474
- // 最小权限集合
475
- const minimalIntents = [
476
- GatewayIntentBits.Guilds,
477
- GatewayIntentBits.GuildMessages
478
- ];
479
-
480
- // 需要读取消息内容时
481
- const messageContentIntents = [
482
- ...minimalIntents,
483
- GatewayIntentBits.MessageContent
484
- ];
485
-
486
- // 需要成员信息时
487
- const memberIntents = [
488
- ...messageContentIntents,
489
- GatewayIntentBits.GuildMembers
490
- ];
491
- ```
114
+ ## Discord 开发者配置
492
115
 
493
- ### 2. 错误处理
116
+ 1. 前往 [Discord Developer Portal](https://discord.com/developers/applications)
117
+ 2. 创建应用并获取 Bot Token
118
+ 3. 开启 **MESSAGE CONTENT INTENT**(需要读取消息内容)
119
+ 4. 通过 OAuth2 URL 邀请 Bot 加入服务器
120
+ 5. Interactions 模式还需配置 Interactions Endpoint URL
494
121
 
495
- ```typescript
496
- app.adapter('discord', {
497
- // ... 配置
498
- }).on('error', (error) => {
499
- console.error('Discord adapter error:', error);
500
- });
501
-
502
- // 优雅处理 API 限制
503
- app.middleware(async (session, next) => {
504
- try {
505
- await next();
506
- } catch (error) {
507
- if (error.code === 50013) { // Missing Permissions
508
- await session.send('抱歉,我没有执行此操作的权限。');
509
- } else {
510
- console.error('Command error:', error);
511
- }
512
- }
513
- });
514
- ```
515
-
516
- ### 3. 性能优化
517
-
518
- ```typescript
519
- // 使用 Interactions 模式处理命令
520
- app.adapter('discord-interactions', {
521
- // 只注册需要的 Slash Commands
522
- slashCommands: [
523
- // 只包含实际使用的命令
524
- ],
525
- // 全局命令响应更快
526
- globalCommands: true
527
- });
528
-
529
- // Gateway 模式优化
530
- app.adapter('discord', {
531
- // 只启用必要的 Intent
532
- intents: [
533
- GatewayIntentBits.Guilds,
534
- GatewayIntentBits.GuildMessages
535
- ]
536
- });
537
- ```
122
+ ## 许可证
538
123
 
539
- ## 故障排除
540
-
541
- ### Gateway 模式问题
542
-
543
- 1. **连接失败**
544
- ```
545
- Error: Cannot connect to gateway
546
- ```
547
- - 检查网络连接和防火墙设置
548
- - 确认 Token 是否正确且有效
549
- - 检查 Intent 权限是否足够
550
-
551
- 2. **权限不足**
552
- ```
553
- DiscordAPIError: Missing Permissions
554
- ```
555
- - 在 Discord 服务器中检查机器人权限
556
- - 确认机器人已被正确邀请到服务器
557
- - 检查频道特定权限
558
-
559
- ### Interactions 模式问题
560
-
561
- 1. **端点验证失败**
562
- ```
563
- Invalid Discord signature
564
- ```
565
- - 确认 `publicKey` 配置正确
566
- - 检查 Discord 应用设置中的 Public Key
567
- - 确保使用 HTTPS 且证书有效
568
-
569
- 2. **命令注册失败**
570
- ```
571
- Error registering slash commands
572
- ```
573
- - 检查 `applicationId` 是否正确
574
- - 确认 Bot Token 权限足够
575
- - 验证命令定义格式是否正确
576
-
577
- 3. **端点无响应**
578
- ```
579
- Interaction endpoint not responding
580
- ```
581
- - 确保 `interactionsPath` 路径正确
582
- - 检查 HTTP 插件是否已加载
583
- - 确认防火墙和反向代理配置
584
-
585
- ### 通用问题
586
-
587
- 1. **Token 无效**
588
- - 重新生成 Bot Token
589
- - 确认复制时没有额外空格
590
- - 检查 Token 格式是否完整
591
-
592
- 2. **消息发送失败**
593
- - 检查机器人是否在目标频道中
594
- - 确认消息内容符合 Discord 限制
595
- - 验证权限设置
596
-
597
- ## 更新日志
598
-
599
- ### v1.1.0
600
- - ✨ 新增 Interactions 端点模式支持
601
- - ✨ 使用 `useContext('router')` 集成 HTTP 服务
602
- - 🔒 添加签名验证安全机制
603
- - ⚡ 优化 Slash Commands 处理性能
604
- - 📚 完善两种模式的文档说明
605
-
606
- ### v1.0.0
607
- - 🎉 初始版本
608
- - 🌐 完整的 Gateway 模式支持
609
- - 🎯 丰富的消息类型支持
610
- - ⚡ Slash Commands 集成
611
- - 📱 Embed 消息和多媒体支持
612
- - 🔧 灵活的权限和活动配置
124
+ MIT License