rubycord 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
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,597 @@
1
+ # API calls for Channel
2
+ module Rubycord::API::Channel
3
+ module_function
4
+
5
+ # Get a channel's data
6
+ # https://discord.com/developers/docs/resources/channel#get-channel
7
+ def resolve(token, channel_id)
8
+ Rubycord::API.request(
9
+ :channels_cid,
10
+ channel_id,
11
+ :get,
12
+ "#{Rubycord::API.api_base}/channels/#{channel_id}",
13
+ Authorization: token
14
+ )
15
+ end
16
+
17
+ # Update a channel's data
18
+ # https://discord.com/developers/docs/resources/channel#modify-channel
19
+ def update(token, channel_id, name, topic, position, bitrate, user_limit, nsfw, permission_overwrites = nil, parent_id = nil, rate_limit_per_user = nil, reason = nil)
20
+ data = {name: name, position: position, topic: topic, bitrate: bitrate, user_limit: user_limit, nsfw: nsfw, parent_id: parent_id, rate_limit_per_user: rate_limit_per_user}
21
+ data[:permission_overwrites] = permission_overwrites unless permission_overwrites.nil?
22
+ Rubycord::API.request(
23
+ :channels_cid,
24
+ channel_id,
25
+ :patch,
26
+ "#{Rubycord::API.api_base}/channels/#{channel_id}",
27
+ data.to_json,
28
+ Authorization: token,
29
+ content_type: :json,
30
+ "X-Audit-Log-Reason": reason
31
+ )
32
+ end
33
+
34
+ # Delete a channel
35
+ # https://discord.com/developers/docs/resources/channel#deleteclose-channel
36
+ def delete(token, channel_id, reason = nil)
37
+ Rubycord::API.request(
38
+ :channels_cid,
39
+ channel_id,
40
+ :delete,
41
+ "#{Rubycord::API.api_base}/channels/#{channel_id}",
42
+ Authorization: token,
43
+ "X-Audit-Log-Reason": reason
44
+ )
45
+ end
46
+
47
+ # Get a list of messages from a channel's history
48
+ # https://discord.com/developers/docs/resources/channel#get-channel-messages
49
+ def messages(token, channel_id, amount, before = nil, after = nil, around = nil)
50
+ query_string = URI.encode_www_form({limit: amount, before: before, after: after, around: around}.compact)
51
+ Rubycord::API.request(
52
+ :channels_cid_messages,
53
+ channel_id,
54
+ :get,
55
+ "#{Rubycord::API.api_base}/channels/#{channel_id}/messages?#{query_string}",
56
+ Authorization: token
57
+ )
58
+ end
59
+
60
+ # Get a single message from a channel's history by id
61
+ # https://discord.com/developers/docs/resources/channel#get-channel-message
62
+ def message(token, channel_id, message_id)
63
+ Rubycord::API.request(
64
+ :channels_cid_messages_mid,
65
+ channel_id,
66
+ :get,
67
+ "#{Rubycord::API.api_base}/channels/#{channel_id}/messages/#{message_id}",
68
+ Authorization: token
69
+ )
70
+ end
71
+
72
+ # Send a message to a channel
73
+ # https://discord.com/developers/docs/resources/channel#create-message
74
+ # @param attachments [Array<File>, nil] Attachments to use with `attachment://` in embeds. See
75
+ # https://discord.com/developers/docs/resources/channel#create-message-using-attachments-within-embeds
76
+ def create_message(token, channel_id, message, tts = false, embeds = nil, nonce = nil, attachments = nil, allowed_mentions = nil, message_reference = nil, components = nil)
77
+ body = {content: message, tts: tts, embeds: embeds, nonce: nonce, allowed_mentions: allowed_mentions, message_reference: message_reference, components: components&.to_a}
78
+ body = if attachments
79
+ files = [*0...attachments.size].zip(attachments).to_h
80
+ {**files, payload_json: body.to_json}
81
+ else
82
+ body.to_json
83
+ end
84
+
85
+ headers = {Authorization: token}
86
+ headers[:content_type] = :json unless attachments
87
+
88
+ Rubycord::API.request(
89
+ :channels_cid_messages_mid,
90
+ channel_id,
91
+ :post,
92
+ "#{Rubycord::API.api_base}/channels/#{channel_id}/messages",
93
+ body,
94
+ **headers
95
+ )
96
+ rescue RestClient::BadRequest => e
97
+ parsed = JSON.parse(e.response.body)
98
+ raise Rubycord::Errors::MessageTooLong, "Message over the character limit (#{message.length} > 2000)" if parsed["content"].is_a?(Array) && parsed["content"].first == "Must be 2000 or fewer in length."
99
+
100
+ raise
101
+ end
102
+
103
+ # Send a file as a message to a channel
104
+ # https://discord.com/developers/docs/resources/channel#upload-file
105
+ def upload_file(token, channel_id, file, caption: nil, tts: false)
106
+ Rubycord::API.request(
107
+ :channels_cid_messages_mid,
108
+ channel_id,
109
+ :post,
110
+ "#{Rubycord::API.api_base}/channels/#{channel_id}/messages",
111
+ {file: file, content: caption, tts: tts},
112
+ Authorization: token
113
+ )
114
+ end
115
+
116
+ # Edit a message
117
+ # https://discord.com/developers/docs/resources/channel#edit-message
118
+ def edit_message(token, channel_id, message_id, message, mentions = [], embeds = nil, components = nil)
119
+ Rubycord::API.request(
120
+ :channels_cid_messages_mid,
121
+ channel_id,
122
+ :patch,
123
+ "#{Rubycord::API.api_base}/channels/#{channel_id}/messages/#{message_id}",
124
+ {content: message, mentions: mentions, embeds: embeds, components: components}.to_json,
125
+ Authorization: token,
126
+ content_type: :json
127
+ )
128
+ end
129
+
130
+ # Delete a message
131
+ # https://discord.com/developers/docs/resources/channel#delete-message
132
+ def delete_message(token, channel_id, message_id, reason = nil)
133
+ Rubycord::API.request(
134
+ :channels_cid_messages_mid,
135
+ channel_id,
136
+ :delete,
137
+ "#{Rubycord::API.api_base}/channels/#{channel_id}/messages/#{message_id}",
138
+ Authorization: token,
139
+ "X-Audit-Log-Reason": reason
140
+ )
141
+ end
142
+
143
+ # Delete messages in bulk
144
+ # https://discord.com/developers/docs/resources/channel#bulk-delete-messages
145
+ def bulk_delete_messages(token, channel_id, messages = [], reason = nil)
146
+ Rubycord::API.request(
147
+ :channels_cid_messages_bulk_delete,
148
+ channel_id,
149
+ :post,
150
+ "#{Rubycord::API.api_base}/channels/#{channel_id}/messages/bulk-delete",
151
+ {messages: messages}.to_json,
152
+ Authorization: token,
153
+ content_type: :json,
154
+ "X-Audit-Log-Reason": reason
155
+ )
156
+ end
157
+
158
+ # Create a reaction on a message using this client
159
+ # https://discord.com/developers/docs/resources/channel#create-reaction
160
+ def create_reaction(token, channel_id, message_id, emoji)
161
+ emoji = URI.encode_www_form_component(emoji) unless emoji.ascii_only?
162
+ Rubycord::API.request(
163
+ :channels_cid_messages_mid_reactions_emoji_me,
164
+ channel_id,
165
+ :put,
166
+ "#{Rubycord::API.api_base}/channels/#{channel_id}/messages/#{message_id}/reactions/#{emoji}/@me",
167
+ nil,
168
+ Authorization: token,
169
+ content_type: :json
170
+ )
171
+ end
172
+
173
+ # Delete this client's own reaction on a message
174
+ # https://discord.com/developers/docs/resources/channel#delete-own-reaction
175
+ def delete_own_reaction(token, channel_id, message_id, emoji)
176
+ emoji = URI.encode_www_form_component(emoji) unless emoji.ascii_only?
177
+ Rubycord::API.request(
178
+ :channels_cid_messages_mid_reactions_emoji_me,
179
+ channel_id,
180
+ :delete,
181
+ "#{Rubycord::API.api_base}/channels/#{channel_id}/messages/#{message_id}/reactions/#{emoji}/@me",
182
+ Authorization: token
183
+ )
184
+ end
185
+
186
+ # Delete another client's reaction on a message
187
+ # https://discord.com/developers/docs/resources/channel#delete-user-reaction
188
+ def delete_user_reaction(token, channel_id, message_id, emoji, user_id)
189
+ emoji = URI.encode_www_form_component(emoji) unless emoji.ascii_only?
190
+ Rubycord::API.request(
191
+ :channels_cid_messages_mid_reactions_emoji_uid,
192
+ channel_id,
193
+ :delete,
194
+ "#{Rubycord::API.api_base}/channels/#{channel_id}/messages/#{message_id}/reactions/#{emoji}/#{user_id}",
195
+ Authorization: token
196
+ )
197
+ end
198
+
199
+ # Get a list of clients who reacted with a specific reaction on a message
200
+ # https://discord.com/developers/docs/resources/channel#get-reactions
201
+ def get_reactions(token, channel_id, message_id, emoji, before_id, after_id, limit = 100)
202
+ emoji = URI.encode_www_form_component(emoji) unless emoji.ascii_only?
203
+ query_string = URI.encode_www_form({limit: limit || 100, before: before_id, after: after_id}.compact)
204
+ Rubycord::API.request(
205
+ :channels_cid_messages_mid_reactions_emoji,
206
+ channel_id,
207
+ :get,
208
+ "#{Rubycord::API.api_base}/channels/#{channel_id}/messages/#{message_id}/reactions/#{emoji}?#{query_string}",
209
+ Authorization: token
210
+ )
211
+ end
212
+
213
+ # Deletes all reactions on a message from all clients
214
+ # https://discord.com/developers/docs/resources/channel#delete-all-reactions
215
+ def delete_all_reactions(token, channel_id, message_id)
216
+ Rubycord::API.request(
217
+ :channels_cid_messages_mid_reactions,
218
+ channel_id,
219
+ :delete,
220
+ "#{Rubycord::API.api_base}/channels/#{channel_id}/messages/#{message_id}/reactions",
221
+ Authorization: token
222
+ )
223
+ end
224
+
225
+ # Deletes all the reactions for a given emoji on a message
226
+ # https://discord.com/developers/docs/resources/channel#delete-all-reactions-for-emoji
227
+ def delete_all_emoji_reactions(token, channel_id, message_id, emoji)
228
+ emoji = URI.encode_www_form_component(emoji) unless emoji.ascii_only?
229
+
230
+ Rubycord::API.request(
231
+ :channels_cid_messages_mid_reactions_emoji,
232
+ channel_id,
233
+ :delete,
234
+ "#{Rubycord::API.api_base}/channels/#{channel_id}/messages/#{message_id}/reactions/#{emoji}",
235
+ Authorization: token
236
+ )
237
+ end
238
+
239
+ # Update a channels permission for a role or member
240
+ # https://discord.com/developers/docs/resources/channel#edit-channel-permissions
241
+ def update_permission(token, channel_id, overwrite_id, allow, deny, type, reason = nil)
242
+ Rubycord::API.request(
243
+ :channels_cid_permissions_oid,
244
+ channel_id,
245
+ :put,
246
+ "#{Rubycord::API.api_base}/channels/#{channel_id}/permissions/#{overwrite_id}",
247
+ {type: type, id: overwrite_id, allow: allow, deny: deny}.to_json,
248
+ Authorization: token,
249
+ content_type: :json,
250
+ "X-Audit-Log-Reason": reason
251
+ )
252
+ end
253
+
254
+ # Get a channel's invite list
255
+ # https://discord.com/developers/docs/resources/channel#get-channel-invites
256
+ def invites(token, channel_id)
257
+ Rubycord::API.request(
258
+ :channels_cid_invites,
259
+ channel_id,
260
+ :get,
261
+ "#{Rubycord::API.api_base}/channels/#{channel_id}/invites",
262
+ Authorization: token
263
+ )
264
+ end
265
+
266
+ # Create an instant invite from a server or a channel id
267
+ # https://discord.com/developers/docs/resources/channel#create-channel-invite
268
+ def create_invite(token, channel_id, max_age = 0, max_uses = 0, temporary = false, unique = false, reason = nil)
269
+ Rubycord::API.request(
270
+ :channels_cid_invites,
271
+ channel_id,
272
+ :post,
273
+ "#{Rubycord::API.api_base}/channels/#{channel_id}/invites",
274
+ {max_age: max_age, max_uses: max_uses, temporary: temporary, unique: unique}.to_json,
275
+ Authorization: token,
276
+ content_type: :json,
277
+ "X-Audit-Log-Reason": reason
278
+ )
279
+ end
280
+
281
+ # Delete channel permission
282
+ # https://discord.com/developers/docs/resources/channel#delete-channel-permission
283
+ def delete_permission(token, channel_id, overwrite_id, reason = nil)
284
+ Rubycord::API.request(
285
+ :channels_cid_permissions_oid,
286
+ channel_id,
287
+ :delete,
288
+ "#{Rubycord::API.api_base}/channels/#{channel_id}/permissions/#{overwrite_id}",
289
+ Authorization: token,
290
+ "X-Audit-Log-Reason": reason
291
+ )
292
+ end
293
+
294
+ # Start typing (needs to be resent every 5 seconds to keep up the typing)
295
+ # https://discord.com/developers/docs/resources/channel#trigger-typing-indicator
296
+ def start_typing(token, channel_id)
297
+ Rubycord::API.request(
298
+ :channels_cid_typing,
299
+ channel_id,
300
+ :post,
301
+ "#{Rubycord::API.api_base}/channels/#{channel_id}/typing",
302
+ nil,
303
+ Authorization: token
304
+ )
305
+ end
306
+
307
+ # Get a list of pinned messages in a channel
308
+ # https://discord.com/developers/docs/resources/channel#get-pinned-messages
309
+ def pinned_messages(token, channel_id)
310
+ Rubycord::API.request(
311
+ :channels_cid_pins,
312
+ channel_id,
313
+ :get,
314
+ "#{Rubycord::API.api_base}/channels/#{channel_id}/pins",
315
+ Authorization: token
316
+ )
317
+ end
318
+
319
+ # Pin a message
320
+ # https://discord.com/developers/docs/resources/channel#add-pinned-channel-message
321
+ def pin_message(token, channel_id, message_id, reason = nil)
322
+ Rubycord::API.request(
323
+ :channels_cid_pins_mid,
324
+ channel_id,
325
+ :put,
326
+ "#{Rubycord::API.api_base}/channels/#{channel_id}/pins/#{message_id}",
327
+ nil,
328
+ Authorization: token,
329
+ "X-Audit-Log-Reason": reason
330
+ )
331
+ end
332
+
333
+ # Unpin a message
334
+ # https://discord.com/developers/docs/resources/channel#delete-pinned-channel-message
335
+ def unpin_message(token, channel_id, message_id, reason = nil)
336
+ Rubycord::API.request(
337
+ :channels_cid_pins_mid,
338
+ channel_id,
339
+ :delete,
340
+ "#{Rubycord::API.api_base}/channels/#{channel_id}/pins/#{message_id}",
341
+ Authorization: token,
342
+ "X-Audit-Log-Reason": reason
343
+ )
344
+ end
345
+
346
+ # Create an empty group channel.
347
+ # @deprecated Discord no longer supports bots in group DMs, this endpoint was repurposed and no longer works as implemented here.
348
+ # https://discord.com/developers/docs/resources/user#create-group-dm
349
+ def create_empty_group(token, bot_user_id)
350
+ Rubycord::API.request(
351
+ :users_uid_channels,
352
+ nil,
353
+ :post,
354
+ "#{Rubycord::API.api_base}/users/#{bot_user_id}/channels",
355
+ {}.to_json,
356
+ Authorization: token,
357
+ content_type: :json
358
+ )
359
+ end
360
+
361
+ # Create a group channel.
362
+ # @deprecated Discord no longer supports bots in group DMs, this endpoint was repurposed and no longer works as implemented here.
363
+ # https://discord.com/developers/docs/resources/channel#group-dm-add-recipient
364
+ def create_group(token, pm_channel_id, user_id)
365
+ Rubycord::API.request(
366
+ :channels_cid_recipients_uid,
367
+ nil,
368
+ :put,
369
+ "#{Rubycord::API.api_base}/channels/#{pm_channel_id}/recipients/#{user_id}",
370
+ {}.to_json,
371
+ Authorization: token,
372
+ content_type: :json
373
+ )
374
+ rescue RestClient::InternalServerError
375
+ raise "Attempted to add self as a new group channel recipient!"
376
+ rescue RestClient::NoContent
377
+ raise "Attempted to create a group channel with the PM channel recipient!"
378
+ rescue RestClient::Forbidden
379
+ raise "Attempted to add a user to group channel without permission!"
380
+ end
381
+
382
+ # Add a user to a group channel.
383
+ # @deprecated Discord no longer supports bots in group DMs, this endpoint was repurposed and no longer works as implemented here.
384
+ # https://discord.com/developers/docs/resources/channel#group-dm-add-recipient
385
+ def add_group_user(token, group_channel_id, user_id)
386
+ Rubycord::API.request(
387
+ :channels_cid_recipients_uid,
388
+ nil,
389
+ :put,
390
+ "#{Rubycord::API.api_base}/channels/#{group_channel_id}/recipients/#{user_id}",
391
+ {}.to_json,
392
+ Authorization: token,
393
+ content_type: :json
394
+ )
395
+ end
396
+
397
+ # Remove a user from a group channel.
398
+ # @deprecated Discord no longer supports bots in group DMs, this endpoint was repurposed and no longer works as implemented here.
399
+ # https://discord.com/developers/docs/resources/channel#group-dm-remove-recipient
400
+ def remove_group_user(token, group_channel_id, user_id)
401
+ Rubycord::API.request(
402
+ :channels_cid_recipients_uid,
403
+ nil,
404
+ :delete,
405
+ "#{Rubycord::API.api_base}/channels/#{group_channel_id}/recipients/#{user_id}",
406
+ Authorization: token,
407
+ content_type: :json
408
+ )
409
+ end
410
+
411
+ # Leave a group channel.
412
+ # @deprecated Discord no longer supports bots in group DMs, this endpoint was repurposed and no longer works as implemented here.
413
+ # https://discord.com/developers/docs/resources/channel#deleteclose-channel
414
+ def leave_group(token, group_channel_id)
415
+ Rubycord::API.request(
416
+ :channels_cid,
417
+ nil,
418
+ :delete,
419
+ "#{Rubycord::API.api_base}/channels/#{group_channel_id}",
420
+ Authorization: token,
421
+ content_type: :json
422
+ )
423
+ end
424
+
425
+ # Create a webhook
426
+ # https://discord.com/developers/docs/resources/webhook#create-webhook
427
+ def create_webhook(token, channel_id, name, avatar = nil, reason = nil)
428
+ Rubycord::API.request(
429
+ :channels_cid_webhooks,
430
+ channel_id,
431
+ :post,
432
+ "#{Rubycord::API.api_base}/channels/#{channel_id}/webhooks",
433
+ {name: name, avatar: avatar}.to_json,
434
+ Authorization: token,
435
+ content_type: :json,
436
+ "X-Audit-Log-Reason": reason
437
+ )
438
+ end
439
+
440
+ # Get channel webhooks
441
+ # https://discord.com/developers/docs/resources/webhook#get-channel-webhooks
442
+ def webhooks(token, channel_id)
443
+ Rubycord::API.request(
444
+ :channels_cid_webhooks,
445
+ channel_id,
446
+ :get,
447
+ "#{Rubycord::API.api_base}/channels/#{channel_id}/webhooks",
448
+ Authorization: token
449
+ )
450
+ end
451
+
452
+ # Start a thread based off a channel message.
453
+ # https://discord.com/developers/docs/resources/channel#start-thread-with-message
454
+ def start_thread_with_message(token, channel_id, message_id, name, auto_archive_duration)
455
+ Rubycord::API.request(
456
+ :channels_cid_messages_mid_threads,
457
+ channel_id,
458
+ :post,
459
+ "#{Rubycord::API.api_base}/channels/#{channel_id}/messages/#{message_id}/threads",
460
+ {name: name, auto_archive_duration: auto_archive_duration}.to_json,
461
+ Authorization: token,
462
+ content_type: :json
463
+ )
464
+ end
465
+
466
+ # Start a thread without an associated message.
467
+ # https://discord.com/developers/docs/resources/channel#start-thread-without-message
468
+ def start_thread_without_message(token, channel_id, name, auto_archive_duration, type = 11)
469
+ Rubycord::API.request(
470
+ :channels_cid_threads,
471
+ channel_id,
472
+ :post,
473
+ "#{Rubycord::API.api_base}/channels/#{channel_id}/threads",
474
+ {name: name, auto_archive_duration: auto_archive_duration, type: type},
475
+ Authorization: token,
476
+ content_type: :json
477
+ )
478
+ end
479
+
480
+ # Add the current user to a thread.
481
+ # https://discord.com/developers/docs/resources/channel#join-thread
482
+ def join_thread(token, channel_id)
483
+ Rubycord::API.request(
484
+ :channels_cid_thread_members_me,
485
+ channel_id,
486
+ :put,
487
+ "#{Rubycord::API.api_base}/channels/#{channel_id}/thread-members/@me",
488
+ nil,
489
+ Authorization: token
490
+ )
491
+ end
492
+
493
+ # Add a user to a thread.
494
+ # https://discord.com/developers/docs/resources/channel#add-thread-member
495
+ def add_thread_member(token, channel_id, user_id)
496
+ Rubycord::API.request(
497
+ :channels_cid_thread_members_uid,
498
+ channel_id,
499
+ :put,
500
+ "#{Rubycord::API.api_base}/channels/#{channel_id}/thread-members/#{user_id}",
501
+ nil,
502
+ Authorization: token
503
+ )
504
+ end
505
+
506
+ # Remove the current user from a thread.
507
+ # https://discord.com/developers/docs/resources/channel#leave-thread
508
+ def leave_thread(token, channel_id)
509
+ Rubycord::API.request(
510
+ :channels_cid_thread_members_me,
511
+ channel_id,
512
+ :delete,
513
+ "#{Rubycord::API.api_base}/channels/#{channel_id}/thread-members/#{user_id}",
514
+ Authorization: token
515
+ )
516
+ end
517
+
518
+ # Remove a user from a thread.
519
+ # https://discord.com/developers/docs/resources/channel#remove-thread-member
520
+ def remove_thread_member(token, channel_id, user_id)
521
+ Rubycord::API.request(
522
+ :channels_cid_thread_members_uid,
523
+ channel_id,
524
+ :delete,
525
+ "#{Rubycord::API.api_base}/channels/#{channel_id}/thread-members/#{user_id}",
526
+ Authorization: token
527
+ )
528
+ end
529
+
530
+ # Get the members of a thread.
531
+ # https://discord.com/developers/docs/resources/channel#list-thread-members
532
+ def list_thread_members(token, channel_id, before, limit)
533
+ query = URI.encode_www_form({before: before, limit: limit}.compact)
534
+
535
+ Rubycord::API.request(
536
+ :channels_cid_thread_members,
537
+ channel_id,
538
+ :get,
539
+ "#{Rubycord::API.api_base}/channels/#{channel_id}/thread-members?#{query}",
540
+ Authorization: token
541
+ )
542
+ end
543
+
544
+ # List active threads
545
+ # https://discord.com/developers/docs/resources/channel#list-active-threads
546
+ def list_active_threads(token, channel_id)
547
+ Rubycord::API.request(
548
+ :channels_cid_threads_active,
549
+ channel_id,
550
+ :get,
551
+ "#{Rubycord::API.api_base}/channels/#{channel_id}/threads/active",
552
+ Authorization: token
553
+ )
554
+ end
555
+
556
+ # List public archived threads.
557
+ # https://discord.com/developers/docs/resources/channel#list-public-archived-threads
558
+ def list_public_archived_threads(token, channel_id, before = nil, limit = nil)
559
+ query = URI.encode_www_form({before: before, limit: limit}.compact)
560
+
561
+ Rubycord::API.request(
562
+ :channels_cid_threads_archived_public,
563
+ channel_id,
564
+ :get,
565
+ "#{Rubycord::API.api_base}/channels/#{channel_id}/threads/archived/public?#{query}",
566
+ Authorization: token
567
+ )
568
+ end
569
+
570
+ # List private archived threads.
571
+ # https://discord.com/developers/docs/resources/channel#list-private-archived-threads
572
+ def list_private_archived_threads(token, channel_id, before = nil, limit = nil)
573
+ query = URI.encode_www_form({before: before, limit: limit}.compact)
574
+
575
+ Rubycord::API.request(
576
+ :channels_cid_threads_archived_private,
577
+ channel_id,
578
+ :get,
579
+ "#{Rubycord::API.api_base}/channels/#{channel_id}/threads/archived/private?#{query}",
580
+ Authorization: token
581
+ )
582
+ end
583
+
584
+ # List joined private archived threads.
585
+ # https://discord.com/developers/docs/resources/channel#list-joined-private-archived-threads
586
+ def list_joined_private_archived_threads(token, channel_id, before = nil, limit = nil)
587
+ query = URI.encode_www_form({before: before, limit: limit}.compact)
588
+
589
+ Rubycord::API.request(
590
+ :channels_cid_users_me_threads_archived_private,
591
+ channel_id,
592
+ :get,
593
+ "#{Rubycord::API.api_base}/channels/#{channel_id}/users/@me/threads/archived/private?#{query}",
594
+ Authorization: token
595
+ )
596
+ end
597
+ end
@@ -0,0 +1,52 @@
1
+ # API calls for interactions.
2
+ module Rubycord::API::Interaction
3
+ module_function
4
+
5
+ # Respond to an interaction.
6
+ # https://discord.com/developers/docs/interactions/slash-commands#create-interaction-response
7
+ def create_interaction_response(interaction_token, interaction_id, type, content = nil, tts = nil, embeds = nil, allowed_mentions = nil, flags = nil, components = nil)
8
+ data = {tts: tts, content: content, embeds: embeds, allowed_mentions: allowed_mentions, flags: flags, components: components}.compact
9
+
10
+ Rubycord::API.request(
11
+ :interactions_iid_token_callback,
12
+ interaction_id,
13
+ :post,
14
+ "#{Rubycord::API.api_base}/interactions/#{interaction_id}/#{interaction_token}/callback",
15
+ {type: type, data: data}.to_json,
16
+ content_type: :json
17
+ )
18
+ end
19
+
20
+ # Create a response that results in a modal.
21
+ # https://discord.com/developers/docs/interactions/slash-commands#create-interaction-response
22
+ def create_interaction_modal_response(interaction_token, interaction_id, custom_id, title, components)
23
+ data = {custom_id: custom_id, title: title, components: components.to_a}.compact
24
+
25
+ Rubycord::API.request(
26
+ :interactions_iid_token_callback,
27
+ interaction_id,
28
+ :post,
29
+ "#{Rubycord::API.api_base}/interactions/#{interaction_id}/#{interaction_token}/callback",
30
+ {type: 9, data: data}.to_json,
31
+ content_type: :json
32
+ )
33
+ end
34
+
35
+ # Get the original response to an interaction.
36
+ # https://discord.com/developers/docs/interactions/slash-commands#get-original-interaction-response
37
+ def get_original_interaction_response(interaction_token, application_id)
38
+ Rubycord::API::Webhook.token_get_message(interaction_token, application_id, "@original")
39
+ end
40
+
41
+ # Edit the original response to an interaction.
42
+ # https://discord.com/developers/docs/interactions/slash-commands#edit-original-interaction-response
43
+ def edit_original_interaction_response(interaction_token, application_id, content = nil, embeds = nil, allowed_mentions = nil, components = nil)
44
+ Rubycord::API::Webhook.token_edit_message(interaction_token, application_id, "@original", content, embeds, allowed_mentions, components)
45
+ end
46
+
47
+ # Delete the original response to an interaction.
48
+ # https://discord.com/developers/docs/interactions/slash-commands#delete-original-interaction-response
49
+ def delete_original_interaction_response(interaction_token, application_id)
50
+ Rubycord::API::Webhook.token_delete_message(interaction_token, application_id, "@original")
51
+ end
52
+ end
@@ -0,0 +1,42 @@
1
+ # API calls for Invite object
2
+ module Rubycord::API::Invite
3
+ module_function
4
+
5
+ # Resolve an invite
6
+ # https://discord.com/developers/docs/resources/invite#get-invite
7
+ def resolve(token, invite_code, counts = true)
8
+ Rubycord::API.request(
9
+ :invite_code,
10
+ nil,
11
+ :get,
12
+ "#{Rubycord::API.api_base}/invites/#{invite_code}#{counts ? "?with_counts=true" : ""}",
13
+ Authorization: token
14
+ )
15
+ end
16
+
17
+ # Delete an invite by code
18
+ # https://discord.com/developers/docs/resources/invite#delete-invite
19
+ def delete(token, code, reason = nil)
20
+ Rubycord::API.request(
21
+ :invites_code,
22
+ nil,
23
+ :delete,
24
+ "#{Rubycord::API.api_base}/invites/#{code}",
25
+ Authorization: token,
26
+ "X-Audit-Log-Reason": reason
27
+ )
28
+ end
29
+
30
+ # Join a server using an invite
31
+ # https://discord.com/developers/docs/resources/invite#accept-invite
32
+ def accept(token, invite_code)
33
+ Rubycord::API.request(
34
+ :invite_code,
35
+ nil,
36
+ :post,
37
+ "#{Rubycord::API.api_base}/invites/#{invite_code}",
38
+ nil,
39
+ Authorization: token
40
+ )
41
+ end
42
+ end