Skip to content
This repository was archived by the owner on May 27, 2025. It is now read-only.

Commit 55d41be

Browse files
authored
Merge pull request #513 from aoberoi/feat-reliable-enter-and-leave
swaps out rtm message subtypes for discreet messages for enter and leave
2 parents 407a209 + 23ed052 commit 55d41be

3 files changed

Lines changed: 21 additions & 27 deletions

File tree

src/bot.coffee

Lines changed: 13 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ class SlackBot extends Adapter
5050
@client.loadUsers @usersLoaded
5151
else
5252
@isLoaded = true
53-
53+
5454
# Brain will emit 'loaded' the first time it connects to its storage and then again each time a key is set
5555
@robot.brain.on "loaded", () =>
5656
if not @brainIsLoaded
@@ -239,16 +239,6 @@ class SlackBot extends Adapter
239239
@receive message
240240
)
241241

242-
# NOTE: channel_join should be replaced with a member_joined_channel event
243-
when "channel_join", "group_join"
244-
@robot.logger.debug "Received enter message for user: #{user.id}, joining: #{channel}"
245-
@receive new EnterMessage user
246-
247-
# NOTE: channel_leave should be replaced with a member_left_channel event
248-
when "channel_leave", "group_leave"
249-
@robot.logger.debug "Received leave message for user: #{user.id}, leaving: #{channel}"
250-
@receive new LeaveMessage user
251-
252242
when "channel_topic", "group_topic"
253243
@robot.logger.debug "Received topic change message in conversation: #{channel}, new topic: #{event.topic}, set by: #{user.id}"
254244
@receive new TopicMessage user, event.topic, event.ts
@@ -260,6 +250,18 @@ class SlackBot extends Adapter
260250
@receive message
261251
)
262252

253+
else if event.type is "member_joined_channel"
254+
# this event type always has a channel
255+
user.room = channel
256+
@robot.logger.debug "Received enter message for user: #{user.id}, joining: #{channel}"
257+
@receive new EnterMessage user
258+
259+
else if event.type is "member_left_channel"
260+
# this event type always has a channel
261+
user.room = channel
262+
@robot.logger.debug "Received leave message for user: #{user.id}, joining: #{channel}"
263+
@receive new LeaveMessage user
264+
263265
else if event.type is "reaction_added" or event.type is "reaction_removed"
264266

265267
# Once again Hubot expects all user objects to have a room property that is used in the envelope for the message

src/client.coffee

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,8 @@ class SlackClient
5050
@rtm.on "reaction_added", @eventWrapper, this
5151
@rtm.on "reaction_removed", @eventWrapper, this
5252
@rtm.on "presence_change", @eventWrapper, this
53+
@rtm.on "member_joined_channel", @eventWrapper, this
54+
@rtm.on "member_left_channel", @eventWrapper, this
5355
@rtm.on "user_change", @updateUserInBrain, this
5456
@eventHandler = undefined
5557

test/bot.coffee

Lines changed: 6 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -74,10 +74,10 @@ describe 'Disable Sync', ->
7474
@slackbot.options.disableUserSync = true
7575
@slackbot.run()
7676
@slackbot.robot.brain.data.users.should.be.empty()
77-
77+
7878
# Test moved to fetchUsers() in client.coffee because of change in code logic
7979
#it 'Should still sync interacting users when disabled'
80-
80+
8181
describe 'Send Messages', ->
8282

8383
it 'Should send a message', ->
@@ -207,13 +207,13 @@ describe 'Handling incoming messages', ->
207207
@slackbot.eventHandler messageData
208208
return
209209

210-
it 'Should handle channel_join events as envisioned', ->
211-
@slackbot.eventHandler {type: 'message', subtype: 'channel_join', user: @stubs.user, channel: @stubs.channel.id}
210+
it 'Should handle member_joined_channel events as envisioned', ->
211+
@slackbot.eventHandler {type: 'member_joined_channel', user: @stubs.user, channel: @stubs.channel.id}
212212
should.equal (@stubs._received instanceof EnterMessage), true
213213
@stubs._received.user.id.should.equal @stubs.user.id
214214

215-
it 'Should handle channel_leave events as envisioned', ->
216-
@slackbot.eventHandler {type: 'message', subtype: 'channel_leave', user: @stubs.user, channel: @stubs.channel.id}
215+
it 'Should handle member_left_channel events as envisioned', ->
216+
@slackbot.eventHandler {type: 'member_left_channel', user: @stubs.user, channel: @stubs.channel.id}
217217
should.equal (@stubs._received instanceof LeaveMessage), true
218218
@stubs._received.user.id.should.equal @stubs.user.id
219219

@@ -222,16 +222,6 @@ describe 'Handling incoming messages', ->
222222
should.equal (@stubs._received instanceof TopicMessage), true
223223
@stubs._received.user.id.should.equal @stubs.user.id
224224

225-
it 'Should handle group_join events as envisioned', ->
226-
@slackbot.eventHandler {type: 'message', subtype: 'group_join', user: @stubs.user, channel: @stubs.channel.id}
227-
should.equal (@stubs._received instanceof EnterMessage), true
228-
@stubs._received.user.id.should.equal @stubs.user.id
229-
230-
it 'Should handle group_leave events as envisioned', ->
231-
@slackbot.eventHandler {type: 'message', subtype: 'group_leave', user: @stubs.user, channel: @stubs.channel.id}
232-
should.equal (@stubs._received instanceof LeaveMessage), true
233-
@stubs._received.user.id.should.equal @stubs.user.id
234-
235225
it 'Should handle group_topic events as envisioned', ->
236226
@slackbot.eventHandler {type: 'message', subtype: 'group_topic', user: @stubs.user, channel: @stubs.channel.id}
237227
should.equal (@stubs._received instanceof TopicMessage), true

0 commit comments

Comments
 (0)