onyxcord 2.0.13 → 3.2.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 (270) hide show
  1. checksums.yaml +4 -4
  2. data/lib/onyxcord/application_commands/command.rb +4 -97
  3. data/lib/onyxcord/application_commands/context.rb +4 -94
  4. data/lib/onyxcord/application_commands/option.rb +4 -75
  5. data/lib/onyxcord/application_commands/registry.rb +4 -45
  6. data/lib/onyxcord/application_commands.rb +8 -5
  7. data/lib/onyxcord/bot.rb +24 -1759
  8. data/lib/onyxcord/{cache.rb → cache/manager.rb} +16 -14
  9. data/lib/onyxcord/cache/stores/gateway.rb +272 -0
  10. data/lib/onyxcord/commands/bot/channels.rb +48 -0
  11. data/lib/onyxcord/commands/bot/execution.rb +174 -0
  12. data/lib/onyxcord/commands/bot/message_dispatch.rb +58 -0
  13. data/lib/onyxcord/commands/bot/permissions.rb +72 -0
  14. data/lib/onyxcord/commands/bot.rb +209 -0
  15. data/lib/onyxcord/commands/container.rb +21 -2
  16. data/lib/onyxcord/commands/parser.rb +30 -1
  17. data/lib/onyxcord/container.rb +16 -960
  18. data/lib/onyxcord/core/bot/application_commands.rb +210 -0
  19. data/lib/onyxcord/core/bot/awaits.rb +112 -0
  20. data/lib/onyxcord/core/bot/invites.rb +42 -0
  21. data/lib/onyxcord/core/bot/messaging.rb +161 -0
  22. data/lib/onyxcord/core/bot/oauth.rb +27 -0
  23. data/lib/onyxcord/core/bot/presence.rb +103 -0
  24. data/lib/onyxcord/core/bot/runtime.rb +183 -0
  25. data/lib/onyxcord/core/bot/voice.rb +69 -0
  26. data/lib/onyxcord/{errors.rb → core/errors.rb} +18 -3
  27. data/lib/onyxcord/{logger.rb → core/logger.rb} +5 -0
  28. data/lib/onyxcord/core/version.rb +5 -0
  29. data/lib/onyxcord/events/await/base.rb +48 -0
  30. data/lib/onyxcord/events/await.rb +1 -46
  31. data/lib/onyxcord/events/ban/base.rb +54 -0
  32. data/lib/onyxcord/events/ban/remove.rb +11 -0
  33. data/lib/onyxcord/events/bans.rb +2 -58
  34. data/lib/onyxcord/events/channels/base.rb +91 -0
  35. data/lib/onyxcord/events/channels/delete.rb +73 -0
  36. data/lib/onyxcord/events/channels/pins.rb +44 -0
  37. data/lib/onyxcord/events/channels/recipients.rb +77 -0
  38. data/lib/onyxcord/events/channels.rb +4 -239
  39. data/lib/onyxcord/events/guilds/audit_logs.rb +79 -0
  40. data/lib/onyxcord/events/guilds/base.rb +97 -0
  41. data/lib/onyxcord/events/guilds/emoji.rb +147 -0
  42. data/lib/onyxcord/events/guilds.rb +3 -267
  43. data/lib/onyxcord/events/handlers/channels.rb +133 -0
  44. data/lib/onyxcord/events/handlers/core.rb +146 -0
  45. data/lib/onyxcord/events/handlers/guilds.rb +375 -0
  46. data/lib/onyxcord/events/handlers/interactions.rb +238 -0
  47. data/lib/onyxcord/events/handlers/lifetime.rb +71 -0
  48. data/lib/onyxcord/events/handlers/messages.rb +218 -0
  49. data/lib/onyxcord/events/handlers/presence.rb +56 -0
  50. data/lib/onyxcord/events/handlers/raw.rb +39 -0
  51. data/lib/onyxcord/events/handlers/reactions.rb +98 -0
  52. data/lib/onyxcord/events/handlers/scheduled_events.rb +243 -0
  53. data/lib/onyxcord/events/handlers/voice.rb +46 -0
  54. data/lib/onyxcord/events/integration/base.rb +45 -0
  55. data/lib/onyxcord/events/integration/create.rb +11 -0
  56. data/lib/onyxcord/events/integration/delete.rb +48 -0
  57. data/lib/onyxcord/events/integration/update.rb +11 -0
  58. data/lib/onyxcord/events/integrations.rb +4 -98
  59. data/lib/onyxcord/events/interactions/application_commands.rb +185 -0
  60. data/lib/onyxcord/events/interactions/autocomplete.rb +62 -0
  61. data/lib/onyxcord/events/interactions/base.rb +175 -0
  62. data/lib/onyxcord/events/interactions/components.rb +221 -0
  63. data/lib/onyxcord/events/interactions/permissions.rb +53 -0
  64. data/lib/onyxcord/events/interactions.rb +5 -622
  65. data/lib/onyxcord/events/invite/create.rb +79 -0
  66. data/lib/onyxcord/events/invite/delete.rb +55 -0
  67. data/lib/onyxcord/events/invites.rb +2 -125
  68. data/lib/onyxcord/events/lifetime/base.rb +31 -0
  69. data/lib/onyxcord/events/lifetime.rb +1 -29
  70. data/lib/onyxcord/events/member/add.rb +12 -0
  71. data/lib/onyxcord/events/member/base.rb +67 -0
  72. data/lib/onyxcord/events/member/delete.rb +21 -0
  73. data/lib/onyxcord/events/member/update.rb +25 -0
  74. data/lib/onyxcord/events/members.rb +4 -108
  75. data/lib/onyxcord/events/message/base.rb +295 -0
  76. data/lib/onyxcord/events/message/ids.rb +71 -0
  77. data/lib/onyxcord/events/message/mentions.rb +55 -0
  78. data/lib/onyxcord/events/message/updates.rb +27 -0
  79. data/lib/onyxcord/events/message.rb +4 -397
  80. data/lib/onyxcord/events/poll/add.rb +11 -0
  81. data/lib/onyxcord/events/poll/base.rb +106 -0
  82. data/lib/onyxcord/events/poll/remove.rb +11 -0
  83. data/lib/onyxcord/events/polls.rb +3 -116
  84. data/lib/onyxcord/events/presence/playing.rb +77 -0
  85. data/lib/onyxcord/events/presence/status.rb +60 -0
  86. data/lib/onyxcord/events/presence.rb +2 -129
  87. data/lib/onyxcord/events/raw/base.rb +74 -0
  88. data/lib/onyxcord/events/raw.rb +1 -72
  89. data/lib/onyxcord/events/reactions/base.rb +143 -0
  90. data/lib/onyxcord/events/reactions/clear.rb +99 -0
  91. data/lib/onyxcord/events/reactions.rb +2 -216
  92. data/lib/onyxcord/events/role/create.rb +46 -0
  93. data/lib/onyxcord/events/role/delete.rb +40 -0
  94. data/lib/onyxcord/events/role/update.rb +11 -0
  95. data/lib/onyxcord/events/roles.rb +3 -85
  96. data/lib/onyxcord/events/scheduled_events/events.rb +112 -0
  97. data/lib/onyxcord/events/scheduled_events/users.rb +91 -0
  98. data/lib/onyxcord/events/scheduled_events.rb +2 -169
  99. data/lib/onyxcord/events/thread/base.rb +49 -0
  100. data/lib/onyxcord/events/thread/members.rb +44 -0
  101. data/lib/onyxcord/events/thread/update.rb +18 -0
  102. data/lib/onyxcord/events/threads.rb +3 -98
  103. data/lib/onyxcord/events/typing/base.rb +73 -0
  104. data/lib/onyxcord/events/typing.rb +1 -71
  105. data/lib/onyxcord/events/voice/server_update.rb +48 -0
  106. data/lib/onyxcord/events/voice/state_update.rb +137 -0
  107. data/lib/onyxcord/events/voice_server_update.rb +2 -46
  108. data/lib/onyxcord/events/voice_state_update.rb +2 -135
  109. data/lib/onyxcord/events/webhook/update.rb +65 -0
  110. data/lib/onyxcord/events/webhooks.rb +1 -63
  111. data/lib/onyxcord/gateway/client.rb +460 -0
  112. data/lib/onyxcord/interactions/command.rb +120 -0
  113. data/lib/onyxcord/interactions/context.rb +109 -0
  114. data/lib/onyxcord/interactions/internal/application_command.rb +203 -0
  115. data/lib/onyxcord/interactions/internal/message.rb +152 -0
  116. data/lib/onyxcord/interactions/internal/metadata.rb +109 -0
  117. data/lib/onyxcord/interactions/internal/option_builder.rb +230 -0
  118. data/lib/onyxcord/interactions/internal/permission_builder.rb +90 -0
  119. data/lib/onyxcord/interactions/option.rb +88 -0
  120. data/lib/onyxcord/interactions/registry.rb +50 -0
  121. data/lib/onyxcord/interactions.rb +16 -0
  122. data/lib/onyxcord/internal/async_runtime.rb +32 -0
  123. data/lib/onyxcord/internal/event_bus.rb +591 -0
  124. data/lib/onyxcord/internal/event_executor.rb +155 -0
  125. data/lib/onyxcord/internal/gateway/opcodes.rb +22 -0
  126. data/lib/onyxcord/internal/gateway/session.rb +45 -0
  127. data/lib/onyxcord/internal/http.rb +189 -0
  128. data/lib/onyxcord/internal/json.rb +51 -0
  129. data/lib/onyxcord/internal/message_payload.rb +78 -0
  130. data/lib/onyxcord/internal/rate_limiter/async_rest.rb +151 -0
  131. data/lib/onyxcord/internal/rate_limiter/gateway.rb +44 -0
  132. data/lib/onyxcord/internal/rate_limiter/rest.rb +144 -0
  133. data/lib/onyxcord/internal/upload.rb +39 -0
  134. data/lib/onyxcord/internal/websocket.rb +79 -0
  135. data/lib/onyxcord/light/data.rb +1 -1
  136. data/lib/onyxcord/light/integrations.rb +1 -1
  137. data/lib/onyxcord/light/light_bot.rb +7 -7
  138. data/lib/onyxcord/{data → models}/activity.rb +2 -2
  139. data/lib/onyxcord/{data → models}/application.rb +3 -3
  140. data/lib/onyxcord/{data → models}/avatar_decoration.rb +1 -1
  141. data/lib/onyxcord/{data → models}/channel.rb +23 -23
  142. data/lib/onyxcord/{data → models}/collectibles.rb +1 -1
  143. data/lib/onyxcord/{data → models}/emoji.rb +1 -1
  144. data/lib/onyxcord/models/interaction.rb +450 -0
  145. data/lib/onyxcord/{data → models}/invite.rb +1 -1
  146. data/lib/onyxcord/{data → models}/member.rb +11 -11
  147. data/lib/onyxcord/{data → models}/message.rb +22 -14
  148. data/lib/onyxcord/{data → models}/poll.rb +2 -2
  149. data/lib/onyxcord/{data → models}/primary_server.rb +1 -1
  150. data/lib/onyxcord/{data → models}/profile.rb +4 -4
  151. data/lib/onyxcord/{data → models}/role.rb +6 -12
  152. data/lib/onyxcord/{data → models}/scheduled_event.rb +5 -5
  153. data/lib/onyxcord/{data → models}/server.rb +41 -41
  154. data/lib/onyxcord/{data → models}/server_preview.rb +2 -2
  155. data/lib/onyxcord/{data → models}/team.rb +1 -1
  156. data/lib/onyxcord/{data → models}/user.rb +5 -5
  157. data/lib/onyxcord/{data → models}/webhook.rb +13 -11
  158. data/lib/onyxcord/models.rb +57 -0
  159. data/lib/onyxcord/{api.rb → rest/client.rb} +83 -27
  160. data/lib/onyxcord/{api → rest/routes}/application.rb +79 -57
  161. data/lib/onyxcord/rest/routes/channel/base.rb +73 -0
  162. data/lib/onyxcord/rest/routes/channel/groups.rb +78 -0
  163. data/lib/onyxcord/rest/routes/channel/messages.rb +130 -0
  164. data/lib/onyxcord/rest/routes/channel/permissions.rb +73 -0
  165. data/lib/onyxcord/rest/routes/channel/pins.rb +45 -0
  166. data/lib/onyxcord/rest/routes/channel/polls.rb +32 -0
  167. data/lib/onyxcord/rest/routes/channel/reactions.rb +86 -0
  168. data/lib/onyxcord/rest/routes/channel/threads.rb +176 -0
  169. data/lib/onyxcord/rest/routes/channel/webhooks.rb +47 -0
  170. data/lib/onyxcord/rest/routes/channel.rb +12 -0
  171. data/lib/onyxcord/{api/interaction.rb → rest/routes/interaction/base.rb} +10 -33
  172. data/lib/onyxcord/rest/routes/interaction/response.rb +24 -0
  173. data/lib/onyxcord/rest/routes/interaction.rb +4 -0
  174. data/lib/onyxcord/{api → rest/routes}/invite.rb +7 -7
  175. data/lib/onyxcord/rest/routes/server/admin.rb +174 -0
  176. data/lib/onyxcord/rest/routes/server/assets.rb +25 -0
  177. data/lib/onyxcord/rest/routes/server/bans.rb +67 -0
  178. data/lib/onyxcord/rest/routes/server/base.rb +77 -0
  179. data/lib/onyxcord/rest/routes/server/channels.rb +58 -0
  180. data/lib/onyxcord/rest/routes/server/emoji.rb +48 -0
  181. data/lib/onyxcord/rest/routes/server/members.rb +109 -0
  182. data/lib/onyxcord/rest/routes/server/messages.rb +19 -0
  183. data/lib/onyxcord/rest/routes/server/roles.rb +156 -0
  184. data/lib/onyxcord/rest/routes/server/scheduled_events.rb +86 -0
  185. data/lib/onyxcord/rest/routes/server.rb +12 -0
  186. data/lib/onyxcord/{api → rest/routes}/user.rb +23 -23
  187. data/lib/onyxcord/{api → rest/routes}/webhook.rb +30 -32
  188. data/lib/onyxcord/{allowed_mentions.rb → utils/allowed_mentions.rb} +9 -1
  189. data/lib/onyxcord/utils/timestamp.rb +69 -0
  190. data/lib/onyxcord/voice/{voice_bot.rb → client.rb} +4 -4
  191. data/lib/onyxcord/voice/encoder.rb +1 -1
  192. data/lib/onyxcord/voice/network/udp.rb +135 -0
  193. data/lib/onyxcord/voice/network/websocket.rb +225 -0
  194. data/lib/onyxcord/voice/network.rb +5 -357
  195. data/lib/onyxcord/webhooks/builder.rb +1 -1
  196. data/lib/onyxcord/webhooks/client.rb +13 -13
  197. data/lib/onyxcord/webhooks/modal/group_builder.rb +55 -0
  198. data/lib/onyxcord/webhooks/modal/label_builder.rb +183 -0
  199. data/lib/onyxcord/webhooks/modal.rb +2 -239
  200. data/lib/onyxcord/webhooks/version.rb +3 -3
  201. data/lib/onyxcord/webhooks/view/container_builder.rb +80 -0
  202. data/lib/onyxcord/webhooks/view/file_builder.rb +24 -0
  203. data/lib/onyxcord/webhooks/view/media_gallery_builder.rb +50 -0
  204. data/lib/onyxcord/webhooks/view/row_builder.rb +120 -0
  205. data/lib/onyxcord/webhooks/view/section_builder.rb +61 -0
  206. data/lib/onyxcord/webhooks/view/select_menu_builder.rb +77 -0
  207. data/lib/onyxcord/webhooks/view/separator_builder.rb +22 -0
  208. data/lib/onyxcord/webhooks/view/text_display_builder.rb +20 -0
  209. data/lib/onyxcord/webhooks/view.rb +9 -425
  210. data/lib/onyxcord.rb +106 -40
  211. metadata +208 -91
  212. data/.github/CONTRIBUTING.md +0 -13
  213. data/.github/ISSUE_TEMPLATE/bug_report.md +0 -38
  214. data/.github/ISSUE_TEMPLATE/feature_request.md +0 -24
  215. data/.github/pull_request_template.md +0 -37
  216. data/.github/workflows/ci.yml +0 -78
  217. data/.github/workflows/codeql.yml +0 -65
  218. data/.github/workflows/deploy.yml +0 -54
  219. data/.github/workflows/release.yml +0 -51
  220. data/.gitignore +0 -17
  221. data/.markdownlint.json +0 -4
  222. data/.overcommit.yml +0 -7
  223. data/.rspec +0 -2
  224. data/.rubocop.yml +0 -129
  225. data/.yardopts +0 -1
  226. data/CHANGELOG.md +0 -202
  227. data/Gemfile +0 -6
  228. data/LICENSE.txt +0 -21
  229. data/README.md +0 -448
  230. data/Rakefile +0 -13
  231. data/lib/onyxcord/api/channel.rb +0 -705
  232. data/lib/onyxcord/api/server.rb +0 -775
  233. data/lib/onyxcord/async/runtime.rb +0 -30
  234. data/lib/onyxcord/commands/command_bot.rb +0 -505
  235. data/lib/onyxcord/data/interaction.rb +0 -1143
  236. data/lib/onyxcord/data.rb +0 -57
  237. data/lib/onyxcord/event_executor.rb +0 -153
  238. data/lib/onyxcord/gateway.rb +0 -500
  239. data/lib/onyxcord/http.rb +0 -115
  240. data/lib/onyxcord/json.rb +0 -49
  241. data/lib/onyxcord/rate_limiter/async_rest.rb +0 -149
  242. data/lib/onyxcord/rate_limiter/gateway.rb +0 -42
  243. data/lib/onyxcord/rate_limiter/rest.rb +0 -142
  244. data/lib/onyxcord/version.rb +0 -7
  245. data/lib/onyxcord/websocket.rb +0 -77
  246. data/onyxcord.gemspec +0 -63
  247. /data/lib/onyxcord/{configuration.rb → core/configuration.rb} +0 -0
  248. /data/lib/onyxcord/{data → models}/attachment.rb +0 -0
  249. /data/lib/onyxcord/{data → models}/audit_logs.rb +0 -0
  250. /data/lib/onyxcord/{data → models}/call.rb +0 -0
  251. /data/lib/onyxcord/{data → models}/channel_tag.rb +0 -0
  252. /data/lib/onyxcord/{data → models}/component.rb +0 -0
  253. /data/lib/onyxcord/{data → models}/embed.rb +0 -0
  254. /data/lib/onyxcord/{data → models}/install_params.rb +0 -0
  255. /data/lib/onyxcord/{data → models}/integration.rb +0 -0
  256. /data/lib/onyxcord/{data → models}/message_activity.rb +0 -0
  257. /data/lib/onyxcord/{data → models}/overwrite.rb +0 -0
  258. /data/lib/onyxcord/{data → models}/reaction.rb +0 -0
  259. /data/lib/onyxcord/{data → models}/recipient.rb +0 -0
  260. /data/lib/onyxcord/{data → models}/role_connection_data.rb +0 -0
  261. /data/lib/onyxcord/{data → models}/role_subscription.rb +0 -0
  262. /data/lib/onyxcord/{data → models}/snapshot.rb +0 -0
  263. /data/lib/onyxcord/{data → models}/timestamp.rb +0 -0
  264. /data/lib/onyxcord/{data → models}/voice_region.rb +0 -0
  265. /data/lib/onyxcord/{data → models}/voice_state.rb +0 -0
  266. /data/lib/onyxcord/{colour_rgb.rb → utils/colour_rgb.rb} +0 -0
  267. /data/lib/onyxcord/{id_object.rb → utils/id_object.rb} +0 -0
  268. /data/lib/onyxcord/{message_components.rb → utils/message_components.rb} +0 -0
  269. /data/lib/onyxcord/{paginator.rb → utils/paginator.rb} +0 -0
  270. /data/lib/onyxcord/{permissions.rb → utils/permissions.rb} +0 -0
@@ -0,0 +1,137 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'onyxcord/events/generic'
4
+ require 'onyxcord/models'
5
+
6
+ module OnyxCord::Events
7
+ # Event raised when a user's voice state updates
8
+ class VoiceStateUpdateEvent < Event
9
+ attr_reader :user, :user_id, :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
+ # @return [Integer, nil] the current voice channel ID, or nil if the user left voice.
15
+ attr_reader :channel_id
16
+
17
+ # @return [Integer, nil] the previous voice channel ID, or nil if the user joined voice.
18
+ attr_reader :old_channel_id
19
+
20
+ # @!visibility private
21
+ def initialize(data, old_channel_id, bot)
22
+ @bot = bot
23
+
24
+ @token = data['token']
25
+ @suppress = data['suppress']
26
+ @session_id = data['session_id']
27
+ @self_mute = data['self_mute']
28
+ @self_deaf = data['self_deaf']
29
+ @mute = data['mute']
30
+ @deaf = data['deaf']
31
+ @user_id = data['user_id']&.to_i
32
+ @channel_id = data['channel_id']&.to_i
33
+ @old_channel_id = old_channel_id&.to_i
34
+ @server = cached_server(bot, data['guild_id'])
35
+ return unless @server
36
+
37
+ @channel = cached_channel(bot, @channel_id, @server)
38
+ @old_channel = cached_channel(bot, @old_channel_id, @server)
39
+ @user = cached_user(bot, data)
40
+ end
41
+
42
+ def cached_server(bot, server_id)
43
+ servers = bot.instance_variable_get(:@servers)
44
+ servers&.[](server_id.to_i)
45
+ end
46
+
47
+ def cached_channel(bot, channel_id, server)
48
+ return nil unless channel_id
49
+
50
+ channels = bot.instance_variable_get(:@channels)
51
+ channels&.[](channel_id.to_i) || server.channels.find { |channel| channel.id == channel_id.to_i }
52
+ end
53
+
54
+ def cached_user(bot, data)
55
+ user_data = data.dig('member', 'user') || data['user']
56
+ return bot.ensure_user(user_data) if user_data
57
+
58
+ users = bot.instance_variable_get(:@users)
59
+ users&.[](data['user_id'].to_i)
60
+ end
61
+ end
62
+
63
+ # Event handler for VoiceStateUpdateEvent
64
+ class VoiceStateUpdateEventHandler < EventHandler
65
+ def matches?(event)
66
+ # Check for the proper event type
67
+ return false unless event.is_a? VoiceStateUpdateEvent
68
+
69
+ [
70
+ matches_all(@attributes[:from], event.user) do |a, e|
71
+ next unless e
72
+
73
+ a == case a
74
+ when String
75
+ e.name
76
+ when Integer
77
+ e.id
78
+ else
79
+ e
80
+ end
81
+ end,
82
+ matches_all(@attributes[:mute], event.mute) do |a, e|
83
+ a == if a.is_a? String
84
+ e.to_s
85
+ else
86
+ e
87
+ end
88
+ end,
89
+ matches_all(@attributes[:deaf], event.deaf) do |a, e|
90
+ a == if a.is_a? String
91
+ e.to_s
92
+ else
93
+ e
94
+ end
95
+ end,
96
+ matches_all(@attributes[:self_mute], event.self_mute) do |a, e|
97
+ a == if a.is_a? String
98
+ e.to_s
99
+ else
100
+ e
101
+ end
102
+ end,
103
+ matches_all(@attributes[:self_deaf], event.self_deaf) do |a, e|
104
+ a == if a.is_a? String
105
+ e.to_s
106
+ else
107
+ e
108
+ end
109
+ end,
110
+ matches_all(@attributes[:channel], event.channel) do |a, e|
111
+ next unless e # Don't bother if the channel is nil
112
+
113
+ a == case a
114
+ when String
115
+ e.name
116
+ when Integer
117
+ e.id
118
+ else
119
+ e
120
+ end
121
+ end,
122
+ matches_all(@attributes[:old_channel], event.old_channel) do |a, e|
123
+ next unless e # Don't bother if the channel is nil
124
+
125
+ a == case a
126
+ when String
127
+ e.name
128
+ when Integer
129
+ e.id
130
+ else
131
+ e
132
+ end
133
+ end
134
+ ].reduce(true, &:&)
135
+ end
136
+ end
137
+ end
@@ -1,48 +1,4 @@
1
1
  # frozen_string_literal: true
2
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
3
+ require 'onyxcord/events/voice/state_update'
4
+ require 'onyxcord/events/voice/server_update'
@@ -1,137 +1,4 @@
1
1
  # frozen_string_literal: true
2
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, :user_id, :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
- # @return [Integer, nil] the current voice channel ID, or nil if the user left voice.
15
- attr_reader :channel_id
16
-
17
- # @return [Integer, nil] the previous voice channel ID, or nil if the user joined voice.
18
- attr_reader :old_channel_id
19
-
20
- # @!visibility private
21
- def initialize(data, old_channel_id, bot)
22
- @bot = bot
23
-
24
- @token = data['token']
25
- @suppress = data['suppress']
26
- @session_id = data['session_id']
27
- @self_mute = data['self_mute']
28
- @self_deaf = data['self_deaf']
29
- @mute = data['mute']
30
- @deaf = data['deaf']
31
- @user_id = data['user_id']&.to_i
32
- @channel_id = data['channel_id']&.to_i
33
- @old_channel_id = old_channel_id&.to_i
34
- @server = cached_server(bot, data['guild_id'])
35
- return unless @server
36
-
37
- @channel = cached_channel(bot, @channel_id, @server)
38
- @old_channel = cached_channel(bot, @old_channel_id, @server)
39
- @user = cached_user(bot, data)
40
- end
41
-
42
- def cached_server(bot, server_id)
43
- servers = bot.instance_variable_get(:@servers)
44
- servers&.[](server_id.to_i)
45
- end
46
-
47
- def cached_channel(bot, channel_id, server)
48
- return nil unless channel_id
49
-
50
- channels = bot.instance_variable_get(:@channels)
51
- channels&.[](channel_id.to_i) || server.channels.find { |channel| channel.id == channel_id.to_i }
52
- end
53
-
54
- def cached_user(bot, data)
55
- user_data = data.dig('member', 'user') || data['user']
56
- return bot.ensure_user(user_data) if user_data
57
-
58
- users = bot.instance_variable_get(:@users)
59
- users&.[](data['user_id'].to_i)
60
- end
61
- end
62
-
63
- # Event handler for VoiceStateUpdateEvent
64
- class VoiceStateUpdateEventHandler < EventHandler
65
- def matches?(event)
66
- # Check for the proper event type
67
- return false unless event.is_a? VoiceStateUpdateEvent
68
-
69
- [
70
- matches_all(@attributes[:from], event.user) do |a, e|
71
- next unless e
72
-
73
- a == case a
74
- when String
75
- e.name
76
- when Integer
77
- e.id
78
- else
79
- e
80
- end
81
- end,
82
- matches_all(@attributes[:mute], event.mute) do |a, e|
83
- a == if a.is_a? String
84
- e.to_s
85
- else
86
- e
87
- end
88
- end,
89
- matches_all(@attributes[:deaf], event.deaf) do |a, e|
90
- a == if a.is_a? String
91
- e.to_s
92
- else
93
- e
94
- end
95
- end,
96
- matches_all(@attributes[:self_mute], event.self_mute) do |a, e|
97
- a == if a.is_a? String
98
- e.to_s
99
- else
100
- e
101
- end
102
- end,
103
- matches_all(@attributes[:self_deaf], event.self_deaf) do |a, e|
104
- a == if a.is_a? String
105
- e.to_s
106
- else
107
- e
108
- end
109
- end,
110
- matches_all(@attributes[:channel], event.channel) do |a, e|
111
- next unless e # Don't bother if the channel is nil
112
-
113
- a == case a
114
- when String
115
- e.name
116
- when Integer
117
- e.id
118
- else
119
- e
120
- end
121
- end,
122
- matches_all(@attributes[:old_channel], event.old_channel) do |a, e|
123
- next unless e # Don't bother if the channel is nil
124
-
125
- a == case a
126
- when String
127
- e.name
128
- when Integer
129
- e.id
130
- else
131
- e
132
- end
133
- end
134
- ].reduce(true, &:&)
135
- end
136
- end
137
- end
3
+ require 'onyxcord/events/voice/state_update'
4
+ require 'onyxcord/events/voice/server_update'
@@ -0,0 +1,65 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'onyxcord/events/generic'
4
+ require 'onyxcord/models'
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
@@ -1,65 +1,3 @@
1
1
  # frozen_string_literal: true
2
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
3
+ require 'onyxcord/events/webhook/update'