@zhin.js/adapter-slack 1.0.37 → 1.0.39

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,19 @@
1
1
  # Changelog
2
2
 
3
+ ## 1.0.39
4
+
5
+ ### Patch Changes
6
+
7
+ - a3511a0: 各包内 Agent 技能说明已固定为随包发布的 `skills/*/SKILL.md`(替代已移除的运行时 `declareSkill`)。本批为 registry / 分发侧对齐的 **patch** 版本递增。
8
+
9
+ ## 1.0.38
10
+
11
+ ### Patch Changes
12
+
13
+ - Updated dependencies [bb6bfa8]
14
+ - Updated dependencies [bb6bfa8]
15
+ - zhin.js@1.0.52
16
+
3
17
  ## 1.0.37
4
18
 
5
19
  ### Patch Changes
@@ -1 +1 @@
1
- {"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../src/adapter.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EACL,OAAO,EACP,MAAM,EAKP,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AACpC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAEjD,qBAAa,YAAa,SAAQ,OAAO,CAAC,QAAQ,CAAC;gBACrC,MAAM,EAAE,MAAM;IAI1B,SAAS,CAAC,MAAM,EAAE,cAAc,GAAG,QAAQ;IAMrC,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;IAMzD,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM;IAMzD,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;IAM1C,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;IAQ3C,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAa5B;;OAEG;IACH,OAAO,CAAC,0BAA0B;CAqQnC"}
1
+ {"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../src/adapter.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EACL,OAAO,EACP,MAAM,EAGP,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AACpC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAEjD,qBAAa,YAAa,SAAQ,OAAO,CAAC,QAAQ,CAAC;gBACrC,MAAM,EAAE,MAAM;IAI1B,SAAS,CAAC,MAAM,EAAE,cAAc,GAAG,QAAQ;IAMrC,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;IAMzD,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM;IAMzD,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;IAM1C,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;IAQ3C,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAO5B;;OAEG;IACH,OAAO,CAAC,0BAA0B;CAqQnC"}
package/lib/adapter.js CHANGED
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * Slack 适配器
3
3
  */
4
- import { Adapter, createGroupManagementTools, GROUP_MANAGEMENT_SKILL_KEYWORDS, GROUP_MANAGEMENT_SKILL_TAGS, } from "zhin.js";
4
+ import { Adapter, createGroupManagementTools, } from "zhin.js";
5
5
  import { SlackBot } from "./bot.js";
6
6
  export class SlackAdapter extends Adapter {
7
7
  constructor(plugin) {
@@ -40,11 +40,6 @@ export class SlackAdapter extends Adapter {
40
40
  this.registerSlackPlatformTools();
41
41
  const groupTools = createGroupManagementTools(this, this.name);
42
42
  groupTools.forEach((t) => this.addTool(t));
43
- this.declareSkill({
44
- description: 'Slack 工作区/频道管理:踢人、禁言、改频道名、查成员等。需先 list_members 获取用户 ID 再执行管理操作。',
45
- keywords: GROUP_MANAGEMENT_SKILL_KEYWORDS,
46
- tags: GROUP_MANAGEMENT_SKILL_TAGS,
47
- });
48
43
  await super.start();
49
44
  }
50
45
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"adapter.js","sourceRoot":"","sources":["../src/adapter.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"adapter.js","sourceRoot":"","sources":["../src/adapter.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zhin.js/adapter-slack",
3
- "version": "1.0.37",
3
+ "version": "1.0.39",
4
4
  "description": "Zhin.js adapter for Slack",
5
5
  "type": "module",
6
6
  "main": "./lib/index.js",
@@ -36,13 +36,17 @@
36
36
  "devDependencies": {
37
37
  "@types/node": "^22.9.0",
38
38
  "typescript": "^5.3.0",
39
- "zhin.js": "1.0.51"
39
+ "zhin.js": "1.0.52"
40
40
  },
41
41
  "peerDependencies": {
42
- "zhin.js": "1.0.51"
42
+ "zhin.js": "1.0.52"
43
43
  },
44
44
  "files": [
45
+ "src",
45
46
  "lib",
47
+ "client",
48
+ "dist",
49
+ "skills",
46
50
  "README.md",
47
51
  "CHANGELOG.md"
48
52
  ],
@@ -0,0 +1,17 @@
1
+ ---
2
+ name: slack
3
+ description: Slack 工作区/频道管理:踢人、禁言、改频道名、查成员等。需先 list_members 获取用户 ID 再执行管理操作。
4
+ keywords:
5
+ - slack
6
+ - adapter:slack
7
+ - 群管理
8
+ - list_members
9
+ tags:
10
+ - group
11
+ - management
12
+ tools: []
13
+ ---
14
+
15
+ ## 执行规则
16
+
17
+ - 使用 `slack_*` 工具;先 list_members 获取 Slack 用户 ID。
package/src/adapter.ts ADDED
@@ -0,0 +1,321 @@
1
+ /**
2
+ * Slack 适配器
3
+ */
4
+ import {
5
+ Adapter,
6
+ Plugin,
7
+ createGroupManagementTools,
8
+ type IGroupManagement,
9
+ } from "zhin.js";
10
+ import { SlackBot } from "./bot.js";
11
+ import type { SlackBotConfig } from "./types.js";
12
+
13
+ export class SlackAdapter extends Adapter<SlackBot> {
14
+ constructor(plugin: Plugin) {
15
+ super(plugin, "slack", []);
16
+ }
17
+
18
+ createBot(config: SlackBotConfig): SlackBot {
19
+ return new SlackBot(this, config);
20
+ }
21
+
22
+ // ── IGroupManagement 标准群管方法 ──────────────────────────────────
23
+
24
+ async kickMember(botId: string, sceneId: string, userId: string) {
25
+ const bot = this.bots.get(botId);
26
+ if (!bot) throw new Error(`Bot ${botId} 不存在`);
27
+ return bot.kickFromChannel(sceneId, userId);
28
+ }
29
+
30
+ async setGroupName(botId: string, sceneId: string, name: string) {
31
+ const bot = this.bots.get(botId);
32
+ if (!bot) throw new Error(`Bot ${botId} 不存在`);
33
+ return bot.renameChannel(sceneId, name);
34
+ }
35
+
36
+ async listMembers(botId: string, sceneId: string) {
37
+ const bot = this.bots.get(botId);
38
+ if (!bot) throw new Error(`Bot ${botId} 不存在`);
39
+ return bot.getChannelMembers(sceneId);
40
+ }
41
+
42
+ async getGroupInfo(botId: string, sceneId: string) {
43
+ const bot = this.bots.get(botId);
44
+ if (!bot) throw new Error(`Bot ${botId} 不存在`);
45
+ return bot.getChannelInfo(sceneId);
46
+ }
47
+
48
+ // ── 生命周期 ───────────────────────────────────────────────────────
49
+
50
+ async start(): Promise<void> {
51
+ this.registerSlackPlatformTools();
52
+ const groupTools = createGroupManagementTools(this as unknown as IGroupManagement, this.name);
53
+ groupTools.forEach((t) => this.addTool(t));
54
+ await super.start();
55
+ }
56
+
57
+ /**
58
+ * 注册 Slack 平台特有工具(邀请到频道等)
59
+ */
60
+ private registerSlackPlatformTools(): void {
61
+ // 邀请用户到频道
62
+ this.addTool({
63
+ name: 'slack_invite_to_channel',
64
+ description: '邀请用户加入 Slack 频道',
65
+ parameters: {
66
+ type: 'object',
67
+ properties: {
68
+ bot: { type: 'string', description: 'Bot 名称' },
69
+ channel: { type: 'string', description: '频道 ID' },
70
+ users: { type: 'array', items: { type: 'string' }, description: '用户 ID 列表' },
71
+ },
72
+ required: ['bot', 'channel', 'users'],
73
+ },
74
+ platforms: ['slack'],
75
+ scopes: ['group'],
76
+ permissionLevel: 'group_admin',
77
+ execute: async (args) => {
78
+ const { bot: botId, channel, users } = args;
79
+ const bot = this.bots.get(botId);
80
+ if (!bot) throw new Error(`Bot ${botId} 不存在`);
81
+ const success = await bot.inviteToChannel(channel, users);
82
+ return { success, message: success ? `已邀请用户加入频道` : '操作失败' };
83
+ },
84
+ });
85
+
86
+ // 设置频道话题
87
+ this.addTool({
88
+ name: 'slack_set_topic',
89
+ description: '设置 Slack 频道话题',
90
+ parameters: {
91
+ type: 'object',
92
+ properties: {
93
+ bot: { type: 'string', description: 'Bot 名称' },
94
+ channel: { type: 'string', description: '频道 ID' },
95
+ topic: { type: 'string', description: '新话题' },
96
+ },
97
+ required: ['bot', 'channel', 'topic'],
98
+ },
99
+ platforms: ['slack'],
100
+ scopes: ['group'],
101
+ permissionLevel: 'group_admin',
102
+ execute: async (args) => {
103
+ const { bot: botId, channel, topic } = args;
104
+ const bot = this.bots.get(botId);
105
+ if (!bot) throw new Error(`Bot ${botId} 不存在`);
106
+ const success = await bot.setChannelTopic(channel, topic);
107
+ return { success, message: success ? `已设置频道话题` : '操作失败' };
108
+ },
109
+ });
110
+
111
+ // 归档频道
112
+ this.addTool({
113
+ name: 'slack_archive_channel',
114
+ description: '归档 Slack 频道',
115
+ parameters: {
116
+ type: 'object',
117
+ properties: {
118
+ bot: { type: 'string', description: 'Bot 名称' },
119
+ channel: { type: 'string', description: '频道 ID' },
120
+ },
121
+ required: ['bot', 'channel'],
122
+ },
123
+ platforms: ['slack'],
124
+ scopes: ['group'],
125
+ permissionLevel: 'group_admin',
126
+ execute: async (args) => {
127
+ const { bot: botId, channel } = args;
128
+ const bot = this.bots.get(botId);
129
+ if (!bot) throw new Error(`Bot ${botId} 不存在`);
130
+ const success = await bot.archiveChannel(channel);
131
+ return { success, message: success ? `已归档频道` : '操作失败' };
132
+ },
133
+ });
134
+
135
+ // 置顶消息
136
+ this.addTool({
137
+ name: 'slack_pin_message',
138
+ description: '置顶 Slack 消息',
139
+ parameters: {
140
+ type: 'object',
141
+ properties: {
142
+ bot: { type: 'string', description: 'Bot 名称' },
143
+ channel: { type: 'string', description: '频道 ID' },
144
+ timestamp: { type: 'string', description: '消息时间戳' },
145
+ },
146
+ required: ['bot', 'channel', 'timestamp'],
147
+ },
148
+ platforms: ['slack'],
149
+ scopes: ['group'],
150
+ permissionLevel: 'group_admin',
151
+ execute: async (args) => {
152
+ const { bot: botId, channel, timestamp } = args;
153
+ const bot = this.bots.get(botId);
154
+ if (!bot) throw new Error(`Bot ${botId} 不存在`);
155
+ const success = await bot.pinMessage(channel, timestamp);
156
+ return { success, message: success ? `已置顶消息` : '操作失败' };
157
+ },
158
+ });
159
+
160
+ // 添加反应
161
+ this.addTool({
162
+ name: 'slack_add_reaction',
163
+ description: '给 Slack 消息添加表情反应',
164
+ parameters: {
165
+ type: 'object',
166
+ properties: {
167
+ bot: { type: 'string', description: 'Bot 名称' },
168
+ channel: { type: 'string', description: '频道 ID' },
169
+ timestamp: { type: 'string', description: '消息时间戳' },
170
+ emoji: { type: 'string', description: '表情名称(不含冒号)' },
171
+ },
172
+ required: ['bot', 'channel', 'timestamp', 'emoji'],
173
+ },
174
+ platforms: ['slack'],
175
+ scopes: ['group', 'private'],
176
+ permissionLevel: 'user',
177
+ execute: async (args) => {
178
+ const { bot: botId, channel, timestamp, emoji } = args;
179
+ const bot = this.bots.get(botId);
180
+ if (!bot) throw new Error(`Bot ${botId} 不存在`);
181
+ const success = await bot.addReaction(channel, timestamp, emoji);
182
+ return { success, message: success ? `已添加反应 :${emoji}:` : '操作失败' };
183
+ },
184
+ });
185
+
186
+ // 移除表情反应
187
+ this.addTool({
188
+ name: 'slack_remove_reaction',
189
+ description: '移除 Slack 消息上的表情反应',
190
+ parameters: {
191
+ type: 'object',
192
+ properties: {
193
+ bot: { type: 'string', description: 'Bot 名称' },
194
+ channel_id: { type: 'string', description: '频道 ID' },
195
+ timestamp: { type: 'string', description: '消息时间戳' },
196
+ name: { type: 'string', description: '表情名称(如 thumbsup、heart)' },
197
+ },
198
+ required: ['bot', 'channel_id', 'timestamp', 'name'],
199
+ },
200
+ platforms: ['slack'],
201
+ scopes: ['group'],
202
+ permissionLevel: 'user',
203
+ execute: async (args) => {
204
+ const { bot: botId, channel_id, timestamp, name } = args;
205
+ const bot = this.bots.get(botId);
206
+ if (!bot) throw new Error(`Bot ${botId} 不存在`);
207
+ const success = await bot.removeReaction(channel_id, timestamp, name);
208
+ return { success, message: success ? `已移除反应 :${name}:` : '操作失败' };
209
+ },
210
+ });
211
+
212
+ // 取消置顶消息
213
+ this.addTool({
214
+ name: 'slack_unpin_message',
215
+ description: '取消 Slack 频道中消息的置顶',
216
+ parameters: {
217
+ type: 'object',
218
+ properties: {
219
+ bot: { type: 'string', description: 'Bot 名称' },
220
+ channel_id: { type: 'string', description: '频道 ID' },
221
+ timestamp: { type: 'string', description: '消息时间戳' },
222
+ },
223
+ required: ['bot', 'channel_id', 'timestamp'],
224
+ },
225
+ platforms: ['slack'],
226
+ scopes: ['group'],
227
+ permissionLevel: 'group_admin',
228
+ execute: async (args) => {
229
+ const { bot: botId, channel_id, timestamp } = args;
230
+ const bot = this.bots.get(botId);
231
+ if (!bot) throw new Error(`Bot ${botId} 不存在`);
232
+ const success = await bot.unpinMessage(channel_id, timestamp);
233
+ return { success, message: success ? '已取消置顶' : '操作失败' };
234
+ },
235
+ });
236
+
237
+ // 查询用户信息
238
+ this.addTool({
239
+ name: 'slack_user_info',
240
+ description: '查询 Slack 用户详细信息',
241
+ parameters: {
242
+ type: 'object',
243
+ properties: {
244
+ bot: { type: 'string', description: 'Bot 名称' },
245
+ user_id: { type: 'string', description: '用户 ID' },
246
+ },
247
+ required: ['bot', 'user_id'],
248
+ },
249
+ platforms: ['slack'],
250
+ scopes: ['group', 'private'],
251
+ permissionLevel: 'user',
252
+ execute: async (args) => {
253
+ const { bot: botId, user_id } = args;
254
+ const bot = this.bots.get(botId);
255
+ if (!bot) throw new Error(`Bot ${botId} 不存在`);
256
+ const user = await bot.getUserInfo(user_id);
257
+ return {
258
+ id: user.id,
259
+ name: user.name,
260
+ real_name: user.real_name,
261
+ display_name: user.profile?.display_name,
262
+ email: user.profile?.email,
263
+ is_admin: user.is_admin,
264
+ is_bot: user.is_bot,
265
+ status_text: user.profile?.status_text,
266
+ };
267
+ },
268
+ });
269
+
270
+ // 设置频道用途
271
+ this.addTool({
272
+ name: 'slack_set_purpose',
273
+ description: '设置 Slack 频道的用途/目的',
274
+ parameters: {
275
+ type: 'object',
276
+ properties: {
277
+ bot: { type: 'string', description: 'Bot 名称' },
278
+ channel_id: { type: 'string', description: '频道 ID' },
279
+ purpose: { type: 'string', description: '频道用途描述' },
280
+ },
281
+ required: ['bot', 'channel_id', 'purpose'],
282
+ },
283
+ platforms: ['slack'],
284
+ scopes: ['group'],
285
+ permissionLevel: 'group_admin',
286
+ execute: async (args) => {
287
+ const { bot: botId, channel_id, purpose } = args;
288
+ const bot = this.bots.get(botId);
289
+ if (!bot) throw new Error(`Bot ${botId} 不存在`);
290
+ const success = await bot.setChannelPurpose(channel_id, purpose);
291
+ return { success, message: success ? '频道用途已更新' : '操作失败' };
292
+ },
293
+ });
294
+
295
+ // 恢复归档频道
296
+ this.addTool({
297
+ name: 'slack_unarchive',
298
+ description: '恢复已归档的 Slack 频道',
299
+ parameters: {
300
+ type: 'object',
301
+ properties: {
302
+ bot: { type: 'string', description: 'Bot 名称' },
303
+ channel_id: { type: 'string', description: '频道 ID' },
304
+ },
305
+ required: ['bot', 'channel_id'],
306
+ },
307
+ platforms: ['slack'],
308
+ scopes: ['group'],
309
+ permissionLevel: 'group_admin',
310
+ execute: async (args) => {
311
+ const { bot: botId, channel_id } = args;
312
+ const bot = this.bots.get(botId);
313
+ if (!bot) throw new Error(`Bot ${botId} 不存在`);
314
+ const success = await bot.unarchiveChannel(channel_id);
315
+ return { success, message: success ? '频道已恢复' : '操作失败' };
316
+ },
317
+ });
318
+
319
+ this.plugin.logger.debug('已注册 Slack 平台工作区管理工具');
320
+ }
321
+ }
package/src/bot.ts ADDED
@@ -0,0 +1,691 @@
1
+ /**
2
+ * Slack Bot 实现
3
+ */
4
+ import { App as SlackApp, LogLevel } from "@slack/bolt";
5
+ import { WebClient, type ChatPostMessageArguments } from "@slack/web-api";
6
+ import {
7
+ Bot,
8
+ Message,
9
+ SendOptions,
10
+ SendContent,
11
+ MessageSegment,
12
+ segment,
13
+ } from "zhin.js";
14
+ import type { SlackBotConfig, SlackMessageEvent } from "./types.js";
15
+ import type { SlackAdapter } from "./adapter.js";
16
+
17
+
18
+ export class SlackBot implements Bot<SlackBotConfig, SlackMessageEvent> {
19
+ $connected: boolean;
20
+ private app: SlackApp;
21
+ private client: WebClient;
22
+
23
+ get logger() {
24
+ return this.adapter.plugin.logger;
25
+ }
26
+
27
+ get $id() {
28
+ return this.$config.name;
29
+ }
30
+
31
+ constructor(public adapter: SlackAdapter, public $config: SlackBotConfig) {
32
+ this.$connected = false;
33
+
34
+ // Initialize Slack app
35
+ if ($config.socketMode && $config.appToken) {
36
+ // Socket Mode
37
+ this.app = new SlackApp({
38
+ token: $config.token,
39
+ signingSecret: $config.signingSecret,
40
+ appToken: $config.appToken,
41
+ socketMode: true,
42
+ logLevel: $config.logLevel || LogLevel.INFO,
43
+ });
44
+ } else {
45
+ // HTTP Mode
46
+ this.app = new SlackApp({
47
+ token: $config.token,
48
+ signingSecret: $config.signingSecret,
49
+ socketMode: false,
50
+ logLevel: $config.logLevel || LogLevel.INFO,
51
+ });
52
+ }
53
+
54
+ this.client = new WebClient($config.token);
55
+ }
56
+
57
+ async $connect(): Promise<void> {
58
+ try {
59
+ // Set up message event handler
60
+ this.app.message(async ({ message, say }) => {
61
+ await this.handleSlackMessage(message as SlackMessageEvent);
62
+ });
63
+
64
+ // Set up app mention handler
65
+ this.app.event("app_mention", async ({ event, say }) => {
66
+ await this.handleSlackMessage(event as any);
67
+ });
68
+
69
+ // Start the app
70
+ const port = this.$config.port || 3000;
71
+ if (this.$config.socketMode) {
72
+ await this.app.start();
73
+ } else {
74
+ await this.app.start(port);
75
+ }
76
+
77
+ this.$connected = true;
78
+
79
+ // Get bot info
80
+ const authTest = await this.client.auth.test();
81
+ this.logger.info(
82
+ `Slack bot ${this.$config.name} connected successfully as @${authTest.user}`
83
+ );
84
+
85
+ if (!this.$config.socketMode) {
86
+ this.logger.info(`Slack bot listening on port ${port}`);
87
+ }
88
+ } catch (error) {
89
+ this.logger.error("Failed to connect Slack bot:", error);
90
+ this.$connected = false;
91
+ throw error;
92
+ }
93
+ }
94
+
95
+ async $disconnect(): Promise<void> {
96
+ try {
97
+ await this.app.stop();
98
+ this.$connected = false;
99
+ this.logger.info(`Slack bot ${this.$config.name} disconnected`);
100
+ } catch (error) {
101
+ this.logger.error("Error disconnecting Slack bot:", error);
102
+ throw error;
103
+ }
104
+ }
105
+
106
+ private async handleSlackMessage(msg: SlackMessageEvent): Promise<void> {
107
+ // Ignore bot messages and message changes
108
+ if ("subtype" in msg && (msg.subtype === "bot_message" || msg.subtype === "message_changed")) {
109
+ return;
110
+ }
111
+
112
+ const message = this.$formatMessage(msg);
113
+ this.adapter.emit("message.receive", message);
114
+ this.logger.debug(
115
+ `${this.$config.name} recv ${message.$channel.type}(${message.$channel.id}): ${segment.raw(message.$content)}`
116
+ );
117
+ }
118
+
119
+ $formatMessage(msg: SlackMessageEvent): Message<SlackMessageEvent> {
120
+ // Determine channel type based on channel ID
121
+ const channelType = "channel_type" in msg && msg.channel_type === "im" ? "private" : "group";
122
+ const channelId = msg.channel;
123
+
124
+ // Parse message content
125
+ const content = this.parseMessageContent(msg);
126
+
127
+ // Extract user info safely
128
+ const userId = ("user" in msg ? msg.user : "") || "";
129
+ const userName = ("username" in msg ? msg.username : null) || userId || "Unknown";
130
+ const messageText = ("text" in msg ? msg.text : "") || "";
131
+
132
+ const result = Message.from(msg, {
133
+ $id: msg.ts,
134
+ $adapter: "slack",
135
+ $bot: this.$config.name,
136
+ $sender: {
137
+ id: userId,
138
+ name: userName,
139
+ },
140
+ $channel: {
141
+ id: channelId,
142
+ type: channelType,
143
+ },
144
+ $content: content,
145
+ $raw: messageText,
146
+ $timestamp: parseFloat(msg.ts) * 1000,
147
+ $recall: async () => {
148
+ try {
149
+ await this.client.chat.delete({
150
+ channel: channelId,
151
+ ts: result.$id,
152
+ });
153
+ } catch (error) {
154
+ this.logger.error("Error recalling Slack message:", error);
155
+ throw error;
156
+ }
157
+ },
158
+ $reply: async (
159
+ content: SendContent,
160
+ quote?: boolean | string
161
+ ): Promise<string> => {
162
+ if (!Array.isArray(content)) content = [content];
163
+
164
+ const sendOptions: Partial<ChatPostMessageArguments> = {
165
+ channel: channelId,
166
+ };
167
+
168
+ // Handle thread reply
169
+ if (quote) {
170
+ const threadTs = typeof quote === "boolean" ? result.$id : quote;
171
+ sendOptions.thread_ts = threadTs;
172
+ }
173
+
174
+ return await this.adapter.sendMessage({
175
+ context: "slack",
176
+ bot: this.$config.name,
177
+ id: channelId,
178
+ type: "channel",
179
+ content: content,
180
+ });
181
+ },
182
+ });
183
+
184
+ return result;
185
+ }
186
+
187
+ private parseMessageContent(msg: SlackMessageEvent): MessageSegment[] {
188
+ const segments: MessageSegment[] = [];
189
+
190
+ // Handle text
191
+ if ("text" in msg && msg.text) {
192
+ // Parse Slack formatting
193
+ segments.push(...this.parseSlackText(msg.text));
194
+ }
195
+
196
+ // Handle files
197
+ if ("files" in msg && msg.files) {
198
+ for (const file of msg.files) {
199
+ if (file.mimetype?.startsWith("image/")) {
200
+ segments.push({
201
+ type: "image",
202
+ data: {
203
+ id: file.id,
204
+ name: file.name,
205
+ url: file.url_private || file.permalink,
206
+ size: file.size,
207
+ mimetype: file.mimetype,
208
+ },
209
+ });
210
+ } else if (file.mimetype?.startsWith("video/")) {
211
+ segments.push({
212
+ type: "video",
213
+ data: {
214
+ id: file.id,
215
+ name: file.name,
216
+ url: file.url_private || file.permalink,
217
+ size: file.size,
218
+ mimetype: file.mimetype,
219
+ },
220
+ });
221
+ } else if (file.mimetype?.startsWith("audio/")) {
222
+ segments.push({
223
+ type: "audio",
224
+ data: {
225
+ id: file.id,
226
+ name: file.name,
227
+ url: file.url_private || file.permalink,
228
+ size: file.size,
229
+ mimetype: file.mimetype,
230
+ },
231
+ });
232
+ } else {
233
+ segments.push({
234
+ type: "file",
235
+ data: {
236
+ id: file.id,
237
+ name: file.name,
238
+ url: file.url_private || file.permalink,
239
+ size: file.size,
240
+ mimetype: file.mimetype,
241
+ },
242
+ });
243
+ }
244
+ }
245
+ }
246
+
247
+ // Handle attachments
248
+ if ("attachments" in msg && msg.attachments) {
249
+ for (const attachment of msg.attachments) {
250
+ if (attachment.image_url) {
251
+ segments.push({
252
+ type: "image",
253
+ data: {
254
+ url: attachment.image_url,
255
+ title: attachment.title,
256
+ text: attachment.text,
257
+ },
258
+ });
259
+ }
260
+ }
261
+ }
262
+
263
+ return segments.length > 0
264
+ ? segments
265
+ : [{ type: "text", data: { text: "" } }];
266
+ }
267
+
268
+ private parseSlackText(text: string): MessageSegment[] {
269
+ const segments: MessageSegment[] = [];
270
+ let lastIndex = 0;
271
+
272
+ // Match user mentions <@U12345678>
273
+ const userMentionRegex = /<@([UW][A-Z0-9]+)(?:\|([^>]+))?>/g;
274
+ // Match channel mentions <#C12345678|general>
275
+ const channelMentionRegex = /<#([C][A-Z0-9]+)(?:\|([^>]+))?>/g;
276
+ // Match links <http://example.com|Example>
277
+ const linkRegex = /<(https?:\/\/[^|>]+)(?:\|([^>]+))?>/g;
278
+
279
+ const allMatches: Array<{
280
+ match: RegExpExecArray;
281
+ type: "user" | "channel" | "link";
282
+ }> = [];
283
+
284
+ // Collect all matches
285
+ let match;
286
+ while ((match = userMentionRegex.exec(text)) !== null) {
287
+ allMatches.push({ match, type: "user" });
288
+ }
289
+ while ((match = channelMentionRegex.exec(text)) !== null) {
290
+ allMatches.push({ match, type: "channel" });
291
+ }
292
+ while ((match = linkRegex.exec(text)) !== null) {
293
+ allMatches.push({ match, type: "link" });
294
+ }
295
+
296
+ // Sort by position
297
+ allMatches.sort((a, b) => a.match.index! - b.match.index!);
298
+
299
+ // Process matches
300
+ for (const { match, type } of allMatches) {
301
+ const matchStart = match.index!;
302
+ const matchEnd = matchStart + match[0].length;
303
+
304
+ // Add text before match
305
+ if (matchStart > lastIndex) {
306
+ const beforeText = text.slice(lastIndex, matchStart);
307
+ if (beforeText.trim()) {
308
+ segments.push({ type: "text", data: { text: beforeText } });
309
+ }
310
+ }
311
+
312
+ // Add special segment
313
+ switch (type) {
314
+ case "user":
315
+ segments.push({
316
+ type: "at",
317
+ data: {
318
+ id: match[1],
319
+ name: match[2] || match[1],
320
+ text: match[0],
321
+ },
322
+ });
323
+ break;
324
+
325
+ case "channel":
326
+ segments.push({
327
+ type: "channel_mention",
328
+ data: {
329
+ id: match[1],
330
+ name: match[2] || match[1],
331
+ text: match[0],
332
+ },
333
+ });
334
+ break;
335
+
336
+ case "link":
337
+ segments.push({
338
+ type: "link",
339
+ data: {
340
+ url: match[1],
341
+ text: match[2] || match[1],
342
+ },
343
+ });
344
+ break;
345
+ }
346
+
347
+ lastIndex = matchEnd;
348
+ }
349
+
350
+ // Add remaining text
351
+ if (lastIndex < text.length) {
352
+ const remainingText = text.slice(lastIndex);
353
+ if (remainingText.trim()) {
354
+ segments.push({ type: "text", data: { text: remainingText } });
355
+ }
356
+ }
357
+
358
+ return segments.length > 0
359
+ ? segments
360
+ : [{ type: "text", data: { text } }];
361
+ }
362
+
363
+ async $sendMessage(options: SendOptions): Promise<string> {
364
+ try {
365
+ const result = await this.sendContentToChannel(
366
+ options.id,
367
+ options.content
368
+ );
369
+ this.logger.debug(
370
+ `${this.$config.name} send ${options.type}(${options.id}): ${segment.raw(options.content)}`
371
+ );
372
+ return result.ts || "";
373
+ } catch (error) {
374
+ this.logger.error("Failed to send Slack message:", error);
375
+ throw error;
376
+ }
377
+ }
378
+
379
+ private async sendContentToChannel(
380
+ channel: string,
381
+ content: SendContent,
382
+ extraOptions: Partial<ChatPostMessageArguments> = {}
383
+ ): Promise<any> {
384
+ if (!Array.isArray(content)) content = [content];
385
+
386
+ let textContent = "";
387
+ const attachments: any[] = [];
388
+
389
+ for (const segment of content) {
390
+ if (typeof segment === "string") {
391
+ textContent += segment;
392
+ continue;
393
+ }
394
+
395
+ const { type, data } = segment;
396
+
397
+ switch (type) {
398
+ case "text":
399
+ textContent += data.text || "";
400
+ break;
401
+
402
+ case "at":
403
+ textContent += `<@${data.id}>`;
404
+ break;
405
+
406
+ case "channel_mention":
407
+ textContent += `<#${data.id}>`;
408
+ break;
409
+
410
+ case "link":
411
+ if (data.text && data.text !== data.url) {
412
+ textContent += `<${data.url}|${data.text}>`;
413
+ } else {
414
+ textContent += `<${data.url}>`;
415
+ }
416
+ break;
417
+
418
+ case "image":
419
+ if (data.url) {
420
+ attachments.push({
421
+ image_url: data.url,
422
+ title: data.name || data.title,
423
+ });
424
+ }
425
+ break;
426
+
427
+ case "file":
428
+ // Files need to be uploaded separately
429
+ if (data.file) {
430
+ try {
431
+ await this.client.files.upload({
432
+ channels: channel,
433
+ file: data.file,
434
+ filename: data.name,
435
+ });
436
+ } catch (error) {
437
+ this.logger.error("Failed to upload file:", error);
438
+ }
439
+ }
440
+ break;
441
+
442
+ default:
443
+ textContent += data.text || `[${type}]`;
444
+ }
445
+ }
446
+
447
+ // Send message
448
+ const messageOptions: any = {
449
+ channel,
450
+ text: textContent.trim() || "Message",
451
+ ...extraOptions,
452
+ };
453
+
454
+ if (attachments.length > 0) {
455
+ messageOptions.attachments = attachments;
456
+ }
457
+
458
+ const result = await this.client.chat.postMessage(messageOptions as ChatPostMessageArguments);
459
+ return result.message || {};
460
+ }
461
+
462
+ async $recallMessage(id: string): Promise<void> {
463
+ // Slack requires both channel and ts (timestamp) to delete a message
464
+ // The Bot interface only provides message ID (ts), making recall impossible
465
+ // Users should use message.$recall() instead, which has the full context
466
+ throw new Error(
467
+ "SlackBot.$recallMessage: Message recall not supported without channel information. " +
468
+ "Use message.$recall() method instead, which contains the required context."
469
+ );
470
+ }
471
+
472
+ // ==================== 工作区管理 API ====================
473
+
474
+ /**
475
+ * 邀请用户到频道
476
+ * @param channel 频道 ID
477
+ * @param users 用户 ID 列表
478
+ */
479
+ async inviteToChannel(channel: string, users: string[]): Promise<boolean> {
480
+ try {
481
+ await this.client.conversations.invite({ channel, users: users.join(',') });
482
+ this.logger.info(`Slack Bot ${this.$id} 邀请用户 ${users.join(',')} 到频道 ${channel}`);
483
+ return true;
484
+ } catch (error) {
485
+ this.logger.error(`Slack Bot ${this.$id} 邀请用户失败:`, error);
486
+ throw error;
487
+ }
488
+ }
489
+
490
+ /**
491
+ * 从频道踢出用户
492
+ * @param channel 频道 ID
493
+ * @param user 用户 ID
494
+ */
495
+ async kickFromChannel(channel: string, user: string): Promise<boolean> {
496
+ try {
497
+ await this.client.conversations.kick({ channel, user });
498
+ this.logger.info(`Slack Bot ${this.$id} 将用户 ${user} 从频道 ${channel} 踢出`);
499
+ return true;
500
+ } catch (error) {
501
+ this.logger.error(`Slack Bot ${this.$id} 踢出用户失败:`, error);
502
+ throw error;
503
+ }
504
+ }
505
+
506
+ /**
507
+ * 设置频道话题
508
+ * @param channel 频道 ID
509
+ * @param topic 话题
510
+ */
511
+ async setChannelTopic(channel: string, topic: string): Promise<boolean> {
512
+ try {
513
+ await this.client.conversations.setTopic({ channel, topic });
514
+ this.logger.info(`Slack Bot ${this.$id} 设置频道 ${channel} 话题为 "${topic}"`);
515
+ return true;
516
+ } catch (error) {
517
+ this.logger.error(`Slack Bot ${this.$id} 设置话题失败:`, error);
518
+ throw error;
519
+ }
520
+ }
521
+
522
+ /**
523
+ * 设置频道目的
524
+ * @param channel 频道 ID
525
+ * @param purpose 目的
526
+ */
527
+ async setChannelPurpose(channel: string, purpose: string): Promise<boolean> {
528
+ try {
529
+ await this.client.conversations.setPurpose({ channel, purpose });
530
+ this.logger.info(`Slack Bot ${this.$id} 设置频道 ${channel} 目的`);
531
+ return true;
532
+ } catch (error) {
533
+ this.logger.error(`Slack Bot ${this.$id} 设置目的失败:`, error);
534
+ throw error;
535
+ }
536
+ }
537
+
538
+ /**
539
+ * 归档频道
540
+ * @param channel 频道 ID
541
+ */
542
+ async archiveChannel(channel: string): Promise<boolean> {
543
+ try {
544
+ await this.client.conversations.archive({ channel });
545
+ this.logger.info(`Slack Bot ${this.$id} 归档频道 ${channel}`);
546
+ return true;
547
+ } catch (error) {
548
+ this.logger.error(`Slack Bot ${this.$id} 归档频道失败:`, error);
549
+ throw error;
550
+ }
551
+ }
552
+
553
+ /**
554
+ * 取消归档频道
555
+ * @param channel 频道 ID
556
+ */
557
+ async unarchiveChannel(channel: string): Promise<boolean> {
558
+ try {
559
+ await this.client.conversations.unarchive({ channel });
560
+ this.logger.info(`Slack Bot ${this.$id} 取消归档频道 ${channel}`);
561
+ return true;
562
+ } catch (error) {
563
+ this.logger.error(`Slack Bot ${this.$id} 取消归档失败:`, error);
564
+ throw error;
565
+ }
566
+ }
567
+
568
+ /**
569
+ * 重命名频道
570
+ * @param channel 频道 ID
571
+ * @param name 新名称
572
+ */
573
+ async renameChannel(channel: string, name: string): Promise<boolean> {
574
+ try {
575
+ await this.client.conversations.rename({ channel, name });
576
+ this.logger.info(`Slack Bot ${this.$id} 重命名频道 ${channel} 为 "${name}"`);
577
+ return true;
578
+ } catch (error) {
579
+ this.logger.error(`Slack Bot ${this.$id} 重命名频道失败:`, error);
580
+ throw error;
581
+ }
582
+ }
583
+
584
+ /**
585
+ * 获取频道成员列表
586
+ * @param channel 频道 ID
587
+ */
588
+ async getChannelMembers(channel: string): Promise<string[]> {
589
+ try {
590
+ const result = await this.client.conversations.members({ channel });
591
+ return result.members || [];
592
+ } catch (error) {
593
+ this.logger.error(`Slack Bot ${this.$id} 获取成员列表失败:`, error);
594
+ throw error;
595
+ }
596
+ }
597
+
598
+ /**
599
+ * 获取频道信息
600
+ * @param channel 频道 ID
601
+ */
602
+ async getChannelInfo(channel: string): Promise<any> {
603
+ try {
604
+ const result = await this.client.conversations.info({ channel });
605
+ return result.channel;
606
+ } catch (error) {
607
+ this.logger.error(`Slack Bot ${this.$id} 获取频道信息失败:`, error);
608
+ throw error;
609
+ }
610
+ }
611
+
612
+ /**
613
+ * 获取用户信息
614
+ * @param user 用户 ID
615
+ */
616
+ async getUserInfo(user: string): Promise<any> {
617
+ try {
618
+ const result = await this.client.users.info({ user });
619
+ return result.user;
620
+ } catch (error) {
621
+ this.logger.error(`Slack Bot ${this.$id} 获取用户信息失败:`, error);
622
+ throw error;
623
+ }
624
+ }
625
+
626
+ /**
627
+ * 添加消息反应
628
+ * @param channel 频道 ID
629
+ * @param timestamp 消息时间戳
630
+ * @param name 表情名称
631
+ */
632
+ async addReaction(channel: string, timestamp: string, name: string): Promise<boolean> {
633
+ try {
634
+ await this.client.reactions.add({ channel, timestamp, name });
635
+ this.logger.info(`Slack Bot ${this.$id} 添加反应 :${name}: 到消息`);
636
+ return true;
637
+ } catch (error) {
638
+ this.logger.error(`Slack Bot ${this.$id} 添加反应失败:`, error);
639
+ throw error;
640
+ }
641
+ }
642
+
643
+ /**
644
+ * 移除消息反应
645
+ * @param channel 频道 ID
646
+ * @param timestamp 消息时间戳
647
+ * @param name 表情名称
648
+ */
649
+ async removeReaction(channel: string, timestamp: string, name: string): Promise<boolean> {
650
+ try {
651
+ await this.client.reactions.remove({ channel, timestamp, name });
652
+ this.logger.info(`Slack Bot ${this.$id} 移除反应 :${name}:`);
653
+ return true;
654
+ } catch (error) {
655
+ this.logger.error(`Slack Bot ${this.$id} 移除反应失败:`, error);
656
+ throw error;
657
+ }
658
+ }
659
+
660
+ /**
661
+ * 置顶消息
662
+ * @param channel 频道 ID
663
+ * @param timestamp 消息时间戳
664
+ */
665
+ async pinMessage(channel: string, timestamp: string): Promise<boolean> {
666
+ try {
667
+ await this.client.pins.add({ channel, timestamp });
668
+ this.logger.info(`Slack Bot ${this.$id} 置顶消息(频道 ${channel})`);
669
+ return true;
670
+ } catch (error) {
671
+ this.logger.error(`Slack Bot ${this.$id} 置顶消息失败:`, error);
672
+ throw error;
673
+ }
674
+ }
675
+
676
+ /**
677
+ * 取消置顶消息
678
+ * @param channel 频道 ID
679
+ * @param timestamp 消息时间戳
680
+ */
681
+ async unpinMessage(channel: string, timestamp: string): Promise<boolean> {
682
+ try {
683
+ await this.client.pins.remove({ channel, timestamp });
684
+ this.logger.info(`Slack Bot ${this.$id} 取消置顶消息`);
685
+ return true;
686
+ } catch (error) {
687
+ this.logger.error(`Slack Bot ${this.$id} 取消置顶失败:`, error);
688
+ throw error;
689
+ }
690
+ }
691
+ }
package/src/index.ts ADDED
@@ -0,0 +1,31 @@
1
+ /**
2
+ * Slack 适配器入口:类型扩展、导出、注册
3
+ */
4
+ import { usePlugin, type Plugin } from "zhin.js";
5
+ import { SlackAdapter } from "./adapter.js";
6
+
7
+ declare module "zhin.js" {
8
+ interface Adapters {
9
+ slack: SlackAdapter;
10
+ }
11
+ }
12
+
13
+ export * from "./types.js";
14
+ export { SlackBot } from "./bot.js";
15
+ export { SlackAdapter } from "./adapter.js";
16
+
17
+ const plugin = usePlugin();
18
+ const { provide } = plugin;
19
+
20
+ provide({
21
+ name: "slack",
22
+ description: "Slack Bot Adapter",
23
+ mounted: async (p: Plugin) => {
24
+ const adapter = new SlackAdapter(p);
25
+ await adapter.start();
26
+ return adapter;
27
+ },
28
+ dispose: async (adapter: SlackAdapter) => {
29
+ await adapter.stop();
30
+ },
31
+ });
package/src/types.ts ADDED
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Slack 适配器类型定义
3
+ */
4
+ import type { LogLevel } from "@slack/bolt";
5
+ import type { KnownEventFromType } from "@slack/bolt";
6
+
7
+ export interface SlackBotConfig {
8
+ context: "slack";
9
+ token: string;
10
+ name: string;
11
+ signingSecret: string;
12
+ appToken?: string;
13
+ socketMode?: boolean;
14
+ port?: number;
15
+ logLevel?: LogLevel;
16
+ }
17
+
18
+ export type SlackMessageEvent = KnownEventFromType<"message">;