onyxcord 2.1.0 → 3.2.1

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/{logger.rb → core/logger.rb} +5 -0
  27. data/lib/onyxcord/core/version.rb +5 -0
  28. data/lib/onyxcord/events/await/base.rb +48 -0
  29. data/lib/onyxcord/events/await.rb +1 -46
  30. data/lib/onyxcord/events/ban/base.rb +54 -0
  31. data/lib/onyxcord/events/ban/remove.rb +11 -0
  32. data/lib/onyxcord/events/bans.rb +2 -58
  33. data/lib/onyxcord/events/channels/base.rb +91 -0
  34. data/lib/onyxcord/events/channels/delete.rb +73 -0
  35. data/lib/onyxcord/events/channels/pins.rb +44 -0
  36. data/lib/onyxcord/events/channels/recipients.rb +77 -0
  37. data/lib/onyxcord/events/channels.rb +4 -239
  38. data/lib/onyxcord/events/guilds/audit_logs.rb +79 -0
  39. data/lib/onyxcord/events/guilds/base.rb +97 -0
  40. data/lib/onyxcord/events/guilds/emoji.rb +147 -0
  41. data/lib/onyxcord/events/guilds.rb +3 -267
  42. data/lib/onyxcord/events/handlers/channels.rb +133 -0
  43. data/lib/onyxcord/events/handlers/core.rb +146 -0
  44. data/lib/onyxcord/events/handlers/guilds.rb +375 -0
  45. data/lib/onyxcord/events/handlers/interactions.rb +238 -0
  46. data/lib/onyxcord/events/handlers/lifetime.rb +71 -0
  47. data/lib/onyxcord/events/handlers/messages.rb +218 -0
  48. data/lib/onyxcord/events/handlers/presence.rb +56 -0
  49. data/lib/onyxcord/events/handlers/raw.rb +39 -0
  50. data/lib/onyxcord/events/handlers/reactions.rb +98 -0
  51. data/lib/onyxcord/events/handlers/scheduled_events.rb +243 -0
  52. data/lib/onyxcord/events/handlers/voice.rb +46 -0
  53. data/lib/onyxcord/events/integration/base.rb +45 -0
  54. data/lib/onyxcord/events/integration/create.rb +11 -0
  55. data/lib/onyxcord/events/integration/delete.rb +48 -0
  56. data/lib/onyxcord/events/integration/update.rb +11 -0
  57. data/lib/onyxcord/events/integrations.rb +4 -98
  58. data/lib/onyxcord/events/interactions/application_commands.rb +185 -0
  59. data/lib/onyxcord/events/interactions/autocomplete.rb +62 -0
  60. data/lib/onyxcord/events/interactions/base.rb +175 -0
  61. data/lib/onyxcord/events/interactions/components.rb +221 -0
  62. data/lib/onyxcord/events/interactions/permissions.rb +53 -0
  63. data/lib/onyxcord/events/interactions.rb +5 -622
  64. data/lib/onyxcord/events/invite/create.rb +79 -0
  65. data/lib/onyxcord/events/invite/delete.rb +55 -0
  66. data/lib/onyxcord/events/invites.rb +2 -125
  67. data/lib/onyxcord/events/lifetime/base.rb +31 -0
  68. data/lib/onyxcord/events/lifetime.rb +1 -29
  69. data/lib/onyxcord/events/member/add.rb +12 -0
  70. data/lib/onyxcord/events/member/base.rb +67 -0
  71. data/lib/onyxcord/events/member/delete.rb +21 -0
  72. data/lib/onyxcord/events/member/update.rb +25 -0
  73. data/lib/onyxcord/events/members.rb +4 -108
  74. data/lib/onyxcord/events/message/base.rb +295 -0
  75. data/lib/onyxcord/events/message/ids.rb +71 -0
  76. data/lib/onyxcord/events/message/mentions.rb +55 -0
  77. data/lib/onyxcord/events/message/updates.rb +27 -0
  78. data/lib/onyxcord/events/message.rb +4 -397
  79. data/lib/onyxcord/events/poll/add.rb +11 -0
  80. data/lib/onyxcord/events/poll/base.rb +106 -0
  81. data/lib/onyxcord/events/poll/remove.rb +11 -0
  82. data/lib/onyxcord/events/polls.rb +3 -116
  83. data/lib/onyxcord/events/presence/playing.rb +77 -0
  84. data/lib/onyxcord/events/presence/status.rb +60 -0
  85. data/lib/onyxcord/events/presence.rb +2 -129
  86. data/lib/onyxcord/events/raw/base.rb +74 -0
  87. data/lib/onyxcord/events/raw.rb +1 -72
  88. data/lib/onyxcord/events/reactions/base.rb +143 -0
  89. data/lib/onyxcord/events/reactions/clear.rb +99 -0
  90. data/lib/onyxcord/events/reactions.rb +2 -216
  91. data/lib/onyxcord/events/role/create.rb +46 -0
  92. data/lib/onyxcord/events/role/delete.rb +40 -0
  93. data/lib/onyxcord/events/role/update.rb +11 -0
  94. data/lib/onyxcord/events/roles.rb +3 -85
  95. data/lib/onyxcord/events/scheduled_events/events.rb +112 -0
  96. data/lib/onyxcord/events/scheduled_events/users.rb +91 -0
  97. data/lib/onyxcord/events/scheduled_events.rb +2 -169
  98. data/lib/onyxcord/events/thread/base.rb +49 -0
  99. data/lib/onyxcord/events/thread/members.rb +44 -0
  100. data/lib/onyxcord/events/thread/update.rb +18 -0
  101. data/lib/onyxcord/events/threads.rb +3 -98
  102. data/lib/onyxcord/events/typing/base.rb +73 -0
  103. data/lib/onyxcord/events/typing.rb +1 -71
  104. data/lib/onyxcord/events/voice/server_update.rb +48 -0
  105. data/lib/onyxcord/events/voice/state_update.rb +137 -0
  106. data/lib/onyxcord/events/voice_server_update.rb +2 -46
  107. data/lib/onyxcord/events/voice_state_update.rb +2 -135
  108. data/lib/onyxcord/events/webhook/update.rb +65 -0
  109. data/lib/onyxcord/events/webhooks.rb +1 -63
  110. data/lib/onyxcord/gateway/client.rb +460 -0
  111. data/lib/onyxcord/interactions/command.rb +120 -0
  112. data/lib/onyxcord/interactions/context.rb +109 -0
  113. data/lib/onyxcord/interactions/internal/application_command.rb +203 -0
  114. data/lib/onyxcord/interactions/internal/message.rb +152 -0
  115. data/lib/onyxcord/interactions/internal/metadata.rb +109 -0
  116. data/lib/onyxcord/interactions/internal/option_builder.rb +230 -0
  117. data/lib/onyxcord/interactions/internal/permission_builder.rb +90 -0
  118. data/lib/onyxcord/interactions/option.rb +88 -0
  119. data/lib/onyxcord/interactions/registry.rb +50 -0
  120. data/lib/onyxcord/interactions.rb +16 -0
  121. data/lib/onyxcord/internal/async_runtime.rb +32 -0
  122. data/lib/onyxcord/internal/event_bus.rb +591 -0
  123. data/lib/onyxcord/internal/event_executor.rb +155 -0
  124. data/lib/onyxcord/internal/gateway/opcodes.rb +22 -0
  125. data/lib/onyxcord/internal/gateway/session.rb +45 -0
  126. data/lib/onyxcord/internal/http.rb +189 -0
  127. data/lib/onyxcord/internal/json.rb +51 -0
  128. data/lib/onyxcord/{message_payload.rb → internal/message_payload.rb} +3 -3
  129. data/lib/onyxcord/internal/rate_limiter/async_rest.rb +151 -0
  130. data/lib/onyxcord/internal/rate_limiter/gateway.rb +44 -0
  131. data/lib/onyxcord/internal/rate_limiter/rest.rb +144 -0
  132. data/lib/onyxcord/internal/websocket.rb +79 -0
  133. data/lib/onyxcord/light/data.rb +1 -1
  134. data/lib/onyxcord/light/integrations.rb +1 -1
  135. data/lib/onyxcord/light/light_bot.rb +7 -7
  136. data/lib/onyxcord/{data → models}/activity.rb +2 -2
  137. data/lib/onyxcord/{data → models}/application.rb +3 -3
  138. data/lib/onyxcord/{data → models}/avatar_decoration.rb +1 -1
  139. data/lib/onyxcord/{data → models}/channel.rb +23 -23
  140. data/lib/onyxcord/{data → models}/collectibles.rb +1 -1
  141. data/lib/onyxcord/{data → models}/emoji.rb +1 -1
  142. data/lib/onyxcord/models/interaction.rb +450 -0
  143. data/lib/onyxcord/{data → models}/invite.rb +1 -1
  144. data/lib/onyxcord/{data → models}/member.rb +11 -11
  145. data/lib/onyxcord/{data → models}/message.rb +18 -14
  146. data/lib/onyxcord/{data → models}/poll.rb +2 -2
  147. data/lib/onyxcord/{data → models}/primary_server.rb +1 -1
  148. data/lib/onyxcord/{data → models}/profile.rb +4 -4
  149. data/lib/onyxcord/{data → models}/role.rb +6 -12
  150. data/lib/onyxcord/{data → models}/scheduled_event.rb +5 -5
  151. data/lib/onyxcord/{data → models}/server.rb +41 -41
  152. data/lib/onyxcord/{data → models}/server_preview.rb +2 -2
  153. data/lib/onyxcord/{data → models}/team.rb +1 -1
  154. data/lib/onyxcord/{data → models}/user.rb +5 -5
  155. data/lib/onyxcord/{data → models}/webhook.rb +10 -10
  156. data/lib/onyxcord/models.rb +57 -0
  157. data/lib/onyxcord/{api.rb → rest/client.rb} +23 -22
  158. data/lib/onyxcord/{api → rest/routes}/application.rb +79 -57
  159. data/lib/onyxcord/rest/routes/channel/base.rb +73 -0
  160. data/lib/onyxcord/rest/routes/channel/groups.rb +78 -0
  161. data/lib/onyxcord/rest/routes/channel/messages.rb +130 -0
  162. data/lib/onyxcord/rest/routes/channel/permissions.rb +73 -0
  163. data/lib/onyxcord/rest/routes/channel/pins.rb +45 -0
  164. data/lib/onyxcord/rest/routes/channel/polls.rb +32 -0
  165. data/lib/onyxcord/rest/routes/channel/reactions.rb +86 -0
  166. data/lib/onyxcord/rest/routes/channel/threads.rb +176 -0
  167. data/lib/onyxcord/rest/routes/channel/webhooks.rb +47 -0
  168. data/lib/onyxcord/rest/routes/channel.rb +12 -0
  169. data/lib/onyxcord/{api/interaction.rb → rest/routes/interaction/base.rb} +7 -25
  170. data/lib/onyxcord/rest/routes/interaction/response.rb +24 -0
  171. data/lib/onyxcord/rest/routes/interaction.rb +4 -0
  172. data/lib/onyxcord/{api → rest/routes}/invite.rb +7 -7
  173. data/lib/onyxcord/rest/routes/server/admin.rb +174 -0
  174. data/lib/onyxcord/rest/routes/server/assets.rb +25 -0
  175. data/lib/onyxcord/rest/routes/server/bans.rb +67 -0
  176. data/lib/onyxcord/rest/routes/server/base.rb +77 -0
  177. data/lib/onyxcord/rest/routes/server/channels.rb +58 -0
  178. data/lib/onyxcord/rest/routes/server/emoji.rb +48 -0
  179. data/lib/onyxcord/rest/routes/server/members.rb +109 -0
  180. data/lib/onyxcord/rest/routes/server/messages.rb +19 -0
  181. data/lib/onyxcord/rest/routes/server/roles.rb +156 -0
  182. data/lib/onyxcord/rest/routes/server/scheduled_events.rb +86 -0
  183. data/lib/onyxcord/rest/routes/server.rb +12 -0
  184. data/lib/onyxcord/{api → rest/routes}/user.rb +23 -23
  185. data/lib/onyxcord/{api → rest/routes}/webhook.rb +22 -22
  186. data/lib/onyxcord/{allowed_mentions.rb → utils/allowed_mentions.rb} +1 -1
  187. data/lib/onyxcord/utils/timestamp.rb +69 -0
  188. data/lib/onyxcord/voice/{voice_bot.rb → client.rb} +4 -4
  189. data/lib/onyxcord/voice/encoder.rb +1 -1
  190. data/lib/onyxcord/voice/network/udp.rb +135 -0
  191. data/lib/onyxcord/voice/network/websocket.rb +225 -0
  192. data/lib/onyxcord/voice/network.rb +5 -357
  193. data/lib/onyxcord/webhooks/builder.rb +1 -1
  194. data/lib/onyxcord/webhooks/client.rb +13 -13
  195. data/lib/onyxcord/webhooks/modal/group_builder.rb +55 -0
  196. data/lib/onyxcord/webhooks/modal/label_builder.rb +183 -0
  197. data/lib/onyxcord/webhooks/modal.rb +2 -239
  198. data/lib/onyxcord/webhooks/version.rb +3 -3
  199. data/lib/onyxcord/webhooks/view/container_builder.rb +80 -0
  200. data/lib/onyxcord/webhooks/view/file_builder.rb +24 -0
  201. data/lib/onyxcord/webhooks/view/media_gallery_builder.rb +50 -0
  202. data/lib/onyxcord/webhooks/view/row_builder.rb +120 -0
  203. data/lib/onyxcord/webhooks/view/section_builder.rb +61 -0
  204. data/lib/onyxcord/webhooks/view/select_menu_builder.rb +77 -0
  205. data/lib/onyxcord/webhooks/view/separator_builder.rb +22 -0
  206. data/lib/onyxcord/webhooks/view/text_display_builder.rb +20 -0
  207. data/lib/onyxcord/webhooks/view.rb +9 -425
  208. data/lib/onyxcord.rb +106 -42
  209. metadata +207 -92
  210. data/.github/CONTRIBUTING.md +0 -13
  211. data/.github/ISSUE_TEMPLATE/bug_report.md +0 -38
  212. data/.github/ISSUE_TEMPLATE/feature_request.md +0 -24
  213. data/.github/pull_request_template.md +0 -37
  214. data/.github/workflows/ci.yml +0 -78
  215. data/.github/workflows/codeql.yml +0 -65
  216. data/.github/workflows/deploy.yml +0 -54
  217. data/.github/workflows/release.yml +0 -51
  218. data/.gitignore +0 -17
  219. data/.markdownlint.json +0 -4
  220. data/.overcommit.yml +0 -7
  221. data/.rspec +0 -2
  222. data/.rubocop.yml +0 -129
  223. data/.yardopts +0 -1
  224. data/CHANGELOG.md +0 -257
  225. data/Gemfile +0 -6
  226. data/LICENSE.txt +0 -21
  227. data/README.md +0 -448
  228. data/Rakefile +0 -13
  229. data/lib/onyxcord/api/channel.rb +0 -703
  230. data/lib/onyxcord/api/server.rb +0 -775
  231. data/lib/onyxcord/async/runtime.rb +0 -30
  232. data/lib/onyxcord/commands/command_bot.rb +0 -505
  233. data/lib/onyxcord/data/interaction.rb +0 -1151
  234. data/lib/onyxcord/data.rb +0 -57
  235. data/lib/onyxcord/event_executor.rb +0 -153
  236. data/lib/onyxcord/gateway.rb +0 -505
  237. data/lib/onyxcord/http.rb +0 -186
  238. data/lib/onyxcord/json.rb +0 -49
  239. data/lib/onyxcord/rate_limiter/async_rest.rb +0 -150
  240. data/lib/onyxcord/rate_limiter/gateway.rb +0 -42
  241. data/lib/onyxcord/rate_limiter/rest.rb +0 -142
  242. data/lib/onyxcord/version.rb +0 -7
  243. data/lib/onyxcord/websocket.rb +0 -77
  244. data/onyxcord.gemspec +0 -63
  245. /data/lib/onyxcord/{configuration.rb → core/configuration.rb} +0 -0
  246. /data/lib/onyxcord/{errors.rb → core/errors.rb} +0 -0
  247. /data/lib/onyxcord/{upload.rb → internal/upload.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
@@ -1,218 +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
- # Generic superclass for events about adding and removing reactions
8
- class ReactionEvent < Event
9
- include Respondable
10
-
11
- # @return [Emoji] the emoji that was reacted with.
12
- attr_reader :emoji
13
-
14
- # @!visibility private
15
- attr_reader :message_id
16
-
17
- # @return [true, false] whether the reaction is a burst reaction.
18
- attr_reader :burst
19
- alias_method :burst?, :burst
20
-
21
- # @return [Integer] the type of the reaction. 0 for normal, 1 for burst.
22
- attr_reader :type
23
-
24
- # @return [Array<ColourRGB>] an array of colors used for animations in burst reactions.
25
- attr_reader :burst_colours
26
- alias_method :burst_colors, :burst_colours
27
-
28
- # @!visibility private
29
- def initialize(data, bot)
30
- @bot = bot
31
-
32
- @emoji = OnyxCord::Emoji.new(data['emoji'], bot, nil)
33
- @user_id = data['user_id'].to_i
34
- @message_id = data['message_id'].to_i
35
- @channel_id = data['channel_id'].to_i
36
- @burst = data['burst']
37
- @type = data['type']
38
- @burst_colours = data['burst_colors']&.map { |b| OnyxCord::ColourRGB.new(b.delete('#')) } || []
39
- end
40
-
41
- # @return [User, Member] the user that reacted to this message, or member if a server exists.
42
- def user
43
- # Cache the user so we don't do requests all the time
44
- @user ||= if server
45
- @server.member(@user_id)
46
- else
47
- @bot.user(@user_id)
48
- end
49
- end
50
-
51
- # @return [Message] the message that was reacted to.
52
- def message
53
- @message ||= channel.load_message(@message_id)
54
- end
55
-
56
- # @return [Channel] the channel that was reacted in.
57
- def channel
58
- @channel ||= @bot.channel(@channel_id)
59
- end
60
-
61
- # @return [Server, nil] the server that was reacted in. If reacted in a PM channel, it will be nil.
62
- def server
63
- @server ||= channel.server
64
- end
65
- end
66
-
67
- # Generic superclass for event handlers pertaining to adding and removing reactions
68
- class ReactionEventHandler < EventHandler
69
- def matches?(event)
70
- # Check for the proper event type
71
- return false unless event.is_a? ReactionEvent
72
-
73
- [
74
- matches_all(@attributes[:emoji], event.emoji) do |a, e|
75
- case a
76
- when Integer
77
- e.id == a
78
- when String
79
- e.name == a || e.name == a.delete(':') || e.id == a.resolve_id
80
- else
81
- e == a
82
- end
83
- end,
84
- matches_all(@attributes[:message], event.message_id) do |a, e|
85
- a == e
86
- end,
87
- matches_all(@attributes[:in], event.channel) do |a, e|
88
- case a
89
- when String
90
- # Make sure to remove the "#" from channel names in case it was specified
91
- a.delete('#') == e.name
92
- when Integer
93
- a == e.id
94
- else
95
- a == e
96
- end
97
- end,
98
- matches_all(@attributes[:from], event.user) do |a, e|
99
- case a
100
- when String
101
- a == e.name
102
- when :bot
103
- e.current_bot?
104
- else
105
- a == e
106
- end
107
- end,
108
- matches_all(@attributes[:type], event.type) do |a, e|
109
- case a
110
- when Integer
111
- a == e
112
- when Symbol, String
113
- OnyxCord::Reaction::TYPES[a.to_sym] == e
114
- end
115
- end
116
- ].reduce(true, &:&)
117
- end
118
- end
119
-
120
- # Event raised when somebody reacts to a message
121
- class ReactionAddEvent < ReactionEvent; end
122
-
123
- # Event handler for {ReactionAddEvent}
124
- class ReactionAddEventHandler < ReactionEventHandler; end
125
-
126
- # Event raised when somebody removes a reaction to a message
127
- class ReactionRemoveEvent < ReactionEvent; end
128
-
129
- # Event handler for {ReactionRemoveEvent}
130
- class ReactionRemoveEventHandler < ReactionEventHandler; end
131
-
132
- # Event raised when somebody removes all reactions from a message
133
- class ReactionRemoveAllEvent < Event
134
- include Respondable
135
-
136
- # @!visibility private
137
- attr_reader :message_id
138
-
139
- # @!visibility private
140
- def initialize(data, bot)
141
- @bot = bot
142
-
143
- @message_id = data['message_id'].to_i
144
- @channel_id = data['channel_id'].to_i
145
- end
146
-
147
- # @return [Channel] the channel where the removal occurred.
148
- def channel
149
- @channel ||= @bot.channel(@channel_id)
150
- end
151
-
152
- # @return [Message] the message all reactions were removed from.
153
- def message
154
- @message ||= channel.load_message(@message_id)
155
- end
156
- end
157
-
158
- # Event handler for {ReactionRemoveAllEvent}
159
- class ReactionRemoveAllEventHandler < EventHandler
160
- def matches?(event)
161
- # Check for the proper event type
162
- return false unless event.is_a? ReactionRemoveAllEvent
163
-
164
- [
165
- matches_all(@attributes[:message], event.message_id) do |a, e|
166
- a == e
167
- end,
168
- matches_all(@attributes[:in], event.channel) do |a, e|
169
- case a
170
- when String
171
- # Make sure to remove the "#" from channel names in case it was specified
172
- a.delete('#') == e.name
173
- when Integer
174
- a == e.id
175
- else
176
- a == e
177
- end
178
- end
179
- ].reduce(true, &:&)
180
- end
181
- end
182
-
183
- # Event raised when all instances of a single reaction are removed from a message.
184
- class ReactionRemoveEmojiEvent < ReactionRemoveAllEvent
185
- # @return [Emoji] the emoji that was removed.
186
- attr_reader :emoji
187
-
188
- # @!visibility private
189
- def initialize(data, bot)
190
- super
191
-
192
- @emoji = OnyxCord::Emoji.new(data['emoji'], bot)
193
- end
194
- end
195
-
196
- # Event handler for {ReactionRemoveEmojiEvent}.
197
- class ReactionRemoveEmojiEventHandler < ReactionRemoveAllEventHandler
198
- # @!visibility private
199
- def matches?(event)
200
- # Check for the proper event type.
201
- return false unless super
202
- return false unless event.is_a?(ReactionRemoveEmojiEvent)
203
-
204
- [
205
- matches_all(@attributes[:emoji], event.emoji) do |a, e|
206
- case a
207
- when Integer
208
- e.id == a
209
- when String
210
- e.name == a || e.name == a.delete(':') || e.id == a.resolve_id
211
- else
212
- e == a
213
- end
214
- end
215
- ].reduce(true, &:&)
216
- end
217
- end
218
- end
3
+ require 'onyxcord/events/reactions/base'
4
+ require 'onyxcord/events/reactions/clear'
@@ -0,0 +1,46 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'onyxcord/events/generic'
4
+ require 'onyxcord/models'
5
+
6
+ module OnyxCord::Events
7
+ # Raised when a role is created on a server
8
+ class ServerRoleCreateEvent < Event
9
+ # @return [Role] the role that got created
10
+ attr_reader :role
11
+
12
+ # @return [Server] the server on which a role got created
13
+ attr_reader :server
14
+
15
+ # @!attribute [r] name
16
+ # @return [String] this role's name
17
+ # @see Role#name
18
+ delegate :name, to: :role
19
+
20
+ # @!visibility private
21
+ def initialize(data, bot)
22
+ @bot = bot
23
+
24
+ @server = bot.server(data['guild_id'].to_i)
25
+ @role = @server&.role(data['role']['id'].to_i)
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
+ end
@@ -0,0 +1,40 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'onyxcord/events/generic'
4
+
5
+ module OnyxCord::Events
6
+ # Raised when a role is deleted from a server
7
+ class ServerRoleDeleteEvent < Event
8
+ # @return [Integer] the ID of the role that got deleted.
9
+ attr_reader :id
10
+
11
+ # @return [Server] the server on which a role got deleted.
12
+ attr_reader :server
13
+
14
+ # @!visibility private
15
+ def initialize(data, bot)
16
+ @bot = bot
17
+
18
+ # The role should already be deleted from the server's list
19
+ # by the time we create this event, so we'll create a temporary
20
+ # role object for event consumers to use.
21
+ @id = data['role_id'].to_i
22
+ server_id = data['guild_id'].to_i
23
+ @server = bot.server(server_id)
24
+ end
25
+ end
26
+
27
+ # EventHandler for ServerRoleDeleteEvent
28
+ class ServerRoleDeleteEventHandler < EventHandler
29
+ def matches?(event)
30
+ # Check for the proper event type
31
+ return false unless event.is_a? ServerRoleDeleteEvent
32
+
33
+ [
34
+ matches_all(@attributes[:id], event.id) do |a, e|
35
+ a.resolve_id == e.resolve_id
36
+ end
37
+ ].reduce(true, &:&)
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,11 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'onyxcord/events/role/create'
4
+
5
+ module OnyxCord::Events
6
+ # Event raised when a role updates on a server
7
+ class ServerRoleUpdateEvent < ServerRoleCreateEvent; end
8
+
9
+ # Event handler for ServerRoleUpdateEvent
10
+ class ServerRoleUpdateEventHandler < ServerRoleCreateEventHandler; end
11
+ end
@@ -1,87 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'onyxcord/events/generic'
4
- require 'onyxcord/data'
5
-
6
- module OnyxCord::Events
7
- # Raised when a role is created on a server
8
- class ServerRoleCreateEvent < Event
9
- # @return [Role] the role that got created
10
- attr_reader :role
11
-
12
- # @return [Server] the server on which a role got created
13
- attr_reader :server
14
-
15
- # @!attribute [r] name
16
- # @return [String] this role's name
17
- # @see Role#name
18
- delegate :name, to: :role
19
-
20
- # @!visibility private
21
- def initialize(data, bot)
22
- @bot = bot
23
-
24
- @server = bot.server(data['guild_id'].to_i)
25
- @role = @server&.role(data['role']['id'].to_i)
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
- # @!visibility private
56
- def initialize(data, bot)
57
- @bot = bot
58
-
59
- # The role should already be deleted from the server's list
60
- # by the time we create this event, so we'll create a temporary
61
- # role object for event consumers to use.
62
- @id = data['role_id'].to_i
63
- server_id = data['guild_id'].to_i
64
- @server = bot.server(server_id)
65
- end
66
- end
67
-
68
- # EventHandler for ServerRoleDeleteEvent
69
- class ServerRoleDeleteEventHandler < EventHandler
70
- def matches?(event)
71
- # Check for the proper event type
72
- return false unless event.is_a? ServerRoleDeleteEvent
73
-
74
- [
75
- matches_all(@attributes[:id], event.id) do |a, e|
76
- a.resolve_id == e.resolve_id
77
- end
78
- ].reduce(true, &:&)
79
- end
80
- end
81
-
82
- # Event raised when a role updates on a server
83
- class ServerRoleUpdateEvent < ServerRoleCreateEvent; end
84
-
85
- # Event handler for ServerRoleUpdateEvent
86
- class ServerRoleUpdateEventHandler < ServerRoleCreateEventHandler; end
87
- end
3
+ require 'onyxcord/events/role/create'
4
+ require 'onyxcord/events/role/update'
5
+ require 'onyxcord/events/role/delete'
@@ -0,0 +1,112 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'onyxcord/models'
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
+
25
+ # Raised whenever a scheduled event is created.
26
+ class ScheduledEventCreateEvent < ScheduledEventEvent; end
27
+
28
+ # Raised whenever a scheduled event is updated.
29
+
30
+ # Raised whenever a scheduled event is updated.
31
+ class ScheduledEventUpdateEvent < ScheduledEventEvent; end
32
+
33
+ # Raised whenever a scheduled event is deleted.
34
+
35
+ # Raised whenever a scheduled event is deleted.
36
+ class ScheduledEventDeleteEvent < ScheduledEventEvent
37
+ # @!visibility private
38
+ def initialize(data, bot)
39
+ @bot = bot
40
+ @server = bot.server(data['guild_id'].to_i)
41
+ @scheduled_event = OnyxCord::ScheduledEvent.new(data, @server, @bot)
42
+ end
43
+ end
44
+
45
+ # Generic superclass for scheduled event user events.
46
+
47
+ # Generic event handler for scheduled event.
48
+ class ScheduledEventEventHandler < EventHandler
49
+ # @!visibility private
50
+ def matches?(event)
51
+ # Check for the proper event type.
52
+ return false unless event.is_a?(ScheduledEventEvent)
53
+
54
+ [
55
+ matches_all(@attributes[:server], event.server) do |a, e|
56
+ a&.resolve_id == e&.resolve_id
57
+ end,
58
+
59
+ matches_all(@attributes[:id], event.scheduled_event) do |a, e|
60
+ a&.resolve_id == e&.resolve_id
61
+ end,
62
+
63
+ matches_all(@attributes[:creator], event.scheduled_event.creator) do |a, e|
64
+ a&.resolve_id == e&.resolve_id
65
+ end,
66
+
67
+ matches_all(@attributes[:channel], event.scheduled_event.channel) do |a, e|
68
+ a&.resolve_id == e&.resolve_id
69
+ end,
70
+
71
+ matches_all(@attributes[:entity_id], event.scheduled_event.entity_id) do |a, e|
72
+ a&.resolve_id == e&.resolve_id
73
+ end,
74
+
75
+ matches_all(@attributes[:entity_type], event.scheduled_event.entity_type) do |a, e|
76
+ case a
77
+ when Symbol, String
78
+ OnyxCord::ScheduledEvent::ENTITY_TYPES[a.to_sym] == e
79
+ else
80
+ a == e
81
+ end
82
+ end,
83
+
84
+ matches_all(@attributes[:status], event.scheduled_event.status) do |a, e|
85
+ case a
86
+ when Symbol, String
87
+ OnyxCord::ScheduledEvent::STATUSES[a.to_sym] == e
88
+ else
89
+ a == e
90
+ end
91
+ end
92
+ ].reduce(true, &:&)
93
+ end
94
+ end
95
+
96
+ # Event handler for :GUILD_SCHEDULED_EVENT_CREATE events.
97
+
98
+ # Event handler for :GUILD_SCHEDULED_EVENT_CREATE events.
99
+ class ScheduledEventCreateEventHandler < ScheduledEventEventHandler; end
100
+
101
+ # Event handler for :GUILD_SCHEDULED_EVENT_UPDATE events.
102
+
103
+ # Event handler for :GUILD_SCHEDULED_EVENT_UPDATE events.
104
+ class ScheduledEventUpdateEventHandler < ScheduledEventEventHandler; end
105
+
106
+ # Event handler for :GUILD_SCHEDULED_EVENT_DELETE events.
107
+
108
+ # Event handler for :GUILD_SCHEDULED_EVENT_DELETE events.
109
+ class ScheduledEventDeleteEventHandler < ScheduledEventEventHandler; end
110
+
111
+ # Generic event handler for scheduled event user events.
112
+ end
@@ -0,0 +1,91 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'onyxcord/models'
4
+ require 'onyxcord/events/generic'
5
+
6
+ module OnyxCord::Events
7
+ # Generic superclass for scheduled event user events.
8
+ class ScheduledEventUserEvent < Event
9
+ # @!visibility private
10
+ attr_reader :user_id
11
+
12
+ # @!visibility private
13
+ attr_reader :server_id
14
+
15
+ # @!visibility private
16
+ attr_reader :scheduled_event_id
17
+
18
+ # @!visibility private
19
+ def initialize(data, bot)
20
+ @bot = bot
21
+ @user_id = data['user_id'].to_i
22
+ @server_id = data['guild_id'].to_i
23
+ @scheduled_event_id = data['guild_scheduled_event_id'].to_i
24
+ end
25
+
26
+ # Get the server the scheduled event in question is from.
27
+ # @return [Server] the server the scheduled event is associated with.
28
+ def server
29
+ @bot.server(@server_id)
30
+ end
31
+
32
+ # Get the scheduled event that the user was added to or removed from.
33
+ # @return [ScheduledEvent] the scheduled event that the user was actioned on.
34
+ def scheduled_event
35
+ server.scheduled_event(@scheduled_event_id)
36
+ end
37
+
38
+ # Get the user that was added to or removed from the scheduled event.
39
+ # @return [Member, User] the server member that was added to or removed from the
40
+ # scheduled event, or a user if the member cannot be accessed by the bot.
41
+ def member
42
+ server.member(@user_id) || @bot.user(@user_id)
43
+ end
44
+
45
+ alias_method :user, :member
46
+ end
47
+
48
+ # Raised whenever a user is added to a scheduled event.
49
+
50
+ # Raised whenever a user is added to a scheduled event.
51
+ class ScheduledEventUserAddEvent < ScheduledEventUserEvent; end
52
+
53
+ # Raised whenever a user is removed from a scheduled event.
54
+
55
+ # Raised whenever a user is removed from a scheduled event.
56
+ class ScheduledEventUserRemoveEvent < ScheduledEventUserEvent; end
57
+
58
+ # Generic event handler for scheduled event.
59
+
60
+ # Generic event handler for scheduled event user events.
61
+ class ScheduledEventUserEventHandler < EventHandler
62
+ # @!visibility private
63
+ def matches?(event)
64
+ return false unless event.is_a?(ScheduledEventUserEvent)
65
+
66
+ [
67
+ matches_all(@attributes[:user], event.user_id) do |a, e|
68
+ a.resolve_id == e.resolve_id
69
+ end,
70
+
71
+ matches_all(@attributes[:server], event.server_id) do |a, e|
72
+ a.resolve_id == e.resolve_id
73
+ end,
74
+
75
+ matches_all(@attributes[:scheduled_event], event.scheduled_event_id) do |a, e|
76
+ a.resolve_id == e.resolve_id
77
+ end
78
+ ].reduce(true, &:&)
79
+ end
80
+ end
81
+
82
+ # Event handler for :GUILD_SCHEDULED_EVENT_USER_ADD events.
83
+
84
+ # Event handler for :GUILD_SCHEDULED_EVENT_USER_ADD events.
85
+ class ScheduledEventUserAddEventHandler < ScheduledEventUserEventHandler; end
86
+
87
+ # Event handler for :GUILD_SCHEDULED_EVENT_USER_REMOVE events.
88
+
89
+ # Event handler for :GUILD_SCHEDULED_EVENT_USER_REMOVE events.
90
+ class ScheduledEventUserRemoveEventHandler < ScheduledEventUserEventHandler; end
91
+ end