rubycord 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (88) hide show
  1. checksums.yaml +7 -0
  2. data/lib/rubycord/allowed_mentions.rb +34 -0
  3. data/lib/rubycord/api/application.rb +200 -0
  4. data/lib/rubycord/api/channel.rb +597 -0
  5. data/lib/rubycord/api/interaction.rb +52 -0
  6. data/lib/rubycord/api/invite.rb +42 -0
  7. data/lib/rubycord/api/server.rb +557 -0
  8. data/lib/rubycord/api/user.rb +153 -0
  9. data/lib/rubycord/api/webhook.rb +138 -0
  10. data/lib/rubycord/api.rb +356 -0
  11. data/lib/rubycord/await.rb +49 -0
  12. data/lib/rubycord/bot.rb +1757 -0
  13. data/lib/rubycord/cache.rb +259 -0
  14. data/lib/rubycord/colour_rgb.rb +41 -0
  15. data/lib/rubycord/commands/command_bot.rb +519 -0
  16. data/lib/rubycord/commands/container.rb +110 -0
  17. data/lib/rubycord/commands/events.rb +9 -0
  18. data/lib/rubycord/commands/parser.rb +325 -0
  19. data/lib/rubycord/commands/rate_limiter.rb +142 -0
  20. data/lib/rubycord/container.rb +753 -0
  21. data/lib/rubycord/data/activity.rb +269 -0
  22. data/lib/rubycord/data/application.rb +48 -0
  23. data/lib/rubycord/data/attachment.rb +109 -0
  24. data/lib/rubycord/data/audit_logs.rb +343 -0
  25. data/lib/rubycord/data/channel.rb +996 -0
  26. data/lib/rubycord/data/component.rb +227 -0
  27. data/lib/rubycord/data/embed.rb +249 -0
  28. data/lib/rubycord/data/emoji.rb +80 -0
  29. data/lib/rubycord/data/integration.rb +120 -0
  30. data/lib/rubycord/data/interaction.rb +798 -0
  31. data/lib/rubycord/data/invite.rb +135 -0
  32. data/lib/rubycord/data/member.rb +370 -0
  33. data/lib/rubycord/data/message.rb +412 -0
  34. data/lib/rubycord/data/overwrite.rb +106 -0
  35. data/lib/rubycord/data/profile.rb +89 -0
  36. data/lib/rubycord/data/reaction.rb +31 -0
  37. data/lib/rubycord/data/recipient.rb +32 -0
  38. data/lib/rubycord/data/role.rb +246 -0
  39. data/lib/rubycord/data/server.rb +1002 -0
  40. data/lib/rubycord/data/user.rb +261 -0
  41. data/lib/rubycord/data/voice_region.rb +43 -0
  42. data/lib/rubycord/data/voice_state.rb +39 -0
  43. data/lib/rubycord/data/webhook.rb +232 -0
  44. data/lib/rubycord/data.rb +40 -0
  45. data/lib/rubycord/errors.rb +737 -0
  46. data/lib/rubycord/events/await.rb +46 -0
  47. data/lib/rubycord/events/bans.rb +58 -0
  48. data/lib/rubycord/events/channels.rb +186 -0
  49. data/lib/rubycord/events/generic.rb +126 -0
  50. data/lib/rubycord/events/guilds.rb +191 -0
  51. data/lib/rubycord/events/interactions.rb +480 -0
  52. data/lib/rubycord/events/invites.rb +123 -0
  53. data/lib/rubycord/events/lifetime.rb +29 -0
  54. data/lib/rubycord/events/members.rb +91 -0
  55. data/lib/rubycord/events/message.rb +337 -0
  56. data/lib/rubycord/events/presence.rb +127 -0
  57. data/lib/rubycord/events/raw.rb +45 -0
  58. data/lib/rubycord/events/reactions.rb +156 -0
  59. data/lib/rubycord/events/roles.rb +86 -0
  60. data/lib/rubycord/events/threads.rb +94 -0
  61. data/lib/rubycord/events/typing.rb +70 -0
  62. data/lib/rubycord/events/voice_server_update.rb +45 -0
  63. data/lib/rubycord/events/voice_state_update.rb +103 -0
  64. data/lib/rubycord/events/webhooks.rb +62 -0
  65. data/lib/rubycord/gateway.rb +867 -0
  66. data/lib/rubycord/id_object.rb +37 -0
  67. data/lib/rubycord/light/data.rb +60 -0
  68. data/lib/rubycord/light/integrations.rb +71 -0
  69. data/lib/rubycord/light/light_bot.rb +56 -0
  70. data/lib/rubycord/light.rb +6 -0
  71. data/lib/rubycord/logger.rb +118 -0
  72. data/lib/rubycord/paginator.rb +55 -0
  73. data/lib/rubycord/permissions.rb +251 -0
  74. data/lib/rubycord/version.rb +5 -0
  75. data/lib/rubycord/voice/encoder.rb +113 -0
  76. data/lib/rubycord/voice/network.rb +366 -0
  77. data/lib/rubycord/voice/sodium.rb +96 -0
  78. data/lib/rubycord/voice/voice_bot.rb +408 -0
  79. data/lib/rubycord/webhooks/builder.rb +100 -0
  80. data/lib/rubycord/webhooks/client.rb +132 -0
  81. data/lib/rubycord/webhooks/embeds.rb +248 -0
  82. data/lib/rubycord/webhooks/modal.rb +78 -0
  83. data/lib/rubycord/webhooks/version.rb +7 -0
  84. data/lib/rubycord/webhooks/view.rb +192 -0
  85. data/lib/rubycord/webhooks.rb +12 -0
  86. data/lib/rubycord/websocket.rb +70 -0
  87. data/lib/rubycord.rb +140 -0
  88. metadata +231 -0
@@ -0,0 +1,557 @@
1
+ # API calls for Server
2
+ module Rubycord::API::Server
3
+ module_function
4
+
5
+ # Create a server
6
+ # https://discord.com/developers/docs/resources/guild#create-guild
7
+ def create(token, name, region = :"eu-central")
8
+ Rubycord::API.request(
9
+ :guilds,
10
+ nil,
11
+ :post,
12
+ "#{Rubycord::API.api_base}/guilds",
13
+ {name: name, region: region.to_s}.to_json,
14
+ Authorization: token,
15
+ content_type: :json
16
+ )
17
+ end
18
+
19
+ # Get a server's data
20
+ # https://discord.com/developers/docs/resources/guild#get-guild
21
+ def resolve(token, server_id, with_counts = nil)
22
+ Rubycord::API.request(
23
+ :guilds_sid,
24
+ server_id,
25
+ :get,
26
+ "#{Rubycord::API.api_base}/guilds/#{server_id}#{"?with_counts=true" if with_counts}",
27
+ Authorization: token
28
+ )
29
+ end
30
+
31
+ # Update a server
32
+ # https://discord.com/developers/docs/resources/guild#modify-guild
33
+ def update(token, server_id, name, region, icon, afk_channel_id, afk_timeout, splash, default_message_notifications, verification_level, explicit_content_filter, system_channel_id, reason = nil)
34
+ Rubycord::API.request(
35
+ :guilds_sid,
36
+ server_id,
37
+ :patch,
38
+ "#{Rubycord::API.api_base}/guilds/#{server_id}",
39
+ {name: name, region: region, icon: icon, afk_channel_id: afk_channel_id, afk_timeout: afk_timeout, splash: splash, default_message_notifications: default_message_notifications, verification_level: verification_level, explicit_content_filter: explicit_content_filter, system_channel_id: system_channel_id}.to_json,
40
+ Authorization: token,
41
+ content_type: :json,
42
+ "X-Audit-Log-Reason": reason
43
+ )
44
+ end
45
+
46
+ # Transfer server ownership
47
+ # https://discord.com/developers/docs/resources/guild#modify-guild
48
+ def transfer_ownership(token, server_id, user_id, reason = nil)
49
+ Rubycord::API.request(
50
+ :guilds_sid,
51
+ server_id,
52
+ :patch,
53
+ "#{Rubycord::API.api_base}/guilds/#{server_id}",
54
+ {owner_id: user_id}.to_json,
55
+ Authorization: token,
56
+ content_type: :json,
57
+ "X-Audit-Log-Reason": reason
58
+ )
59
+ end
60
+
61
+ # Delete a server
62
+ # https://discord.com/developers/docs/resources/guild#delete-guild
63
+ def delete(token, server_id)
64
+ Rubycord::API.request(
65
+ :guilds_sid,
66
+ server_id,
67
+ :delete,
68
+ "#{Rubycord::API.api_base}/guilds/#{server_id}",
69
+ Authorization: token
70
+ )
71
+ end
72
+
73
+ # Get a server's channels list
74
+ # https://discord.com/developers/docs/resources/guild#get-guild-channels
75
+ def channels(token, server_id)
76
+ Rubycord::API.request(
77
+ :guilds_sid_channels,
78
+ server_id,
79
+ :get,
80
+ "#{Rubycord::API.api_base}/guilds/#{server_id}/channels",
81
+ Authorization: token
82
+ )
83
+ end
84
+
85
+ # Create a channel
86
+ # https://discord.com/developers/docs/resources/guild#create-guild-channel
87
+ def create_channel(token, server_id, name, type, topic, bitrate, user_limit, permission_overwrites, parent_id, nsfw, rate_limit_per_user, position, reason = nil)
88
+ Rubycord::API.request(
89
+ :guilds_sid_channels,
90
+ server_id,
91
+ :post,
92
+ "#{Rubycord::API.api_base}/guilds/#{server_id}/channels",
93
+ {name: name, type: type, topic: topic, bitrate: bitrate, user_limit: user_limit, permission_overwrites: permission_overwrites, parent_id: parent_id, nsfw: nsfw, rate_limit_per_user: rate_limit_per_user, position: position}.to_json,
94
+ Authorization: token,
95
+ content_type: :json,
96
+ "X-Audit-Log-Reason": reason
97
+ )
98
+ end
99
+
100
+ # Update a channels position
101
+ # https://discord.com/developers/docs/resources/guild#modify-guild-channel-positions
102
+ def update_channel_positions(token, server_id, positions)
103
+ Rubycord::API.request(
104
+ :guilds_sid_channels,
105
+ server_id,
106
+ :patch,
107
+ "#{Rubycord::API.api_base}/guilds/#{server_id}/channels",
108
+ positions.to_json,
109
+ Authorization: token,
110
+ content_type: :json
111
+ )
112
+ end
113
+
114
+ # Get a member's data
115
+ # https://discord.com/developers/docs/resources/guild#get-guild-member
116
+ def resolve_member(token, server_id, user_id)
117
+ Rubycord::API.request(
118
+ :guilds_sid_members_uid,
119
+ server_id,
120
+ :get,
121
+ "#{Rubycord::API.api_base}/guilds/#{server_id}/members/#{user_id}",
122
+ Authorization: token
123
+ )
124
+ end
125
+
126
+ # Gets members from the server
127
+ # https://discord.com/developers/docs/resources/guild#list-guild-members
128
+ def resolve_members(token, server_id, limit, after = nil)
129
+ query_string = URI.encode_www_form({limit: limit, after: after}.compact)
130
+ Rubycord::API.request(
131
+ :guilds_sid_members,
132
+ server_id,
133
+ :get,
134
+ "#{Rubycord::API.api_base}/guilds/#{server_id}/members?#{query_string}",
135
+ Authorization: token
136
+ )
137
+ end
138
+
139
+ # Update a user properties
140
+ # https://discord.com/developers/docs/resources/guild#modify-guild-member
141
+ def update_member(token, server_id, user_id, nick: :undef, roles: :undef, mute: :undef, deaf: :undef, channel_id: :undef,
142
+ communication_disabled_until: :undef, reason: nil)
143
+ Rubycord::API.request(
144
+ :guilds_sid_members_uid,
145
+ server_id,
146
+ :patch,
147
+ "#{Rubycord::API.api_base}/guilds/#{server_id}/members/#{user_id}", {
148
+ roles: roles,
149
+ nick: nick,
150
+ mute: mute,
151
+ deaf: deaf,
152
+ channel_id: channel_id,
153
+ communication_disabled_until: communication_disabled_until
154
+ }.reject { |_, v| v == :undef }.to_json,
155
+ Authorization: token,
156
+ content_type: :json,
157
+ "X-Audit-Log-Reason": reason
158
+ )
159
+ end
160
+
161
+ # Remove user from server
162
+ # https://discord.com/developers/docs/resources/guild#remove-guild-member
163
+ def remove_member(token, server_id, user_id, reason = nil)
164
+ Rubycord::API.request(
165
+ :guilds_sid_members_uid,
166
+ server_id,
167
+ :delete,
168
+ "#{Rubycord::API.api_base}/guilds/#{server_id}/members/#{user_id}",
169
+ Authorization: token,
170
+ content_type: :json,
171
+ "X-Audit-Log-Reason": reason
172
+ )
173
+ end
174
+
175
+ # Get a server's banned users
176
+ # https://discord.com/developers/docs/resources/guild#get-guild-bans
177
+ def bans(token, server_id, limit = nil, before = nil, after = nil)
178
+ query_string = URI.encode_www_form({limit: limit, before: before, after: after}.compact)
179
+ Rubycord::API.request(
180
+ :guilds_sid_bans,
181
+ server_id,
182
+ :get,
183
+ "#{Rubycord::API.api_base}/guilds/#{server_id}/bans?#{query_string}",
184
+ Authorization: token
185
+ )
186
+ end
187
+
188
+ # Ban a user from a server and delete their messages from the last message_days days
189
+ # https://discord.com/developers/docs/resources/guild#create-guild-ban
190
+ def ban_user(token, server_id, user_id, message_days, reason = nil)
191
+ reason = URI.encode_www_form_component(reason) if reason
192
+ Rubycord::API.request(
193
+ :guilds_sid_bans_uid,
194
+ server_id,
195
+ :put,
196
+ "#{Rubycord::API.api_base}/guilds/#{server_id}/bans/#{user_id}?delete_message_days=#{message_days}&reason=#{reason}",
197
+ nil,
198
+ Authorization: token
199
+ )
200
+ end
201
+
202
+ # Unban a user from a server
203
+ # https://discord.com/developers/docs/resources/guild#remove-guild-ban
204
+ def unban_user(token, server_id, user_id, reason = nil)
205
+ Rubycord::API.request(
206
+ :guilds_sid_bans_uid,
207
+ server_id,
208
+ :delete,
209
+ "#{Rubycord::API.api_base}/guilds/#{server_id}/bans/#{user_id}",
210
+ Authorization: token,
211
+ "X-Audit-Log-Reason": reason
212
+ )
213
+ end
214
+
215
+ # Get server roles
216
+ # https://discord.com/developers/docs/resources/guild#get-guild-roles
217
+ def roles(token, server_id)
218
+ Rubycord::API.request(
219
+ :guilds_sid_roles,
220
+ server_id,
221
+ :get,
222
+ "#{Rubycord::API.api_base}/guilds/#{server_id}/roles",
223
+ Authorization: token
224
+ )
225
+ end
226
+
227
+ # Create a role (parameters such as name and colour if not set can be set by update_role afterwards)
228
+ # Permissions are the Discord defaults; allowed: invite creation, reading/sending messages,
229
+ # sending TTS messages, embedding links, sending files, reading the history, mentioning everybody,
230
+ # connecting to voice, speaking and voice activity (push-to-talk isn't mandatory)
231
+ # https://discord.com/developers/docs/resources/guild#get-guild-roles
232
+ def create_role(token, server_id, name, colour, hoist, mentionable, packed_permissions, reason = nil)
233
+ Rubycord::API.request(
234
+ :guilds_sid_roles,
235
+ server_id,
236
+ :post,
237
+ "#{Rubycord::API.api_base}/guilds/#{server_id}/roles",
238
+ {color: colour, name: name, hoist: hoist, mentionable: mentionable, permissions: packed_permissions}.to_json,
239
+ Authorization: token,
240
+ content_type: :json,
241
+ "X-Audit-Log-Reason": reason
242
+ )
243
+ end
244
+
245
+ # Update a role
246
+ # Permissions are the Discord defaults; allowed: invite creation, reading/sending messages,
247
+ # sending TTS messages, embedding links, sending files, reading the history, mentioning everybody,
248
+ # connecting to voice, speaking and voice activity (push-to-talk isn't mandatory)
249
+ # https://discord.com/developers/docs/resources/guild#batch-modify-guild-role
250
+ # @param icon [:undef, File]
251
+ def update_role(token, server_id, role_id, name, colour, hoist = false, mentionable = false, packed_permissions = 104_324_161, reason = nil, icon = :undef)
252
+ data = {color: colour, name: name, hoist: hoist, mentionable: mentionable, permissions: packed_permissions}
253
+
254
+ if icon != :undef && icon
255
+ path_method = %i[original_filename path local_path].find { |meth| icon.respond_to?(meth) }
256
+
257
+ raise ArgumentError, "File object must respond to original_filename, path, or local path." unless path_method
258
+ raise ArgumentError, "File must respond to read" unless icon.respond_to? :read
259
+
260
+ mime_type = MIME::Types.type_for(icon.__send__(path_method)).first&.to_s || "image/jpeg"
261
+ data[:icon] = "data:#{mime_type};base64,#{Base64.encode64(icon.read).strip}"
262
+ elsif icon.nil?
263
+ data[:icon] = nil
264
+ end
265
+
266
+ Rubycord::API.request(
267
+ :guilds_sid_roles_rid,
268
+ server_id,
269
+ :patch,
270
+ "#{Rubycord::API.api_base}/guilds/#{server_id}/roles/#{role_id}",
271
+ data.to_json,
272
+ Authorization: token,
273
+ content_type: :json,
274
+ "X-Audit-Log-Reason": reason
275
+ )
276
+ end
277
+
278
+ # Update role positions
279
+ # https://discord.com/developers/docs/resources/guild#modify-guild-role-positions
280
+ def update_role_positions(token, server_id, roles)
281
+ Rubycord::API.request(
282
+ :guilds_sid_roles,
283
+ server_id,
284
+ :patch,
285
+ "#{Rubycord::API.api_base}/guilds/#{server_id}/roles",
286
+ roles.to_json,
287
+ Authorization: token,
288
+ content_type: :json
289
+ )
290
+ end
291
+
292
+ # Delete a role
293
+ # https://discord.com/developers/docs/resources/guild#delete-guild-role
294
+ def delete_role(token, server_id, role_id, reason = nil)
295
+ Rubycord::API.request(
296
+ :guilds_sid_roles_rid,
297
+ server_id,
298
+ :delete,
299
+ "#{Rubycord::API.api_base}/guilds/#{server_id}/roles/#{role_id}",
300
+ Authorization: token,
301
+ "X-Audit-Log-Reason": reason
302
+ )
303
+ end
304
+
305
+ # Adds a single role to a member
306
+ # https://discord.com/developers/docs/resources/guild#add-guild-member-role
307
+ def add_member_role(token, server_id, user_id, role_id, reason = nil)
308
+ Rubycord::API.request(
309
+ :guilds_sid_members_uid_roles_rid,
310
+ server_id,
311
+ :put,
312
+ "#{Rubycord::API.api_base}/guilds/#{server_id}/members/#{user_id}/roles/#{role_id}",
313
+ nil,
314
+ Authorization: token,
315
+ "X-Audit-Log-Reason": reason
316
+ )
317
+ end
318
+
319
+ # Removes a single role from a member
320
+ # https://discord.com/developers/docs/resources/guild#remove-guild-member-role
321
+ def remove_member_role(token, server_id, user_id, role_id, reason = nil)
322
+ Rubycord::API.request(
323
+ :guilds_sid_members_uid_roles_rid,
324
+ server_id,
325
+ :delete,
326
+ "#{Rubycord::API.api_base}/guilds/#{server_id}/members/#{user_id}/roles/#{role_id}",
327
+ Authorization: token,
328
+ "X-Audit-Log-Reason": reason
329
+ )
330
+ end
331
+
332
+ # Get server prune count
333
+ # https://discord.com/developers/docs/resources/guild#get-guild-prune-count
334
+ def prune_count(token, server_id, days)
335
+ Rubycord::API.request(
336
+ :guilds_sid_prune,
337
+ server_id,
338
+ :get,
339
+ "#{Rubycord::API.api_base}/guilds/#{server_id}/prune?days=#{days}",
340
+ Authorization: token
341
+ )
342
+ end
343
+
344
+ # Begin server prune
345
+ # https://discord.com/developers/docs/resources/guild#begin-guild-prune
346
+ def begin_prune(token, server_id, days, reason = nil)
347
+ Rubycord::API.request(
348
+ :guilds_sid_prune,
349
+ server_id,
350
+ :post,
351
+ "#{Rubycord::API.api_base}/guilds/#{server_id}/prune",
352
+ {days: days},
353
+ Authorization: token,
354
+ "X-Audit-Log-Reason": reason
355
+ )
356
+ end
357
+
358
+ # Get invites from server
359
+ # https://discord.com/developers/docs/resources/guild#get-guild-invites
360
+ def invites(token, server_id)
361
+ Rubycord::API.request(
362
+ :guilds_sid_invites,
363
+ server_id,
364
+ :get,
365
+ "#{Rubycord::API.api_base}/guilds/#{server_id}/invites",
366
+ Authorization: token
367
+ )
368
+ end
369
+
370
+ # Gets a server's audit logs
371
+ # https://discord.com/developers/docs/resources/audit-log#get-guild-audit-log
372
+ def audit_logs(token, server_id, limit, user_id = nil, action_type = nil, before = nil)
373
+ Rubycord::API.request(
374
+ :guilds_sid_auditlogs,
375
+ server_id,
376
+ :get,
377
+ "#{Rubycord::API.api_base}/guilds/#{server_id}/audit-logs?limit=#{limit}#{"&user_id=#{user_id}" if user_id}#{"&action_type=#{action_type}" if action_type}#{"&before=#{before}" if before}",
378
+ Authorization: token
379
+ )
380
+ end
381
+
382
+ # Get server integrations
383
+ # https://discord.com/developers/docs/resources/guild#get-guild-integrations
384
+ def integrations(token, server_id)
385
+ Rubycord::API.request(
386
+ :guilds_sid_integrations,
387
+ server_id,
388
+ :get,
389
+ "#{Rubycord::API.api_base}/guilds/#{server_id}/integrations",
390
+ Authorization: token
391
+ )
392
+ end
393
+
394
+ # Create a server integration
395
+ # https://discord.com/developers/docs/resources/guild#create-guild-integration
396
+ def create_integration(token, server_id, type, id, reason = nil)
397
+ Rubycord::API.request(
398
+ :guilds_sid_integrations,
399
+ server_id,
400
+ :post,
401
+ "#{Rubycord::API.api_base}/guilds/#{server_id}/integrations",
402
+ {type: type, id: id},
403
+ Authorization: token,
404
+ "X-Audit-Log-Reason": reason
405
+ )
406
+ end
407
+
408
+ # Update integration from server
409
+ # https://discord.com/developers/docs/resources/guild#modify-guild-integration
410
+ def update_integration(token, server_id, integration_id, expire_behavior, expire_grace_period, enable_emoticons)
411
+ Rubycord::API.request(
412
+ :guilds_sid_integrations_iid,
413
+ server_id,
414
+ :patch,
415
+ "#{Rubycord::API.api_base}/guilds/#{server_id}/integrations/#{integration_id}",
416
+ {expire_behavior: expire_behavior, expire_grace_period: expire_grace_period, enable_emoticons: enable_emoticons}.to_json,
417
+ Authorization: token,
418
+ content_type: :json
419
+ )
420
+ end
421
+
422
+ # Delete a server integration
423
+ # https://discord.com/developers/docs/resources/guild#delete-guild-integration
424
+ def delete_integration(token, server_id, integration_id, reason = nil)
425
+ Rubycord::API.request(
426
+ :guilds_sid_integrations_iid,
427
+ server_id,
428
+ :delete,
429
+ "#{Rubycord::API.api_base}/guilds/#{server_id}/integrations/#{integration_id}",
430
+ Authorization: token,
431
+ "X-Audit-Log-Reason": reason
432
+ )
433
+ end
434
+
435
+ # Sync an integration
436
+ # https://discord.com/developers/docs/resources/guild#sync-guild-integration
437
+ def sync_integration(token, server_id, integration_id)
438
+ Rubycord::API.request(
439
+ :guilds_sid_integrations_iid_sync,
440
+ server_id,
441
+ :post,
442
+ "#{Rubycord::API.api_base}/guilds/#{server_id}/integrations/#{integration_id}/sync",
443
+ nil,
444
+ Authorization: token
445
+ )
446
+ end
447
+
448
+ # Retrieves a server's widget information
449
+ # https://discord.com/developers/docs/resources/guild#get-guild-widget
450
+ def widget(token, server_id)
451
+ Rubycord::API.request(
452
+ :guilds_sid_embed,
453
+ server_id,
454
+ :get,
455
+ "#{Rubycord::API.api_base}/guilds/#{server_id}/widget",
456
+ Authorization: token
457
+ )
458
+ end
459
+ alias_method :embed, :widget
460
+
461
+ # Modify a server's widget settings
462
+ # https://discord.com/developers/docs/resources/guild#modify-guild-widget
463
+ def modify_widget(token, server_id, enabled, channel_id, reason = nil)
464
+ Rubycord::API.request(
465
+ :guilds_sid_embed,
466
+ server_id,
467
+ :patch,
468
+ "#{Rubycord::API.api_base}/guilds/#{server_id}/widget",
469
+ {enabled: enabled, channel_id: channel_id}.to_json,
470
+ Authorization: token,
471
+ "X-Audit-Log-Reason": reason,
472
+ content_type: :json
473
+ )
474
+ end
475
+ alias_method :modify_embed, :modify_widget
476
+
477
+ # Adds a custom emoji.
478
+ # https://discord.com/developers/docs/resources/emoji#create-guild-emoji
479
+ def add_emoji(token, server_id, image, name, roles = [], reason = nil)
480
+ Rubycord::API.request(
481
+ :guilds_sid_emojis,
482
+ server_id,
483
+ :post,
484
+ "#{Rubycord::API.api_base}/guilds/#{server_id}/emojis",
485
+ {image: image, name: name, roles: roles}.to_json,
486
+ Authorization: token,
487
+ content_type: :json,
488
+ "X-Audit-Log-Reason": reason
489
+ )
490
+ end
491
+
492
+ # Changes an emoji name and/or roles.
493
+ # https://discord.com/developers/docs/resources/emoji#modify-guild-emoji
494
+ def edit_emoji(token, server_id, emoji_id, name, roles = nil, reason = nil)
495
+ Rubycord::API.request(
496
+ :guilds_sid_emojis_eid,
497
+ server_id,
498
+ :patch,
499
+ "#{Rubycord::API.api_base}/guilds/#{server_id}/emojis/#{emoji_id}",
500
+ {name: name, roles: roles}.to_json,
501
+ Authorization: token,
502
+ content_type: :json,
503
+ "X-Audit-Log-Reason": reason
504
+ )
505
+ end
506
+
507
+ # Deletes a custom emoji
508
+ # https://discord.com/developers/docs/resources/emoji#delete-guild-emoji
509
+ def delete_emoji(token, server_id, emoji_id, reason = nil)
510
+ Rubycord::API.request(
511
+ :guilds_sid_emojis_eid,
512
+ server_id,
513
+ :delete,
514
+ "#{Rubycord::API.api_base}/guilds/#{server_id}/emojis/#{emoji_id}",
515
+ Authorization: token,
516
+ "X-Audit-Log-Reason": reason
517
+ )
518
+ end
519
+
520
+ # Available voice regions for this server
521
+ # https://discord.com/developers/docs/resources/guild#get-guild-voice-regions
522
+ def regions(token, server_id)
523
+ Rubycord::API.request(
524
+ :guilds_sid_regions,
525
+ server_id,
526
+ :get,
527
+ "#{Rubycord::API.api_base}/guilds/#{server_id}/regions",
528
+ Authorization: token
529
+ )
530
+ end
531
+
532
+ # Get server webhooks
533
+ # https://discord.com/developers/docs/resources/webhook#get-guild-webhooks
534
+ def webhooks(token, server_id)
535
+ Rubycord::API.request(
536
+ :guilds_sid_webhooks,
537
+ server_id,
538
+ :get,
539
+ "#{Rubycord::API.api_base}/guilds/#{server_id}/webhooks",
540
+ Authorization: token
541
+ )
542
+ end
543
+
544
+ # Adds a member to a server with an OAuth2 Bearer token that has been granted `guilds.join`
545
+ # https://discord.com/developers/docs/resources/guild#add-guild-member
546
+ def add_member(token, server_id, user_id, access_token, nick = nil, roles = [], mute = false, deaf = false)
547
+ Rubycord::API.request(
548
+ :guilds_sid_members_uid,
549
+ server_id,
550
+ :put,
551
+ "#{Rubycord::API.api_base}/guilds/#{server_id}/members/#{user_id}",
552
+ {access_token: access_token, nick: nick, roles: roles, mute: mute, deaf: deaf}.to_json,
553
+ content_type: :json,
554
+ Authorization: token
555
+ )
556
+ end
557
+ end
@@ -0,0 +1,153 @@
1
+ # API calls for User object
2
+ module Rubycord::API::User
3
+ module_function
4
+
5
+ # Get user data
6
+ # https://discord.com/developers/docs/resources/user#get-user
7
+ def resolve(token, user_id)
8
+ Rubycord::API.request(
9
+ :users_uid,
10
+ nil,
11
+ :get,
12
+ "#{Rubycord::API.api_base}/users/#{user_id}",
13
+ Authorization: token
14
+ )
15
+ end
16
+
17
+ # Get profile data
18
+ # https://discord.com/developers/docs/resources/user#get-current-user
19
+ def profile(token)
20
+ Rubycord::API.request(
21
+ :users_me,
22
+ nil,
23
+ :get,
24
+ "#{Rubycord::API.api_base}/users/@me",
25
+ Authorization: token
26
+ )
27
+ end
28
+
29
+ # Change the current bot's nickname on a server
30
+ # https://discord.com/developers/docs/resources/user#modify-current-user
31
+ def change_own_nickname(token, server_id, nick, reason = nil)
32
+ Rubycord::API.request(
33
+ :guilds_sid_members_me_nick,
34
+ server_id, # This is technically a guild endpoint
35
+ :patch,
36
+ "#{Rubycord::API.api_base}/guilds/#{server_id}/members/@me/nick",
37
+ {nick: nick}.to_json,
38
+ Authorization: token,
39
+ content_type: :json,
40
+ "X-Audit-Log-Reason": reason
41
+ )
42
+ end
43
+
44
+ # Update user data
45
+ # https://discord.com/developers/docs/resources/user#modify-current-user
46
+ def update_profile(token, email, password, new_username, avatar, new_password = nil)
47
+ Rubycord::API.request(
48
+ :users_me,
49
+ nil,
50
+ :patch,
51
+ "#{Rubycord::API.api_base}/users/@me",
52
+ {avatar: avatar, email: email, new_password: new_password, password: password, username: new_username}.to_json,
53
+ Authorization: token,
54
+ content_type: :json
55
+ )
56
+ end
57
+
58
+ # Get the servers a user is connected to
59
+ # https://discord.com/developers/docs/resources/user#get-current-user-guilds
60
+ def servers(token)
61
+ Rubycord::API.request(
62
+ :users_me_guilds,
63
+ nil,
64
+ :get,
65
+ "#{Rubycord::API.api_base}/users/@me/guilds",
66
+ Authorization: token
67
+ )
68
+ end
69
+
70
+ # Leave a server
71
+ # https://discord.com/developers/docs/resources/user#leave-guild
72
+ def leave_server(token, server_id)
73
+ Rubycord::API.request(
74
+ :users_me_guilds_sid,
75
+ nil,
76
+ :delete,
77
+ "#{Rubycord::API.api_base}/users/@me/guilds/#{server_id}",
78
+ Authorization: token
79
+ )
80
+ end
81
+
82
+ # Get the DMs for the current user
83
+ # https://discord.com/developers/docs/resources/user#get-user-dms
84
+ def user_dms(token)
85
+ Rubycord::API.request(
86
+ :users_me_channels,
87
+ nil,
88
+ :get,
89
+ "#{Rubycord::API.api_base}/users/@me/channels",
90
+ Authorization: token
91
+ )
92
+ end
93
+
94
+ # Create a DM to another user
95
+ # https://discord.com/developers/docs/resources/user#create-dm
96
+ def create_pm(token, recipient_id)
97
+ Rubycord::API.request(
98
+ :users_me_channels,
99
+ nil,
100
+ :post,
101
+ "#{Rubycord::API.api_base}/users/@me/channels",
102
+ {recipient_id: recipient_id}.to_json,
103
+ Authorization: token,
104
+ content_type: :json
105
+ )
106
+ end
107
+
108
+ # Get information about a user's connections
109
+ # https://discord.com/developers/docs/resources/user#get-users-connections
110
+ def connections(token)
111
+ Rubycord::API.request(
112
+ :users_me_connections,
113
+ nil,
114
+ :get,
115
+ "#{Rubycord::API.api_base}/users/@me/connections",
116
+ Authorization: token
117
+ )
118
+ end
119
+
120
+ # Change user status setting
121
+ def change_status_setting(token, status)
122
+ Rubycord::API.request(
123
+ :users_me_settings,
124
+ nil,
125
+ :patch,
126
+ "#{Rubycord::API.api_base}/users/@me/settings",
127
+ {status: status}.to_json,
128
+ Authorization: token,
129
+ content_type: :json
130
+ )
131
+ end
132
+
133
+ # Returns one of the "default" discord avatars from the CDN given a discriminator or id since new usernames
134
+ # TODO: Maybe change this method again after discriminator removal ?
135
+ def default_avatar(discrim_id = 0, legacy: false)
136
+ index = if legacy
137
+ discrim_id.to_i % 5
138
+ else
139
+ (discrim_id.to_i >> 22) % 5
140
+ end
141
+ "#{Rubycord::API.cdn_url}/embed/avatars/#{index}.png"
142
+ end
143
+
144
+ # Make an avatar URL from the user and avatar IDs
145
+ def avatar_url(user_id, avatar_id, format = nil)
146
+ format ||= if avatar_id.start_with?("a_")
147
+ "gif"
148
+ else
149
+ "webp"
150
+ end
151
+ "#{Rubycord::API.cdn_url}/avatars/#{user_id}/#{avatar_id}.#{format}"
152
+ end
153
+ end