discordrb 3.3.0 → 3.4.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (82) hide show
  1. checksums.yaml +4 -4
  2. data/.circleci/config.yml +126 -0
  3. data/.github/ISSUE_TEMPLATE/bug_report.md +39 -0
  4. data/.github/ISSUE_TEMPLATE/feature_request.md +25 -0
  5. data/.github/pull_request_template.md +37 -0
  6. data/.rubocop.yml +34 -37
  7. data/.travis.yml +5 -6
  8. data/CHANGELOG.md +504 -347
  9. data/Gemfile +2 -0
  10. data/LICENSE.txt +1 -1
  11. data/README.md +61 -79
  12. data/Rakefile +2 -0
  13. data/bin/console +1 -0
  14. data/discordrb-webhooks.gemspec +6 -6
  15. data/discordrb.gemspec +18 -18
  16. data/lib/discordrb/allowed_mentions.rb +36 -0
  17. data/lib/discordrb/api/channel.rb +62 -39
  18. data/lib/discordrb/api/invite.rb +3 -3
  19. data/lib/discordrb/api/server.rb +57 -50
  20. data/lib/discordrb/api/user.rb +9 -8
  21. data/lib/discordrb/api/webhook.rb +6 -6
  22. data/lib/discordrb/api.rb +40 -15
  23. data/lib/discordrb/await.rb +0 -1
  24. data/lib/discordrb/bot.rb +175 -73
  25. data/lib/discordrb/cache.rb +4 -2
  26. data/lib/discordrb/colour_rgb.rb +43 -0
  27. data/lib/discordrb/commands/command_bot.rb +30 -9
  28. data/lib/discordrb/commands/container.rb +20 -23
  29. data/lib/discordrb/commands/parser.rb +18 -18
  30. data/lib/discordrb/commands/rate_limiter.rb +3 -2
  31. data/lib/discordrb/container.rb +77 -17
  32. data/lib/discordrb/data/activity.rb +271 -0
  33. data/lib/discordrb/data/application.rb +50 -0
  34. data/lib/discordrb/data/attachment.rb +56 -0
  35. data/lib/discordrb/data/audit_logs.rb +345 -0
  36. data/lib/discordrb/data/channel.rb +849 -0
  37. data/lib/discordrb/data/embed.rb +251 -0
  38. data/lib/discordrb/data/emoji.rb +82 -0
  39. data/lib/discordrb/data/integration.rb +83 -0
  40. data/lib/discordrb/data/invite.rb +137 -0
  41. data/lib/discordrb/data/member.rb +297 -0
  42. data/lib/discordrb/data/message.rb +334 -0
  43. data/lib/discordrb/data/overwrite.rb +102 -0
  44. data/lib/discordrb/data/profile.rb +91 -0
  45. data/lib/discordrb/data/reaction.rb +33 -0
  46. data/lib/discordrb/data/recipient.rb +34 -0
  47. data/lib/discordrb/data/role.rb +191 -0
  48. data/lib/discordrb/data/server.rb +1002 -0
  49. data/lib/discordrb/data/user.rb +204 -0
  50. data/lib/discordrb/data/voice_region.rb +45 -0
  51. data/lib/discordrb/data/voice_state.rb +41 -0
  52. data/lib/discordrb/data/webhook.rb +145 -0
  53. data/lib/discordrb/data.rb +25 -4180
  54. data/lib/discordrb/errors.rb +2 -1
  55. data/lib/discordrb/events/bans.rb +7 -5
  56. data/lib/discordrb/events/channels.rb +2 -0
  57. data/lib/discordrb/events/guilds.rb +16 -9
  58. data/lib/discordrb/events/invites.rb +125 -0
  59. data/lib/discordrb/events/members.rb +6 -2
  60. data/lib/discordrb/events/message.rb +69 -27
  61. data/lib/discordrb/events/presence.rb +14 -4
  62. data/lib/discordrb/events/raw.rb +1 -3
  63. data/lib/discordrb/events/reactions.rb +49 -3
  64. data/lib/discordrb/events/typing.rb +6 -4
  65. data/lib/discordrb/events/voice_server_update.rb +47 -0
  66. data/lib/discordrb/events/voice_state_update.rb +15 -10
  67. data/lib/discordrb/events/webhooks.rb +9 -6
  68. data/lib/discordrb/gateway.rb +72 -57
  69. data/lib/discordrb/id_object.rb +39 -0
  70. data/lib/discordrb/light/integrations.rb +1 -1
  71. data/lib/discordrb/light/light_bot.rb +1 -1
  72. data/lib/discordrb/logger.rb +4 -4
  73. data/lib/discordrb/paginator.rb +57 -0
  74. data/lib/discordrb/permissions.rb +103 -8
  75. data/lib/discordrb/version.rb +1 -1
  76. data/lib/discordrb/voice/encoder.rb +16 -7
  77. data/lib/discordrb/voice/network.rb +84 -43
  78. data/lib/discordrb/voice/sodium.rb +96 -0
  79. data/lib/discordrb/voice/voice_bot.rb +34 -26
  80. data/lib/discordrb.rb +73 -0
  81. metadata +98 -60
  82. /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,7 +126,7 @@ 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)
130
131
  Discordrb::API.request(
131
132
  :guilds_sid_members,
@@ -137,7 +138,7 @@ module Discordrb::API::Server
137
138
  end
138
139
 
139
140
  # Update a user properties
140
- # https://discordapp.com/developers/docs/resources/guild#modify-guild-member
141
+ # https://discord.com/developers/docs/resources/guild#modify-guild-member
141
142
  def update_member(token, server_id, user_id, nick: nil, roles: nil, mute: nil, deaf: nil, channel_id: nil, reason: nil)
142
143
  Discordrb::API.request(
143
144
  :guilds_sid_members_uid,
@@ -149,7 +150,7 @@ module Discordrb::API::Server
149
150
  mute: mute,
150
151
  deaf: deaf,
151
152
  channel_id: channel_id
152
- }.reject { |_, v| v.nil? }.to_json,
153
+ }.compact.to_json,
153
154
  Authorization: token,
154
155
  content_type: :json,
155
156
  'X-Audit-Log-Reason': reason
@@ -157,7 +158,7 @@ module Discordrb::API::Server
157
158
  end
158
159
 
159
160
  # Remove user from server
160
- # https://discordapp.com/developers/docs/resources/guild#remove-guild-member
161
+ # https://discord.com/developers/docs/resources/guild#remove-guild-member
161
162
  def remove_member(token, server_id, user_id, reason = nil)
162
163
  Discordrb::API.request(
163
164
  :guilds_sid_members_uid,
@@ -171,7 +172,7 @@ module Discordrb::API::Server
171
172
  end
172
173
 
173
174
  # Get a server's banned users
174
- # https://discordapp.com/developers/docs/resources/guild#get-guild-bans
175
+ # https://discord.com/developers/docs/resources/guild#get-guild-bans
175
176
  def bans(token, server_id)
176
177
  Discordrb::API.request(
177
178
  :guilds_sid_bans,
@@ -183,9 +184,9 @@ module Discordrb::API::Server
183
184
  end
184
185
 
185
186
  # 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
187
+ # https://discord.com/developers/docs/resources/guild#create-guild-ban
187
188
  def ban_user(token, server_id, user_id, message_days, reason = nil)
188
- reason = URI.encode(reason) if reason
189
+ reason = URI.encode_www_form_component(reason) if reason
189
190
  Discordrb::API.request(
190
191
  :guilds_sid_bans_uid,
191
192
  server_id,
@@ -197,7 +198,7 @@ module Discordrb::API::Server
197
198
  end
198
199
 
199
200
  # Unban a user from a server
200
- # https://discordapp.com/developers/docs/resources/guild#remove-guild-ban
201
+ # https://discord.com/developers/docs/resources/guild#remove-guild-ban
201
202
  def unban_user(token, server_id, user_id, reason = nil)
202
203
  Discordrb::API.request(
203
204
  :guilds_sid_bans_uid,
@@ -210,7 +211,7 @@ module Discordrb::API::Server
210
211
  end
211
212
 
212
213
  # Get server roles
213
- # https://discordapp.com/developers/docs/resources/guild#get-guild-roles
214
+ # https://discord.com/developers/docs/resources/guild#get-guild-roles
214
215
  def roles(token, server_id)
215
216
  Discordrb::API.request(
216
217
  :guilds_sid_roles,
@@ -225,7 +226,7 @@ module Discordrb::API::Server
225
226
  # Permissions are the Discord defaults; allowed: invite creation, reading/sending messages,
226
227
  # sending TTS messages, embedding links, sending files, reading the history, mentioning everybody,
227
228
  # connecting to voice, speaking and voice activity (push-to-talk isn't mandatory)
228
- # https://discordapp.com/developers/docs/resources/guild#get-guild-roles
229
+ # https://discord.com/developers/docs/resources/guild#get-guild-roles
229
230
  def create_role(token, server_id, name, colour, hoist, mentionable, packed_permissions, reason = nil)
230
231
  Discordrb::API.request(
231
232
  :guilds_sid_roles,
@@ -243,7 +244,7 @@ module Discordrb::API::Server
243
244
  # Permissions are the Discord defaults; allowed: invite creation, reading/sending messages,
244
245
  # sending TTS messages, embedding links, sending files, reading the history, mentioning everybody,
245
246
  # 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
+ # https://discord.com/developers/docs/resources/guild#batch-modify-guild-role
247
248
  def update_role(token, server_id, role_id, name, colour, hoist = false, mentionable = false, packed_permissions = 104_324_161, reason = nil)
248
249
  Discordrb::API.request(
249
250
  :guilds_sid_roles_rid,
@@ -258,7 +259,7 @@ module Discordrb::API::Server
258
259
  end
259
260
 
260
261
  # Update role positions
261
- # https://discordapp.com/developers/docs/resources/guild#modify-guild-role-positions
262
+ # https://discord.com/developers/docs/resources/guild#modify-guild-role-positions
262
263
  def update_role_positions(token, server_id, roles)
263
264
  Discordrb::API.request(
264
265
  :guilds_sid_roles,
@@ -272,7 +273,7 @@ module Discordrb::API::Server
272
273
  end
273
274
 
274
275
  # Delete a role
275
- # https://discordapp.com/developers/docs/resources/guild#delete-guild-role
276
+ # https://discord.com/developers/docs/resources/guild#delete-guild-role
276
277
  def delete_role(token, server_id, role_id, reason = nil)
277
278
  Discordrb::API.request(
278
279
  :guilds_sid_roles_rid,
@@ -285,7 +286,7 @@ module Discordrb::API::Server
285
286
  end
286
287
 
287
288
  # Adds a single role to a member
288
- # https://discordapp.com/developers/docs/resources/guild#add-guild-member-role
289
+ # https://discord.com/developers/docs/resources/guild#add-guild-member-role
289
290
  def add_member_role(token, server_id, user_id, role_id, reason = nil)
290
291
  Discordrb::API.request(
291
292
  :guilds_sid_members_uid_roles_rid,
@@ -299,7 +300,7 @@ module Discordrb::API::Server
299
300
  end
300
301
 
301
302
  # Removes a single role from a member
302
- # https://discordapp.com/developers/docs/resources/guild#remove-guild-member-role
303
+ # https://discord.com/developers/docs/resources/guild#remove-guild-member-role
303
304
  def remove_member_role(token, server_id, user_id, role_id, reason = nil)
304
305
  Discordrb::API.request(
305
306
  :guilds_sid_members_uid_roles_rid,
@@ -312,7 +313,7 @@ module Discordrb::API::Server
312
313
  end
313
314
 
314
315
  # Get server prune count
315
- # https://discordapp.com/developers/docs/resources/guild#get-guild-prune-count
316
+ # https://discord.com/developers/docs/resources/guild#get-guild-prune-count
316
317
  def prune_count(token, server_id, days)
317
318
  Discordrb::API.request(
318
319
  :guilds_sid_prune,
@@ -324,7 +325,7 @@ module Discordrb::API::Server
324
325
  end
325
326
 
326
327
  # Begin server prune
327
- # https://discordapp.com/developers/docs/resources/guild#begin-guild-prune
328
+ # https://discord.com/developers/docs/resources/guild#begin-guild-prune
328
329
  def begin_prune(token, server_id, days, reason = nil)
329
330
  Discordrb::API.request(
330
331
  :guilds_sid_prune,
@@ -338,7 +339,7 @@ module Discordrb::API::Server
338
339
  end
339
340
 
340
341
  # Get invites from server
341
- # https://discordapp.com/developers/docs/resources/guild#get-guild-invites
342
+ # https://discord.com/developers/docs/resources/guild#get-guild-invites
342
343
  def invites(token, server_id)
343
344
  Discordrb::API.request(
344
345
  :guilds_sid_invites,
@@ -350,19 +351,19 @@ module Discordrb::API::Server
350
351
  end
351
352
 
352
353
  # 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)
354
+ # https://discord.com/developers/docs/resources/audit-log#get-guild-audit-log
355
+ def audit_logs(token, server_id, limit, user_id = nil, action_type = nil, before = nil)
355
356
  Discordrb::API.request(
356
357
  :guilds_sid_auditlogs,
357
358
  server_id,
358
359
  :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}",
360
+ "#{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
361
  Authorization: token
361
362
  )
362
363
  end
363
364
 
364
365
  # Get server integrations
365
- # https://discordapp.com/developers/docs/resources/guild#get-guild-integrations
366
+ # https://discord.com/developers/docs/resources/guild#get-guild-integrations
366
367
  def integrations(token, server_id)
367
368
  Discordrb::API.request(
368
369
  :guilds_sid_integrations,
@@ -375,19 +376,20 @@ module Discordrb::API::Server
375
376
 
376
377
  # Create a server integration
377
378
  # https://discordapp.com/developers/docs/resources/guild#create-guild-integration
378
- def create_integration(token, server_id, type, id)
379
+ def create_integration(token, server_id, type, id, reason = nil)
379
380
  Discordrb::API.request(
380
381
  :guilds_sid_integrations,
381
382
  server_id,
382
383
  :post,
383
384
  "#{Discordrb::API.api_base}/guilds/#{server_id}/integrations",
384
385
  { type: type, id: id },
385
- Authorization: token
386
+ Authorization: token,
387
+ 'X-Audit-Log-Reason': reason
386
388
  )
387
389
  end
388
390
 
389
391
  # Update integration from server
390
- # https://discordapp.com/developers/docs/resources/guild#modify-guild-integration
392
+ # https://discord.com/developers/docs/resources/guild#modify-guild-integration
391
393
  def update_integration(token, server_id, integration_id, expire_behavior, expire_grace_period, enable_emoticons)
392
394
  Discordrb::API.request(
393
395
  :guilds_sid_integrations_iid,
@@ -402,18 +404,19 @@ module Discordrb::API::Server
402
404
 
403
405
  # Delete a server integration
404
406
  # https://discordapp.com/developers/docs/resources/guild#delete-guild-integration
405
- def delete_integration(token, server_id, integration_id)
407
+ def delete_integration(token, server_id, integration_id, reason = nil)
406
408
  Discordrb::API.request(
407
409
  :guilds_sid_integrations_iid,
408
410
  server_id,
409
411
  :delete,
410
412
  "#{Discordrb::API.api_base}/guilds/#{server_id}/integrations/#{integration_id}",
411
- Authorization: token
413
+ Authorization: token,
414
+ 'X-Audit-Log-Reason': reason
412
415
  )
413
416
  end
414
417
 
415
418
  # Sync an integration
416
- # https://discordapp.com/developers/docs/resources/guild#sync-guild-integration
419
+ # https://discord.com/developers/docs/resources/guild#sync-guild-integration
417
420
  def sync_integration(token, server_id, integration_id)
418
421
  Discordrb::API.request(
419
422
  :guilds_sid_integrations_iid_sync,
@@ -426,7 +429,7 @@ module Discordrb::API::Server
426
429
  end
427
430
 
428
431
  # Retrieves a server's embed information
429
- # https://discordapp.com/developers/docs/resources/guild#get-guild-embed
432
+ # https://discord.com/developers/docs/resources/guild#get-guild-embed
430
433
  def embed(token, server_id)
431
434
  Discordrb::API.request(
432
435
  :guilds_sid_embed,
@@ -438,7 +441,7 @@ module Discordrb::API::Server
438
441
  end
439
442
 
440
443
  # Modify a server's embed settings
441
- # https://discordapp.com/developers/docs/resources/guild#modify-guild-embed
444
+ # https://discord.com/developers/docs/resources/guild#modify-guild-embed
442
445
  def modify_embed(token, server_id, enabled, channel_id, reason = nil)
443
446
  Discordrb::API.request(
444
447
  :guilds_sid_embed,
@@ -452,28 +455,30 @@ module Discordrb::API::Server
452
455
  )
453
456
  end
454
457
 
455
- # Adds a custom emoji
456
- def add_emoji(token, server_id, image, name, reason = nil)
458
+ # Adds a custom emoji.
459
+ # https://discord.com/developers/docs/resources/emoji#create-guild-emoji
460
+ def add_emoji(token, server_id, image, name, roles = [], reason = nil)
457
461
  Discordrb::API.request(
458
462
  :guilds_sid_emojis,
459
463
  server_id,
460
464
  :post,
461
465
  "#{Discordrb::API.api_base}/guilds/#{server_id}/emojis",
462
- { image: image, name: name }.to_json,
466
+ { image: image, name: name, roles: roles }.to_json,
463
467
  Authorization: token,
464
468
  content_type: :json,
465
469
  'X-Audit-Log-Reason': reason
466
470
  )
467
471
  end
468
472
 
469
- # Changes an emoji name
470
- def edit_emoji(token, server_id, emoji_id, name, reason = nil)
473
+ # Changes an emoji name and/or roles.
474
+ # https://discord.com/developers/docs/resources/emoji#modify-guild-emoji
475
+ def edit_emoji(token, server_id, emoji_id, name, roles = nil, reason = nil)
471
476
  Discordrb::API.request(
472
477
  :guilds_sid_emojis_eid,
473
478
  server_id,
474
479
  :patch,
475
480
  "#{Discordrb::API.api_base}/guilds/#{server_id}/emojis/#{emoji_id}",
476
- { name: name }.to_json,
481
+ { name: name, roles: roles }.to_json,
477
482
  Authorization: token,
478
483
  content_type: :json,
479
484
  'X-Audit-Log-Reason': reason
@@ -481,6 +486,7 @@ module Discordrb::API::Server
481
486
  end
482
487
 
483
488
  # Deletes a custom emoji
489
+ # https://discord.com/developers/docs/resources/emoji#delete-guild-emoji
484
490
  def delete_emoji(token, server_id, emoji_id, reason = nil)
485
491
  Discordrb::API.request(
486
492
  :guilds_sid_emojis_eid,
@@ -493,6 +499,7 @@ module Discordrb::API::Server
493
499
  end
494
500
 
495
501
  # Available voice regions for this server
502
+ # https://discord.com/developers/docs/resources/guild#get-guild-voice-regions
496
503
  def regions(token, server_id)
497
504
  Discordrb::API.request(
498
505
  :guilds_sid_regions,
@@ -504,7 +511,7 @@ module Discordrb::API::Server
504
511
  end
505
512
 
506
513
  # Get server webhooks
507
- # https://discordapp.com/developers/docs/resources/webhook#get-guild-webhooks
514
+ # https://discord.com/developers/docs/resources/webhook#get-guild-webhooks
508
515
  def webhooks(token, server_id)
509
516
  Discordrb::API.request(
510
517
  :guilds_sid_webhooks,
@@ -516,7 +523,7 @@ module Discordrb::API::Server
516
523
  end
517
524
 
518
525
  # 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
526
+ # https://discord.com/developers/docs/resources/guild#add-guild-member
520
527
  def add_member(token, server_id, user_id, access_token, nick = nil, roles = [], mute = false, deaf = false)
521
528
  Discordrb::API.request(
522
529
  :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,
@@ -5,7 +5,7 @@ module Discordrb::API::Webhook
5
5
  module_function
6
6
 
7
7
  # Get a webhook
8
- # https://discordapp.com/developers/docs/resources/webhook#get-webhook
8
+ # https://discord.com/developers/docs/resources/webhook#get-webhook
9
9
  def webhook(token, webhook_id)
10
10
  Discordrb::API.request(
11
11
  :webhooks_wid,
@@ -17,7 +17,7 @@ module Discordrb::API::Webhook
17
17
  end
18
18
 
19
19
  # Get a webhook via webhook token
20
- # https://discordapp.com/developers/docs/resources/webhook#get-webhook-with-token
20
+ # https://discord.com/developers/docs/resources/webhook#get-webhook-with-token
21
21
  def token_webhook(webhook_token, webhook_id)
22
22
  Discordrb::API.request(
23
23
  :webhooks_wid,
@@ -28,7 +28,7 @@ module Discordrb::API::Webhook
28
28
  end
29
29
 
30
30
  # Update a webhook
31
- # https://discordapp.com/developers/docs/resources/webhook#modify-webhook
31
+ # https://discord.com/developers/docs/resources/webhook#modify-webhook
32
32
  def update_webhook(token, webhook_id, data, reason = nil)
33
33
  Discordrb::API.request(
34
34
  :webhooks_wid,
@@ -43,7 +43,7 @@ module Discordrb::API::Webhook
43
43
  end
44
44
 
45
45
  # Update a webhook via webhook token
46
- # https://discordapp.com/developers/docs/resources/webhook#modify-webhook-with-token
46
+ # https://discord.com/developers/docs/resources/webhook#modify-webhook-with-token
47
47
  def token_update_webhook(webhook_token, webhook_id, data, reason = nil)
48
48
  Discordrb::API.request(
49
49
  :webhooks_wid,
@@ -57,7 +57,7 @@ module Discordrb::API::Webhook
57
57
  end
58
58
 
59
59
  # Deletes a webhook
60
- # https://discordapp.com/developers/docs/resources/webhook#delete-webhook
60
+ # https://discord.com/developers/docs/resources/webhook#delete-webhook
61
61
  def delete_webhook(token, webhook_id, reason = nil)
62
62
  Discordrb::API.request(
63
63
  :webhooks_wid,
@@ -70,7 +70,7 @@ module Discordrb::API::Webhook
70
70
  end
71
71
 
72
72
  # Deletes a webhook via webhook token
73
- # https://discordapp.com/developers/docs/resources/webhook#delete-webhook-with-token
73
+ # https://discord.com/developers/docs/resources/webhook#delete-webhook-with-token
74
74
  def token_delete_webhook(webhook_token, webhook_id, reason = nil)
75
75
  Discordrb::API.request(
76
76
  :webhooks_wid,
data/lib/discordrb/api.rb CHANGED
@@ -9,10 +9,10 @@ require 'discordrb/errors'
9
9
  # List of methods representing endpoints in Discord's API
10
10
  module Discordrb::API
11
11
  # The base URL of the Discord REST API.
12
- APIBASE = 'https://discordapp.com/api/v6'.freeze
12
+ APIBASE = 'https://discord.com/api/v6'
13
13
 
14
14
  # The URL of Discord's CDN
15
- CDN_URL = 'https://cdn.discordapp.com'.freeze
15
+ CDN_URL = 'https://cdn.discordapp.com'
16
16
 
17
17
  module_function
18
18
 
@@ -31,12 +31,12 @@ module Discordrb::API
31
31
  @cdn_url || CDN_URL
32
32
  end
33
33
 
34
- # @return [String] the bot name, previously specified using #bot_name=.
34
+ # @return [String] the bot name, previously specified using {.bot_name=}.
35
35
  def bot_name
36
36
  @bot_name
37
37
  end
38
38
 
39
- # Sets the bot name to something.
39
+ # Sets the bot name to something. Used in {.user_agent}. For the bot's username, see {Profile#username=}.
40
40
  def bot_name=(value)
41
41
  @bot_name = value
42
42
  end
@@ -51,7 +51,7 @@ module Discordrb::API
51
51
  # Generate a user agent identifying this requester as discordrb.
52
52
  def user_agent
53
53
  # This particular string is required by the Discord devs.
54
- required = "DiscordBot (https://github.com/meew0/discordrb, v#{Discordrb::VERSION})"
54
+ required = "DiscordBot (https://github.com/shardlab/discordrb, v#{Discordrb::VERSION})"
55
55
  @bot_name ||= ''
56
56
 
57
57
  "#{required} rest-client/#{RestClient::VERSION} #{RUBY_ENGINE}/#{RUBY_VERSION}p#{RUBY_PATCHLEVEL} discordrb/#{Discordrb::VERSION} #{@bot_name}"
@@ -80,7 +80,7 @@ module Discordrb::API
80
80
  def raw_request(type, attributes)
81
81
  RestClient.send(type, *attributes)
82
82
  rescue RestClient::Forbidden => e
83
- # HACK: for #request, dynamically inject restclient's response into NoPermission - this allows us to ratelimit
83
+ # HACK: for #request, dynamically inject restclient's response into NoPermission - this allows us to rate limit
84
84
  noprm = Discordrb::Errors::NoPermission.new
85
85
  noprm.define_singleton_method(:_rc_response) { e.response }
86
86
  raise noprm, "The bot doesn't have the required permission to do this!"
@@ -94,6 +94,9 @@ module Discordrb::API
94
94
  # Add a custom user agent
95
95
  attributes.last[:user_agent] = user_agent if attributes.last.is_a? Hash
96
96
 
97
+ # Specify RateLimit precision
98
+ attributes.last[:x_ratelimit_precision] = 'millisecond' if attributes.last.is_a?(Hash)
99
+
97
100
  # The most recent Discord rate limit requirements require the support of major parameters, where a particular route
98
101
  # and major parameter combination (*not* the HTTP method) uniquely identifies a RL bucket.
99
102
  key = [key, major_parameter].freeze
@@ -149,17 +152,12 @@ module Discordrb::API
149
152
  response
150
153
  end
151
154
 
152
- # Handles premeptive ratelimiting by waiting the given mutex by the difference of the Date header to the
155
+ # Handles pre-emptive rate limiting by waiting the given mutex by the difference of the Date header to the
153
156
  # X-Ratelimit-Reset header, thus making sure we don't get 429'd in any subsequent requests.
154
157
  def handle_preemptive_rl(headers, mutex, key)
155
158
  Discordrb::LOGGER.ratelimit "RL bucket depletion detected! Date: #{headers[:date]} Reset: #{headers[:x_ratelimit_reset]}"
156
-
157
- now = Time.rfc2822(headers[:date])
158
- reset = Time.at(headers[:x_ratelimit_reset].to_i)
159
-
160
- delta = reset - now
161
-
162
- Discordrb::LOGGER.warn("Locking RL mutex (key: #{key}) for #{delta} seconds preemptively")
159
+ delta = headers[:x_ratelimit_reset_after].to_f
160
+ Discordrb::LOGGER.warn("Locking RL mutex (key: #{key}) for #{delta} seconds pre-emptively")
163
161
  sync_wait(delta, mutex)
164
162
  end
165
163
 
@@ -175,7 +173,7 @@ module Discordrb::API
175
173
  Discordrb::LOGGER.ratelimit("Trace (#{reason}):")
176
174
 
177
175
  caller.each do |str|
178
- Discordrb::LOGGER.ratelimit(' ' + str)
176
+ Discordrb::LOGGER.ratelimit(" #{str}")
179
177
  end
180
178
  end
181
179
 
@@ -199,11 +197,26 @@ module Discordrb::API
199
197
  "#{cdn_url}/splashes/#{server_id}/#{splash_id}.#{format}"
200
198
  end
201
199
 
200
+ # Make a banner URL from server and banner IDs
201
+ def banner_url(server_id, banner_id, format = 'webp')
202
+ "#{cdn_url}/banners/#{server_id}/#{banner_id}.#{format}"
203
+ end
204
+
202
205
  # Make an emoji icon URL from emoji ID
203
206
  def emoji_icon_url(emoji_id, format = 'webp')
204
207
  "#{cdn_url}/emojis/#{emoji_id}.#{format}"
205
208
  end
206
209
 
210
+ # Make an asset URL from application and asset IDs
211
+ def asset_url(application_id, asset_id, format = 'webp')
212
+ "#{cdn_url}/app-assets/#{application_id}/#{asset_id}.#{format}"
213
+ end
214
+
215
+ # Make an achievement icon URL from application ID, achievement ID, and icon hash
216
+ def achievement_icon_url(application_id, achievement_id, icon_hash, format = 'webp')
217
+ "#{cdn_url}/app-assets/#{application_id}/achievements/#{achievement_id}/icons/#{icon_hash}.#{format}"
218
+ end
219
+
207
220
  # Login to the server
208
221
  def login(email, password)
209
222
  request(
@@ -290,6 +303,18 @@ module Discordrb::API
290
303
  )
291
304
  end
292
305
 
306
+ # Get the gateway to be used, with additional information for sharding and
307
+ # session start limits
308
+ def gateway_bot(token)
309
+ request(
310
+ :gateway_bot,
311
+ nil,
312
+ :get,
313
+ "#{api_base}/gateway/bot",
314
+ Authorization: token
315
+ )
316
+ end
317
+
293
318
  # Validate a token (this request will fail if the token is invalid)
294
319
  def validate_token(token)
295
320
  request(
@@ -43,7 +43,6 @@ module Discordrb
43
43
  dummy_handler = EventContainer.handler_class(@type).new(@attributes, @bot)
44
44
  return [nil, nil] unless event.instance_of?(@type) && dummy_handler.matches?(event)
45
45
 
46
- should_delete = nil
47
46
  should_delete = true if (@block && @block.call(event) != false) || !@block
48
47
 
49
48
  [@key, should_delete]