@hubot-friends/hubot-slack 3.1.1 → 3.1.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.
package/README.md CHANGED
@@ -71,8 +71,6 @@ Need to following events:
71
71
  - message.groups
72
72
  - message.mpim
73
73
 
74
- Then you'll have to install the Bot to your workspace. It's under the "OAuth Tokens" section on the same page. That's the Bot Token you'll need.
75
-
76
74
  ## Sample YAML
77
75
  The following YAML manifest will work.
78
76
 
package/package.json CHANGED
@@ -1,12 +1,13 @@
1
1
  {
2
2
  "name": "@hubot-friends/hubot-slack",
3
- "version": "3.1.1",
3
+ "version": "3.1.3",
4
4
  "description": "A new Slack adapter for Hubot",
5
5
  "homepage": "https://github.com/hubot-friends/hubot-slack#readme",
6
6
  "main": "./index.mjs",
7
7
  "scripts": {
8
8
  "test": "node --test",
9
- "test:watch": "node --test --watch"
9
+ "test:watch": "node --test --watch",
10
+ "test:integration": "node --test --env-file=.env"
10
11
  },
11
12
  "keywords": [
12
13
  "hubot",
package/src/Bot.mjs CHANGED
@@ -237,7 +237,8 @@ class SlackBot extends Adapter {
237
237
  }
238
238
 
239
239
  this.client.socket.on('connected', () => {
240
- this.robot.emit('connected');
240
+ this.emit('connected');
241
+ this.robot.emit('connected')
241
242
  });
242
243
 
243
244
  // Start logging in
@@ -172,16 +172,15 @@ class SlackAdapter extends Adapter {
172
172
  }
173
173
  async mapToHubotMessage(event) {
174
174
  // console.error(event)
175
- const getUser = event.user ? this.#webClient.users.info.bind(this.#webClient.users.info) : this.#webClient.bots.info.bind(this.#webClient.bots.info)
176
- const lookUpId = event.user ?? event.bot_id
177
- const queryParameter = event.user ? { user: event.user } : { bot: event.bot_id }
178
- const fromBrain = this.robot.brain.users()[lookUpId]
175
+ const fromBrain = this.robot.brain.users()[event.user]
179
176
  if(!fromBrain) {
180
- const response = await getUser(queryParameter)
181
- this.robot.brain.userForId(lookUpId, response.user ?? response.bot)
177
+ const response = await this.#webClient.users.info({
178
+ user: event.user
179
+ })
180
+ this.robot.brain.userForId(event.user, response.user)
182
181
  }
183
- const fromUser = this.robot.brain.users()[lookUpId]
184
- return new TextMessage(new User(lookUpId, {
182
+ const fromUser = this.robot.brain.users()[event.user]
183
+ return new TextMessage(new User(event.user, {
185
184
  room: event.channel,
186
185
  name: fromUser.name
187
186
  }), event.text, event.ts)
@@ -5,9 +5,7 @@ import { Robot, TextMessage } from 'hubot'
5
5
  import EventEmitter from 'node:events'
6
6
 
7
7
  const BOT_ID = 'U0AAATTTTTAAAAA'
8
- const SOME_USER_ID = 'U123ABC456'
9
- const WORKFLOW_BOT_ID = 'BB12033'
10
- const APP_ID = 'ASADFASDFASDDDS'
8
+
11
9
  class SlackClientMock extends EventEmitter {
12
10
  #useRtmConnect = false
13
11
  #delegate = null
@@ -24,27 +22,10 @@ class SlackClientMock extends EventEmitter {
24
22
  this.emit('authenticated', new Error('Not authenticated'))
25
23
  }
26
24
  }
27
- const buildATestBot = id => ({
28
- ok: true,
29
- bot: {
30
- id: id,
31
- deleted: false,
32
- name: "beforebot",
33
- updated: 1449272004,
34
- app_id: "A123456",
35
- user_id: "U123456",
36
- icons: {
37
- image_36: "https://...",
38
- image_48: "https://...",
39
- image_72: "https://..."
40
- }
41
- }
42
- })
43
-
44
25
  const buildATestUser = () => ({
45
26
  ok: true,
46
27
  user: {
47
- id: SOME_USER_ID,
28
+ id: 'U123ABC456',
48
29
  team_id: 'TASDASDFSDD',
49
30
  name: 'bossdog',
50
31
  deleted: false,
@@ -109,61 +90,6 @@ const buildATestUser = () => ({
109
90
  }
110
91
  })
111
92
 
112
- const buildSlackMessageFromBot = (event, toBotId) => ({
113
- ack: () => {},
114
- envelope_id: 'e9b92395-bedd-4da7',
115
- body: {
116
- token: 'ASDFASFASDFASDFASDFASD',
117
- team_id: 'TASDASDFSDD',
118
- context_team_id: 'TASDASDFSDD',
119
- context_enterprise_id: null,
120
- api_app_id: 'ASADFASDFASDDDS',
121
- event: {
122
- subtype: 'bot_message',
123
- text: event?.text ?? `<@${toBotId}> help`,
124
- username: event?.username ?? 'Workflow',
125
- type: event?.type ?? 'message',
126
- bot_id: event?.bot_id ?? 'BB12033',
127
- app_id: event?.app_id ?? APP_ID,
128
- ts: event?.ts ?? '1688420854.574989',
129
- blocks: event?.blocks ?? [],
130
- channel: event?.channel ?? 'CASDFASDFASDSD',
131
- event_ts: event?.ts ?? '1688420854.574989',
132
- channel_type: event.channel_type ?? 'channel'
133
- },
134
- type: 'event_callback',
135
- event_id: 'Ev05F9TNCNDB',
136
- event_time: 1688420854,
137
- authorizations: [
138
- {
139
- enterprise_id: null,
140
- team_id: 'TASDASDFSDD',
141
- user_id: toBotId,
142
- is_bot: true,
143
- is_enterprise_install: false
144
- }
145
- ],
146
- is_ext_shared_channel: false,
147
- event_context: '4-eyJldCI6Im'
148
- },
149
- event: {
150
- subtype: 'bot_message',
151
- text: event?.text ?? `<@${toBotId}> help`,
152
- username: event?.username ?? 'Workflow',
153
- type: event?.type ?? 'message',
154
- bot_id: event?.bot_id ?? 'BB12033',
155
- app_id: event?.app_id ?? APP_ID,
156
- ts: event?.ts ?? '1688420854.574989',
157
- blocks: event?.blocks ?? [],
158
- channel: event?.channel ?? 'CASDFASDFASDSD',
159
- event_ts: event?.ts ?? '1688420854.574989',
160
- channel_type: event.channel_type ?? 'channel'
161
- },
162
- retry_num: 0,
163
- retry_reason: '',
164
- accepts_response_payload: false
165
- })
166
-
167
93
  const buildSlackMessage = event => ({
168
94
  ack: () => {},
169
95
  envelope_id: 'e9b92395-bedd-4da7',
@@ -177,7 +103,7 @@ const buildSlackMessage = event => ({
177
103
  client_msg_id: event?.messageId ?? 'be201e20-d035-44dc-a0e2',
178
104
  type: event?.type ?? 'message',
179
105
  text: event?.text ?? `<@${BOT_ID}> help`,
180
- user: event?.user ?? SOME_USER_ID,
106
+ user: event?.user ?? 'U123ABC456',
181
107
  ts: event?.ts ?? '1688420854.574989',
182
108
  blocks: event?.blocks ?? [],
183
109
  team: event?.team ?? 'TASDASDFSDD',
@@ -196,7 +122,7 @@ const buildSlackMessage = event => ({
196
122
  client_msg_id: event?.messageId ?? 'be201e20-d035-44dc-a0e2-befc2b5bd13d',
197
123
  type: event?.type ?? 'message',
198
124
  text: event?.text ?? `<@${BOT_ID}> help`,
199
- user: event?.user ?? SOME_USER_ID,
125
+ user: event?.user ?? 'U123ABC456',
200
126
  ts: event?.ts ?? '1688420854.574989',
201
127
  blocks: event?.blocks ?? [],
202
128
  team: event?.team ?? 'TASDASDFSDD',
@@ -216,7 +142,7 @@ const authenticatedPerson = obj => ({
216
142
  name: 'Team Name'
217
143
  },
218
144
  self: {
219
- id: SOME_USER_ID,
145
+ id: BOT_ID,
220
146
  token: 'fake-token',
221
147
  }
222
148
  })
@@ -224,9 +150,9 @@ const authenticatedPerson = obj => ({
224
150
  const token = 'some-fake-token'
225
151
  const makeRobot = (delegate, webClientMock = {}) => {
226
152
  const robot = new Robot('Slack', false, 'hubot')
227
- robot.brain.data.users[SOME_USER_ID] = {
228
- id: SOME_USER_ID,
229
- name: 'not hubot',
153
+ robot.brain.data.users['U123ABC456'] = {
154
+ id: 'U123ABC456',
155
+ name: 'hubot',
230
156
  room: 'CASDFASDFASDSD'
231
157
  }
232
158
 
@@ -309,12 +235,6 @@ describe('Listen to messages', async () => {
309
235
  async start(adapter) {
310
236
  adapter.emit('authenticated', authenticatedPerson(), null)
311
237
  }
312
- }, {
313
- users: {
314
- info(params) {
315
- return buildATestUser()
316
- }
317
- }
318
238
  })
319
239
  await robot.run()
320
240
  })
@@ -337,11 +257,11 @@ describe('Listen to messages', async () => {
337
257
  assert.ok(true, 'should be called for message')
338
258
  })
339
259
  const message = await robot.adapter.mapToHubotMessage(buildSlackMessage({
340
- type: 'message',
341
- channel: 'C123ABC456',
342
- user: 'U123ABC456',
343
- text: 'Hello world',
344
- ts: 1355517523.000005
260
+ "type": "message",
261
+ "channel": "C123ABC456",
262
+ "user": "U123ABC456",
263
+ "text": "Hello world",
264
+ "ts": "1355517523.000005"
345
265
  }).event)
346
266
  await robot.receive(message)
347
267
  assert.deepEqual(wasCalled, true)
@@ -417,57 +337,4 @@ describe('Send messages back', async () => {
417
337
  assert.deepEqual(wasCalled, true)
418
338
  robot.shutdown()
419
339
  })
420
-
421
- it('should reply to a message that was sent by a different bot, like Workflow situations', async () => {
422
- let wasCalled = false
423
- const robot = makeRobot({
424
- async start(adapter) {
425
- adapter.emit('authenticated', authenticatedPerson(), null)
426
- }
427
- }, {
428
- chat: {
429
- async postMessage({ channel, text }) {
430
- assert.deepEqual(channel, 'C123ABC456')
431
- assert.deepEqual(text, 'hi')
432
- }
433
- },
434
- bots: {
435
- info(params) {
436
- return buildATestBot(WORKFLOW_BOT_ID)
437
- }
438
- },
439
- auth: {
440
- test() {
441
- return {
442
- user_id: BOT_ID,
443
- user: 'hubot',
444
- team_id: 'T12345678',
445
- team: 'Team Name'
446
- }
447
- }
448
- }
449
- })
450
- robot.respond(/deploy (?<appName>.*) (?<environment>.*)/i, {id: 'message responder'},
451
- context => {
452
- console.log('called', context.message)
453
- assert.deepEqual(context.message.text, '@hubot deploy redirector staging --version main-d349664')
454
- context.reply('deploying')
455
- robot.shutdown()
456
- wasCalled = true
457
- })
458
- await robot.run()
459
- const message = await robot.adapter.mapToHubotMessage(buildSlackMessageFromBot(
460
- {
461
- type: "message",
462
- ts: 1355517523.000005,
463
- text: `<@${BOT_ID}> deploy redirector staging --version main-d349664`,
464
- bot_id: WORKFLOW_BOT_ID,
465
- username: "github",
466
- icons: {}
467
- }, BOT_ID).event)
468
- message.text = robot.adapter.replaceBotIdWithName(message)
469
- await robot.receive(message)
470
- robot.shutdown()
471
- assert.deepEqual(wasCalled, true)
472
- })
473
340
  })
package/test/Bot.mjs CHANGED
@@ -747,4 +747,4 @@ describe('Users data', () => {
747
747
  slackbot.usersLoaded(null, stubs.wrongResponseUsersList)
748
748
  assert.deepEqual(slackbot.robot.brain.data.users[stubs.user.id], undefined)
749
749
  })
750
- })
750
+ })
@@ -4,7 +4,9 @@ import { Robot, TextMessage, User } from 'hubot'
4
4
 
5
5
  import adapter from '../index.mjs'
6
6
 
7
- await test('long running script test', { timeout: 30 * 1000 }, async t => {
7
+ // Skip this test because it requires real Slack tokens which I provide via a .env file
8
+ // when testing locally. Not going to run this on CI for now.
9
+ await test('long running script test', { timeout: 30 * 1000, skip: true }, async t => {
8
10
  await t.test('Should dedup messages', (t, done) => {
9
11
  const robot = new Robot(adapter, false, 'gbot')
10
12
  let counter = 0
package/test/Stubs.mjs CHANGED
@@ -202,6 +202,7 @@ export default () => {
202
202
  connected: false,
203
203
  async start() {
204
204
  this.connected = true
205
+ this.emit('connected')
205
206
  },
206
207
  disconnect() {
207
208
  this.connected = false