@zhin.js/adapter-discord 5.0.2 → 5.0.3

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 (73) hide show
  1. package/CHANGELOG.md +41 -0
  2. package/README.md +46 -77
  3. package/adapters/discord.ts +46 -0
  4. package/agent/tools/add_role.ts +2 -2
  5. package/agent/tools/create_thread.ts +2 -2
  6. package/agent/tools/forum_post.ts +2 -2
  7. package/agent/tools/list_roles.ts +2 -2
  8. package/agent/tools/react.ts +2 -2
  9. package/agent/tools/remove_role.ts +2 -2
  10. package/agent/tools/send_embed.ts +2 -2
  11. package/lib/discord-agent-deps.d.ts +35 -0
  12. package/lib/discord-agent-deps.js +32 -0
  13. package/lib/endpoint.d.ts +71 -0
  14. package/lib/endpoint.js +355 -0
  15. package/lib/gateway.d.ts +122 -0
  16. package/lib/gateway.js +235 -0
  17. package/lib/index.d.ts +6 -0
  18. package/lib/index.js +6 -0
  19. package/lib/platform-permit.d.ts +15 -0
  20. package/lib/{src/platform-permit.js → platform-permit.js} +1 -2
  21. package/lib/protocol.d.ts +135 -0
  22. package/lib/protocol.js +234 -0
  23. package/lib/webhook.d.ts +13 -0
  24. package/lib/webhook.js +86 -0
  25. package/package.json +43 -36
  26. package/plugin.ts +13 -0
  27. package/schema.json +63 -0
  28. package/src/discord-agent-deps.ts +68 -11
  29. package/src/endpoint.ts +385 -1167
  30. package/src/gateway.ts +337 -0
  31. package/src/index.ts +56 -157
  32. package/src/platform-permit.ts +1 -1
  33. package/src/protocol.ts +392 -0
  34. package/src/webhook.ts +121 -0
  35. package/client/Dashboard.tsx +0 -195
  36. package/client/index.tsx +0 -11
  37. package/client/tsconfig.json +0 -7
  38. package/client/utils/api.ts +0 -30
  39. package/dist/index.js +0 -29
  40. package/lib/agent/tools/add_role.js +0 -22
  41. package/lib/agent/tools/add_role.js.map +0 -1
  42. package/lib/agent/tools/create_thread.js +0 -23
  43. package/lib/agent/tools/create_thread.js.map +0 -1
  44. package/lib/agent/tools/forum_post.js +0 -22
  45. package/lib/agent/tools/forum_post.js.map +0 -1
  46. package/lib/agent/tools/list_roles.js +0 -20
  47. package/lib/agent/tools/list_roles.js.map +0 -1
  48. package/lib/agent/tools/react.js +0 -20
  49. package/lib/agent/tools/react.js.map +0 -1
  50. package/lib/agent/tools/remove_role.js +0 -22
  51. package/lib/agent/tools/remove_role.js.map +0 -1
  52. package/lib/agent/tools/send_embed.js +0 -40
  53. package/lib/agent/tools/send_embed.js.map +0 -1
  54. package/lib/src/adapter.js +0 -96
  55. package/lib/src/adapter.js.map +0 -1
  56. package/lib/src/discord-agent-deps.js +0 -10
  57. package/lib/src/discord-agent-deps.js.map +0 -1
  58. package/lib/src/endpoint-interactions.js +0 -284
  59. package/lib/src/endpoint-interactions.js.map +0 -1
  60. package/lib/src/endpoint.js +0 -1093
  61. package/lib/src/endpoint.js.map +0 -1
  62. package/lib/src/index.js +0 -159
  63. package/lib/src/index.js.map +0 -1
  64. package/lib/src/platform-permit.js.map +0 -1
  65. package/lib/src/segment-mapper.js +0 -2
  66. package/lib/src/segment-mapper.js.map +0 -1
  67. package/lib/src/types.js +0 -2
  68. package/lib/src/types.js.map +0 -1
  69. package/plugin.yml +0 -3
  70. package/src/adapter.ts +0 -108
  71. package/src/endpoint-interactions.ts +0 -354
  72. package/src/segment-mapper.ts +0 -1
  73. package/src/types.ts +0 -60
@@ -1 +0,0 @@
1
- {"version":3,"file":"discord-agent-deps.js","sourceRoot":"","sources":["../../src/discord-agent-deps.ts"],"names":[],"mappings":"AAYA,IAAI,KAAK,GAA4B,IAAI,CAAC;AAE1C,MAAM,UAAU,mBAAmB,CAAC,IAAsB;IACxD,KAAK,GAAG,IAAI,CAAC;AACf,CAAC;AAED,MAAM,UAAU,mBAAmB;IACjC,IAAI,CAAC,KAAK;QAAE,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;IAClE,OAAO,KAAK,CAAC;AACf,CAAC"}
@@ -1,284 +0,0 @@
1
- /**
2
- * Discord Interactions Endpoint 实现
3
- */
4
- import { Client, GatewayIntentBits, REST, Routes, InteractionType, InteractionResponseType, } from "discord.js";
5
- import nacl from "tweetnacl";
6
- import { Message, segment, } from 'zhin.js';
7
- import { registerFetchRoute } from "@zhin.js/host-router/router";
8
- export class DiscordInteractionsEndpoint extends Client {
9
- adapter;
10
- $config;
11
- $connected;
12
- router;
13
- slashCommandHandlers = new Map();
14
- get pluginLogger() {
15
- return this.adapter.plugin.logger;
16
- }
17
- get $id() {
18
- return this.$config.name;
19
- }
20
- constructor(adapter, router, $config) {
21
- const intents = $config.intents || [
22
- GatewayIntentBits.Guilds,
23
- GatewayIntentBits.GuildMessages,
24
- GatewayIntentBits.MessageContent,
25
- ];
26
- super({ intents });
27
- this.adapter = adapter;
28
- this.$config = $config;
29
- this.$connected = false;
30
- this.router = router;
31
- // 设置交互端点路由
32
- this.setupInteractionsEndpoint();
33
- }
34
- setupInteractionsEndpoint() {
35
- // 设置路由处理 Discord Interactions
36
- registerFetchRoute(this.router, "POST", this.$config.interactionsPath, (ctx) => {
37
- void this.handleInteraction(ctx);
38
- });
39
- }
40
- async handleInteraction(ctx) {
41
- try {
42
- const signature = ctx.get("x-signature-ed25519");
43
- const timestamp = ctx.get("x-signature-timestamp");
44
- const bodyString = JSON.stringify(ctx.request.body);
45
- if (!signature || !timestamp) {
46
- ctx.status = 401;
47
- ctx.body = "Unauthorized";
48
- return;
49
- }
50
- // 验证请求签名
51
- if (!this.verifyDiscordSignature(bodyString, signature, timestamp)) {
52
- this.pluginLogger.warn("Invalid Discord signature");
53
- ctx.status = 401;
54
- ctx.body = "Unauthorized";
55
- return;
56
- }
57
- const interaction = ctx.request.body;
58
- // 处理不同类型的交互
59
- if (interaction.type === InteractionType.Ping) {
60
- // PING - Discord 验证端点
61
- ctx.body = { type: InteractionResponseType.Pong };
62
- }
63
- else if (interaction.type === InteractionType.ApplicationCommand) {
64
- // APPLICATION_COMMAND - 应用命令
65
- const response = await this.handleApplicationCommand(interaction);
66
- ctx.body = response;
67
- }
68
- else {
69
- // 其他交互类型
70
- ctx.status = 400;
71
- ctx.body = "Unsupported interaction type";
72
- }
73
- }
74
- catch (error) {
75
- this.pluginLogger.error("Interactions error:", error);
76
- ctx.status = 500;
77
- ctx.body = "Internal Server Error";
78
- }
79
- }
80
- verifyDiscordSignature(body, signature, timestamp) {
81
- try {
82
- const publicKey = Buffer.from(this.$config.publicKey, "hex");
83
- const sig = Buffer.from(signature, "hex");
84
- const message = Buffer.from(timestamp + body, "utf8");
85
- return nacl.sign.detached.verify(message, sig, publicKey);
86
- }
87
- catch (error) {
88
- this.pluginLogger.error("Signature verification error:", error);
89
- return false;
90
- }
91
- }
92
- async handleApplicationCommand(interaction) {
93
- // 处理应用命令
94
- const commandName = interaction.data.name;
95
- // 转换为标准消息格式并分发
96
- const message = this.formatInteractionAsMessage(interaction);
97
- this.adapter.emit("message.receive", message);
98
- // 查找自定义处理器
99
- const handler = this.slashCommandHandlers.get(commandName);
100
- if (handler) {
101
- try {
102
- await handler(interaction);
103
- }
104
- catch (error) {
105
- this.pluginLogger.error(`Error in slash command handler for ${commandName}:`, error);
106
- }
107
- }
108
- // 默认响应
109
- return {
110
- type: InteractionResponseType.ChannelMessageWithSource,
111
- data: {
112
- content: `处理命令: ${commandName}`,
113
- flags: 64, // EPHEMERAL - 只有用户可见
114
- },
115
- };
116
- }
117
- formatInteractionAsMessage(interaction) {
118
- const channelType = interaction.guild_id ? "channel" : "private";
119
- const channelId = interaction.channel_id;
120
- // 解析命令参数为内容
121
- const options = interaction.data.options || [];
122
- const content = [segment.text(`/${interaction.data.name}`)];
123
- for (const option of options) {
124
- content.push(segment.text(` ${option.name}:${option.value}`));
125
- }
126
- return Message.from(interaction, {
127
- $id: interaction.id,
128
- $adapter: "discord",
129
- $endpoint: this.$config.name,
130
- $sender: {
131
- id: interaction.user?.id || interaction.member?.user?.id,
132
- name: interaction.user?.username || interaction.member?.user?.username,
133
- },
134
- $channel: {
135
- id: channelId,
136
- type: channelType,
137
- },
138
- $raw: JSON.stringify(interaction),
139
- $timestamp: Date.now(),
140
- $content: content,
141
- $recall: async () => {
142
- // Interactions 消息无法撤回
143
- },
144
- $reply: async (content) => {
145
- return this.$sendMessage({
146
- ...this.$formatMessage(interaction),
147
- content: content,
148
- });
149
- },
150
- });
151
- }
152
- formatSendContent(content) {
153
- if (typeof content === "string") {
154
- return { content };
155
- }
156
- if (Array.isArray(content)) {
157
- const textParts = [];
158
- let embed = null;
159
- for (const item of content) {
160
- if (typeof item === "string") {
161
- textParts.push(item);
162
- }
163
- else {
164
- const segment = item;
165
- switch (segment.type) {
166
- case "text":
167
- textParts.push(segment.data.text || segment.data.content || "");
168
- break;
169
- case "embed":
170
- embed = segment.data;
171
- break;
172
- }
173
- }
174
- }
175
- const result = {};
176
- if (textParts.length > 0) {
177
- result.content = textParts.join("");
178
- }
179
- if (embed) {
180
- result.embeds = [embed];
181
- }
182
- return result;
183
- }
184
- return { content: String(content) };
185
- }
186
- async $connect() {
187
- try {
188
- // 注册 Slash Commands
189
- if (this.$config.slashCommands) {
190
- await this.registerSlashCommands();
191
- }
192
- // 如果启用 Gateway,连接 Discord Gateway
193
- if (this.$config.useGateway) {
194
- await this.login(this.$config.token);
195
- // 设置活动状态
196
- if (this.$config.defaultActivity) {
197
- this.user?.setActivity(this.$config.defaultActivity.name, {
198
- type: this.getActivityType(this.$config.defaultActivity.type),
199
- url: this.$config.defaultActivity.url,
200
- });
201
- }
202
- }
203
- this.$connected = true;
204
- this.pluginLogger.info(`Discord interactions bot connected: ${this.$config.name}`);
205
- this.pluginLogger.info(`Interactions endpoint: ${this.$config.interactionsPath}`);
206
- }
207
- catch (error) {
208
- this.pluginLogger.error("Failed to connect Discord interactions bot:", error);
209
- throw error;
210
- }
211
- }
212
- async $disconnect() {
213
- try {
214
- if (this.isReady()) {
215
- await this.destroy();
216
- }
217
- this.$connected = false;
218
- this.pluginLogger.info("Discord interactions bot disconnected");
219
- }
220
- catch (error) {
221
- this.pluginLogger.error("Error disconnecting Discord interactions bot:", error);
222
- }
223
- }
224
- // Slash Commands 管理
225
- async registerSlashCommands() {
226
- if (!this.$config.slashCommands)
227
- return;
228
- try {
229
- const rest = new REST({ version: "10" }).setToken(this.$config.token);
230
- if (this.$config.globalCommands) {
231
- await rest.put(Routes.applicationCommands(this.$config.applicationId), {
232
- body: this.$config.slashCommands,
233
- });
234
- this.pluginLogger.info("Successfully registered global slash commands");
235
- }
236
- else {
237
- this.pluginLogger.info("Note: Guild commands registration requires connecting to Gateway first");
238
- }
239
- }
240
- catch (error) {
241
- this.pluginLogger.error("Failed to register slash commands:", error);
242
- }
243
- }
244
- // 添加 Slash Command 处理器
245
- addSlashCommandHandler(commandName, handler) {
246
- this.slashCommandHandlers.set(commandName, handler);
247
- }
248
- // 移除 Slash Command 处理器
249
- removeSlashCommandHandler(commandName) {
250
- return this.slashCommandHandlers.delete(commandName);
251
- }
252
- // 工具方法
253
- getActivityType(type) {
254
- const activityTypes = {
255
- PLAYING: 0,
256
- STREAMING: 1,
257
- LISTENING: 2,
258
- WATCHING: 3,
259
- COMPETING: 5,
260
- };
261
- return activityTypes[type] || 0;
262
- }
263
- // 简化实现 - 只支持基本消息格式化和发送
264
- $formatMessage(msg) {
265
- return this.formatInteractionAsMessage(msg);
266
- }
267
- async $sendMessage(options) {
268
- // 简化实现 - 通过 REST API 发送消息
269
- try {
270
- const rest = new REST({ version: "10" }).setToken(this.$config.token);
271
- const messageContent = this.formatSendContent(options.content);
272
- await rest.post(Routes.channelMessages(options.id), {
273
- body: messageContent,
274
- });
275
- }
276
- catch (error) {
277
- this.pluginLogger.error("Failed to send message:", error);
278
- }
279
- return "";
280
- }
281
- async $recallMessage(id) { }
282
- }
283
- // 定义 Adapter 类
284
- //# sourceMappingURL=endpoint-interactions.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"endpoint-interactions.js","sourceRoot":"","sources":["../../src/endpoint-interactions.ts"],"names":[],"mappings":"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"}