discordrb 1.3.8 → 1.3.9

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of discordrb might be problematic. Click here for more details.

checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: e5a55f754d7cf84a63dad52ba95b782438e62f20
4
- data.tar.gz: c361301ca0e4bd83ca760e3cadbd2f61763ef71d
3
+ metadata.gz: 569e1f420904120c2bcc90a4d3210dcd6e2bbb33
4
+ data.tar.gz: 4aa9f7b948e80d2b510981089df082fe3b25e536
5
5
  SHA512:
6
- metadata.gz: 038066abf5b878806fa34942ed379dedf9837019d55c8c27c487fe6a2cebee2fa09633f84295ef6ab83713ef71912c40ca2501ab385a64bbdff72d810f80eab8
7
- data.tar.gz: 7062dd91aba1b07001054f73a20137bac3d90e7751c06778812b5d5740c61dcfd36b6d07d4c72149d8cae44f24c5768ec64dbb01ca93403040e9d2b6586d09d5
6
+ metadata.gz: 4ccdf4a5c16ea40690f0bcd522c7532bf71a857bd006a7b332484409ae1ecdb68380673250c5d96850be92ede58381af76f4d5154f26ff59e0dcdc8b2e51990c
7
+ data.tar.gz: 5cd3c4927f10709b9605f242da79d9cc881d3cd466eab30b3996d5827fb6dae2619e2f6a160fa22ca8750a614d6926389dccbffa5d1b40908319633423400d34
data/lib/discordrb.rb CHANGED
@@ -4,5 +4,4 @@ require 'discordrb/commands/command_bot'
4
4
 
5
5
  # All discordrb functionality, to be extended by other files
6
6
  module Discordrb
7
- # Your code goes here...
8
7
  end
data/lib/discordrb/api.rb CHANGED
@@ -15,6 +15,22 @@ module Discordrb::API
15
15
  )
16
16
  end
17
17
 
18
+ # Unban a user from a server
19
+ def unban_user(token, server_id, user_id)
20
+ RestClient.delete(
21
+ "#{APIBASE}/guilds/#{server_id}/bans/#{user_id}",
22
+ Authorization: token
23
+ )
24
+ end
25
+
26
+ # Kick a user from a server
27
+ def kick_user(token, server_id, user_id)
28
+ RestClient.delete(
29
+ "#{APIBASE}/guilds/#{server_id}/members/#{user_id}",
30
+ Authorization: token
31
+ )
32
+ end
33
+
18
34
  # Get a server's banned users
19
35
  def bans(token, server_id)
20
36
  RestClient.get(
@@ -0,0 +1,23 @@
1
+ module Discordrb
2
+ # Class that represents an await to wait for a further event
3
+ class Await
4
+ attr_reader :key, :type, :attributes
5
+
6
+ def initialize(bot, key, type, attributes, block = nil)
7
+ @bot = bot
8
+ @key = key
9
+ @type = type
10
+ @attributes = attributes
11
+ @block = block
12
+ end
13
+
14
+ def match(event)
15
+ dummy_handler = @bot.handler_class(@type).new(@attributes, @bot)
16
+ return [nil, nil] unless dummy_handler.matches?(event)
17
+
18
+ should_delete = true if (@block && @block.call(event) != false) || !@block
19
+
20
+ [@key, should_delete]
21
+ end
22
+ end
23
+ end
data/lib/discordrb/bot.rb CHANGED
@@ -10,15 +10,17 @@ require 'discordrb/events/voice_state_update'
10
10
  require 'discordrb/events/channel_create'
11
11
  require 'discordrb/events/channel_update'
12
12
  require 'discordrb/events/channel_delete'
13
- require 'discordrb/events/guild_member_update'
13
+ require 'discordrb/events/members'
14
14
  require 'discordrb/events/guild_role_create'
15
15
  require 'discordrb/events/guild_role_delete'
16
16
  require 'discordrb/events/guild_role_update'
17
+ require 'discordrb/events/await'
17
18
 
18
19
  require 'discordrb/api'
19
20
  require 'discordrb/games'
20
21
  require 'discordrb/exceptions'
21
22
  require 'discordrb/data'
23
+ require 'discordrb/await'
22
24
 
23
25
  module Discordrb
24
26
  # Represents a Discord bot, including servers, users, etc.
@@ -45,6 +47,8 @@ module Discordrb
45
47
 
46
48
  @channels = {}
47
49
  @users = {}
50
+
51
+ @awaits = {}
48
52
  end
49
53
 
50
54
  def run(async = false)
@@ -121,6 +125,27 @@ module Discordrb
121
125
  @servers[id]
122
126
  end
123
127
 
128
+ def find(channel_name, server_name = nil, threshold = 0)
129
+ require 'levenshtein'
130
+
131
+ results = []
132
+ @servers.values.each do |server|
133
+ server.channels.each do |channel|
134
+ distance = Levenshtein.distance(channel.name, channel_name)
135
+ distance += Levenshtein.distance(server_name || server.name, server.name)
136
+ next if distance > threshold
137
+
138
+ # Make a singleton accessor "distance"
139
+ channel.instance_variable_set(:@distance, distance)
140
+ class << channel
141
+ attr_reader :distance
142
+ end
143
+ results << channel
144
+ end
145
+ end
146
+ results
147
+ end
148
+
124
149
  def send_message(channel_id, content)
125
150
  debug("Sending message to #{channel_id} with content '#{content}'")
126
151
  response = API.send_message(@token, channel_id, content)
@@ -131,6 +156,18 @@ module Discordrb
131
156
  API.send_file(@token, channel_id, file)
132
157
  end
133
158
 
159
+ def add_await(key, type, attributes = {}, &block)
160
+ fail "You can't await an AwaitEvent!" if type == Discordrb::Events::AwaitEvent
161
+ await = Await.new(self, key, type, attributes, block)
162
+ @awaits[key] = await
163
+ end
164
+
165
+ def parse_mention(mention)
166
+ # Mention format: <@id>
167
+ return nil unless /\<@(?<id>\d+)\>?/ =~ mention
168
+ user(id)
169
+ end
170
+
134
171
  def game=(name_or_id)
135
172
  game = Discordrb::Games.find_game(name_or_id)
136
173
  @game = game
@@ -149,6 +186,14 @@ module Discordrb
149
186
 
150
187
  attr_writer :debug
151
188
 
189
+ ## ## ### ## ## ######## ## ######## ######## ######
190
+ ## ## ## ## ### ## ## ## ## ## ## ## ## ##
191
+ ## ## ## ## #### ## ## ## ## ## ## ## ##
192
+ ######### ## ## ## ## ## ## ## ## ###### ######## ######
193
+ ## ## ######### ## #### ## ## ## ## ## ## ##
194
+ ## ## ## ## ## ### ## ## ## ## ## ## ## ##
195
+ ## ## ## ## ## ## ######## ######## ######## ## ## ######
196
+
152
197
  def message(attributes = {}, &block)
153
198
  register_event(MessageEvent, attributes, block)
154
199
  end
@@ -210,6 +255,22 @@ module Discordrb
210
255
  register_event(VoiceStateUpdateEvent, attributes, block)
211
256
  end
212
257
 
258
+ def member_join(attributes = {}, &block)
259
+ register_event(GuildMemberAddEvent, attributes, block)
260
+ end
261
+
262
+ def member_update(attributes = {}, &block)
263
+ register_event(GuildMemberUpdateEvent, attributes, block)
264
+ end
265
+
266
+ def member_leave(attributes = {}, &block)
267
+ register_event(GuildMemberDeleteEvent, attributes, block)
268
+ end
269
+
270
+ def await(attributes = {}, &block)
271
+ register_event(AwaitEvent, attributes, block)
272
+ end
273
+
213
274
  def remove_handler(handler)
214
275
  clazz = event_class(handler.class)
215
276
  @event_handlers[clazz].delete(handler)
@@ -224,10 +285,22 @@ module Discordrb
224
285
  puts "[DEBUG @ #{Time.now}] #{message}" if @debug || important
225
286
  end
226
287
 
288
+ def handler_class(event_class)
289
+ class_from_string(event_class.to_s + 'Handler')
290
+ end
291
+
227
292
  alias_method :<<, :add_handler
228
293
 
229
294
  private
230
295
 
296
+ ### ## ## ######## ######## ######## ## ## ### ## ######
297
+ ## ### ## ## ## ## ## ### ## ## ## ## ## ##
298
+ ## #### ## ## ## ## ## #### ## ## ## ## ##
299
+ ## ## ## ## ## ###### ######## ## ## ## ## ## ## ######
300
+ ## ## #### ## ## ## ## ## #### ######### ## ##
301
+ ## ## ### ## ## ## ## ## ### ## ## ## ## ##
302
+ ### ## ## ## ######## ## ## ## ## ## ## ######## ######
303
+
231
304
  # Internal handler for PRESENCE_UPDATE
232
305
  def update_presence(data)
233
306
  user_id = data['user']['id'].to_i
@@ -295,21 +368,57 @@ module Discordrb
295
368
  server.channels.reject! { |c| c.id == channel.id }
296
369
  end
297
370
 
371
+ # Internal handler for GUILD_MEMBER_ADD
372
+ def add_guild_member(data)
373
+ user = User.new(data['user'], self)
374
+ server_id = data['guild_id'].to_i
375
+ server = @servers[server_id]
376
+
377
+ roles = []
378
+ data['roles'].each do |element|
379
+ role_id = element.to_i
380
+ roles << server.roles.find { |r| r.id == role_id }
381
+ end
382
+ user.update_roles(server, roles)
383
+
384
+ if @users[user.id]
385
+ # If the user is already cached, just add the new roles
386
+ @users[user.id].merge_roles(server, user.roles[server.id])
387
+ else
388
+ @users[user.id] = user
389
+ end
390
+
391
+ server.add_user(user)
392
+ end
393
+
298
394
  # Internal handler for GUILD_MEMBER_UPDATE
299
395
  def update_guild_member(data)
300
- user_data = data['user']
396
+ user_id = data['user']['id'].to_i
397
+ user = @users[user_id]
398
+
301
399
  server_id = data['guild_id'].to_i
302
400
  server = @servers[server_id]
401
+
303
402
  roles = []
304
403
  data['roles'].each do |element|
305
404
  role_id = element.to_i
306
405
  roles << server.roles.find { |r| r.id == role_id }
307
406
  end
308
- user_id = user_data['id'].to_i
309
- user = @users[user_id]
310
407
  user.update_roles(server, roles)
311
408
  end
312
409
 
410
+ # Internal handler for GUILD_MEMBER_DELETE
411
+ def delete_guild_member(data)
412
+ user_id = data['user']['id'].to_i
413
+ user = @users[user_id]
414
+
415
+ server_id = data['guild_id'].to_i
416
+ server = @servers[server_id]
417
+
418
+ user.delete_roles(server_id)
419
+ server.delete_user(user_id)
420
+ end
421
+
313
422
  # Internal handler for GUILD_ROLE_UPDATE
314
423
  def update_guild_role(data)
315
424
  role_data = data['role']
@@ -345,6 +454,14 @@ module Discordrb
345
454
  # Internal handler for TYPING_START
346
455
  def start_typing(data); end
347
456
 
457
+ ## ####### ###### #### ## ##
458
+ ## ## ## ## ## ## ### ##
459
+ ## ## ## ## ## #### ##
460
+ ## ## ## ## #### ## ## ## ##
461
+ ## ## ## ## ## ## ## ####
462
+ ## ## ## ## ## ## ## ###
463
+ ######## ####### ###### #### ## ##
464
+
348
465
  def login
349
466
  debug('Logging in')
350
467
  login_attempts ||= 0
@@ -382,6 +499,14 @@ module Discordrb
382
499
  JSON.parse(response)['url']
383
500
  end
384
501
 
502
+ ## ## ###### ######## ## ## ######## ## ## ######## ######
503
+ ## ## ## ## ## ## ## ## ## ### ## ## ## ##
504
+ ## ## ## ## ## ## ## ## #### ## ## ##
505
+ ## ## ## ###### ###### ## ## ###### ## ## ## ## ######
506
+ ## ## ## ## ## ## ## ## ## #### ## ##
507
+ ## ## ## ## ## ## ## ## ## ## ### ## ## ##
508
+ #### ### ###### ######## ### ######## ## ## ## ######
509
+
385
510
  def websocket_connect
386
511
  debug('Attempting to get gateway URL...')
387
512
  websocket_hub = find_gateway
@@ -493,11 +618,21 @@ module Discordrb
493
618
 
494
619
  event = ChannelDeleteEvent.new(data, self)
495
620
  raise_event(event)
621
+ when 'GUILD_MEMBER_ADD'
622
+ add_guild_member(data)
623
+
624
+ event = GuildMemberAddEvent.new(data, self)
625
+ raise_event(event)
496
626
  when 'GUILD_MEMBER_UPDATE'
497
627
  update_guild_member(data)
498
628
 
499
629
  event = GuildMemberUpdateEvent.new(data, self)
500
630
  raise_event(event)
631
+ when 'GUILD_MEMBER_REMOVE'
632
+ delete_guild_member(data)
633
+
634
+ event = GuildMemberDeleteEvent.new(data, self)
635
+ raise_event(event)
501
636
  when 'GUILD_ROLE_UPDATE'
502
637
  update_guild_role(data)
503
638
 
@@ -549,12 +684,26 @@ module Discordrb
549
684
 
550
685
  def raise_event(event)
551
686
  debug("Raised a #{event.class}")
687
+ handle_awaits(event)
688
+
552
689
  handlers = @event_handlers[event.class]
553
690
  (handlers || []).each do |handler|
554
691
  handler.match(event)
555
692
  end
556
693
  end
557
694
 
695
+ def handle_awaits(event)
696
+ @awaits.each do |_, await|
697
+ key, should_delete = await.match(event)
698
+ next unless key
699
+ debug("should_delete: #{should_delete}")
700
+ @awaits.delete(await.key) if should_delete
701
+
702
+ await_event = Discordrb::Events::AwaitEvent.new(await, event, self)
703
+ raise_event(await_event)
704
+ end
705
+ end
706
+
558
707
  def register_event(clazz, attributes, block)
559
708
  handler = handler_class(clazz).new(attributes, block)
560
709
 
@@ -588,9 +737,5 @@ module Discordrb
588
737
 
589
738
  class_from_string(class_name[0..-8])
590
739
  end
591
-
592
- def handler_class(event_class)
593
- class_from_string(event_class.to_s + 'Handler')
594
- end
595
740
  end
596
741
  end
@@ -91,7 +91,7 @@ module Discordrb::Commands
91
91
  event.respond @attributes[:command_doesnt_exist_message].gsub('%command%', name) if @attributes[:command_doesnt_exist_message]
92
92
  return
93
93
  end
94
- if permission?(user(event.user.id), command.attributes[:permission_level], event.server.id)
94
+ if permission?(user(event.user.id), command.attributes[:permission_level], event.server)
95
95
  event.command = command
96
96
  command.call(event, arguments, chained)
97
97
  else
@@ -132,8 +132,8 @@ module Discordrb::Commands
132
132
  @permissions[:roles][id] = level
133
133
  end
134
134
 
135
- def permission?(user, level, server_id)
136
- determined_level = user.roles[server_id].each.reduce(0) do |memo, role|
135
+ def permission?(user, level, server)
136
+ determined_level = server.nil? ? 0 : user.roles[server.id].each.reduce(0) do |memo, role|
137
137
  [@permissions[:roles][role.id] || 0, memo].max
138
138
  end
139
139
  [@permissions[:users][user.id] || 0, determined_level].max >= level
@@ -8,20 +8,12 @@ require 'discordrb/games'
8
8
  module Discordrb
9
9
  # User on Discord, including internal data like discriminators
10
10
  class User
11
- attr_reader :username, :id, :discriminator, :avatar
11
+ attr_reader :username, :id, :discriminator, :avatar, :voice_channel, :roles
12
+ attr_accessor :status, :game, :server_mute, :server_deaf, :self_mute, :self_deaf
12
13
 
13
- attr_accessor :status
14
- attr_accessor :game
15
- attr_accessor :server_mute
16
- attr_accessor :server_deaf
17
- attr_accessor :self_mute
18
- attr_accessor :self_deaf
19
- attr_reader :voice_channel
20
-
21
- # Hash of user roles.
14
+ # @roles is a hash of user roles:
22
15
  # Key: Server ID
23
16
  # Value: Array of roles.
24
- attr_reader :roles
25
17
 
26
18
  alias_method :name, :username
27
19
 
@@ -74,6 +66,16 @@ module Discordrb
74
66
  end
75
67
  end
76
68
 
69
+ # Delete a specific server from the roles (in case a user leaves a server)
70
+ def delete_roles(server_id)
71
+ @roles.delete(server_id)
72
+ end
73
+
74
+ # Add an await for a message from this user
75
+ def await(key, attributes = {}, &block)
76
+ @bot.add_await(key, MessageEvent, { from: @id }.merge(attributes), &block)
77
+ end
78
+
77
79
  # Determine if the user has permission to do an action
78
80
  # action is a permission from Permissions::Flags.
79
81
  # channel is the channel in which the action takes place (not applicable for server-wide actions).
@@ -116,11 +118,7 @@ module Discordrb
116
118
 
117
119
  # A Discord role that contains permissions and applies to certain users
118
120
  class Role
119
- attr_reader :permissions
120
- attr_reader :name
121
- attr_reader :id
122
- attr_reader :hoist
123
- attr_reader :color
121
+ attr_reader :permissions, :name, :id, :hoist, :color
124
122
 
125
123
  def initialize(data, bot, server = nil)
126
124
  @bot = bot
@@ -142,9 +140,7 @@ module Discordrb
142
140
 
143
141
  # A Discord channel, including data like the topic
144
142
  class Channel
145
- attr_reader :name, :server, :type, :id, :is_private, :recipient, :topic, :position
146
-
147
- attr_reader :permission_overwrites
143
+ attr_reader :name, :server, :type, :id, :is_private, :recipient, :topic, :position, :permission_overwrites
148
144
 
149
145
  def initialize(data, bot, server = nil)
150
146
  @bot = bot
@@ -230,6 +226,11 @@ module Discordrb
230
226
  @permission_overwrites = overwrites
231
227
  end
232
228
 
229
+ # Add an await for a message in this channel
230
+ def await(key, attributes = {}, &block)
231
+ @bot.add_await(key, MessageEvent, { in: @id }.merge(attributes), &block)
232
+ end
233
+
233
234
  alias_method :send, :send_message
234
235
  alias_method :message, :send_message
235
236
 
@@ -272,17 +273,16 @@ module Discordrb
272
273
  def delete
273
274
  API.delete_message(@bot.token, @channel.id, @id)
274
275
  end
276
+
277
+ # Add an await for a message with the same user and channel
278
+ def await(key, attributes = {}, &block)
279
+ @bot.add_await(key, MessageEvent, { from: @author.id, in: @channel.id }.merge(attributes), &block)
280
+ end
275
281
  end
276
282
 
277
283
  # A server on Discord
278
284
  class Server
279
- attr_reader :region, :name, :owner_id, :id, :members
280
-
281
- # Array of channels on the server
282
- attr_reader :channels
283
-
284
- # Array of roles on the server
285
- attr_reader :roles
285
+ attr_reader :region, :name, :owner_id, :id, :members, :channels, :roles
286
286
 
287
287
  def initialize(data, bot)
288
288
  @bot = bot
@@ -370,10 +370,30 @@ module Discordrb
370
370
  end
371
371
  end
372
372
 
373
+ def add_user(user)
374
+ @members << user
375
+ end
376
+
377
+ def delete_user(user_id)
378
+ @members.reject! { |member| member.id == user_id }
379
+ end
380
+
373
381
  def create_channel(name)
374
382
  response = API.create_channel(@bot.token, @id, name, 'text')
375
383
  Channel.new(JSON.parse(response), @bot)
376
384
  end
385
+
386
+ def ban(user, message_days = 0)
387
+ API.ban_user(@bot.token, @id, user.id, message_days)
388
+ end
389
+
390
+ def unban(user)
391
+ API.unban_user(@bot.token, @id, user.id)
392
+ end
393
+
394
+ def kick(user)
395
+ API.kick_user(@bot.token, @id, user.id)
396
+ end
377
397
  end
378
398
 
379
399
  # A colour (red, green and blue values). Used for role colours
@@ -0,0 +1,29 @@
1
+ require 'discordrb/events/generic'
2
+ require 'discordrb/await'
3
+
4
+ module Discordrb::Events
5
+ # Event raised when an await is triggered
6
+ class AwaitEvent
7
+ attr_reader :await, :event
8
+ delegate :key, :type, :attributes, to: :await
9
+
10
+ def initialize(await, event, bot)
11
+ @await = await
12
+ @event = event
13
+ @bot = bot
14
+ end
15
+ end
16
+
17
+ # Event handler for AwaitEvent
18
+ class AwaitEventHandler < EventHandler
19
+ def matches?(event)
20
+ # Check for the proper event type
21
+ return false unless event.is_a? AwaitEvent
22
+
23
+ [
24
+ matches_all(@attributes[:key], event.key) { |a, e| a == e },
25
+ matches_all(@attributes[:type], event.type) { |a, e| a == e }
26
+ ].reduce(true, &:&)
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,71 @@
1
+ require 'discordrb/events/generic'
2
+ require 'discordrb/data'
3
+
4
+ module Discordrb::Events
5
+ # Generic subclass for server member events (add/update/delete)
6
+ class GuildMemberEvent
7
+ attr_reader :user
8
+ attr_reader :roles
9
+ attr_reader :server
10
+
11
+ def initialize(data, bot)
12
+ @server = bot.server(data['guild_id'].to_i)
13
+ return unless @server
14
+
15
+ init_user(data, bot)
16
+ init_roles(data, bot)
17
+ end
18
+
19
+ private
20
+
21
+ def init_user(data, _)
22
+ user_id = data['user']['id'].to_i
23
+ @user = @server.members.find { |u| u.id == user_id }
24
+ end
25
+
26
+ def init_roles(data, _)
27
+ @roles = []
28
+ return unless data['roles']
29
+ data['roles'].each do |element|
30
+ role_id = element.to_i
31
+ @roles << @server.roles.find { |r| r.id == role_id }
32
+ end
33
+ end
34
+ end
35
+
36
+ # Generic event handler for member events
37
+ class GuildMemberEventHandler < EventHandler
38
+ def matches?(event)
39
+ # Check for the proper event type
40
+ return false unless event.is_a? GuildMemberEvent
41
+
42
+ [
43
+ matches_all(@attributes[:username], event.user.name) do |a, e|
44
+ if a.is_a? String
45
+ a == e.to_s
46
+ else
47
+ a == e
48
+ end
49
+ end
50
+ ].reduce(true, &:&)
51
+ end
52
+ end
53
+
54
+ # Specialized subclasses
55
+ # Member joins
56
+ class GuildMemberAddEvent < GuildMemberEvent; end
57
+ class GuildMemberAddEventHandler < GuildMemberEventHandler; end
58
+
59
+ # Member is updated (e.g. name changed)
60
+ class GuildMemberUpdateEvent < GuildMemberEvent; end
61
+ class GuildMemberUpdateEventHandler < GuildMemberEventHandler; end
62
+
63
+ # Member leaves
64
+ class GuildMemberDeleteEvent < GuildMemberEvent
65
+ # Overide init_user to account for the deleted user on the server
66
+ def init_user(data, bot)
67
+ @user = Discordrb::User.new(data['user'], bot)
68
+ end
69
+ end
70
+ class GuildMemberDeleteEventHandler < GuildMemberEventHandler; end
71
+ end
@@ -1,4 +1,4 @@
1
1
  # Discordrb and all its functionality, in this case only the version.
2
2
  module Discordrb
3
- VERSION = '1.3.8'
3
+ VERSION = '1.3.9'
4
4
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: discordrb
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.3.8
4
+ version: 1.3.9
5
5
  platform: ruby
6
6
  authors:
7
7
  - meew0
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2015-11-12 00:00:00.000000000 Z
11
+ date: 2015-11-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: faye-websocket
@@ -102,20 +102,22 @@ files:
102
102
  - examples/pm.rb
103
103
  - lib/discordrb.rb
104
104
  - lib/discordrb/api.rb
105
+ - lib/discordrb/await.rb
105
106
  - lib/discordrb/bot.rb
106
107
  - lib/discordrb/commands/command_bot.rb
107
108
  - lib/discordrb/commands/events.rb
108
109
  - lib/discordrb/commands/parser.rb
109
110
  - lib/discordrb/data.rb
111
+ - lib/discordrb/events/await.rb
110
112
  - lib/discordrb/events/channel_create.rb
111
113
  - lib/discordrb/events/channel_delete.rb
112
114
  - lib/discordrb/events/channel_update.rb
113
115
  - lib/discordrb/events/generic.rb
114
- - lib/discordrb/events/guild_member_update.rb
115
116
  - lib/discordrb/events/guild_role_create.rb
116
117
  - lib/discordrb/events/guild_role_delete.rb
117
118
  - lib/discordrb/events/guild_role_update.rb
118
119
  - lib/discordrb/events/lifetime.rb
120
+ - lib/discordrb/events/members.rb
119
121
  - lib/discordrb/events/message.rb
120
122
  - lib/discordrb/events/presence.rb
121
123
  - lib/discordrb/events/typing.rb
@@ -1,42 +0,0 @@
1
- require 'discordrb/events/generic'
2
- require 'discordrb/data'
3
-
4
- module Discordrb::Events
5
- # Raised when a user updates on a server (e.g. new name)
6
- class GuildMemberUpdateEvent
7
- attr_reader :user
8
- attr_reader :roles
9
- attr_reader :server
10
-
11
- def initialize(data, bot)
12
- @server = bot.server(data['guild_id'].to_i)
13
- return unless @server
14
-
15
- user_id = data['user']['id'].to_i
16
- @user = @server.members.find { |u| u.id == user_id }
17
- @roles = []
18
- data['roles'].each do |element|
19
- role_id = element.to_i
20
- @roles << @server.roles.find { |r| r.id == role_id }
21
- end
22
- end
23
- end
24
-
25
- # Event handler for GuildMemberUpdateEvent
26
- class GuildMemberUpdateHandler < EventHandler
27
- def matches?(event)
28
- # Check for the proper event type
29
- return false unless event.is_a? GuildMemberUpdateEvent
30
-
31
- [
32
- matches_all(@attributes[:name], event.name) do |a, e|
33
- if a.is_a? String
34
- a == e.to_s
35
- else
36
- a == e
37
- end
38
- end
39
- ].reduce(true, &:&)
40
- end
41
- end
42
- end