rubycord 1.0.0

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 (88) hide show
  1. checksums.yaml +7 -0
  2. data/lib/rubycord/allowed_mentions.rb +34 -0
  3. data/lib/rubycord/api/application.rb +200 -0
  4. data/lib/rubycord/api/channel.rb +597 -0
  5. data/lib/rubycord/api/interaction.rb +52 -0
  6. data/lib/rubycord/api/invite.rb +42 -0
  7. data/lib/rubycord/api/server.rb +557 -0
  8. data/lib/rubycord/api/user.rb +153 -0
  9. data/lib/rubycord/api/webhook.rb +138 -0
  10. data/lib/rubycord/api.rb +356 -0
  11. data/lib/rubycord/await.rb +49 -0
  12. data/lib/rubycord/bot.rb +1757 -0
  13. data/lib/rubycord/cache.rb +259 -0
  14. data/lib/rubycord/colour_rgb.rb +41 -0
  15. data/lib/rubycord/commands/command_bot.rb +519 -0
  16. data/lib/rubycord/commands/container.rb +110 -0
  17. data/lib/rubycord/commands/events.rb +9 -0
  18. data/lib/rubycord/commands/parser.rb +325 -0
  19. data/lib/rubycord/commands/rate_limiter.rb +142 -0
  20. data/lib/rubycord/container.rb +753 -0
  21. data/lib/rubycord/data/activity.rb +269 -0
  22. data/lib/rubycord/data/application.rb +48 -0
  23. data/lib/rubycord/data/attachment.rb +109 -0
  24. data/lib/rubycord/data/audit_logs.rb +343 -0
  25. data/lib/rubycord/data/channel.rb +996 -0
  26. data/lib/rubycord/data/component.rb +227 -0
  27. data/lib/rubycord/data/embed.rb +249 -0
  28. data/lib/rubycord/data/emoji.rb +80 -0
  29. data/lib/rubycord/data/integration.rb +120 -0
  30. data/lib/rubycord/data/interaction.rb +798 -0
  31. data/lib/rubycord/data/invite.rb +135 -0
  32. data/lib/rubycord/data/member.rb +370 -0
  33. data/lib/rubycord/data/message.rb +412 -0
  34. data/lib/rubycord/data/overwrite.rb +106 -0
  35. data/lib/rubycord/data/profile.rb +89 -0
  36. data/lib/rubycord/data/reaction.rb +31 -0
  37. data/lib/rubycord/data/recipient.rb +32 -0
  38. data/lib/rubycord/data/role.rb +246 -0
  39. data/lib/rubycord/data/server.rb +1002 -0
  40. data/lib/rubycord/data/user.rb +261 -0
  41. data/lib/rubycord/data/voice_region.rb +43 -0
  42. data/lib/rubycord/data/voice_state.rb +39 -0
  43. data/lib/rubycord/data/webhook.rb +232 -0
  44. data/lib/rubycord/data.rb +40 -0
  45. data/lib/rubycord/errors.rb +737 -0
  46. data/lib/rubycord/events/await.rb +46 -0
  47. data/lib/rubycord/events/bans.rb +58 -0
  48. data/lib/rubycord/events/channels.rb +186 -0
  49. data/lib/rubycord/events/generic.rb +126 -0
  50. data/lib/rubycord/events/guilds.rb +191 -0
  51. data/lib/rubycord/events/interactions.rb +480 -0
  52. data/lib/rubycord/events/invites.rb +123 -0
  53. data/lib/rubycord/events/lifetime.rb +29 -0
  54. data/lib/rubycord/events/members.rb +91 -0
  55. data/lib/rubycord/events/message.rb +337 -0
  56. data/lib/rubycord/events/presence.rb +127 -0
  57. data/lib/rubycord/events/raw.rb +45 -0
  58. data/lib/rubycord/events/reactions.rb +156 -0
  59. data/lib/rubycord/events/roles.rb +86 -0
  60. data/lib/rubycord/events/threads.rb +94 -0
  61. data/lib/rubycord/events/typing.rb +70 -0
  62. data/lib/rubycord/events/voice_server_update.rb +45 -0
  63. data/lib/rubycord/events/voice_state_update.rb +103 -0
  64. data/lib/rubycord/events/webhooks.rb +62 -0
  65. data/lib/rubycord/gateway.rb +867 -0
  66. data/lib/rubycord/id_object.rb +37 -0
  67. data/lib/rubycord/light/data.rb +60 -0
  68. data/lib/rubycord/light/integrations.rb +71 -0
  69. data/lib/rubycord/light/light_bot.rb +56 -0
  70. data/lib/rubycord/light.rb +6 -0
  71. data/lib/rubycord/logger.rb +118 -0
  72. data/lib/rubycord/paginator.rb +55 -0
  73. data/lib/rubycord/permissions.rb +251 -0
  74. data/lib/rubycord/version.rb +5 -0
  75. data/lib/rubycord/voice/encoder.rb +113 -0
  76. data/lib/rubycord/voice/network.rb +366 -0
  77. data/lib/rubycord/voice/sodium.rb +96 -0
  78. data/lib/rubycord/voice/voice_bot.rb +408 -0
  79. data/lib/rubycord/webhooks/builder.rb +100 -0
  80. data/lib/rubycord/webhooks/client.rb +132 -0
  81. data/lib/rubycord/webhooks/embeds.rb +248 -0
  82. data/lib/rubycord/webhooks/modal.rb +78 -0
  83. data/lib/rubycord/webhooks/version.rb +7 -0
  84. data/lib/rubycord/webhooks/view.rb +192 -0
  85. data/lib/rubycord/webhooks.rb +12 -0
  86. data/lib/rubycord/websocket.rb +70 -0
  87. data/lib/rubycord.rb +140 -0
  88. metadata +231 -0
@@ -0,0 +1,156 @@
1
+ require "rubycord/events/generic"
2
+ require "rubycord/data"
3
+
4
+ module Rubycord::Events
5
+ # Generic superclass for events about adding and removing reactions
6
+ class ReactionEvent < Event
7
+ include Respondable
8
+
9
+ # @return [Emoji] the emoji that was reacted with.
10
+ attr_reader :emoji
11
+
12
+ # @!visibility private
13
+ attr_reader :message_id
14
+
15
+ def initialize(data, bot)
16
+ @bot = bot
17
+
18
+ @emoji = Rubycord::Emoji.new(data["emoji"], bot, nil)
19
+ @user_id = data["user_id"].to_i
20
+ @message_id = data["message_id"].to_i
21
+ @channel_id = data["channel_id"].to_i
22
+ end
23
+
24
+ # @return [User, Member] the user that reacted to this message, or member if a server exists.
25
+ def user
26
+ # Cache the user so we don't do requests all the time
27
+ @user ||= if server
28
+ @server.member(@user_id)
29
+ else
30
+ @bot.user(@user_id)
31
+ end
32
+ end
33
+
34
+ # @return [Message] the message that was reacted to.
35
+ def message
36
+ @message ||= channel.load_message(@message_id)
37
+ end
38
+
39
+ # @return [Channel] the channel that was reacted in.
40
+ def channel
41
+ @channel ||= @bot.channel(@channel_id)
42
+ end
43
+
44
+ # @return [Server, nil] the server that was reacted in. If reacted in a PM channel, it will be nil.
45
+ def server
46
+ @server ||= channel.server
47
+ end
48
+ end
49
+
50
+ # Generic superclass for event handlers pertaining to adding and removing reactions
51
+ class ReactionEventHandler < EventHandler
52
+ def matches?(event)
53
+ # Check for the proper event type
54
+ return false unless event.is_a? ReactionEvent
55
+
56
+ [
57
+ matches_all(@attributes[:emoji], event.emoji) do |a, e|
58
+ case a
59
+ when Integer
60
+ e.id == a
61
+ when String
62
+ e.name == a || e.name == a.delete(":") || e.id == a.resolve_id
63
+ else
64
+ e == a
65
+ end
66
+ end,
67
+ matches_all(@attributes[:message], event.message_id) do |a, e|
68
+ a == e
69
+ end,
70
+ matches_all(@attributes[:in], event.channel) do |a, e|
71
+ case a
72
+ when String
73
+ # Make sure to remove the "#" from channel names in case it was specified
74
+ a.delete("#") == e.name
75
+ when Integer
76
+ a == e.id
77
+ else
78
+ a == e
79
+ end
80
+ end,
81
+ matches_all(@attributes[:from], event.user) do |a, e|
82
+ case a
83
+ when String
84
+ a == e.name
85
+ when :bot
86
+ e.current_bot?
87
+ else
88
+ a == e
89
+ end
90
+ end
91
+ ].reduce(true, &:&)
92
+ end
93
+ end
94
+
95
+ # Event raised when somebody reacts to a message
96
+ class ReactionAddEvent < ReactionEvent; end
97
+
98
+ # Event handler for {ReactionAddEvent}
99
+ class ReactionAddEventHandler < ReactionEventHandler; end
100
+
101
+ # Event raised when somebody removes a reaction to a message
102
+ class ReactionRemoveEvent < ReactionEvent; end
103
+
104
+ # Event handler for {ReactionRemoveEvent}
105
+ class ReactionRemoveEventHandler < ReactionEventHandler; end
106
+
107
+ # Event raised when somebody removes all reactions from a message
108
+ class ReactionRemoveAllEvent < Event
109
+ include Respondable
110
+
111
+ # @!visibility private
112
+ attr_reader :message_id
113
+
114
+ def initialize(data, bot)
115
+ @bot = bot
116
+
117
+ @message_id = data["message_id"].to_i
118
+ @channel_id = data["channel_id"].to_i
119
+ end
120
+
121
+ # @return [Channel] the channel where the removal occurred.
122
+ def channel
123
+ @channel ||= @bot.channel(@channel_id)
124
+ end
125
+
126
+ # @return [Message] the message all reactions were removed from.
127
+ def message
128
+ @message ||= channel.load_message(@message_id)
129
+ end
130
+ end
131
+
132
+ # Event handler for {ReactionRemoveAllEvent}
133
+ class ReactionRemoveAllEventHandler < EventHandler
134
+ def matches?(event)
135
+ # Check for the proper event type
136
+ return false unless event.is_a? ReactionRemoveAllEvent
137
+
138
+ [
139
+ matches_all(@attributes[:message], event.message_id) do |a, e|
140
+ a == e
141
+ end,
142
+ matches_all(@attributes[:in], event.channel) do |a, e|
143
+ case a
144
+ when String
145
+ # Make sure to remove the "#" from channel names in case it was specified
146
+ a.delete("#") == e.name
147
+ when Integer
148
+ a == e.id
149
+ else
150
+ a == e
151
+ end
152
+ end
153
+ ].reduce(true, &:&)
154
+ end
155
+ end
156
+ end
@@ -0,0 +1,86 @@
1
+ require "rubycord/events/generic"
2
+ require "rubycord/data"
3
+
4
+ module Rubycord::Events
5
+ # Raised when a role is created on a server
6
+ class ServerRoleCreateEvent < Event
7
+ # @return [Role] the role that got created
8
+ attr_reader :role
9
+
10
+ # @return [Server] the server on which a role got created
11
+ attr_reader :server
12
+
13
+ # @!attribute [r] name
14
+ # @return [String] this role's name
15
+ # @see Role#name
16
+ delegate :name, to: :role
17
+
18
+ def initialize(data, bot)
19
+ @bot = bot
20
+
21
+ @server = bot.server(data["guild_id"].to_i)
22
+ return unless @server
23
+
24
+ role_id = data["role"]["id"].to_i
25
+ @role = @server.roles.find { |r| r.id == role_id }
26
+ end
27
+ end
28
+
29
+ # Event handler for ServerRoleCreateEvent
30
+ class ServerRoleCreateEventHandler < EventHandler
31
+ def matches?(event)
32
+ # Check for the proper event type
33
+ return false unless event.is_a? ServerRoleCreateEvent
34
+
35
+ [
36
+ matches_all(@attributes[:name], event.name) do |a, e|
37
+ a == if a.is_a? String
38
+ e.to_s
39
+ else
40
+ e
41
+ end
42
+ end
43
+ ].reduce(true, &:&)
44
+ end
45
+ end
46
+
47
+ # Raised when a role is deleted from a server
48
+ class ServerRoleDeleteEvent < Event
49
+ # @return [Integer] the ID of the role that got deleted.
50
+ attr_reader :id
51
+
52
+ # @return [Server] the server on which a role got deleted.
53
+ attr_reader :server
54
+
55
+ def initialize(data, bot)
56
+ @bot = bot
57
+
58
+ # The role should already be deleted from the server's list
59
+ # by the time we create this event, so we'll create a temporary
60
+ # role object for event consumers to use.
61
+ @id = data["role_id"].to_i
62
+ server_id = data["guild_id"].to_i
63
+ @server = bot.server(server_id)
64
+ end
65
+ end
66
+
67
+ # EventHandler for ServerRoleDeleteEvent
68
+ class ServerRoleDeleteEventHandler < EventHandler
69
+ def matches?(event)
70
+ # Check for the proper event type
71
+ return false unless event.is_a? ServerRoleDeleteEvent
72
+
73
+ [
74
+ matches_all(@attributes[:id], event.id) do |a, e|
75
+ a.resolve_id == e.resolve_id
76
+ end
77
+ ].reduce(true, &:&)
78
+ end
79
+ end
80
+
81
+ # Event raised when a role updates on a server
82
+ class ServerRoleUpdateEvent < ServerRoleCreateEvent; end
83
+
84
+ # Event handler for ServerRoleUpdateEvent
85
+ class ServerRoleUpdateEventHandler < ServerRoleCreateEventHandler; end
86
+ end
@@ -0,0 +1,94 @@
1
+ module Rubycord::Events
2
+ # Raised when a thread is created
3
+ class ThreadCreateEvent < Event
4
+ # @return [Channel] the thread in question.
5
+ attr_reader :thread
6
+
7
+ delegate :name, :server, :owner, :parent_channel, :thread_metadata, to: :thread
8
+
9
+ def initialize(data, bot)
10
+ @bot = bot
11
+ @thread = data.is_a?(Rubycord::Channel) ? data : bot.channel(data["id"].to_i)
12
+ end
13
+ end
14
+
15
+ # Event handler for ChannelCreateEvent
16
+ class ThreadCreateEventHandler < EventHandler
17
+ def matches?(event)
18
+ # Check for the proper event type
19
+ return false unless event.is_a? ThreadCreateEvent
20
+
21
+ [
22
+ matches_all(@attributes[:name], event.name) do |a, e|
23
+ a == if a.is_a? String
24
+ e.to_s
25
+ else
26
+ e
27
+ end
28
+ end,
29
+ matches_all(@attributes[:server], event.server) do |a, e|
30
+ a.resolve_id == e.resolve_id
31
+ end,
32
+ matches_all(@attributes[:invitable], event.thread.invitable) do |a, e|
33
+ a == e
34
+ end,
35
+ matches_all(@attributes[:owner], event.thread.owner) do |a, e|
36
+ a.resolve_id == e.resolve_id
37
+ end,
38
+ matches_all(@attributes[:channel], event.thread.parent) do |a, e|
39
+ a.resolve_id == e.resolve_id
40
+ end
41
+ ].reduce(true, &:&)
42
+ end
43
+ end
44
+
45
+ # Raised when a thread is updated (e.g. name changes)
46
+ class ThreadUpdateEvent < ThreadCreateEvent; end
47
+
48
+ # Event handler for ThreadUpdateEvent
49
+ class ThreadUpdateEventHandler < ThreadCreateEventHandler
50
+ def matches?(event)
51
+ # Check for the proper event type
52
+ return false unless event.is_a? ThreadUpdateEvent
53
+
54
+ super
55
+ end
56
+ end
57
+
58
+ # Raised when members are added or removed from a thread.
59
+ class ThreadMembersUpdateEvent < Event
60
+ # @return [Channel]
61
+ attr_reader :thread
62
+
63
+ # @return [Array<Member, User>]
64
+ attr_reader :added_members
65
+
66
+ # @return [Array<Integer>]
67
+ attr_reader :removed_member_ids
68
+
69
+ # @return [Integer]
70
+ attr_reader :member_count
71
+
72
+ delegate :name, :server, :owner, :parent_channel, :thread_metadata, to: :thread
73
+
74
+ def initialize(data, bot)
75
+ @bot = bot
76
+ @thread = data.is_a?(Rubycord::Channel) ? data : bot.channel(data["id"].to_i)
77
+ @added_members = data["added_members"]&.map do |member|
78
+ data["guild_id"] ? bot.member(data["guild_id"], member["user_id"]) : bot.user(member["user_id"])
79
+ end || []
80
+ @removed_member_ids = data["removed_member_ids"]&.map(&:resolve_id) || []
81
+ @member_count = data["member_count"]
82
+ end
83
+ end
84
+
85
+ # Event handler for ThreadMembersUpdateEvent
86
+ class ThreadMembersUpdateEventHandler < ThreadCreateEventHandler
87
+ def matches?(event)
88
+ # Check for the proper event type
89
+ return false unless event.is_a? ThreadMembersUpdateEvent
90
+
91
+ super
92
+ end
93
+ end
94
+ end
@@ -0,0 +1,70 @@
1
+ require "rubycord/events/generic"
2
+
3
+ module Rubycord::Events
4
+ # Event raised when a user starts typing
5
+ class TypingEvent < Event
6
+ include Respondable
7
+
8
+ # @return [Channel] the channel on which a user started typing.
9
+ attr_reader :channel
10
+
11
+ # @return [User, Member, Recipient] the user that started typing.
12
+ attr_reader :user
13
+ alias_method :member, :user
14
+
15
+ # @return [Time] when the typing happened.
16
+ attr_reader :timestamp
17
+
18
+ def initialize(data, bot)
19
+ @bot = bot
20
+
21
+ @user_id = data["user_id"].to_i
22
+
23
+ @channel_id = data["channel_id"].to_i
24
+ @channel = bot.channel(@channel_id)
25
+
26
+ @user = if channel.pm?
27
+ channel.recipient
28
+ elsif channel.group?
29
+ bot.user(@user_id)
30
+ else
31
+ bot.member(@channel.server.id, @user_id)
32
+ end
33
+
34
+ @timestamp = Time.at(data["timestamp"].to_i)
35
+ end
36
+ end
37
+
38
+ # Event handler for TypingEvent
39
+ class TypingEventHandler < EventHandler
40
+ def matches?(event)
41
+ # Check for the proper event type
42
+ return false unless event.is_a? TypingEvent
43
+
44
+ [
45
+ matches_all(@attributes[:in], event.channel) do |a, e|
46
+ case a
47
+ when String
48
+ a.delete("#") == e.name
49
+ when Integer
50
+ a == e.id
51
+ else
52
+ a == e
53
+ end
54
+ end,
55
+ matches_all(@attributes[:from], event.user) do |a, e|
56
+ a == case a
57
+ when String
58
+ e.name
59
+ when Integer
60
+ e.id
61
+ else
62
+ e
63
+ end
64
+ end,
65
+ matches_all(@attributes[:after], event.timestamp) { |a, e| a > e },
66
+ matches_all(@attributes[:before], event.timestamp) { |a, e| a < e }
67
+ ].reduce(true, &:&)
68
+ end
69
+ end
70
+ end
@@ -0,0 +1,45 @@
1
+ require "rubycord/events/generic"
2
+ require "rubycord/data"
3
+
4
+ module Rubycord::Events
5
+ # Event raised when a server's voice server is updating.
6
+ # Sent when initially connecting to voice and when a voice instance fails
7
+ # over to a new server.
8
+ # This event is exposed for use with library agnostic interfaces like telecom and
9
+ # lavalink.
10
+ class VoiceServerUpdateEvent < Event
11
+ # @return [String] The voice connection token
12
+ attr_reader :token
13
+
14
+ # @return [Server] The server this update is for.
15
+ attr_reader :server
16
+
17
+ # @return [String] The voice server host.
18
+ attr_reader :endpoint
19
+
20
+ def initialize(data, bot)
21
+ @bot = bot
22
+
23
+ @token = data["token"]
24
+ @endpoint = data["endpoint"]
25
+ @server = bot.server(data["guild_id"])
26
+ end
27
+ end
28
+
29
+ # Event handler for VoiceServerUpdateEvent
30
+ class VoiceServerUpdateEventHandler < EventHandler
31
+ def matches?(event)
32
+ return false unless event.is_a? VoiceServerUpdateEvent
33
+
34
+ [
35
+ matches_all(@attributes[:from], event.server) do |a, e|
36
+ a == if a.is_a? String
37
+ e.name
38
+ else
39
+ e
40
+ end
41
+ end
42
+ ]
43
+ end
44
+ end
45
+ end
@@ -0,0 +1,103 @@
1
+ require "rubycord/events/generic"
2
+ require "rubycord/data"
3
+
4
+ module Rubycord::Events
5
+ # Event raised when a user's voice state updates
6
+ class VoiceStateUpdateEvent < Event
7
+ attr_reader :user, :token, :suppress, :session_id, :self_mute, :self_deaf, :mute, :deaf, :server, :channel
8
+
9
+ # @return [Channel, nil] the old channel this user was on, or nil if the user is newly joining voice.
10
+ attr_reader :old_channel
11
+
12
+ def initialize(data, old_channel_id, bot)
13
+ @bot = bot
14
+
15
+ @token = data["token"]
16
+ @suppress = data["suppress"]
17
+ @session_id = data["session_id"]
18
+ @self_mute = data["self_mute"]
19
+ @self_deaf = data["self_deaf"]
20
+ @mute = data["mute"]
21
+ @deaf = data["deaf"]
22
+ @server = bot.server(data["guild_id"].to_i)
23
+ return unless @server
24
+
25
+ @channel = bot.channel(data["channel_id"].to_i) if data["channel_id"]
26
+ @old_channel = bot.channel(old_channel_id) if old_channel_id
27
+ @user = bot.user(data["user_id"].to_i)
28
+ end
29
+ end
30
+
31
+ # Event handler for VoiceStateUpdateEvent
32
+ class VoiceStateUpdateEventHandler < EventHandler
33
+ def matches?(event)
34
+ # Check for the proper event type
35
+ return false unless event.is_a? VoiceStateUpdateEvent
36
+
37
+ [
38
+ matches_all(@attributes[:from], event.user) do |a, e|
39
+ a == case a
40
+ when String
41
+ e.name
42
+ when Integer
43
+ e.id
44
+ else
45
+ e
46
+ end
47
+ end,
48
+ matches_all(@attributes[:mute], event.mute) do |a, e|
49
+ a == if a.is_a? String
50
+ e.to_s
51
+ else
52
+ e
53
+ end
54
+ end,
55
+ matches_all(@attributes[:deaf], event.deaf) do |a, e|
56
+ a == if a.is_a? String
57
+ e.to_s
58
+ else
59
+ e
60
+ end
61
+ end,
62
+ matches_all(@attributes[:self_mute], event.self_mute) do |a, e|
63
+ a == if a.is_a? String
64
+ e.to_s
65
+ else
66
+ e
67
+ end
68
+ end,
69
+ matches_all(@attributes[:self_deaf], event.self_deaf) do |a, e|
70
+ a == if a.is_a? String
71
+ e.to_s
72
+ else
73
+ e
74
+ end
75
+ end,
76
+ matches_all(@attributes[:channel], event.channel) do |a, e|
77
+ next unless e # Don't bother if the channel is nil
78
+
79
+ a == case a
80
+ when String
81
+ e.name
82
+ when Integer
83
+ e.id
84
+ else
85
+ e
86
+ end
87
+ end,
88
+ matches_all(@attributes[:old_channel], event.old_channel) do |a, e|
89
+ next unless e # Don't bother if the channel is nil
90
+
91
+ a == case a
92
+ when String
93
+ e.name
94
+ when Integer
95
+ e.id
96
+ else
97
+ e
98
+ end
99
+ end
100
+ ].reduce(true, &:&)
101
+ end
102
+ end
103
+ end
@@ -0,0 +1,62 @@
1
+ require "rubycord/events/generic"
2
+ require "rubycord/data"
3
+
4
+ module Rubycord::Events
5
+ # Event raised when a webhook is updated
6
+ class WebhookUpdateEvent < Event
7
+ # @return [Server] the server where the webhook updated
8
+ attr_reader :server
9
+
10
+ # @return [Channel] the channel the webhook is associated to
11
+ attr_reader :channel
12
+
13
+ def initialize(data, bot)
14
+ @bot = bot
15
+
16
+ @server = bot.server(data["guild_id"].to_i)
17
+ @channel = bot.channel(data["channel_id"].to_i)
18
+ end
19
+ end
20
+
21
+ # Event handler for {WebhookUpdateEvent}
22
+ class WebhookUpdateEventHandler < EventHandler
23
+ def matches?(event)
24
+ # Check for the proper event type
25
+ return false unless event.is_a? WebhookUpdateEvent
26
+
27
+ [
28
+ matches_all(@attributes[:server], event.server) do |a, e|
29
+ a == case a
30
+ when String
31
+ e.name
32
+ when Integer
33
+ e.id
34
+ else
35
+ e
36
+ end
37
+ end,
38
+ matches_all(@attributes[:channel], event.channel) do |a, e|
39
+ case a
40
+ when String
41
+ # Make sure to remove the "#" from channel names in case it was specified
42
+ a.delete("#") == e.name
43
+ when Integer
44
+ a == e.id
45
+ else
46
+ a == e
47
+ end
48
+ end,
49
+ matches_all(@attributes[:webhook], event) do |a, e|
50
+ a == case a
51
+ when String
52
+ e.name
53
+ when Integer
54
+ e.id
55
+ else
56
+ e
57
+ end
58
+ end
59
+ ].reduce(true, &:&)
60
+ end
61
+ end
62
+ end