onyxcord 1.1.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.
- checksums.yaml +7 -0
- data/.devcontainer/Dockerfile +13 -0
- data/.devcontainer/devcontainer.json +29 -0
- data/.devcontainer/postcreate.sh +4 -0
- data/.github/CONTRIBUTING.md +13 -0
- data/.github/ISSUE_TEMPLATE/bug_report.md +38 -0
- data/.github/ISSUE_TEMPLATE/feature_request.md +24 -0
- data/.github/pull_request_template.md +37 -0
- data/.github/workflows/ci.yml +78 -0
- data/.github/workflows/codeql.yml +65 -0
- data/.github/workflows/deploy.yml +54 -0
- data/.github/workflows/release.yml +51 -0
- data/.gitignore +16 -0
- data/.markdownlint.json +4 -0
- data/.overcommit.yml +7 -0
- data/.rspec +2 -0
- data/.rubocop.yml +129 -0
- data/.yardopts +1 -0
- data/CHANGELOG.md +0 -0
- data/Gemfile +7 -0
- data/LICENSE.txt +21 -0
- data/README.md +305 -0
- data/Rakefile +17 -0
- data/bin/console +15 -0
- data/bin/setup +7 -0
- data/lib/onyxcord/allowed_mentions.rb +43 -0
- data/lib/onyxcord/api/application.rb +316 -0
- data/lib/onyxcord/api/channel.rb +700 -0
- data/lib/onyxcord/api/interaction.rb +67 -0
- data/lib/onyxcord/api/invite.rb +44 -0
- data/lib/onyxcord/api/server.rb +775 -0
- data/lib/onyxcord/api/user.rb +158 -0
- data/lib/onyxcord/api/webhook.rb +163 -0
- data/lib/onyxcord/api.rb +335 -0
- data/lib/onyxcord/await.rb +51 -0
- data/lib/onyxcord/bot.rb +1971 -0
- data/lib/onyxcord/cache.rb +326 -0
- data/lib/onyxcord/colour_rgb.rb +43 -0
- data/lib/onyxcord/commands/command_bot.rb +511 -0
- data/lib/onyxcord/commands/container.rb +112 -0
- data/lib/onyxcord/commands/events.rb +11 -0
- data/lib/onyxcord/commands/parser.rb +327 -0
- data/lib/onyxcord/commands/rate_limiter.rb +144 -0
- data/lib/onyxcord/configuration.rb +125 -0
- data/lib/onyxcord/container.rb +988 -0
- data/lib/onyxcord/data/activity.rb +271 -0
- data/lib/onyxcord/data/application.rb +341 -0
- data/lib/onyxcord/data/attachment.rb +91 -0
- data/lib/onyxcord/data/audit_logs.rb +438 -0
- data/lib/onyxcord/data/avatar_decoration.rb +26 -0
- data/lib/onyxcord/data/call.rb +22 -0
- data/lib/onyxcord/data/channel.rb +1355 -0
- data/lib/onyxcord/data/channel_tag.rb +69 -0
- data/lib/onyxcord/data/collectibles.rb +47 -0
- data/lib/onyxcord/data/component.rb +583 -0
- data/lib/onyxcord/data/embed.rb +258 -0
- data/lib/onyxcord/data/emoji.rb +123 -0
- data/lib/onyxcord/data/install_params.rb +24 -0
- data/lib/onyxcord/data/integration.rb +144 -0
- data/lib/onyxcord/data/interaction.rb +1141 -0
- data/lib/onyxcord/data/invite.rb +137 -0
- data/lib/onyxcord/data/member.rb +528 -0
- data/lib/onyxcord/data/message.rb +612 -0
- data/lib/onyxcord/data/message_activity.rb +41 -0
- data/lib/onyxcord/data/overwrite.rb +109 -0
- data/lib/onyxcord/data/poll.rb +365 -0
- data/lib/onyxcord/data/primary_server.rb +60 -0
- data/lib/onyxcord/data/profile.rb +79 -0
- data/lib/onyxcord/data/reaction.rb +64 -0
- data/lib/onyxcord/data/recipient.rb +34 -0
- data/lib/onyxcord/data/role.rb +449 -0
- data/lib/onyxcord/data/role_connection_data.rb +69 -0
- data/lib/onyxcord/data/role_subscription.rb +41 -0
- data/lib/onyxcord/data/scheduled_event.rb +513 -0
- data/lib/onyxcord/data/server.rb +1614 -0
- data/lib/onyxcord/data/server_preview.rb +68 -0
- data/lib/onyxcord/data/snapshot.rb +112 -0
- data/lib/onyxcord/data/team.rb +98 -0
- data/lib/onyxcord/data/timestamp.rb +69 -0
- data/lib/onyxcord/data/user.rb +324 -0
- data/lib/onyxcord/data/voice_region.rb +46 -0
- data/lib/onyxcord/data/voice_state.rb +41 -0
- data/lib/onyxcord/data/webhook.rb +238 -0
- data/lib/onyxcord/data.rb +57 -0
- data/lib/onyxcord/errors.rb +246 -0
- data/lib/onyxcord/event_executor.rb +80 -0
- data/lib/onyxcord/events/await.rb +48 -0
- data/lib/onyxcord/events/bans.rb +60 -0
- data/lib/onyxcord/events/channels.rb +225 -0
- data/lib/onyxcord/events/generic.rb +129 -0
- data/lib/onyxcord/events/guilds.rb +269 -0
- data/lib/onyxcord/events/integrations.rb +100 -0
- data/lib/onyxcord/events/interactions.rb +624 -0
- data/lib/onyxcord/events/invites.rb +127 -0
- data/lib/onyxcord/events/lifetime.rb +31 -0
- data/lib/onyxcord/events/members.rb +110 -0
- data/lib/onyxcord/events/message.rb +399 -0
- data/lib/onyxcord/events/polls.rb +118 -0
- data/lib/onyxcord/events/presence.rb +131 -0
- data/lib/onyxcord/events/raw.rb +74 -0
- data/lib/onyxcord/events/reactions.rb +218 -0
- data/lib/onyxcord/events/roles.rb +87 -0
- data/lib/onyxcord/events/scheduled_events.rb +171 -0
- data/lib/onyxcord/events/threads.rb +100 -0
- data/lib/onyxcord/events/typing.rb +73 -0
- data/lib/onyxcord/events/voice_server_update.rb +48 -0
- data/lib/onyxcord/events/voice_state_update.rb +106 -0
- data/lib/onyxcord/events/webhooks.rb +65 -0
- data/lib/onyxcord/gateway.rb +890 -0
- data/lib/onyxcord/id_object.rb +39 -0
- data/lib/onyxcord/light/data.rb +62 -0
- data/lib/onyxcord/light/integrations.rb +73 -0
- data/lib/onyxcord/light/light_bot.rb +58 -0
- data/lib/onyxcord/light.rb +8 -0
- data/lib/onyxcord/logger.rb +120 -0
- data/lib/onyxcord/message_components.rb +70 -0
- data/lib/onyxcord/paginator.rb +60 -0
- data/lib/onyxcord/permissions.rb +255 -0
- data/lib/onyxcord/rate_limiter/gateway.rb +42 -0
- data/lib/onyxcord/rate_limiter/rest.rb +89 -0
- data/lib/onyxcord/version.rb +7 -0
- data/lib/onyxcord/voice/encoder.rb +115 -0
- data/lib/onyxcord/voice/network.rb +380 -0
- data/lib/onyxcord/voice/opcodes.rb +29 -0
- data/lib/onyxcord/voice/sodium.rb +157 -0
- data/lib/onyxcord/voice/timer.rb +19 -0
- data/lib/onyxcord/voice/voice_bot.rb +386 -0
- data/lib/onyxcord/webhooks.rb +14 -0
- data/lib/onyxcord/websocket.rb +62 -0
- data/lib/onyxcord.rb +180 -0
- data/onyxcord-webhooks.gemspec +30 -0
- data/onyxcord.gemspec +50 -0
- metadata +421 -0
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'onyxcord/data'
|
|
4
|
+
require 'onyxcord/events/generic'
|
|
5
|
+
|
|
6
|
+
module OnyxCord::Events
|
|
7
|
+
# Generic superclass for scheduled events.
|
|
8
|
+
class ScheduledEventEvent < Event
|
|
9
|
+
# @return [Server] the server associated with the event.
|
|
10
|
+
attr_reader :server
|
|
11
|
+
|
|
12
|
+
# @return [ScheduledEvent] the scheduled event associated with the event.
|
|
13
|
+
attr_reader :scheduled_event
|
|
14
|
+
|
|
15
|
+
# @!visibility private
|
|
16
|
+
def initialize(data, bot)
|
|
17
|
+
@bot = bot
|
|
18
|
+
@server = bot.server(data['guild_id'].to_i)
|
|
19
|
+
@scheduled_event = @server&.scheduled_event(data['id'].to_i)
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
# Raised whenever a scheduled event is created.
|
|
24
|
+
class ScheduledEventCreateEvent < ScheduledEventEvent; end
|
|
25
|
+
|
|
26
|
+
# Raised whenever a scheduled event is updated.
|
|
27
|
+
class ScheduledEventUpdateEvent < ScheduledEventEvent; end
|
|
28
|
+
|
|
29
|
+
# Raised whenever a scheduled event is deleted.
|
|
30
|
+
class ScheduledEventDeleteEvent < ScheduledEventEvent
|
|
31
|
+
# @!visibility private
|
|
32
|
+
def initialize(data, bot)
|
|
33
|
+
@bot = bot
|
|
34
|
+
@server = bot.server(data['guild_id'].to_i)
|
|
35
|
+
@scheduled_event = OnyxCord::ScheduledEvent.new(data, @server, @bot)
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
# Generic superclass for scheduled event user events.
|
|
40
|
+
class ScheduledEventUserEvent < Event
|
|
41
|
+
# @!visibility private
|
|
42
|
+
attr_reader :user_id
|
|
43
|
+
|
|
44
|
+
# @!visibility private
|
|
45
|
+
attr_reader :server_id
|
|
46
|
+
|
|
47
|
+
# @!visibility private
|
|
48
|
+
attr_reader :scheduled_event_id
|
|
49
|
+
|
|
50
|
+
# @!visibility private
|
|
51
|
+
def initialize(data, bot)
|
|
52
|
+
@bot = bot
|
|
53
|
+
@user_id = data['user_id'].to_i
|
|
54
|
+
@server_id = data['guild_id'].to_i
|
|
55
|
+
@scheduled_event_id = data['guild_scheduled_event_id'].to_i
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
# Get the server the scheduled event in question is from.
|
|
59
|
+
# @return [Server] the server the scheduled event is associated with.
|
|
60
|
+
def server
|
|
61
|
+
@bot.server(@server_id)
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
# Get the scheduled event that the user was added to or removed from.
|
|
65
|
+
# @return [ScheduledEvent] the scheduled event that the user was actioned on.
|
|
66
|
+
def scheduled_event
|
|
67
|
+
server.scheduled_event(@scheduled_event_id)
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
# Get the user that was added to or removed from the scheduled event.
|
|
71
|
+
# @return [Member, User] the server member that was added to or removed from the
|
|
72
|
+
# scheduled event, or a user if the member cannot be accessed by the bot.
|
|
73
|
+
def member
|
|
74
|
+
server.member(@user_id) || @bot.user(@user_id)
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
alias_method :user, :member
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
# Raised whenever a user is added to a scheduled event.
|
|
81
|
+
class ScheduledEventUserAddEvent < ScheduledEventUserEvent; end
|
|
82
|
+
|
|
83
|
+
# Raised whenever a user is removed from a scheduled event.
|
|
84
|
+
class ScheduledEventUserRemoveEvent < ScheduledEventUserEvent; end
|
|
85
|
+
|
|
86
|
+
# Generic event handler for scheduled event.
|
|
87
|
+
class ScheduledEventEventHandler < EventHandler
|
|
88
|
+
# @!visibility private
|
|
89
|
+
def matches?(event)
|
|
90
|
+
# Check for the proper event type.
|
|
91
|
+
return false unless event.is_a?(ScheduledEventEvent)
|
|
92
|
+
|
|
93
|
+
[
|
|
94
|
+
matches_all(@attributes[:server], event.server) do |a, e|
|
|
95
|
+
a&.resolve_id == e&.resolve_id
|
|
96
|
+
end,
|
|
97
|
+
|
|
98
|
+
matches_all(@attributes[:id], event.scheduled_event) do |a, e|
|
|
99
|
+
a&.resolve_id == e&.resolve_id
|
|
100
|
+
end,
|
|
101
|
+
|
|
102
|
+
matches_all(@attributes[:creator], event.scheduled_event.creator) do |a, e|
|
|
103
|
+
a&.resolve_id == e&.resolve_id
|
|
104
|
+
end,
|
|
105
|
+
|
|
106
|
+
matches_all(@attributes[:channel], event.scheduled_event.channel) do |a, e|
|
|
107
|
+
a&.resolve_id == e&.resolve_id
|
|
108
|
+
end,
|
|
109
|
+
|
|
110
|
+
matches_all(@attributes[:entity_id], event.scheduled_event.entity_id) do |a, e|
|
|
111
|
+
a&.resolve_id == e&.resolve_id
|
|
112
|
+
end,
|
|
113
|
+
|
|
114
|
+
matches_all(@attributes[:entity_type], event.scheduled_event.entity_type) do |a, e|
|
|
115
|
+
case a
|
|
116
|
+
when Symbol, String
|
|
117
|
+
OnyxCord::ScheduledEvent::ENTITY_TYPES[a.to_sym] == e
|
|
118
|
+
else
|
|
119
|
+
a == e
|
|
120
|
+
end
|
|
121
|
+
end,
|
|
122
|
+
|
|
123
|
+
matches_all(@attributes[:status], event.scheduled_event.status) do |a, e|
|
|
124
|
+
case a
|
|
125
|
+
when Symbol, String
|
|
126
|
+
OnyxCord::ScheduledEvent::STATUSES[a.to_sym] == e
|
|
127
|
+
else
|
|
128
|
+
a == e
|
|
129
|
+
end
|
|
130
|
+
end
|
|
131
|
+
].reduce(true, &:&)
|
|
132
|
+
end
|
|
133
|
+
end
|
|
134
|
+
|
|
135
|
+
# Event handler for :GUILD_SCHEDULED_EVENT_CREATE events.
|
|
136
|
+
class ScheduledEventCreateEventHandler < ScheduledEventEventHandler; end
|
|
137
|
+
|
|
138
|
+
# Event handler for :GUILD_SCHEDULED_EVENT_UPDATE events.
|
|
139
|
+
class ScheduledEventUpdateEventHandler < ScheduledEventEventHandler; end
|
|
140
|
+
|
|
141
|
+
# Event handler for :GUILD_SCHEDULED_EVENT_DELETE events.
|
|
142
|
+
class ScheduledEventDeleteEventHandler < ScheduledEventEventHandler; end
|
|
143
|
+
|
|
144
|
+
# Generic event handler for scheduled event user events.
|
|
145
|
+
class ScheduledEventUserEventHandler < EventHandler
|
|
146
|
+
# @!visibility private
|
|
147
|
+
def matches?(event)
|
|
148
|
+
return false unless event.is_a?(ScheduledEventUserEvent)
|
|
149
|
+
|
|
150
|
+
[
|
|
151
|
+
matches_all(@attributes[:user], event.user_id) do |a, e|
|
|
152
|
+
a.resolve_id == e.resolve_id
|
|
153
|
+
end,
|
|
154
|
+
|
|
155
|
+
matches_all(@attributes[:server], event.server_id) do |a, e|
|
|
156
|
+
a.resolve_id == e.resolve_id
|
|
157
|
+
end,
|
|
158
|
+
|
|
159
|
+
matches_all(@attributes[:scheduled_event], event.scheduled_event_id) do |a, e|
|
|
160
|
+
a.resolve_id == e.resolve_id
|
|
161
|
+
end
|
|
162
|
+
].reduce(true, &:&)
|
|
163
|
+
end
|
|
164
|
+
end
|
|
165
|
+
|
|
166
|
+
# Event handler for :GUILD_SCHEDULED_EVENT_USER_ADD events.
|
|
167
|
+
class ScheduledEventUserAddEventHandler < ScheduledEventUserEventHandler; end
|
|
168
|
+
|
|
169
|
+
# Event handler for :GUILD_SCHEDULED_EVENT_USER_REMOVE events.
|
|
170
|
+
class ScheduledEventUserRemoveEventHandler < ScheduledEventUserEventHandler; end
|
|
171
|
+
end
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
# Generic subclass for threads
|
|
4
|
+
module OnyxCord::Events
|
|
5
|
+
# Raised when a thread is created
|
|
6
|
+
class ThreadCreateEvent < Event
|
|
7
|
+
# @return [Channel] the thread in question.
|
|
8
|
+
attr_reader :thread
|
|
9
|
+
|
|
10
|
+
delegate :name, :server, :owner, :parent_channel, :thread_metadata, to: :thread
|
|
11
|
+
|
|
12
|
+
# @!visibility private
|
|
13
|
+
def initialize(data, bot)
|
|
14
|
+
@bot = bot
|
|
15
|
+
@thread = data.is_a?(OnyxCord::Channel) ? data : bot.channel(data['id'].to_i)
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
# Event handler for ChannelCreateEvent
|
|
20
|
+
class ThreadCreateEventHandler < EventHandler
|
|
21
|
+
def matches?(event)
|
|
22
|
+
# Check for the proper event type
|
|
23
|
+
return false unless event.is_a? ThreadCreateEvent
|
|
24
|
+
|
|
25
|
+
[
|
|
26
|
+
matches_all(@attributes[:name], event.name) do |a, e|
|
|
27
|
+
a == if a.is_a? String
|
|
28
|
+
e.to_s
|
|
29
|
+
else
|
|
30
|
+
e
|
|
31
|
+
end
|
|
32
|
+
end,
|
|
33
|
+
matches_all(@attributes[:server], event.server) do |a, e|
|
|
34
|
+
a.resolve_id == e.resolve_id
|
|
35
|
+
end,
|
|
36
|
+
matches_all(@attributes[:invitable], event.thread.invitable) do |a, e|
|
|
37
|
+
a == e
|
|
38
|
+
end,
|
|
39
|
+
matches_all(@attributes[:owner], event.thread.owner) do |a, e|
|
|
40
|
+
a.resolve_id == e.resolve_id
|
|
41
|
+
end,
|
|
42
|
+
matches_all(@attributes[:channel], event.thread.parent) do |a, e|
|
|
43
|
+
a.resolve_id == e.resolve_id
|
|
44
|
+
end
|
|
45
|
+
].reduce(true, &:&)
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
# Raised when a thread is updated (e.g. name changes)
|
|
50
|
+
class ThreadUpdateEvent < ThreadCreateEvent; end
|
|
51
|
+
|
|
52
|
+
# Event handler for ThreadUpdateEvent
|
|
53
|
+
class ThreadUpdateEventHandler < ThreadCreateEventHandler
|
|
54
|
+
def matches?(event)
|
|
55
|
+
# Check for the proper event type
|
|
56
|
+
return false unless event.is_a? ThreadUpdateEvent
|
|
57
|
+
|
|
58
|
+
super
|
|
59
|
+
end
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
# Raised when members are added or removed from a thread.
|
|
63
|
+
class ThreadMembersUpdateEvent < Event
|
|
64
|
+
# @return [Channel]
|
|
65
|
+
attr_reader :thread
|
|
66
|
+
|
|
67
|
+
# @return [Array<Integer>]
|
|
68
|
+
attr_reader :removed_member_ids
|
|
69
|
+
|
|
70
|
+
# @return [Integer]
|
|
71
|
+
attr_reader :member_count
|
|
72
|
+
|
|
73
|
+
delegate :name, :server, :owner, :parent_channel, :thread_metadata, to: :thread
|
|
74
|
+
|
|
75
|
+
# @!visibility private
|
|
76
|
+
def initialize(data, bot)
|
|
77
|
+
@bot = bot
|
|
78
|
+
@server = bot.server(data['guild_id'].to_i) if data['guild_id']
|
|
79
|
+
@thread = data.is_a?(OnyxCord::Channel) ? data : bot.channel(data['id'].to_i)
|
|
80
|
+
@added_member_ids = data['added_members']&.map { |m| m['user_id']&.to_i } || []
|
|
81
|
+
@removed_member_ids = data['removed_member_ids']&.map(&:resolve_id) || []
|
|
82
|
+
@member_count = data['member_count']
|
|
83
|
+
end
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
# @return [Array<Member, User>] the members that were added to the thread
|
|
87
|
+
def added_members
|
|
88
|
+
@added_members ||= @added_member_ids&.map { |id| @server&.member(id) || @bot.user(id) }
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
# Event handler for ThreadMembersUpdateEvent
|
|
92
|
+
class ThreadMembersUpdateEventHandler < ThreadCreateEventHandler
|
|
93
|
+
def matches?(event)
|
|
94
|
+
# Check for the proper event type
|
|
95
|
+
return false unless event.is_a? ThreadMembersUpdateEvent
|
|
96
|
+
|
|
97
|
+
super
|
|
98
|
+
end
|
|
99
|
+
end
|
|
100
|
+
end
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'onyxcord/events/generic'
|
|
4
|
+
|
|
5
|
+
module OnyxCord::Events
|
|
6
|
+
# Event raised when a user starts typing
|
|
7
|
+
class TypingEvent < Event
|
|
8
|
+
include Respondable
|
|
9
|
+
|
|
10
|
+
# @return [Channel] the channel on which a user started typing.
|
|
11
|
+
attr_reader :channel
|
|
12
|
+
|
|
13
|
+
# @return [User, Member, Recipient] the user that started typing.
|
|
14
|
+
attr_reader :user
|
|
15
|
+
alias_method :member, :user
|
|
16
|
+
|
|
17
|
+
# @return [Time] when the typing happened.
|
|
18
|
+
attr_reader :timestamp
|
|
19
|
+
|
|
20
|
+
# @!visibility private
|
|
21
|
+
def initialize(data, bot)
|
|
22
|
+
@bot = bot
|
|
23
|
+
|
|
24
|
+
@user_id = data['user_id'].to_i
|
|
25
|
+
|
|
26
|
+
@channel_id = data['channel_id'].to_i
|
|
27
|
+
@channel = bot.channel(@channel_id)
|
|
28
|
+
|
|
29
|
+
@user = if channel.pm?
|
|
30
|
+
channel.recipient
|
|
31
|
+
elsif channel.group?
|
|
32
|
+
bot.user(@user_id)
|
|
33
|
+
else
|
|
34
|
+
bot.member(@channel.server.id, @user_id)
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
@timestamp = Time.at(data['timestamp'].to_i)
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
# Event handler for TypingEvent
|
|
42
|
+
class TypingEventHandler < EventHandler
|
|
43
|
+
def matches?(event)
|
|
44
|
+
# Check for the proper event type
|
|
45
|
+
return false unless event.is_a? TypingEvent
|
|
46
|
+
|
|
47
|
+
[
|
|
48
|
+
matches_all(@attributes[:in], event.channel) do |a, e|
|
|
49
|
+
case a
|
|
50
|
+
when String
|
|
51
|
+
a.delete('#') == e.name
|
|
52
|
+
when Integer
|
|
53
|
+
a == e.id
|
|
54
|
+
else
|
|
55
|
+
a == e
|
|
56
|
+
end
|
|
57
|
+
end,
|
|
58
|
+
matches_all(@attributes[:from], event.user) do |a, e|
|
|
59
|
+
a == case a
|
|
60
|
+
when String
|
|
61
|
+
e.name
|
|
62
|
+
when Integer
|
|
63
|
+
e.id
|
|
64
|
+
else
|
|
65
|
+
e
|
|
66
|
+
end
|
|
67
|
+
end,
|
|
68
|
+
matches_all(@attributes[:after], event.timestamp) { |a, e| a > e },
|
|
69
|
+
matches_all(@attributes[:before], event.timestamp) { |a, e| a < e }
|
|
70
|
+
].reduce(true, &:&)
|
|
71
|
+
end
|
|
72
|
+
end
|
|
73
|
+
end
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'onyxcord/events/generic'
|
|
4
|
+
require 'onyxcord/data'
|
|
5
|
+
|
|
6
|
+
module OnyxCord::Events
|
|
7
|
+
# Event raised when a server's voice server is updating.
|
|
8
|
+
# Sent when initially connecting to voice and when a voice instance fails
|
|
9
|
+
# over to a new server.
|
|
10
|
+
# This event is exposed for use with library agnostic interfaces like telecom and
|
|
11
|
+
# lavalink.
|
|
12
|
+
class VoiceServerUpdateEvent < Event
|
|
13
|
+
# @return [String] The voice connection token
|
|
14
|
+
attr_reader :token
|
|
15
|
+
|
|
16
|
+
# @return [Server] The server this update is for.
|
|
17
|
+
attr_reader :server
|
|
18
|
+
|
|
19
|
+
# @return [String] The voice server host.
|
|
20
|
+
attr_reader :endpoint
|
|
21
|
+
|
|
22
|
+
# @!visibility private
|
|
23
|
+
def initialize(data, bot)
|
|
24
|
+
@bot = bot
|
|
25
|
+
|
|
26
|
+
@token = data['token']
|
|
27
|
+
@endpoint = data['endpoint']
|
|
28
|
+
@server = bot.server(data['guild_id'])
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
# Event handler for VoiceServerUpdateEvent
|
|
33
|
+
class VoiceServerUpdateEventHandler < EventHandler
|
|
34
|
+
def matches?(event)
|
|
35
|
+
return false unless event.is_a? VoiceServerUpdateEvent
|
|
36
|
+
|
|
37
|
+
[
|
|
38
|
+
matches_all(@attributes[:from], event.server) do |a, e|
|
|
39
|
+
a == if a.is_a? String
|
|
40
|
+
e.name
|
|
41
|
+
else
|
|
42
|
+
e
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
]
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
end
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'onyxcord/events/generic'
|
|
4
|
+
require 'onyxcord/data'
|
|
5
|
+
|
|
6
|
+
module OnyxCord::Events
|
|
7
|
+
# Event raised when a user's voice state updates
|
|
8
|
+
class VoiceStateUpdateEvent < Event
|
|
9
|
+
attr_reader :user, :token, :suppress, :session_id, :self_mute, :self_deaf, :mute, :deaf, :server, :channel
|
|
10
|
+
|
|
11
|
+
# @return [Channel, nil] the old channel this user was on, or nil if the user is newly joining voice.
|
|
12
|
+
attr_reader :old_channel
|
|
13
|
+
|
|
14
|
+
# @!visibility private
|
|
15
|
+
def initialize(data, old_channel_id, bot)
|
|
16
|
+
@bot = bot
|
|
17
|
+
|
|
18
|
+
@token = data['token']
|
|
19
|
+
@suppress = data['suppress']
|
|
20
|
+
@session_id = data['session_id']
|
|
21
|
+
@self_mute = data['self_mute']
|
|
22
|
+
@self_deaf = data['self_deaf']
|
|
23
|
+
@mute = data['mute']
|
|
24
|
+
@deaf = data['deaf']
|
|
25
|
+
@server = bot.server(data['guild_id'].to_i)
|
|
26
|
+
return unless @server
|
|
27
|
+
|
|
28
|
+
@channel = bot.channel(data['channel_id'].to_i) if data['channel_id']
|
|
29
|
+
@old_channel = bot.channel(old_channel_id) if old_channel_id
|
|
30
|
+
@user = bot.user(data['user_id'].to_i)
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
# Event handler for VoiceStateUpdateEvent
|
|
35
|
+
class VoiceStateUpdateEventHandler < EventHandler
|
|
36
|
+
def matches?(event)
|
|
37
|
+
# Check for the proper event type
|
|
38
|
+
return false unless event.is_a? VoiceStateUpdateEvent
|
|
39
|
+
|
|
40
|
+
[
|
|
41
|
+
matches_all(@attributes[:from], event.user) do |a, e|
|
|
42
|
+
a == case a
|
|
43
|
+
when String
|
|
44
|
+
e.name
|
|
45
|
+
when Integer
|
|
46
|
+
e.id
|
|
47
|
+
else
|
|
48
|
+
e
|
|
49
|
+
end
|
|
50
|
+
end,
|
|
51
|
+
matches_all(@attributes[:mute], event.mute) do |a, e|
|
|
52
|
+
a == if a.is_a? String
|
|
53
|
+
e.to_s
|
|
54
|
+
else
|
|
55
|
+
e
|
|
56
|
+
end
|
|
57
|
+
end,
|
|
58
|
+
matches_all(@attributes[:deaf], event.deaf) do |a, e|
|
|
59
|
+
a == if a.is_a? String
|
|
60
|
+
e.to_s
|
|
61
|
+
else
|
|
62
|
+
e
|
|
63
|
+
end
|
|
64
|
+
end,
|
|
65
|
+
matches_all(@attributes[:self_mute], event.self_mute) do |a, e|
|
|
66
|
+
a == if a.is_a? String
|
|
67
|
+
e.to_s
|
|
68
|
+
else
|
|
69
|
+
e
|
|
70
|
+
end
|
|
71
|
+
end,
|
|
72
|
+
matches_all(@attributes[:self_deaf], event.self_deaf) do |a, e|
|
|
73
|
+
a == if a.is_a? String
|
|
74
|
+
e.to_s
|
|
75
|
+
else
|
|
76
|
+
e
|
|
77
|
+
end
|
|
78
|
+
end,
|
|
79
|
+
matches_all(@attributes[:channel], event.channel) do |a, e|
|
|
80
|
+
next unless e # Don't bother if the channel is nil
|
|
81
|
+
|
|
82
|
+
a == case a
|
|
83
|
+
when String
|
|
84
|
+
e.name
|
|
85
|
+
when Integer
|
|
86
|
+
e.id
|
|
87
|
+
else
|
|
88
|
+
e
|
|
89
|
+
end
|
|
90
|
+
end,
|
|
91
|
+
matches_all(@attributes[:old_channel], event.old_channel) do |a, e|
|
|
92
|
+
next unless e # Don't bother if the channel is nil
|
|
93
|
+
|
|
94
|
+
a == case a
|
|
95
|
+
when String
|
|
96
|
+
e.name
|
|
97
|
+
when Integer
|
|
98
|
+
e.id
|
|
99
|
+
else
|
|
100
|
+
e
|
|
101
|
+
end
|
|
102
|
+
end
|
|
103
|
+
].reduce(true, &:&)
|
|
104
|
+
end
|
|
105
|
+
end
|
|
106
|
+
end
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'onyxcord/events/generic'
|
|
4
|
+
require 'onyxcord/data'
|
|
5
|
+
|
|
6
|
+
module OnyxCord::Events
|
|
7
|
+
# Event raised when a webhook is updated
|
|
8
|
+
class WebhookUpdateEvent < Event
|
|
9
|
+
# @return [Server] the server where the webhook updated
|
|
10
|
+
attr_reader :server
|
|
11
|
+
|
|
12
|
+
# @return [Channel] the channel the webhook is associated to
|
|
13
|
+
attr_reader :channel
|
|
14
|
+
|
|
15
|
+
# @!visibility private
|
|
16
|
+
def initialize(data, bot)
|
|
17
|
+
@bot = bot
|
|
18
|
+
|
|
19
|
+
@server = bot.server(data['guild_id'].to_i)
|
|
20
|
+
@channel = bot.channel(data['channel_id'].to_i)
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
# Event handler for {WebhookUpdateEvent}
|
|
25
|
+
class WebhookUpdateEventHandler < EventHandler
|
|
26
|
+
def matches?(event)
|
|
27
|
+
# Check for the proper event type
|
|
28
|
+
return false unless event.is_a? WebhookUpdateEvent
|
|
29
|
+
|
|
30
|
+
[
|
|
31
|
+
matches_all(@attributes[:server], event.server) do |a, e|
|
|
32
|
+
a == case a
|
|
33
|
+
when String
|
|
34
|
+
e.name
|
|
35
|
+
when Integer
|
|
36
|
+
e.id
|
|
37
|
+
else
|
|
38
|
+
e
|
|
39
|
+
end
|
|
40
|
+
end,
|
|
41
|
+
matches_all(@attributes[:channel], event.channel) do |a, e|
|
|
42
|
+
case a
|
|
43
|
+
when String
|
|
44
|
+
# Make sure to remove the "#" from channel names in case it was specified
|
|
45
|
+
a.delete('#') == e.name
|
|
46
|
+
when Integer
|
|
47
|
+
a == e.id
|
|
48
|
+
else
|
|
49
|
+
a == e
|
|
50
|
+
end
|
|
51
|
+
end,
|
|
52
|
+
matches_all(@attributes[:webhook], event) do |a, e|
|
|
53
|
+
a == case a
|
|
54
|
+
when String
|
|
55
|
+
e.name
|
|
56
|
+
when Integer
|
|
57
|
+
e.id
|
|
58
|
+
else
|
|
59
|
+
e
|
|
60
|
+
end
|
|
61
|
+
end
|
|
62
|
+
].reduce(true, &:&)
|
|
63
|
+
end
|
|
64
|
+
end
|
|
65
|
+
end
|