discordrb 3.3.0 → 3.5.0

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