lib_discord 0.1.3 → 1.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (77) hide show
  1. checksums.yaml +4 -4
  2. data/CONTRIBUTING.md +88 -0
  3. data/README.md +40 -67
  4. data/lib/lib_discord/client.rb +2667 -138
  5. data/lib/lib_discord/formatter.rb +108 -0
  6. data/lib/lib_discord/maps.rb +730 -0
  7. data/lib/lib_discord/permissions.rb +84 -0
  8. data/lib/lib_discord/urls.rb +9 -15
  9. data/lib/lib_discord/version.rb +1 -4
  10. data/lib/lib_discord.rb +3 -5
  11. metadata +12 -120
  12. data/CHANGELOG.md +0 -152
  13. data/lib/lib_discord/application.rb +0 -43
  14. data/lib/lib_discord/application_command.rb +0 -341
  15. data/lib/lib_discord/application_role_connection_metadata.rb +0 -52
  16. data/lib/lib_discord/audit_log.rb +0 -36
  17. data/lib/lib_discord/auto_moderation.rb +0 -106
  18. data/lib/lib_discord/channel.rb +0 -716
  19. data/lib/lib_discord/emoji.rb +0 -106
  20. data/lib/lib_discord/errors.rb +0 -31
  21. data/lib/lib_discord/guild.rb +0 -830
  22. data/lib/lib_discord/guild_scheduled_event.rb +0 -133
  23. data/lib/lib_discord/guild_template.rb +0 -128
  24. data/lib/lib_discord/interaction.rb +0 -163
  25. data/lib/lib_discord/invite.rb +0 -47
  26. data/lib/lib_discord/mappers/application_command_option_types.rb +0 -22
  27. data/lib/lib_discord/mappers/application_command_permission_types.rb +0 -14
  28. data/lib/lib_discord/mappers/application_command_types.rb +0 -14
  29. data/lib/lib_discord/mappers/application_integration_types.rb +0 -13
  30. data/lib/lib_discord/mappers/application_role_connection_metadata_types.rb +0 -19
  31. data/lib/lib_discord/mappers/audit_log_events.rb +0 -67
  32. data/lib/lib_discord/mappers/auto_moderation_action_types.rb +0 -14
  33. data/lib/lib_discord/mappers/auto_moderation_event_types.rb +0 -12
  34. data/lib/lib_discord/mappers/auto_moderation_keyword_preset_types.rb +0 -14
  35. data/lib/lib_discord/mappers/auto_moderation_trigger_types.rb +0 -15
  36. data/lib/lib_discord/mappers/channel_forum_layout_types.rb +0 -14
  37. data/lib/lib_discord/mappers/channel_message_activity_types.rb +0 -15
  38. data/lib/lib_discord/mappers/channel_message_types.rb +0 -42
  39. data/lib/lib_discord/mappers/channel_sort_order_types.rb +0 -13
  40. data/lib/lib_discord/mappers/channel_types.rb +0 -24
  41. data/lib/lib_discord/mappers/channel_video_quality_modes.rb +0 -13
  42. data/lib/lib_discord/mappers/guild_default_message_notification_levels.rb +0 -13
  43. data/lib/lib_discord/mappers/guild_explicit_content_filter_levels.rb +0 -14
  44. data/lib/lib_discord/mappers/guild_integration_expire_behaviors.rb +0 -13
  45. data/lib/lib_discord/mappers/guild_mfa_levels.rb +0 -13
  46. data/lib/lib_discord/mappers/guild_nsfw_levels.rb +0 -15
  47. data/lib/lib_discord/mappers/guild_onboarding_modes.rb +0 -13
  48. data/lib/lib_discord/mappers/guild_premium_tiers.rb +0 -15
  49. data/lib/lib_discord/mappers/guild_prompt_types.rb +0 -13
  50. data/lib/lib_discord/mappers/guild_scheduled_event_entity_types.rb +0 -14
  51. data/lib/lib_discord/mappers/guild_scheduled_event_privacy_levels.rb +0 -12
  52. data/lib/lib_discord/mappers/guild_scheduled_event_statuses.rb +0 -15
  53. data/lib/lib_discord/mappers/guild_verification_levels.rb +0 -16
  54. data/lib/lib_discord/mappers/interaction_callback_types.rb +0 -19
  55. data/lib/lib_discord/mappers/interaction_context_types.rb +0 -14
  56. data/lib/lib_discord/mappers/interaction_types.rb +0 -16
  57. data/lib/lib_discord/mappers/invite_target_types.rb +0 -13
  58. data/lib/lib_discord/mappers/message_component_button_styles.rb +0 -16
  59. data/lib/lib_discord/mappers/message_component_text_input_styles.rb +0 -13
  60. data/lib/lib_discord/mappers/message_component_types.rb +0 -19
  61. data/lib/lib_discord/mappers/poll_layout_types.rb +0 -12
  62. data/lib/lib_discord/mappers/stage_instance_privacy_levels.rb +0 -13
  63. data/lib/lib_discord/mappers/sticker_format_types.rb +0 -15
  64. data/lib/lib_discord/mappers/sticker_types.rb +0 -13
  65. data/lib/lib_discord/mappers/user_premium_types.rb +0 -15
  66. data/lib/lib_discord/mappers/user_visibility_types.rb +0 -13
  67. data/lib/lib_discord/mappers/webhooks_types.rb +0 -14
  68. data/lib/lib_discord/mappers.rb +0 -87
  69. data/lib/lib_discord/poll.rb +0 -62
  70. data/lib/lib_discord/resource.rb +0 -133
  71. data/lib/lib_discord/response.rb +0 -43
  72. data/lib/lib_discord/stage_instance.rb +0 -79
  73. data/lib/lib_discord/sticker.rb +0 -132
  74. data/lib/lib_discord/types.rb +0 -47
  75. data/lib/lib_discord/user.rb +0 -174
  76. data/lib/lib_discord/voice.rb +0 -29
  77. data/lib/lib_discord/webhook.rb +0 -299
@@ -1,209 +1,2738 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "dry-container"
4
3
  require "logger"
4
+ require "net/http" # includes URI
5
5
 
6
- require "lib_discord/application"
7
- require "lib_discord/application_command"
8
- require "lib_discord/application_role_connection_metadata"
9
- require "lib_discord/audit_log"
10
- require "lib_discord/auto_moderation"
11
- require "lib_discord/channel"
12
- require "lib_discord/emoji"
13
- require "lib_discord/errors"
14
- require "lib_discord/guild"
15
- require "lib_discord/guild_scheduled_event"
16
- require "lib_discord/guild_template"
17
- require "lib_discord/interaction"
18
- require "lib_discord/invite"
19
- require "lib_discord/poll"
20
- require "lib_discord/stage_instance"
21
- require "lib_discord/sticker"
22
- require "lib_discord/types"
23
6
  require "lib_discord/urls"
24
- require "lib_discord/user"
25
7
  require "lib_discord/version"
26
- require "lib_discord/voice"
27
- require "lib_discord/webhook"
28
8
 
29
9
  module LibDiscord
30
10
  ##
31
- # This class is the entry point in utilizing +lib_discord+ to access
32
- # Discord's API. Initialize a client and cache it for as long as you need to
33
- # make requests to Discord.
11
+ # @!method self.client(auth = nil, user_agent: "LibDiscord (#{LibDiscord::PROJECT_URL}, #{LibDiscord.version})", logger: nil)
12
+ #
13
+ # @param (see Client#initialize)
14
+ # @return [Client]
15
+ #
16
+ # @see Client#initialize
17
+ def self.client(*, **) = Client.new(*, **)
18
+
19
+ ##
20
+ # You will mainly be interacting with instances of this class when using
21
+ # +lib_discord+ to access Discord's web API. Initialize a client and cache it
22
+ # for as long as you need to make requests to Discord using a given
23
+ # authorization header.
34
24
  #
35
25
  # require "lib_discord"
36
26
  # client = LibDiscord::Client.new("Bot my.amazing.token")
37
27
  class Client
38
28
  ##
39
- # Initialize a +LibDiscord::Client+ for making requests to Discord's
40
- # RESTful web API.
41
- #
42
- # @param auth_header [#to_s] Authorization header to be used in
29
+ # @param auth [String] Authorization header value to be used in
43
30
  # communication with Discord. In the format +Bot <token>+ or +Bearer
44
- # <token>+.
45
- # @param base_url [#to_s] Base URL to use in requests to Discord.
46
- # @param user_agent [#to_s] User-Agent header to use in requests to
31
+ # <token>+. If you intend only to make requests to unauthenticated
32
+ # endpoints, +auth+ is not necessary.
33
+ # @param user_agent [String] User-Agent header value to use in requests to
47
34
  # Discord.
48
- # @param logger [Logger] Logger to use for output messages. If not
49
- # provided, a basic INFO-level +$stdout+ logger is created for internal use
50
- # ( +l = Logger.new($stdout); l.level = :info+ )
51
- #
35
+ # @param logger [#debug, #info, #warn, #error, #fatal] Logger to use for
36
+ # output messages. If not provided, a basic INFO-level +$stdout+ logger is
37
+ # created for internal use ( +l = Logger.new($stdout); l.level = :info+
38
+ # ). *CAUTION*: a +DEBUG+ level logger in production will leak sensitive
39
+ # data including authorization headers.
52
40
  # @return [self]
53
41
  #
54
- # @raise [ConstraintError] if parameters for +auth_header+,
55
- # +base_url+, or +user_agent+ do not respond to #to_s.
56
- # @raise [ConstraintError] if the parameter for +logger+ is not
57
- # an instance of Logger, or an instance that inherits from Logger.
58
- #
59
42
  # @example hook in your own logger and app-specific user-agent
60
43
  # client = LibDiscord::Client.new(
61
44
  # "Bot my.token",
62
45
  # user_agent: "MyApp (https://example.myapp.com, 1.2.3)",
63
46
  # logger: my_logger
64
47
  # )
65
- # @example I don't want any messages going to +stdout+.
48
+ # @example Suppress all +stdout+ logger output.
66
49
  # client = LibDiscord::Client.new(
67
50
  # "Bot my.token",
68
51
  # logger: Logger.new("/dev/null")
69
52
  # )
53
+ # @example Make a request to a public endpoint.
54
+ # client = LibDiscord::Client.new
55
+ # client.get_gateway # => LibDiscord::Response
70
56
  #
71
57
  # @see https://discord.com/developers/docs/reference#authentication Discord
72
58
  # documentation "Authentication"
73
59
  # @see https://discord.com/developers/docs/reference#user-agent Discord
74
60
  # documentation "User Agent"
75
61
  def initialize(
76
- auth_header,
77
- base_url: "https://discord.com/api/v10",
62
+ auth = nil,
78
63
  user_agent: "LibDiscord (#{LibDiscord::PROJECT_URL}, #{LibDiscord.version})",
79
64
  logger: nil
80
65
  )
81
- auth_header = Types::Coercible::String[auth_header]
82
- base_url = Types::Coercible::String[base_url]
83
- user_agent = Types::Coercible::String[user_agent]
66
+ @default_headers = {
67
+ "User-Agent" => user_agent,
68
+ "Authorization" => auth
69
+ }.compact
84
70
 
85
- unless logger
86
- logger = Logger.new($stdout)
87
- logger.level = :info
71
+ @logger = logger
72
+ unless @logger
73
+ @logger = Logger.new($stdout)
74
+ @logger.level = :info
88
75
  end
76
+ end
89
77
 
90
- logger = Types::Logger[logger]
78
+ # @!macro [new] pQuery
79
+ # @param query [Object] HTTP query parameters. +query+ is formatted via
80
+ # +URI.encode_www_form()+.
81
+ # @!macro [new] pBody
82
+ # @param body [#to_json] Request body
83
+ # @!macro [new] rResponse
84
+ # @return [Response]
91
85
 
92
- @container = Dry::Container.new
86
+ ### Interaction {{{
93
87
 
94
- @container.register("application") do
95
- Application.new(auth_header, base_url, user_agent, logger)
96
- end
88
+ ##
89
+ # @param interaction_id [#to_s] Interaction ID
90
+ # @param interaction_token [#to_s] Interaction Token
91
+ # @macro pBody
92
+ # @macro rResponse
93
+ #
94
+ # @see https://discord.com/developers/docs/interactions/receiving-and-responding#create-interaction-response
95
+ # Discord documentation "Create Interaction Response"
96
+ def create_interaction_response(interaction_id, interaction_token, body)
97
+ json_request(:post, discord("/interactions/#{interaction_id}/#{interaction_token}/callback"), body:)
98
+ end
97
99
 
98
- @container.register("application_command") do
99
- ApplicationCommand.new(auth_header, base_url, user_agent, logger)
100
- end
100
+ ##
101
+ # @param application_id [#to_s] Application ID
102
+ # @param interaction_token [#to_s] Interaction Token
103
+ # @macro rResponse
104
+ #
105
+ # @see https://discord.com/developers/docs/interactions/receiving-and-responding#get-original-interaction-response
106
+ # Discord documentation "Get Original Interaction Response"
107
+ def get_original_interaction_response(application_id, interaction_token)
108
+ json_request(:get, discord("/webhooks/#{application_id}/#{interaction_token}/messages/@original"))
109
+ end
101
110
 
102
- @container.register("application_role_connection_metadata") do
103
- ApplicationRoleConnectionMetadata.new(
104
- auth_header,
105
- base_url,
106
- user_agent,
107
- logger
108
- )
109
- end
111
+ ##
112
+ # @param application_id [#to_s] Application ID
113
+ # @param interaction_token [#to_s] Interaction Token
114
+ # @macro pBody
115
+ # @macro rResponse
116
+ #
117
+ # @see https://discord.com/developers/docs/interactions/receiving-and-responding#edit-original-interaction-response
118
+ # Discord documentation "Edit Original Interaction Response"
119
+ def edit_original_interaction_response(application_id, interaction_token, body)
120
+ json_request(:patch, discord("/webhooks/#{application_id}/#{interaction_token}/messages/@original"), body:)
121
+ end
110
122
 
111
- @container.register("audit_log") do
112
- AuditLog.new(auth_header, base_url, user_agent, logger)
113
- end
123
+ ##
124
+ # @param application_id [#to_s] Application ID
125
+ # @param interaction_token [#to_s] Interaction Token
126
+ # @macro rResponse
127
+ #
128
+ # @see https://discord.com/developers/docs/interactions/receiving-and-responding#delete-original-interaction-response
129
+ # Discord documentation "Delete Original Interaction Response"
130
+ def delete_original_interaction_response(application_id, interaction_token)
131
+ json_request(:delete, discord("/webhooks/#{application_id}/#{interaction_token}/messages/@original"))
132
+ end
114
133
 
115
- @container.register("auto_moderation") do
116
- AutoModeration.new(auth_header, base_url, user_agent, logger)
117
- end
134
+ ##
135
+ # @param application_id [#to_s] Application ID
136
+ # @param interaction_token [#to_s] Interaction Token
137
+ # @macro pBody
138
+ # @macro rResponse
139
+ #
140
+ # @see https://discord.com/developers/docs/interactions/receiving-and-responding#create-followup-message
141
+ # Discord documentation "Create Followup Message"
142
+ def create_followup_message(application_id, interaction_token, body)
143
+ json_request(:post, discord("/webhooks/#{application_id}/#{interaction_token}"), body:)
144
+ end
118
145
 
119
- @container.register("channel") do
120
- Channel.new(auth_header, base_url, user_agent, logger)
121
- end
146
+ ##
147
+ # @param application_id [#to_s] Application ID
148
+ # @param interaction_token [#to_s] Interaction Token
149
+ # @param message_id [#to_s] Message ID
150
+ # @macro rResponse
151
+ #
152
+ # @see https://discord.com/developers/docs/interactions/receiving-and-responding#get-followup-message
153
+ # Discord documentation "Get Followup Message"
154
+ def get_followup_message(application_id, interaction_token, message_id)
155
+ json_request(:get, discord("/webhooks/#{application_id}/#{interaction_token}/messages/#{message_id}"))
156
+ end
122
157
 
123
- @container.register("emoji") do
124
- Emoji.new(auth_header, base_url, user_agent, logger)
125
- end
158
+ ##
159
+ # @param application_id [#to_s] Application ID
160
+ # @param interaction_token [#to_s] Interaction Token
161
+ # @param message_id [#to_s] Message ID
162
+ # @macro pBody
163
+ # @macro rResponse
164
+ #
165
+ # @see https://discord.com/developers/docs/interactions/receiving-and-responding#edit-followup-message
166
+ # Discord documentation "Edit Followup Message"
167
+ def edit_followup_message(application_id, interaction_token, message_id, body)
168
+ json_request(:patch, discord("/webhooks/#{application_id}/#{interaction_token}/messages/#{message_id}"), body:)
169
+ end
126
170
 
127
- @container.register("guild") do
128
- Guild.new(auth_header, base_url, user_agent, logger)
129
- end
171
+ ##
172
+ # @param application_id [#to_s] Application ID
173
+ # @param interaction_token [#to_s] Interaction Token
174
+ # @param message_id [#to_s] Message ID
175
+ # @macro rResponse
176
+ #
177
+ # @see https://discord.com/developers/docs/interactions/receiving-and-responding#delete-followup-message
178
+ # Discord documentation "Delete Followup Message"
179
+ def delete_followup_message(application_id, interaction_token, message_id)
180
+ json_request(:delete, discord("/webhooks/#{application_id}/#{interaction_token}/messages/#{message_id}"))
181
+ end
130
182
 
131
- @container.register("guild_scheduled_event") do
132
- GuildScheduledEvent.new(auth_header, base_url, user_agent, logger)
133
- end
183
+ ### }}} Interaction
134
184
 
135
- @container.register("guild_template") do
136
- GuildTemplate.new(auth_header, base_url, user_agent, logger)
137
- end
185
+ ### Application Command {{{
138
186
 
139
- @container.register("interaction") do
140
- Interaction.new(auth_header, base_url, user_agent, logger)
141
- end
187
+ ##
188
+ # @param application_id [#to_s] Application ID
189
+ # @macro pQuery
190
+ # @macro rResponse
191
+ #
192
+ # @see https://discord.com/developers/docs/interactions/application-commands#get-global-application-commands
193
+ # Discord documentation "Get Global Application Commands"
194
+ def get_global_application_commands(application_id, query = {})
195
+ json_request(:get, discord("/applications/#{application_id}/commands"), query:)
196
+ end
142
197
 
143
- @container.register("invite") do
144
- Invite.new(auth_header, base_url, user_agent, logger)
145
- end
198
+ ##
199
+ # @param application_id [#to_s] Application ID
200
+ # @macro pBody
201
+ # @macro rResponse
202
+ #
203
+ # @see https://discord.com/developers/docs/interactions/application-commands#create-global-application-command
204
+ # Discord documentation "Create Global Application Command"
205
+ def create_global_application_command(application_id, body)
206
+ json_request(:post, discord("/applications/#{application_id}/commands"), body:)
207
+ end
146
208
 
147
- @container.register("poll") do
148
- Poll.new(auth_header, base_url, user_agent, logger)
149
- end
209
+ ##
210
+ # @param application_id [#to_s] Application ID
211
+ # @param command_id [#to_s] Command ID
212
+ # @macro rResponse
213
+ #
214
+ # @see https://discord.com/developers/docs/interactions/application-commands#get-global-application-command
215
+ # Discord documentation "Get Global Application Command"
216
+ def get_global_application_command(application_id, command_id)
217
+ json_request(:get, discord("/applications/#{application_id}/commands/#{command_id}"))
218
+ end
150
219
 
151
- @container.register("stage_instance") do
152
- StageInstance.new(auth_header, base_url, user_agent, logger)
153
- end
220
+ ##
221
+ # @param application_id [#to_s] Application ID
222
+ # @param command_id [#to_s] Command ID
223
+ # @macro pBody
224
+ # @macro rResponse
225
+ #
226
+ # @see https://discord.com/developers/docs/interactions/application-commands#edit-global-application-command
227
+ # Discord documentation "Edit Global Application Command"
228
+ def edit_global_application_command(application_id, command_id, body)
229
+ json_request(:patch, discord("/applications/#{application_id}/commands/#{command_id}"), body:)
230
+ end
154
231
 
155
- @container.register("sticker") do
156
- Sticker.new(auth_header, base_url, user_agent, logger)
157
- end
232
+ ##
233
+ # @param application_id [#to_s] Application ID
234
+ # @param command_id [#to_s] Command ID
235
+ # @macro rResponse
236
+ #
237
+ # @see https://discord.com/developers/docs/interactions/application-commands#delete-global-application-command
238
+ # Discord documentation "Delete Global Application Command"
239
+ def delete_global_application_command(application_id, command_id)
240
+ json_request(:delete, discord("/applications/#{application_id}/commands/#{command_id}"))
241
+ end
158
242
 
159
- @container.register("user") do
160
- User.new(auth_header, base_url, user_agent, logger)
161
- end
243
+ ##
244
+ # @param application_id [#to_s] Application ID
245
+ # @macro pBody
246
+ # @macro rResponse
247
+ #
248
+ # @see https://discord.com/developers/docs/interactions/application-commands#bulk-overwrite-global-application-commands
249
+ # Discord documentation "Bulk Overwrite Global Application Commands"
250
+ def bulk_overwrite_global_application_commands(application_id, body)
251
+ json_request(:put, discord("/applications/#{application_id}/commands"), body:)
252
+ end
162
253
 
163
- @container.register("voice") do
164
- Voice.new(auth_header, base_url, user_agent, logger)
165
- end
254
+ ##
255
+ # @param application_id [#to_s] Application ID
256
+ # @param guild_id [#to_s] Guild ID
257
+ # @macro pQuery
258
+ # @macro rResponse
259
+ #
260
+ # @see https://discord.com/developers/docs/interactions/application-commands#get-guild-application-commands
261
+ # Discord documentation "Get Guild Application Commands"
262
+ def get_guild_application_commands(application_id, guild_id, query = {})
263
+ json_request(:get, discord("/applications/#{application_id}/guilds/#{guild_id}/commands"), query:)
264
+ end
166
265
 
167
- @container.register("webhook") do
168
- Webhook.new(auth_header, base_url, user_agent, logger)
169
- end
170
- rescue Dry::Types::ConstraintError => e
171
- raise ConstraintError.new(e.result, e.input)
266
+ ##
267
+ # @param application_id [#to_s] Application ID
268
+ # @param guild_id [#to_s] Guild ID
269
+ # @macro pBody
270
+ # @macro rResponse
271
+ #
272
+ # @see https://discord.com/developers/docs/interactions/application-commands#create-guild-application-command
273
+ # Discord documentation "Create Guild Application Command"
274
+ def create_guild_application_command(application_id, guild_id, body)
275
+ json_request(:post, discord("/applications/#{application_id}/guilds/#{guild_id}/commands"), body:)
276
+ end
277
+
278
+ ##
279
+ # @param application_id [#to_s] Application ID
280
+ # @param guild_id [#to_s] Guild ID
281
+ # @param command_id [#to_s] Command ID
282
+ # @macro rResponse
283
+ #
284
+ # @see https://discord.com/developers/docs/interactions/application-commands#get-guild-application-command
285
+ # Discord documentation "Get Guild Application Command"
286
+ def get_guild_application_command(application_id, guild_id, command_id)
287
+ json_request(:get, discord("/applications/#{application_id}/guilds/#{guild_id}/commands/#{command_id}"))
288
+ end
289
+
290
+ ##
291
+ # @param application_id [#to_s] Application ID
292
+ # @param guild_id [#to_s] Guild ID
293
+ # @param command_id [#to_s] Command ID
294
+ # @macro pBody
295
+ # @macro rResponse
296
+ #
297
+ # @see https://discord.com/developers/docs/interactions/application-commands#edit-guild-application-command
298
+ # Discord documentation "Edit Guild Application Command"
299
+ def edit_guild_application_command(application_id, guild_id, command_id, body)
300
+ json_request(:patch, discord("/applications/#{application_id}/guilds/#{guild_id}/commands/#{command_id}"), body:)
301
+ end
302
+
303
+ ##
304
+ # @param application_id [#to_s] Application ID
305
+ # @param guild_id [#to_s] Guild ID
306
+ # @param command_id [#to_s] Command ID
307
+ # @macro rResponse
308
+ #
309
+ # @see https://discord.com/developers/docs/interactions/application-commands#delete-guild-application-command
310
+ # Discord documentation "Delete Guild Application Command"
311
+ def delete_guild_application_command(application_id, guild_id, command_id)
312
+ json_request(:delete, discord("/applications/#{application_id}/guilds/#{guild_id}/commands/#{command_id}"))
172
313
  end
173
314
 
174
315
  ##
175
- # Get a Resource for making Discord API requests.
316
+ # @param application_id [#to_s] Application ID
317
+ # @param guild_id [#to_s] Guild ID
318
+ # @macro pBody
319
+ # @macro rResponse
176
320
  #
177
- # @param resource [String] Resource key. see {#keys} for available values.
321
+ # @see https://discord.com/developers/docs/interactions/application-commands#bulk-overwrite-guild-application-commands
322
+ # Discord documentation "Bulk Overwrite Guild Application Commands"
323
+ def bulk_overwrite_guild_application_commands(application_id, guild_id, body)
324
+ json_request(:put, discord("/applications/#{application_id}/guilds/#{guild_id}/commands"), body:)
325
+ end
326
+
327
+ ##
328
+ # @param application_id [#to_s] Application ID
329
+ # @param guild_id [#to_s] Guild ID
330
+ # @macro rResponse
178
331
  #
179
- # @return Resource
332
+ # @see https://discord.com/developers/docs/interactions/application-commands#get-guild-application-command-permissions
333
+ # Discord documentation "Get Guild Application Command Permissions"
334
+ def get_guild_application_command_permissions(application_id, guild_id)
335
+ json_request(:get, discord("/applications/#{application_id}/guilds/#{guild_id}/commands/permissions"))
336
+ end
337
+
338
+ ##
339
+ # @param application_id [#to_s] Application ID
340
+ # @param guild_id [#to_s] Guild ID
341
+ # @param command_id [#to_s] Command ID
342
+ # @macro rResponse
180
343
  #
181
- # @raise [KeyError] if no resource exists for a given key
344
+ # @see https://discord.com/developers/docs/interactions/application-commands#get-application-command-permissions
345
+ # Discord documentation "Get Application Command Permissions"
346
+ def get_application_command_permissions(application_id, guild_id, command_id)
347
+ json_request(:get, discord("/applications/#{application_id}/guilds/#{guild_id}/commands/#{command_id}/permissions"))
348
+ end
349
+
350
+ ##
351
+ # @param application_id [#to_s] Application ID
352
+ # @param guild_id [#to_s] Guild ID
353
+ # @param command_id [#to_s] Command ID
354
+ # @macro pBody
355
+ # @macro rResponse
182
356
  #
183
- # @example
184
- # client["application"]
185
- # # => #<LibDiscord::Application: ... >
186
- # @example
187
- # client["not.a.valid.key"]
188
- # # => key not found "not.a.valid.key" (LibDiscord::KeyError)
189
- def [](resource)
190
- @container[resource]
191
- rescue Dry::Container::KeyError => e
192
- raise KeyError.new(e.message)
357
+ # @see https://discord.com/developers/docs/interactions/application-commands#edit-application-command-permissions
358
+ # Discord documentation "Edit Application Command Permissions"
359
+ def edit_application_command_permissions(application_id, guild_id, command_id, body)
360
+ json_request(:put, discord("/applications/#{application_id}/guilds/#{guild_id}/commands/#{command_id}/permissions"), body:)
193
361
  end
194
362
 
195
363
  ##
196
- # Get available Resource keys.
364
+ # @deprecated This endpoint has been disabled with
365
+ # {https://discord.com/developers/docs/change-log#updated-command-permissions
366
+ # updates to command permissions (Permissions v2)}. Instead, you can
367
+ # {#edit_application_command_permissions edit each application command
368
+ # permissions} (though you should be careful to handle any potential
369
+ # {https://discord.com/developers/docs/topics/rate-limits rate limits}).
197
370
  #
198
- # @return [Array<String>] a list of resources available
371
+ # @param application_id [#to_s] Application ID
372
+ # @param guild_id [#to_s] Guild ID
373
+ # @macro pBody
374
+ # @macro rResponse
199
375
  #
200
- # @example
201
- # client.keys
202
- # # =>
203
- # # ["application",
204
- # # "guild",
205
- # # "channel",
206
- # # ...]
207
- def keys = @container.keys
208
- end
209
- end
376
+ # @see https://discord.com/developers/docs/interactions/application-commands#batch-edit-application-command-permissions
377
+ # Discord documentation "Batch Edit Application Command Permissions"
378
+ def batch_edit_application_command_permissions(application_id, guild_id, body)
379
+ json_request(:put, discord("/applications/#{application_id}/guilds/#{guild_id}/commands/permissions"), body:)
380
+ end
381
+
382
+ ### }}} Application Command
383
+
384
+ ### Gateway {{{
385
+
386
+ ##
387
+ # @macro rResponse
388
+ #
389
+ # @see https://discord.com/developers/docs/events/gateway#get-gateway
390
+ # Discord documentation "Get Gateway"
391
+ def get_gateway
392
+ json_request(:get, discord("/gateway"))
393
+ end
394
+
395
+ ##
396
+ # @macro rResponse
397
+ #
398
+ # @see https://discord.com/developers/docs/events/gateway#get-gateway-bot
399
+ # Discord documentation "Get Gateway Bot"
400
+ def get_gateway_bot
401
+ json_request(:get, discord("/gateway/bot"))
402
+ end
403
+
404
+ ### }}} Gateway
405
+
406
+ ### Application Role Connection Metadata {{{
407
+
408
+ ##
409
+ # @param application_id [#to_s] Application ID
410
+ # @macro rResponse
411
+ #
412
+ # @see https://discord.com/developers/docs/resources/application-role-connection-metadata#get-application-role-connection-metadata-records
413
+ # Discord documentation "Get Application Role Connection Metadata
414
+ # Records"
415
+ def get_application_role_connection_metadata_records(application_id)
416
+ json_request(:get, discord("/applications/#{application_id}/role-connections/metadata"))
417
+ end
418
+
419
+ ##
420
+ # @param application_id [#to_s] Application ID
421
+ # @macro pBody
422
+ # @macro rResponse
423
+ #
424
+ # @see https://discord.com/developers/docs/resources/application-role-connection-metadata#update-application-role-connection-metadata-records
425
+ # Discord documentation "Update Application Role Connection Metadata
426
+ # Records"
427
+ def update_application_role_connection_metadata_records(application_id, body)
428
+ json_request(:put, discord("/applications/#{application_id}/role-connections/metadata"), body:)
429
+ end
430
+
431
+ ### }}} Application Role Connection Metadata
432
+
433
+ ### Application {{{
434
+
435
+ ##
436
+ # @macro rResponse
437
+ #
438
+ # @see https://discord.com/developers/docs/resources/application#get-current-application
439
+ # Discord documentation "Get Current Application"
440
+ def get_current_application
441
+ json_request(:get, discord("/applications/@me"))
442
+ end
443
+
444
+ ##
445
+ # @macro pBody
446
+ # @macro rResponse
447
+ #
448
+ # @see https://discord.com/developers/docs/resources/application#edit-current-application
449
+ # Discord documentation "Edit Current Application"
450
+ def edit_current_application(body)
451
+ json_request(:patch, discord("/applications/@me"), body:)
452
+ end
453
+
454
+ ##
455
+ # @param application_id [#to_s] Application ID
456
+ # @param instance_id [#to_s] Activity Instance ID
457
+ # @macro rResponse
458
+ #
459
+ # @see https://discord.com/developers/docs/resources/application#get-application-activity-instance
460
+ # Discord documentation "Get Application Activity Instance"
461
+ def get_application_activity_instance(application_id, instance_id)
462
+ json_request(:get, discord("/applications/#{application_id}/activity-instances/#{instance_id}"))
463
+ end
464
+
465
+ ### }}} Application
466
+
467
+ ### Audit Log {{{
468
+
469
+ ##
470
+ # @param guild_id [#to_s] Guild ID
471
+ # @macro pQuery
472
+ # @macro rResponse
473
+ #
474
+ # @see https://discord.com/developers/docs/resources/audit-log#get-guild-audit-log
475
+ # Discord documentation "Get Guild Audit Log"
476
+ def get_guild_audit_log(guild_id, query = {})
477
+ json_request(:get, discord("/guilds/#{guild_id}/audit-logs"), query:)
478
+ end
479
+
480
+ ### }}} Audit Log
481
+
482
+ ### Auto Moderation {{{
483
+
484
+ ##
485
+ # @param guild_id [#to_s] Guild ID
486
+ # @macro rResponse
487
+ #
488
+ # @see https://discord.com/developers/docs/resources/auto-moderation#list-auto-moderation-rules-for-guild
489
+ # Discord documentation "List Auto Moderation Rules for Guild"
490
+ def list_auto_moderation_rules_for_guild(guild_id)
491
+ json_request(:get, discord("/guilds/#{guild_id}/auto-moderation/rules"))
492
+ end
493
+
494
+ ##
495
+ # @param guild_id [#to_s] Guild ID
496
+ # @param auto_moderation_rule_id [#to_s] Auto Moderation Rule ID
497
+ # @macro rResponse
498
+ #
499
+ # @see https://discord.com/developers/docs/resources/auto-moderation#get-auto-moderation-rule
500
+ # Discord documentation "Get Auto Moderation Rule"
501
+ def get_auto_moderation_rule(guild_id, auto_moderation_rule_id)
502
+ json_request(:get, discord("/guilds/#{guild_id}/auto-moderation/rules/#{auto_moderation_rule_id}"))
503
+ end
504
+
505
+ ##
506
+ # @param guild_id [#to_s] Guild ID
507
+ # @macro pBody
508
+ # @macro rResponse
509
+ #
510
+ # @see https://discord.com/developers/docs/resources/auto-moderation#create-auto-moderation-rule
511
+ # Discord documentation "Create Auto Moderation Rule"
512
+ def create_auto_moderation_rule(guild_id, body)
513
+ json_request(:post, discord("/guilds/#{guild_id}/auto-moderation/rules"), body:)
514
+ end
515
+
516
+ ##
517
+ # @param guild_id [#to_s] Guild ID
518
+ # @param auto_moderation_rule_id [#to_s] Auto Moderation Rule ID
519
+ # @macro pBody
520
+ # @macro rResponse
521
+ #
522
+ # @see https://discord.com/developers/docs/resources/auto-moderation#modify-auto-moderation-rule
523
+ # Discord documentation "Modify Auto Moderation Rule"
524
+ def modify_auto_moderation_rule(guild_id, auto_moderation_rule_id, body)
525
+ json_request(:patch, discord("/guilds/#{guild_id}/auto-moderation/rules/#{auto_moderation_rule_id}"), body:)
526
+ end
527
+
528
+ ##
529
+ # @param guild_id [#to_s] Guild ID
530
+ # @param auto_moderation_rule_id [#to_s] Auto Moderation Rule ID
531
+ # @macro rResponse
532
+ #
533
+ # @see https://discord.com/developers/docs/resources/auto-moderation#delete-auto-moderation-rule
534
+ # Discord documentation "Delete Auto Moderation Rule"
535
+ def delete_auto_moderation_rule(guild_id, auto_moderation_rule_id)
536
+ json_request(:delete, discord("/guilds/#{guild_id}/auto-moderation/rules/#{auto_moderation_rule_id}"))
537
+ end
538
+
539
+ ### }}} Auto Moderation
540
+
541
+ ### Channel {{{
542
+
543
+ ##
544
+ # @param channel_id [#to_s] Channel ID
545
+ # @macro rResponse
546
+ #
547
+ # @see https://discord.com/developers/docs/resources/channel#get-channel
548
+ # Discord documentation "Get Channel"
549
+ def get_channel(channel_id)
550
+ json_request(:get, discord("/channels/#{channel_id}"))
551
+ end
552
+
553
+ ##
554
+ # @param channel_id [#to_s] Channel ID
555
+ # @macro pBody
556
+ # @macro rResponse
557
+ #
558
+ # @see https://discord.com/developers/docs/resources/channel#modify-channel
559
+ # Discord documentation "Modify Channel"
560
+ def modify_channel(channel_id, body)
561
+ json_request(:patch, discord("/channels/#{channel_id}"), body:)
562
+ end
563
+
564
+ ##
565
+ # @param channel_id [#to_s] Channel ID
566
+ # @macro rResponse
567
+ #
568
+ # @see https://discord.com/developers/docs/resources/channel#deleteclose-channel
569
+ # Discord documentation "Delete/Close Channel"
570
+ def delete_channel(channel_id)
571
+ json_request(:delete, discord("/channels/#{channel_id}"))
572
+ end
573
+
574
+ alias_method :close_channel, :delete_channel
575
+
576
+ ##
577
+ # @param channel_id [#to_s] Channel ID
578
+ # @param overwrite_id [#to_s] Overwrite ID
579
+ # @macro pBody
580
+ #
581
+ # @macro rResponse
582
+ #
583
+ # @see https://discord.com/developers/docs/resources/channel#edit-channel-permissions
584
+ # Discord documentation "Edit Channel Permissions"
585
+ def edit_channel_permissions(channel_id, overwrite_id, body)
586
+ json_request(:put, discord("/channels/#{channel_id}/permissions/#{overwrite_id}"), body:)
587
+ end
588
+
589
+ ##
590
+ # @param channel_id [#to_s] Channel ID
591
+ # @macro rResponse
592
+ #
593
+ # @see https://discord.com/developers/docs/resources/channel#get-channel-invites
594
+ # Discord documentation "Get Channel Invites"
595
+ def get_channel_invites(channel_id)
596
+ json_request(:get, discord("/channels/#{channel_id}/invites"))
597
+ end
598
+
599
+ ##
600
+ # @param channel_id [#to_s] Channel ID
601
+ # @macro pBody
602
+ # @macro rResponse
603
+ #
604
+ # @see https://discord.com/developers/docs/resources/channel#create-channel-invite
605
+ # Discord documentation "Create Channel Invite"
606
+ def create_channel_invite(channel_id, body)
607
+ json_request(:post, discord("/channels/#{channel_id}/invites"), body:)
608
+ end
609
+
610
+ ##
611
+ # @param channel_id [#to_s] Channel ID
612
+ # @param overwrite_id [#to_s] Overwrite ID
613
+ # @macro rResponse
614
+ #
615
+ # @see https://discord.com/developers/docs/resources/channel#delete-channel-permission
616
+ # Discord documentation "Delete Channel Permission"
617
+ def delete_channel_permission(channel_id, overwrite_id)
618
+ json_request(:delete, discord("/channels/#{channel_id}/permissions/#{overwrite_id}"))
619
+ end
620
+
621
+ ##
622
+ # @param channel_id [#to_s] Channel ID
623
+ # @macro pBody
624
+ # @macro rResponse
625
+ #
626
+ # @see https://discord.com/developers/docs/resources/channel#follow-announcement-channel
627
+ # Discord documentation "Follow Announcement Channel"
628
+ def follow_announcement_channel(channel_id, body)
629
+ json_request(:post, discord("/channels/#{channel_id}/followers"), body:)
630
+ end
631
+
632
+ ##
633
+ # @param channel_id [#to_s] Channel ID
634
+ # @macro rResponse
635
+ #
636
+ # @see https://discord.com/developers/docs/resources/channel#trigger-typing-indicator
637
+ # Discord documentation "Trigger Typing Indicator"
638
+ def trigger_typing_indicator(channel_id)
639
+ json_request(:post, discord("/channels/#{channel_id}/typing"))
640
+ end
641
+
642
+ ##
643
+ # @param channel_id [#to_s] Channel ID
644
+ # @macro rResponse
645
+ #
646
+ # @see https://discord.com/developers/docs/resources/channel#get-pinned-messages
647
+ # Discord documentation "Get Pinned Messages"
648
+ def get_pinned_messages(channel_id)
649
+ json_request(:get, discord("/channels/#{channel_id}/pins"))
650
+ end
651
+
652
+ ##
653
+ # @param channel_id [#to_s] Channel ID
654
+ # @param message_id [#to_s] Message ID
655
+ # @macro rResponse
656
+ #
657
+ # @see https://discord.com/developers/docs/resources/channel#pin-message
658
+ # Discord documentation "Pin Message"
659
+ def pin_message(channel_id, message_id)
660
+ json_request(:put, discord("/channels/#{channel_id}/pins/#{message_id}"))
661
+ end
662
+
663
+ ##
664
+ # @param channel_id [#to_s] Channel ID
665
+ # @param message_id [#to_s] Message ID
666
+ # @macro rResponse
667
+ #
668
+ # @see https://discord.com/developers/docs/resources/channel#unpin-message
669
+ # Discord documentation "Unpin Message"
670
+ def unpin_message(channel_id, message_id)
671
+ json_request(:delete, discord("/channels/#{channel_id}/pins/#{message_id}"))
672
+ end
673
+
674
+ ##
675
+ # @param channel_id [#to_s] Channel ID
676
+ # @param user_id [#to_s] User ID
677
+ # @macro pBody
678
+ # @macro rResponse
679
+ #
680
+ # @see https://discord.com/developers/docs/resources/channel#group-dm-add-recipient
681
+ # Discord documentation "Group DM Add Recipient"
682
+ def group_dm_add_recipient(channel_id, user_id, body)
683
+ json_request(:put, discord("/channels/#{channel_id}/recipients/#{user_id}"), body:)
684
+ end
685
+
686
+ ##
687
+ # @param channel_id [#to_s] Channel ID
688
+ # @param user_id [#to_s] User ID
689
+ # @macro rResponse
690
+ #
691
+ # @see https://discord.com/developers/docs/resources/channel#group-dm-remove-recipient
692
+ # Discord documentation "Group DM Remove Recipient"
693
+ def group_dm_remove_recipient(channel_id, user_id)
694
+ json_request(:delete, discord("/channels/#{channel_id}/recipients/#{user_id}"))
695
+ end
696
+
697
+ ##
698
+ # @param channel_id [#to_s] Channel ID
699
+ # @param message_id [#to_s] Message ID
700
+ # @macro pBody
701
+ # @macro rResponse
702
+ #
703
+ # @see https://discord.com/developers/docs/resources/channel#start-thread-from-message
704
+ # Discord documentation "Start Thread from Message"
705
+ def start_thread_from_message(channel_id, message_id, body)
706
+ json_request(:post, discord("/channels/#{channel_id}/messages/#{message_id}/threads"), body:)
707
+ end
708
+
709
+ ##
710
+ # @param channel_id [#to_s] Channel ID
711
+ # @macro pBody
712
+ # @macro rResponse
713
+ #
714
+ # @see https://discord.com/developers/docs/resources/channel#start-thread-without-message
715
+ # Discord documentation "Start Thread without Message"
716
+ def start_thread_without_message(channel_id, body)
717
+ json_request(:post, discord("/channels/#{channel_id}/threads"), body:)
718
+ end
719
+
720
+ ##
721
+ # @param channel_id [#to_s] Channel ID
722
+ # @macro pBody
723
+ # @macro rResponse
724
+ #
725
+ # @see https://discord.com/developers/docs/resources/channel#start-thread-in-forum-or-media-channel
726
+ # Discord documentation "Start Thread in Forum or Media Channel"
727
+ def start_thread_in_forum_or_media_channel(channel_id, body)
728
+ json_request(:post, discord("/channels/#{channel_id}/threads"), body:)
729
+ end
730
+
731
+ ##
732
+ # @param channel_id [#to_s] Channel ID
733
+ # @macro rResponse
734
+ #
735
+ # @see https://discord.com/developers/docs/resources/channel#join-thread
736
+ # Discord documentation "Join Thread"
737
+ def join_thread(channel_id)
738
+ json_request(:put, discord("/channels/#{channel_id}/thread-members/@me"))
739
+ end
740
+
741
+ ##
742
+ # @param channel_id [#to_s] Channel ID
743
+ # @param user_id [#to_s] User ID
744
+ # @macro rResponse
745
+ #
746
+ # @see https://discord.com/developers/docs/resources/channel#add-thread-member
747
+ # Discord documentation "Add Thread Member"
748
+ def add_thread_member(channel_id, user_id)
749
+ json_request(:put, discord("/channels/#{channel_id}/thread-members/#{user_id}"))
750
+ end
751
+
752
+ ##
753
+ # @param channel_id [#to_s] Channel ID
754
+ # @macro rResponse
755
+ #
756
+ # @see https://discord.com/developers/docs/resources/channel#leave-thread
757
+ # Discord documentation "Leave Thread"
758
+ def leave_thread(channel_id)
759
+ json_request(:delete, discord("/channels/#{channel_id}/thread-members/@me"))
760
+ end
761
+
762
+ ##
763
+ # @param channel_id [#to_s] Channel ID
764
+ # @param user_id [#to_s] User ID
765
+ # @macro rResponse
766
+ #
767
+ # @see https://discord.com/developers/docs/resources/channel#remove-thread-member
768
+ # Discord documentation "Remove Thread Member"
769
+ def remove_thread_member(channel_id, user_id)
770
+ json_request(:delete, discord("/channels/#{channel_id}/thread-members/#{user_id}"))
771
+ end
772
+
773
+ ##
774
+ # @param channel_id [#to_s] Channel ID
775
+ # @param user_id [#to_s] User ID
776
+ # @macro pQuery
777
+ # @macro rResponse
778
+ #
779
+ # @see https://discord.com/developers/docs/resources/channel#get-thread-member
780
+ # Discord documentation "Get Thread Member"
781
+ def get_thread_member(channel_id, user_id, query = {})
782
+ json_request(:get, discord("/channels/#{channel_id}/thread-members/#{user_id}"), query:)
783
+ end
784
+
785
+ ##
786
+ # @param channel_id [#to_s] Channel ID
787
+ # @macro pQuery
788
+ # @macro rResponse
789
+ #
790
+ # @see https://discord.com/developers/docs/resources/channel#list-thread-members
791
+ # Discord documentation "List Thread Members"
792
+ def list_thread_members(channel_id, query = {})
793
+ json_request(:get, discord("/channels/#{channel_id}/thread-members"), query:)
794
+ end
795
+
796
+ ##
797
+ # @param channel_id [#to_s] Channel ID
798
+ # @macro pQuery
799
+ #
800
+ # @macro rResponse
801
+ #
802
+ # @see https://discord.com/developers/docs/resources/channel#list-public-archived-threads
803
+ # Discord documentation "List Public Archived Threads"
804
+ def list_public_archived_threads(channel_id, query = {})
805
+ json_request(:get, discord("/channels/#{channel_id}/threads/archived/public"), query:)
806
+ end
807
+
808
+ ##
809
+ # @param channel_id [#to_s] Channel ID
810
+ # @macro pQuery
811
+ # @macro rResponse
812
+ #
813
+ # @see https://discord.com/developers/docs/resources/channel#list-private-archived-threads
814
+ # Discord documentation "List Private Archived Threads"
815
+ def list_private_archived_threads(channel_id, query = {})
816
+ json_request(:get, discord("/channels/#{channel_id}/threads/archived/private"), query:)
817
+ end
818
+
819
+ ##
820
+ # @param channel_id [#to_s] Channel ID
821
+ # @macro pQuery
822
+ # @macro rResponse
823
+ #
824
+ # @see https://discord.com/developers/docs/resources/channel#list-joined-private-archived-threads
825
+ # Discord documentation "List Joined Private Archived Threads"
826
+ def list_joined_private_archived_threads(channel_id, query = {})
827
+ json_request(:get, discord("/channels/#{channel_id}/users/@me/threads/archived/private"), query:)
828
+ end
829
+
830
+ ### }}} Channel
831
+
832
+ ### Emoji {{{
833
+
834
+ ##
835
+ # @param guild_id [#to_s] Guild ID
836
+ # @macro rResponse
837
+ #
838
+ # @see https://discord.com/developers/docs/resources/emoji#list-guild-emojis
839
+ # Discord documentation "List Guild Emojis"
840
+ def list_guild_emojis(guild_id)
841
+ json_request(:get, discord("/guilds/#{guild_id}/emojis"))
842
+ end
843
+
844
+ ##
845
+ # @param guild_id [#to_s] Guild ID
846
+ # @param emoji_id [#to_s] Emoji ID
847
+ # @macro rResponse
848
+ #
849
+ # @see https://discord.com/developers/docs/resources/emoji#get-guild-emoji
850
+ # Discord documentation "Get Guild Emoji"
851
+ def get_guild_emoji(guild_id, emoji_id)
852
+ json_request(:get, discord("/guilds/#{guild_id}/emojis/#{emoji_id}"))
853
+ end
854
+
855
+ ##
856
+ # @param guild_id [#to_s] Guild ID
857
+ # @macro pBody
858
+ # @macro rResponse
859
+ #
860
+ # @see https://discord.com/developers/docs/resources/emoji#create-guild-emoji
861
+ # Discord documentation "Create Guild Emoji"
862
+ def create_guild_emoji(guild_id, body)
863
+ json_request(:post, discord("/guilds/#{guild_id}/emojis"), body:)
864
+ end
865
+
866
+ ##
867
+ # @param guild_id [#to_s] Guild ID
868
+ # @param emoji_id [#to_s] Emoji ID
869
+ # @macro pBody
870
+ # @macro rResponse
871
+ #
872
+ # @see https://discord.com/developers/docs/resources/emoji#modify-guild-emoji
873
+ # Discord documentation "Modify Guild Emoji"
874
+ def modify_guild_emoji(guild_id, emoji_id, body)
875
+ json_request(:patch, discord("/guilds/#{guild_id}/emojis/#{emoji_id}"), body:)
876
+ end
877
+
878
+ ##
879
+ # @param guild_id [#to_s] Guild ID
880
+ # @param emoji_id [#to_s] Emoji ID
881
+ # @macro rResponse
882
+ #
883
+ # @see https://discord.com/developers/docs/resources/emoji#delete-guild-emoji
884
+ # Discord documentation "Delete Guild Emoji"
885
+ def delete_guild_emoji(guild_id, emoji_id)
886
+ json_request(:delete, discord("/guilds/#{guild_id}/emojis/#{emoji_id}"))
887
+ end
888
+
889
+ ##
890
+ # @param application_id [#to_s] Application ID
891
+ # @macro rResponse
892
+ #
893
+ # @see https://discord.com/developers/docs/resources/emoji#list-application-emojis
894
+ # Discord documentation "List Application Emojis"
895
+ def list_application_emojis(application_id)
896
+ json_request(:get, discord("/applications/#{application_id}/emojis"))
897
+ end
898
+
899
+ ##
900
+ # @param application_id [#to_s] Application ID
901
+ # @param emoji_id [#to_s] Emoji ID
902
+ # @macro rResponse
903
+ #
904
+ # @see https://discord.com/developers/docs/resources/emoji#get-application-emoji
905
+ # Discord documentation "Get Application Emoji"
906
+ def get_application_emoji(application_id, emoji_id)
907
+ json_request(:get, discord("/applications/#{application_id}/emojis/#{emoji_id}"))
908
+ end
909
+
910
+ ##
911
+ # @param application_id [#to_s] Application ID
912
+ # @macro pBody
913
+ # @macro rResponse
914
+ #
915
+ # @see https://discord.com/developers/docs/resources/emoji#create-application-emoji
916
+ # Discord documentation "Create Application Emoji"
917
+ def create_application_emoji(application_id, body)
918
+ json_request(:post, discord("/applications/#{application_id}/emojis"), body:)
919
+ end
920
+
921
+ ##
922
+ # @param application_id [#to_s] Application ID
923
+ # @param emoji_id [#to_s] Emoji ID
924
+ # @macro pBody
925
+ # @macro rResponse
926
+ #
927
+ # @see https://discord.com/developers/docs/resources/emoji#modify-application-emoji
928
+ # Discord documentation "Modify Application Emoji"
929
+ def modify_application_emoji(application_id, emoji_id, body)
930
+ json_request(:patch, discord("/applications/#{application_id}/emojis/#{emoji_id}"), body:)
931
+ end
932
+
933
+ ##
934
+ # @param application_id [#to_s] Application ID
935
+ # @param emoji_id [#to_s] Emoji ID
936
+ # @macro rResponse
937
+ #
938
+ # @see https://discord.com/developers/docs/resources/emoji#delete-application-emoji
939
+ # Discord documentation "Delete Application Emoji"
940
+ def delete_application_emoji(application_id, emoji_id)
941
+ json_request(:delete, discord("/applications/#{application_id}/emojis/#{emoji_id}"))
942
+ end
943
+
944
+ ### }}} Emoji
945
+
946
+ ### Entitlement {{{
947
+
948
+ ##
949
+ # @param application_id [#to_s] Application ID
950
+ # @macro rResponse
951
+ #
952
+ # @see https://discord.com/developers/docs/resources/entitlement#list-entitlements
953
+ # Discord documentation "List Entitlements"
954
+ def list_entitlements(application_id)
955
+ json_request(:get, discord("/applications/#{application_id}/entitlements"))
956
+ end
957
+
958
+ ##
959
+ # @param application_id [#to_s] Application ID
960
+ # @param entitlement_id [#to_s] Entitlement ID
961
+ # @macro rResponse
962
+ #
963
+ # @see https://discord.com/developers/docs/resources/entitlement#get-entitlement
964
+ # Discord documentation "Get Entitlement"
965
+ def get_entitlement(application_id, entitlement_id)
966
+ json_request(:get, discord("/applications/#{application_id}/entitlements/#{entitlement_id}"))
967
+ end
968
+
969
+ ##
970
+ # @param application_id [#to_s] Application ID
971
+ # @param entitlement_id [#to_s] Entitlement ID
972
+ # @macro rResponse
973
+ #
974
+ # @see https://discord.com/developers/docs/resources/entitlement#consume-an-entitlement
975
+ # Discord documentation "Consume an Entitlement"
976
+ def consume_entitlement(application_id, entitlement_id)
977
+ json_request(:post, discord("/applications/#{application_id}/entitlements/#{entitlement_id}/consume"))
978
+ end
979
+
980
+ ##
981
+ # @param application_id [#to_s] Application ID
982
+ # @macro rResponse
983
+ #
984
+ # @see https://discord.com/developers/docs/resources/entitlement#create-test-entitlement
985
+ # Discord documentation "Create Test Entitlement"
986
+ def create_test_entitlement(application_id, body)
987
+ json_request(:post, discord("/applications/#{application_id}/entitlements"), body:)
988
+ end
989
+
990
+ ##
991
+ # @param application_id [#to_s] Application ID
992
+ # @param entitlement_id [#to_s] Entitlement ID
993
+ # @macro rResponse
994
+ #
995
+ # @see https://discord.com/developers/docs/resources/entitlement#delete-test-entitlement
996
+ # Discord documentation "Delete Test Entitlement"
997
+ def delete_test_entitlement(application_id, entitlement_id)
998
+ json_request(:delete, discord("/applications/#{application_id}/entitlements/#{entitlement_id}"))
999
+ end
1000
+
1001
+ ### }}} Entitlement
1002
+
1003
+ ### Guild Scheduled Event {{{
1004
+
1005
+ ##
1006
+ # @param guild_id [#to_s] Guild ID
1007
+ # @macro pQuery
1008
+ # @macro rResponse
1009
+ #
1010
+ # @see https://discord.com/developers/docs/resources/guild-scheduled-event#list-scheduled-events-for-guild
1011
+ # Discord documentation "List Scheduled Events for Guild"
1012
+ def list_scheduled_events_for_guild(guild_id, query = {})
1013
+ json_request(:get, discord("/guilds/#{guild_id}/scheduled-events"), query:)
1014
+ end
1015
+
1016
+ ##
1017
+ # @param guild_id [#to_s] Guild ID
1018
+ # @macro pBody
1019
+ # @macro rResponse
1020
+ #
1021
+ # @see https://discord.com/developers/docs/resources/guild-scheduled-event#create-guild-scheduled-event
1022
+ # Discord documentation "Create Guild Scheduled Event"
1023
+ def create_guild_scheduled_event(guild_id, body)
1024
+ json_request(:post, discord("/guilds/#{guild_id}/scheduled-events"), body:)
1025
+ end
1026
+
1027
+ ##
1028
+ # @param guild_id [#to_s] Guild ID
1029
+ # @param guild_scheduled_event_id [#to_s] Guild Scheduled Event ID
1030
+ # @macro pQuery
1031
+ # @macro rResponse
1032
+ #
1033
+ # @see https://discord.com/developers/docs/resources/guild-scheduled-event#get-guild-scheduled-event
1034
+ # Discord documentation "Get Guild Scheduled Event"
1035
+ def get_guild_scheduled_event(guild_id, guild_scheduled_event_id, query = {})
1036
+ json_request(:get, discord("/guilds/#{guild_id}/scheduled-events/#{guild_scheduled_event_id}"), query:)
1037
+ end
1038
+
1039
+ ##
1040
+ # @param guild_id [#to_s] Guild ID
1041
+ # @param guild_scheduled_event_id [#to_s] Guild Scheduled Event ID
1042
+ # @macro pBody
1043
+ # @macro rResponse
1044
+ #
1045
+ # @see https://discord.com/developers/docs/resources/guild-scheduled-event#modify-guild-scheduled-event
1046
+ # Discord documentation "Modify Guild Scheduled Event"
1047
+ def modify_guild_scheduled_event(guild_id, guild_scheduled_event_id, body)
1048
+ json_request(:patch, discord("/guilds/#{guild_id}/scheduled-events/#{guild_scheduled_event_id}"), body:)
1049
+ end
1050
+
1051
+ ##
1052
+ # @param guild_id [#to_s] Guild ID
1053
+ # @param guild_scheduled_event_id [#to_s] Guild Scheduled Event ID
1054
+ # @macro rResponse
1055
+ #
1056
+ # @see https://discord.com/developers/docs/resources/guild-scheduled-event#delete-guild-scheduled-event
1057
+ # Discord documentation "Delete Guild Scheduled Event"
1058
+ def delete_guild_scheduled_event(guild_id, guild_scheduled_event_id)
1059
+ json_request(:delete, discord("/guilds/#{guild_id}/scheduled-events/#{guild_scheduled_event_id}"))
1060
+ end
1061
+
1062
+ ##
1063
+ # @param guild_id [#to_s] Guild ID
1064
+ # @param guild_scheduled_event_id [#to_s] Guild Scheduled Event ID
1065
+ # @macro pQuery
1066
+ # @macro rResponse
1067
+ #
1068
+ # @see https://discord.com/developers/docs/resources/guild-scheduled-event#get-guild-scheduled-event-users
1069
+ # Discord documentation "Get Guild Scheduled Event Users"
1070
+ def get_guild_scheduled_event_users(guild_id, guild_scheduled_event_id, query = {})
1071
+ json_request(:get, discord("/guilds/#{guild_id}/scheduled-events/#{guild_scheduled_event_id}/users"), query:)
1072
+ end
1073
+
1074
+ ### }}} Guild Scheduled Event
1075
+
1076
+ ### Guild Template {{{
1077
+
1078
+ ##
1079
+ # @param template_code [#to_s] Template Code
1080
+ # @macro rResponse
1081
+ #
1082
+ # @see https://discord.com/developers/docs/resources/guild-template#get-guild-template
1083
+ # Discord documentation "Get Guild Template"
1084
+ def get_guild_template(template_code)
1085
+ json_request(:get, discord("/guilds/templates/#{template_code}"))
1086
+ end
1087
+
1088
+ ##
1089
+ # @param template_code [#to_s] Template Code
1090
+ # @macro pBody
1091
+ # @macro rResponse
1092
+ #
1093
+ # @see https://discord.com/developers/docs/resources/guild-template#create-guild-from-guild-template
1094
+ # Discord documentation "Create Guild from Guild Template"
1095
+ def create_guild_from_guild_template(template_code, body)
1096
+ json_request(:post, discord("/guilds/templates/#{template_code}"), body:)
1097
+ end
1098
+
1099
+ ##
1100
+ # @param guild_id [#to_s] Guild ID
1101
+ # @macro rResponse
1102
+ #
1103
+ # @see https://discord.com/developers/docs/resources/guild-template#get-guild-templates
1104
+ # Discord documentation "Get Guild Templates"
1105
+ def get_guild_templates(guild_id)
1106
+ json_request(:get, discord("/guilds/#{guild_id}/templates"))
1107
+ end
1108
+
1109
+ ##
1110
+ # @param guild_id [#to_s] Guild ID
1111
+ # @macro pBody
1112
+ # @macro rResponse
1113
+ #
1114
+ # @see https://discord.com/developers/docs/resources/guild-template#create-guild-template
1115
+ # Discord documentation "Create Guild Template"
1116
+ def create_guild_template(guild_id, body)
1117
+ json_request(:post, discord("/guilds/#{guild_id}/templates"), body:)
1118
+ end
1119
+
1120
+ ##
1121
+ # @param guild_id [#to_s] Guild ID
1122
+ # @param template_code [#to_s] Template Code
1123
+ # @macro rResponse
1124
+ #
1125
+ # @see https://discord.com/developers/docs/resources/guild-template#sync-guild-template
1126
+ # Discord documentation "Sync Guild Template"
1127
+ def sync_guild_template(guild_id, template_code)
1128
+ json_request(:put, discord("/guilds/#{guild_id}/templates/#{template_code}"))
1129
+ end
1130
+
1131
+ ##
1132
+ # @param guild_id [#to_s] Guild ID
1133
+ # @param template_code [#to_s] Template Code
1134
+ # @macro pBody
1135
+ # @macro rResponse
1136
+ #
1137
+ # @see https://discord.com/developers/docs/resources/guild-template#modify-guild-template
1138
+ # Discord documentation "Modify Guild Template"
1139
+ def modify_guild_template(guild_id, template_code, body)
1140
+ json_request(:patch, discord("/guilds/#{guild_id}/templates/#{template_code}"), body:)
1141
+ end
1142
+
1143
+ ##
1144
+ # @param guild_id [#to_s] Guild ID
1145
+ # @param template_code [#to_s] Template Code
1146
+ # @macro rResponse
1147
+ #
1148
+ # @see https://discord.com/developers/docs/resources/guild-template#delete-guild-template
1149
+ # Discord documentation "Delete Guild Template"
1150
+ def delete_guild_template(guild_id, template_code)
1151
+ json_request(:delete, discord("/guilds/#{guild_id}/templates/#{template_code}"))
1152
+ end
1153
+
1154
+ ### }}} Guild Template
1155
+
1156
+ ### Guild {{{
1157
+
1158
+ ##
1159
+ # @macro pBody
1160
+ # @macro rResponse
1161
+ #
1162
+ # @see https://discord.com/developers/docs/resources/guild#create-guild
1163
+ # Discord documentation "Create Guild"
1164
+ def create_guild(body)
1165
+ json_request(:post, discord("/guilds"), body:)
1166
+ end
1167
+
1168
+ ##
1169
+ # @param guild_id [#to_s] Guild ID
1170
+ # @macro pQuery
1171
+ # @macro rResponse
1172
+ #
1173
+ # @see https://discord.com/developers/docs/resources/guild#get-guild
1174
+ # Discord documentation "Get Guild"
1175
+ def get_guild(guild_id, query = {})
1176
+ json_request(:get, discord("/guilds/#{guild_id}"), query:)
1177
+ end
1178
+
1179
+ ##
1180
+ # @param guild_id [#to_s] Guild ID
1181
+ # @macro rResponse
1182
+ #
1183
+ # @see https://discord.com/developers/docs/resources/guild#get-guild-preview
1184
+ # Discord documentation "Get Guild Preview"
1185
+ def get_guild_preview(guild_id)
1186
+ json_request(:get, discord("/guilds/#{guild_id}/preview"))
1187
+ end
1188
+
1189
+ ##
1190
+ # @param guild_id [#to_s] Guild ID
1191
+ # @macro pBody
1192
+ # @macro rResponse
1193
+ #
1194
+ # @see https://discord.com/developers/docs/resources/guild#modify-guild
1195
+ # Discord documentation "Modify Guild"
1196
+ def modify_guild(guild_id, body)
1197
+ json_request(:patch, discord("/guilds/#{guild_id}"), body:)
1198
+ end
1199
+
1200
+ ##
1201
+ # @param guild_id [#to_s] Guild ID
1202
+ # @macro rResponse
1203
+ #
1204
+ # @see https://discord.com/developers/docs/resources/guild#delete-guild
1205
+ # Discord documentation "Delete Guild"
1206
+ def delete_guild(guild_id)
1207
+ json_request(:delete, discord("/guilds/#{guild_id}"))
1208
+ end
1209
+
1210
+ ##
1211
+ # @param guild_id [#to_s] Guild ID
1212
+ # @macro rResponse
1213
+ #
1214
+ # @see https://discord.com/developers/docs/resources/guild#get-guild-channels
1215
+ # Discord documentation "Get Guild Channels"
1216
+ def get_guild_channels(guild_id)
1217
+ json_request(:get, discord("/guilds/#{guild_id}/channels"))
1218
+ end
1219
+
1220
+ ##
1221
+ # @param guild_id [#to_s] Guild ID
1222
+ # @macro pBody
1223
+ # @macro rResponse
1224
+ #
1225
+ # @see https://discord.com/developers/docs/resources/guild#create-guild-channel
1226
+ # Discord documentation "Create Guild Channel"
1227
+ def create_guild_channel(guild_id, body)
1228
+ json_request(:post, discord("/guilds/#{guild_id}/channels"), body:)
1229
+ end
1230
+
1231
+ ##
1232
+ # @param guild_id [#to_s] Guild ID
1233
+ # @macro pBody
1234
+ # @macro rResponse
1235
+ #
1236
+ # @see https://discord.com/developers/docs/resources/guild#modify-guild-channel-positions
1237
+ # Discord documentation "Modify Guild Channel Positions"
1238
+ def modify_guild_channel_positions(guild_id, body)
1239
+ json_request(:patch, discord("/guilds/#{guild_id}/channels"), body:)
1240
+ end
1241
+
1242
+ ##
1243
+ # @param guild_id [#to_s] Guild ID
1244
+ # @macro rResponse
1245
+ #
1246
+ # @see https://discord.com/developers/docs/resources/guild#list-active-guild-threads
1247
+ # Discord documentation "List Active Guild Threads"
1248
+ def list_active_guild_threads(guild_id)
1249
+ json_request(:get, discord("/guilds/#{guild_id}/threads/active"))
1250
+ end
1251
+
1252
+ ##
1253
+ # @param guild_id [#to_s] Guild ID
1254
+ # @param user_id [#to_s] User ID
1255
+ # @macro rResponse
1256
+ #
1257
+ # @see https://discord.com/developers/docs/resources/guild#get-guild-member
1258
+ # Discord documentation "Get Guild Member"
1259
+ def get_guild_member(guild_id, user_id)
1260
+ json_request(:get, discord("/guilds/#{guild_id}/members/#{user_id}"))
1261
+ end
1262
+
1263
+ ##
1264
+ # @param guild_id [#to_s] Guild ID
1265
+ # @macro pQuery
1266
+ # @macro rResponse
1267
+ #
1268
+ # @see https://discord.com/developers/docs/resources/guild#list-guild-members
1269
+ # Discord documentation "List Guild Members"
1270
+ def list_guild_members(guild_id, query = {})
1271
+ json_request(:get, discord("/guilds/#{guild_id}/members"), query:)
1272
+ end
1273
+
1274
+ ##
1275
+ # @param guild_id [#to_s] Guild ID
1276
+ # @macro pQuery
1277
+ # @macro rResponse
1278
+ #
1279
+ # @see https://discord.com/developers/docs/resources/guild#search-guild-members
1280
+ # Discord documentation "Search Guild Members"
1281
+ def search_guild_members(guild_id, query = {})
1282
+ json_request(:get, discord("/guilds/#{guild_id}/members/search"), query:)
1283
+ end
1284
+
1285
+ ##
1286
+ # @param guild_id [#to_s] Guild ID
1287
+ # @param user_id [#to_s] User ID
1288
+ # @macro pBody
1289
+ # @macro rResponse
1290
+ #
1291
+ # @see https://discord.com/developers/docs/resources/guild#add-guild-member
1292
+ # Discord documentation "Add Guild Member"
1293
+ def add_guild_member(guild_id, user_id, body)
1294
+ json_request(:put, discord("/guilds/#{guild_id}/members/#{user_id}"), body:)
1295
+ end
1296
+
1297
+ ##
1298
+ # @param guild_id [#to_s] Guild ID
1299
+ # @param user_id [#to_s] User ID
1300
+ # @macro pBody
1301
+ # @macro rResponse
1302
+ #
1303
+ # @see https://discord.com/developers/docs/resources/guild#modify-guild-member
1304
+ # Discord documentation "Modify Guild Member"
1305
+ def modify_guild_member(guild_id, user_id, body)
1306
+ json_request(:patch, discord("/guilds/#{guild_id}/members/#{user_id}"), body:)
1307
+ end
1308
+
1309
+ ##
1310
+ # @param guild_id [#to_s] Guild ID
1311
+ # @macro pBody
1312
+ # @macro rResponse
1313
+ #
1314
+ # @see https://discord.com/developers/docs/resources/guild#modify-current-member
1315
+ # Discord documentation "Modify Current Member"
1316
+ def modify_current_member(guild_id, body)
1317
+ json_request(:patch, discord("/guilds/#{guild_id}/members/@me"), body:)
1318
+ end
1319
+
1320
+ ##
1321
+ # @deprecated Use {#modify_current_member} instead.
1322
+ #
1323
+ # @param guild_id [#to_s] Guild ID
1324
+ # @macro pBody
1325
+ # @macro rResponse
1326
+ #
1327
+ # @see https://discord.com/developers/docs/resources/guild#modify-current-user-nick
1328
+ # Discord documentation "Modify Current User Nick"
1329
+ def modify_current_user_nick(guild_id, body)
1330
+ json_request(:patch, discord("/guilds/#{guild_id}/members/@me/nick"), body:)
1331
+ end
1332
+
1333
+ ##
1334
+ # @param guild_id [#to_s] Guild ID
1335
+ # @param user_id [#to_s] User ID
1336
+ # @param role_id [#to_s] Role ID
1337
+ # @macro rResponse
1338
+ #
1339
+ # @see https://discord.com/developers/docs/resources/guild#add-guild-member-role
1340
+ # Discord documentation "Add Guild Member Role"
1341
+ def add_guild_member_role(guild_id, user_id, role_id)
1342
+ json_request(:put, discord("/guilds/#{guild_id}/members/#{user_id}/roles/#{role_id}"))
1343
+ end
1344
+
1345
+ ##
1346
+ # @param guild_id [#to_s] Guild ID
1347
+ # @param user_id [#to_s] User ID
1348
+ # @param role_id [#to_s] Role ID
1349
+ # @macro rResponse
1350
+ #
1351
+ # @see https://discord.com/developers/docs/resources/guild#remove-guild-member-role
1352
+ # Discord documentation "Remove Guild Member Role"
1353
+ def remove_guild_member_role(guild_id, user_id, role_id)
1354
+ json_request(:delete, discord("/guilds/#{guild_id}/members/#{user_id}/roles/#{role_id}"))
1355
+ end
1356
+
1357
+ ##
1358
+ # @param guild_id [#to_s] Guild ID
1359
+ # @param user_id [#to_s] User ID
1360
+ # @macro rResponse
1361
+ #
1362
+ # @see https://discord.com/developers/docs/resources/guild#remove-guild-member
1363
+ # Discord documentation "Remove Guild Member"
1364
+ def remove_guild_member(guild_id, user_id)
1365
+ json_request(:delete, discord("/guilds/#{guild_id}/members/#{user_id}"))
1366
+ end
1367
+
1368
+ ##
1369
+ # @param guild_id [#to_s] Guild ID
1370
+ # @macro pQuery
1371
+ # @macro rResponse
1372
+ #
1373
+ # @see https://discord.com/developers/docs/resources/guild#get-guild-bans
1374
+ # Discord documentation "Get Guild Bans"
1375
+ def get_guild_bans(guild_id, query = {})
1376
+ json_request(:get, discord("/guilds/#{guild_id}/bans"), query:)
1377
+ end
1378
+
1379
+ ##
1380
+ # @param guild_id [#to_s] Guild ID
1381
+ # @param user_id [#to_s] User ID
1382
+ # @macro rResponse
1383
+ #
1384
+ # @see https://discord.com/developers/docs/resources/guild#get-guild-ban
1385
+ # Discord documentation "Get Guild Ban"
1386
+ def get_guild_ban(guild_id, user_id)
1387
+ json_request(:get, discord("/guilds/#{guild_id}/bans/#{user_id}"))
1388
+ end
1389
+
1390
+ ##
1391
+ # @param guild_id [#to_s] Guild ID
1392
+ # @param user_id [#to_s] User ID
1393
+ # @macro pBody
1394
+ # @macro rResponse
1395
+ #
1396
+ # @see https://discord.com/developers/docs/resources/guild#create-guild-ban
1397
+ # Discord documentation "Create Guild Ban"
1398
+ def create_guild_ban(guild_id, user_id, body)
1399
+ json_request(:put, discord("/guilds/#{guild_id}/bans/#{user_id}"), body:)
1400
+ end
1401
+
1402
+ ##
1403
+ # @param guild_id [#to_s] Guild ID
1404
+ # @param user_id [#to_s] User ID
1405
+ # @macro rResponse
1406
+ #
1407
+ # @see https://discord.com/developers/docs/resources/guild#remove-guild-ban
1408
+ # Discord documentation "Remove Guild Ban"
1409
+ def remove_guild_ban(guild_id, user_id)
1410
+ json_request(:delete, discord("/guilds/#{guild_id}/bans/#{user_id}"))
1411
+ end
1412
+
1413
+ ##
1414
+ # @param guild_id [#to_s] Guild ID
1415
+ # @macro pBody
1416
+ # @macro rResponse
1417
+ #
1418
+ # @see https://discord.com/developers/docs/resources/guild#bulk-guild-ban
1419
+ # Discord documentation "Bulk Guild Ban"
1420
+ def bulk_guild_ban(guild_id, body)
1421
+ json_request(:post, discord("/guilds/#{guild_id}/bulk-ban"), body:)
1422
+ end
1423
+
1424
+ ##
1425
+ # @param guild_id [#to_s] Guild ID
1426
+ # @macro rResponse
1427
+ #
1428
+ # @see https://discord.com/developers/docs/resources/guild#get-guild-roles
1429
+ # Discord documentation "Get Guild Roles"
1430
+ def get_guild_roles(guild_id)
1431
+ json_request(:get, discord("/guilds/#{guild_id}/roles"))
1432
+ end
1433
+
1434
+ ##
1435
+ # @param guild_id [#to_s] Guild ID
1436
+ # @param role_id [#to_s] Role ID
1437
+ # @macro rResponse
1438
+ #
1439
+ # @see https://discord.com/developers/docs/resources/guild#get-guild-role
1440
+ # Discord documentation "Get Guild Role"
1441
+ def get_guild_role(guild_id, role_id)
1442
+ json_request(:get, discord("/guilds/#{guild_id}/roles/#{role_id}"))
1443
+ end
1444
+
1445
+ ##
1446
+ # @param guild_id [#to_s] Guild ID
1447
+ # @macro pBody
1448
+ # @macro rResponse
1449
+ #
1450
+ # @see https://discord.com/developers/docs/resources/guild#create-guild-role
1451
+ # Discord documentation "Create Guild Role"
1452
+ def create_guild_role(guild_id, body)
1453
+ json_request(:post, discord("/guilds/#{guild_id}/roles"), body:)
1454
+ end
1455
+
1456
+ ##
1457
+ # @param guild_id [#to_s] Guild ID
1458
+ # @macro pBody
1459
+ # @macro rResponse
1460
+ #
1461
+ # @see https://discord.com/developers/docs/resources/guild#modify-guild-role-positions
1462
+ # Discord documentation "Modify Guild Role Positions"
1463
+ def modify_guild_role_positions(guild_id, body)
1464
+ json_request(:patch, discord("/guilds/#{guild_id}/roles"), body:)
1465
+ end
1466
+
1467
+ ##
1468
+ # @param guild_id [#to_s] Guild ID
1469
+ # @param role_id [#to_s] Role ID
1470
+ # @macro pBody
1471
+ # @macro rResponse
1472
+ #
1473
+ # @see https://discord.com/developers/docs/resources/guild#modify-guild-role
1474
+ # Discord documentation "Modify Guild Role"
1475
+ def modify_guild_role(guild_id, role_id, body)
1476
+ json_request(:patch, discord("/guilds/#{guild_id}/roles/#{role_id}"), body:)
1477
+ end
1478
+
1479
+ ##
1480
+ # @param guild_id [#to_s] Guild ID
1481
+ # @macro pBody
1482
+ # @macro rResponse
1483
+ #
1484
+ # @see https://discord.com/developers/docs/resources/guild#modify-guild-mfa-level
1485
+ # Discord documentation "Modify Guild MFA level"
1486
+ def modify_guild_mfa_level(guild_id, body)
1487
+ json_request(:post, discord("/guilds/#{guild_id}/mfa"), body:)
1488
+ end
1489
+
1490
+ ##
1491
+ # @param guild_id [#to_s] Guild ID
1492
+ # @param role_id [#to_s] Role ID
1493
+ # @macro rResponse
1494
+ #
1495
+ # @see https://discord.com/developers/docs/resources/guild#delete-guild-role
1496
+ # Discord documentation "Delete Guild Role"
1497
+ def delete_guild_role(guild_id, role_id)
1498
+ json_request(:delete, discord("/guilds/#{guild_id}/roles/#{role_id}"))
1499
+ end
1500
+
1501
+ ##
1502
+ # @param guild_id [#to_s] Guild ID
1503
+ # @macro pQuery
1504
+ # @macro rResponse
1505
+ #
1506
+ # @see https://discord.com/developers/docs/resources/guild#get-guild-prune-count
1507
+ # Discord documentation "Get Guild Prune Count"
1508
+ def get_guild_prune_count(guild_id, query = {})
1509
+ json_request(:get, discord("/guilds/#{guild_id}/prune"), query:)
1510
+ end
1511
+
1512
+ ##
1513
+ # @param guild_id [#to_s] Guild ID
1514
+ # @macro pBody
1515
+ # @macro rResponse
1516
+ #
1517
+ # @see https://discord.com/developers/docs/resources/guild#begin-guild-prune
1518
+ # Discord documentation "Begin Guild Prune"
1519
+ def begin_guild_prune(guild_id, body)
1520
+ json_request(:post, discord("/guilds/#{guild_id}/prune"), body:)
1521
+ end
1522
+
1523
+ ##
1524
+ # @param guild_id [#to_s] Guild ID
1525
+ # @macro rResponse
1526
+ #
1527
+ # @see https://discord.com/developers/docs/resources/guild#get-guild-voice-regions
1528
+ # Discord documentation "Get Guild Voice Regions"
1529
+ def get_guild_voice_regions(guild_id)
1530
+ json_request(:get, discord("/guilds/#{guild_id}/regions"))
1531
+ end
1532
+
1533
+ ##
1534
+ # @param guild_id [#to_s] Guild ID
1535
+ # @macro rResponse
1536
+ #
1537
+ # @see https://discord.com/developers/docs/resources/guild#get-guild-invites
1538
+ # Discord documentation "Get Guild Invites"
1539
+ def get_guild_invites(guild_id)
1540
+ json_request(:get, discord("/guilds/#{guild_id}/invites"))
1541
+ end
1542
+
1543
+ ##
1544
+ # @param guild_id [#to_s] Guild ID
1545
+ # @macro rResponse
1546
+ #
1547
+ # @see https://discord.com/developers/docs/resources/guild#get-guild-integrations
1548
+ # Discord documentation "Get Guild Integrations"
1549
+ def get_guild_integrations(guild_id)
1550
+ json_request(:get, discord("/guilds/#{guild_id}/integrations"))
1551
+ end
1552
+
1553
+ ##
1554
+ # @param guild_id [#to_s] Guild ID
1555
+ # @param integration_id [#to_s] Integration ID
1556
+ # @macro rResponse
1557
+ #
1558
+ # @see https://discord.com/developers/docs/resources/guild#delete-guild-integration
1559
+ # Discord documentation "Delete Guild Integration"
1560
+ def delete_guild_integration(guild_id, integration_id)
1561
+ json_request(:delete, discord("/guilds/#{guild_id}/integrations/#{integration_id}"))
1562
+ end
1563
+
1564
+ ##
1565
+ # @param guild_id [#to_s] Guild ID
1566
+ # @macro rResponse
1567
+ #
1568
+ # @see https://discord.com/developers/docs/resources/guild#get-guild-widget-settings
1569
+ # Discord documentation "Get Guild Widget Settings"
1570
+ def get_guild_widget_settings(guild_id)
1571
+ json_request(:get, discord("/guilds/#{guild_id}/widget"))
1572
+ end
1573
+
1574
+ ##
1575
+ # @param guild_id [#to_s] Guild ID
1576
+ # @macro pBody
1577
+ # @macro rResponse
1578
+ #
1579
+ # @see https://discord.com/developers/docs/resources/guild#modify-guild-widget
1580
+ # Discord documentation "Modify Guild Widget"
1581
+ def modify_guild_widget(guild_id, body)
1582
+ json_request(:patch, discord("/guilds/#{guild_id}/widget"), body:)
1583
+ end
1584
+
1585
+ ##
1586
+ # @param guild_id [#to_s] Guild ID
1587
+ # @macro rResponse
1588
+ #
1589
+ # @see https://discord.com/developers/docs/resources/guild#get-guild-widget
1590
+ # Discord documentation "Get Guild Widget"
1591
+ def get_guild_widget(guild_id)
1592
+ json_request(:get, discord("/guilds/#{guild_id}/widget.json"))
1593
+ end
1594
+
1595
+ ##
1596
+ # @param guild_id [#to_s] Guild ID
1597
+ # @macro rResponse
1598
+ #
1599
+ # @see https://discord.com/developers/docs/resources/guild#get-guild-vanity-url
1600
+ # Discord documentation "Get Guild Vanity URL"
1601
+ def get_guild_vanity_url(guild_id)
1602
+ json_request(:get, discord("/guilds/#{guild_id}/vanity-url"))
1603
+ end
1604
+
1605
+ ##
1606
+ # @param guild_id [#to_s] Guild ID
1607
+ # @macro pQuery
1608
+ # @macro rResponse
1609
+ #
1610
+ # @see https://discord.com/developers/docs/resources/guild#get-guild-widget-image
1611
+ # Discord documentation "Get Guild Widget Image"
1612
+ def get_guild_widget_image(guild_id, query = {})
1613
+ net_request(:get, discord("/guilds/#{guild_id}/widget.png"), query:)
1614
+ end
1615
+
1616
+ ##
1617
+ # @param guild_id [#to_s] Guild ID
1618
+ # @macro rResponse
1619
+ #
1620
+ # @see https://discord.com/developers/docs/resources/guild#get-guild-welcome-screen
1621
+ # Discord documentation "Get Guild Welcome Screen"
1622
+ def get_guild_welcome_screen(guild_id)
1623
+ json_request(:get, discord("/guilds/#{guild_id}/welcome-screen"))
1624
+ end
1625
+
1626
+ ##
1627
+ # @param guild_id [#to_s] Guild ID
1628
+ # @macro pBody
1629
+ # @macro rResponse
1630
+ #
1631
+ # @see https://discord.com/developers/docs/resources/guild#modify-guild-welcome-screen
1632
+ # Discord documentation "Modify Guild Welcome Screen"
1633
+ def modify_guild_welcome_screen(guild_id, body)
1634
+ json_request(:patch, discord("/guilds/#{guild_id}/welcome-screen"), body:)
1635
+ end
1636
+
1637
+ ##
1638
+ # @param guild_id [#to_s] Guild ID
1639
+ # @macro rResponse
1640
+ #
1641
+ # @see https://discord.com/developers/docs/resources/guild#get-guild-onboarding
1642
+ # Discord documentation "Get Guild Onboarding"
1643
+ def get_guild_onboarding(guild_id)
1644
+ json_request(:get, discord("/guilds/#{guild_id}/onboarding"))
1645
+ end
1646
+
1647
+ ##
1648
+ # @param guild_id [#to_s] Guild ID
1649
+ # @macro pBody
1650
+ # @macro rResponse
1651
+ #
1652
+ # @see https://discord.com/developers/docs/resources/guild#modify-guild-onboarding
1653
+ # Discord documentation "Modify Guild Onboarding"
1654
+ def modify_guild_onboarding(guild_id, body)
1655
+ json_request(:put, discord("/guilds/#{guild_id}/onboarding"), body:)
1656
+ end
1657
+
1658
+ ##
1659
+ # @param guild_id [#to_s] Guild ID
1660
+ # @macro pBody
1661
+ # @macro rResponse
1662
+ #
1663
+ # @see https://discord.com/developers/docs/resources/guild#modify-guild-incident-actions
1664
+ # Discord documentation "Modify Guild Incident Actions"
1665
+ def modify_guild_incident_actions(guild_id, body)
1666
+ json_request(:put, discord("/guilds/#{guild_id}/incident-actions"), body:)
1667
+ end
1668
+
1669
+ ### }}} Guild
1670
+
1671
+ ### Invite {{{
1672
+
1673
+ ##
1674
+ # @param invite_code [#to_s] Invite Code
1675
+ # @macro pQuery
1676
+ # @macro rResponse
1677
+ #
1678
+ # @see https://discord.com/developers/docs/resources/invite#get-invite
1679
+ # Discord documentation "Get Invite"
1680
+ def get_invite(invite_code, query = {})
1681
+ json_request(:get, discord("/invites/#{invite_code}"), query:)
1682
+ end
1683
+
1684
+ ##
1685
+ # @param invite_code [#to_s] Invite Code
1686
+ # @macro rResponse
1687
+ #
1688
+ # @see https://discord.com/developers/docs/resources/invite#delete-invite
1689
+ # Discord documentation "Delete Invite"
1690
+ def delete_invite(invite_code)
1691
+ json_request(:delete, discord("/invites/#{invite_code}"))
1692
+ end
1693
+
1694
+ ### }}} Invite
1695
+
1696
+ ### Lobby {{{
1697
+
1698
+ ##
1699
+ # @macro pBody
1700
+ # @macro rResponse
1701
+ #
1702
+ # @see https://discord.com/developers/docs/resources/lobby#create-lobby
1703
+ # Discord documentation "Create Lobby"
1704
+ def create_lobby(body)
1705
+ json_request(:post, discord("/lobbies"), body:)
1706
+ end
1707
+
1708
+ ##
1709
+ # @param lobby_id [#to_s] Lobby ID
1710
+ # @macro rResponse
1711
+ #
1712
+ # @see https://discord.com/developers/docs/resources/lobby#get-lobby
1713
+ # Discord documentation "Get Lobby"
1714
+ def get_lobby(lobby_id)
1715
+ json_request(:get, discord("/lobbies/#{lobby_id}"))
1716
+ end
1717
+
1718
+ ##
1719
+ # @param lobby_id [#to_s] Lobby ID
1720
+ # @macro pBody
1721
+ # @macro rResponse
1722
+ #
1723
+ # @see https://discord.com/developers/docs/resources/lobby#modify-lobby
1724
+ # Discord documentation "Modify Lobby"
1725
+ def modify_lobby(lobby_id, body)
1726
+ json_request(:patch, discord("/lobbies/#{lobby_id}"), body:)
1727
+ end
1728
+
1729
+ ##
1730
+ # @param lobby_id [#to_s] Lobby ID
1731
+ # @macro rResponse
1732
+ #
1733
+ # @see https://discord.com/developers/docs/resources/lobby#delete-lobby
1734
+ # Discord documentation "Delete Lobby"
1735
+ def delete_lobby(lobby_id)
1736
+ json_request(:delete, discord("/lobbies/#{lobby_id}"))
1737
+ end
1738
+
1739
+ ##
1740
+ # @param lobby_id [#to_s] Lobby ID
1741
+ # @param user_id [#to_s] User ID
1742
+ # @macro pBody
1743
+ # @macro rResponse
1744
+ #
1745
+ # @see https://discord.com/developers/docs/resources/lobby#add-a-member-to-a-lobby
1746
+ # Discord documentation "Add a Member to a Lobby"
1747
+ def add_member_to_lobby(lobby_id, user_id, body = "")
1748
+ json_request(:put, discord("/lobbies/#{lobby_id}/members/#{user_id}"), body:)
1749
+ end
1750
+
1751
+ ##
1752
+ # @param lobby_id [#to_s] Lobby ID
1753
+ # @param user_id [#to_s] User ID
1754
+ # @macro rResponse
1755
+ #
1756
+ # @see https://discord.com/developers/docs/resources/lobby#remove-a-member-from-a-lobby
1757
+ # Discord documentation "Remove a Member from a Lobby"
1758
+ def remove_member_from_lobby(lobby_id, user_id)
1759
+ json_request(:delete, discord("/lobbies/#{lobby_id}/members/#{user_id}"))
1760
+ end
1761
+
1762
+ ##
1763
+ # @param lobby_id [#to_s] Lobby ID
1764
+ # @macro rResponse
1765
+ #
1766
+ # @see https://discord.com/developers/docs/resources/lobby#leave-lobby
1767
+ # Discord documentation "Leave Lobby"
1768
+ def leave_lobby(lobby_id)
1769
+ json_request(:delete, discord("/lobbies/#{lobby_id}/members/@me"))
1770
+ end
1771
+
1772
+ ##
1773
+ # @param lobby_id [#to_s] Lobby ID
1774
+ # @macro pBody
1775
+ # @macro rResponse
1776
+ #
1777
+ # @see https://discord.com/developers/docs/resources/lobby#link-channel-to-lobby
1778
+ # Discord documentation "Link Channel to Lobby"
1779
+ def link_channel_to_lobby(lobby_id, body)
1780
+ json_request(:patch, discord("/lobbies/#{lobby_id}/channel-linking"), body:)
1781
+ end
1782
+
1783
+ ##
1784
+ # @param lobby_id [#to_s] Lobby ID
1785
+ # @macro rResponse
1786
+ #
1787
+ # @see https://discord.com/developers/docs/resources/lobby#unlink-channel-from-lobby
1788
+ # Discord documentation "Unlink Channel from Lobby"
1789
+ def unlink_channel_from_lobby(lobby_id)
1790
+ json_request(:patch, discord("/lobbies/#{lobby_id}/channel-linking"))
1791
+ end
1792
+
1793
+ ### }}} Lobby
1794
+
1795
+ ### Message {{{
1796
+
1797
+ ##
1798
+ # @param channel_id [#to_s] Channel ID
1799
+ # @macro pQuery
1800
+ # @macro rResponse
1801
+ #
1802
+ # @see https://discord.com/developers/docs/resources/message#get-channel-messages
1803
+ # Discord documentation "Get Channel Messages"
1804
+ def get_channel_messages(channel_id, query = {})
1805
+ json_request(:get, discord("/channels/#{channel_id}/messages"), query:)
1806
+ end
1807
+
1808
+ ##
1809
+ # @param channel_id [#to_s] Channel ID
1810
+ # @param message_id [#to_s] Message ID
1811
+ # @macro rResponse
1812
+ #
1813
+ # @see https://discord.com/developers/docs/resources/message#get-channel-message
1814
+ # Discord documentation "Get Channel Message"
1815
+ def get_channel_message(channel_id, message_id)
1816
+ json_request(:get, discord("/channels/#{channel_id}/messages/#{message_id}"))
1817
+ end
1818
+
1819
+ ##
1820
+ # @param channel_id [#to_s] Channel ID
1821
+ # @macro pBody
1822
+ # @macro rResponse
1823
+ #
1824
+ # @see https://discord.com/developers/docs/resources/message#create-message
1825
+ # Discord documentation "Create Message"
1826
+ def create_message(channel_id, body)
1827
+ json_request(:post, discord("/channels/#{channel_id}/messages"), body:)
1828
+ end
1829
+
1830
+ ##
1831
+ # @param channel_id [#to_s] Channel ID
1832
+ # @param message_id [#to_s] Message ID
1833
+ #
1834
+ # @macro rResponse
1835
+ #
1836
+ # @see https://discord.com/developers/docs/resources/message#crosspost-message
1837
+ # Discord documentation "Crosspost Message"
1838
+ def crosspost_message(channel_id, message_id)
1839
+ json_request(:post, discord("/channels/#{channel_id}/messages/#{message_id}/crosspost"))
1840
+ end
1841
+
1842
+ ##
1843
+ # @param channel_id [#to_s] Channel ID
1844
+ # @param message_id [#to_s] Message ID
1845
+ # @param emoji [#to_s]
1846
+ # @macro rResponse
1847
+ #
1848
+ # @see https://discord.com/developers/docs/resources/message#create-reaction
1849
+ # Discord documentation "Create Reaction"
1850
+ def create_reaction(channel_id, message_id, emoji)
1851
+ json_request(:put, discord("/channels/#{channel_id}/messages/#{message_id}/reactions/#{emoji}/@me"))
1852
+ end
1853
+
1854
+ ##
1855
+ # @param channel_id [#to_s] Channel ID
1856
+ # @param message_id [#to_s] Message ID
1857
+ # @param emoji [#to_s] Emoji
1858
+ # @macro rResponse
1859
+ #
1860
+ # @see https://discord.com/developers/docs/resources/message#delete-own-reaction
1861
+ # Discord documentation "Delete Own Reaction"
1862
+ def delete_own_reaction(channel_id, message_id, emoji)
1863
+ json_request(:delete, discord("/channels/#{channel_id}/messages/#{message_id}/reactions/#{emoji}/@me"))
1864
+ end
1865
+
1866
+ ##
1867
+ # @param channel_id [#to_s] Channel ID
1868
+ # @param message_id [#to_s] Message ID
1869
+ # @param emoji [#to_s] Emoji
1870
+ # @param user_id [#to_s] User ID
1871
+ # @macro rResponse
1872
+ #
1873
+ # @see https://discord.com/developers/docs/resources/message#delete-user-reaction
1874
+ # Discord documentation "Delete User Reaction"
1875
+ def delete_user_reaction(channel_id, message_id, emoji, user_id)
1876
+ json_request(:delete, discord("/channels/#{channel_id}/messages/#{message_id}/reactions/#{emoji}/#{user_id}"))
1877
+ end
1878
+
1879
+ ##
1880
+ # @param channel_id [#to_s] Channel ID
1881
+ # @param message_id [#to_s] Message ID
1882
+ # @param emoji [#to_s] Emoji
1883
+ # @macro pQuery
1884
+ # @macro rResponse
1885
+ #
1886
+ # @see https://discord.com/developers/docs/resources/message#get-reactions
1887
+ # Discord documentation "Get Reactions"
1888
+ def get_reactions(channel_id, message_id, emoji, query = {})
1889
+ json_request(:get, discord("/channels/#{channel_id}/messages/#{message_id}/reactions/#{emoji}"), query:)
1890
+ end
1891
+
1892
+ ##
1893
+ # @param channel_id [#to_s] Channel ID
1894
+ # @param message_id [#to_s] Message ID
1895
+ # @macro rResponse
1896
+ #
1897
+ # @see https://discord.com/developers/docs/resources/message#delete-all-reactions
1898
+ # Discord documentation "Delete All Reactions"
1899
+ def delete_all_reactions(channel_id, message_id)
1900
+ json_request(:delete, discord("/channels/#{channel_id}/messages/#{message_id}/reactions"))
1901
+ end
1902
+
1903
+ ##
1904
+ # @param channel_id [#to_s] Channel ID
1905
+ # @param message_id [#to_s] Message ID
1906
+ # @param emoji [#to_s]
1907
+ # @macro rResponse
1908
+ #
1909
+ # @see https://discord.com/developers/docs/resources/message#delete-all-reactions-for-emoji
1910
+ # Discord documentation "Delete All Reactions for Emoji"
1911
+ def delete_all_reactions_for_emoji(channel_id, message_id, emoji)
1912
+ json_request(:delete, discord("/channels/#{channel_id}/messages/#{message_id}/reactions/#{emoji}"))
1913
+ end
1914
+
1915
+ ##
1916
+ # @param channel_id [#to_s] Channel ID
1917
+ # @param message_id [#to_s] Message ID
1918
+ # @macro pBody
1919
+ # @macro rResponse
1920
+ #
1921
+ # @see https://discord.com/developers/docs/resources/message#edit-message
1922
+ # Discord documentation "Edit Message"
1923
+ def edit_message(channel_id, message_id, body)
1924
+ json_request(:patch, discord("/channels/#{channel_id}/messages/#{message_id}"), body:)
1925
+ end
1926
+
1927
+ ##
1928
+ # @param channel_id [#to_s] Channel ID
1929
+ # @param message_id [#to_s] Message ID
1930
+ # @macro rResponse
1931
+ #
1932
+ # @see https://discord.com/developers/docs/resources/message#delete-message
1933
+ # Discord documentation "Delete Message"
1934
+ def delete_message(channel_id, message_id)
1935
+ json_request(:delete, discord("/channels/#{channel_id}/messages/#{message_id}"))
1936
+ end
1937
+
1938
+ ##
1939
+ # @param channel_id [#to_s] Channel ID
1940
+ # @macro pBody
1941
+ # @macro rResponse
1942
+ #
1943
+ # @see https://discord.com/developers/docs/resources/message#bulk-delete-messages
1944
+ # Discord documentation "Bulk Delete Messages"
1945
+ def bulk_delete_messages(channel_id, body)
1946
+ json_request(:post, discord("/channels/#{channel_id}/messages/bulk-delete"), body:)
1947
+ end
1948
+
1949
+ ### }}} Message
1950
+
1951
+ ### Poll {{{
1952
+
1953
+ ##
1954
+ # @param channel_id [#to_s] Channel ID
1955
+ # @param message_id [#to_s] Message ID
1956
+ # @param answer_id [#to_s] Answer ID
1957
+ # @macro pQuery
1958
+ # @macro rResponse
1959
+ #
1960
+ # @see https://discord.com/developers/docs/resources/poll#get-answer-voters
1961
+ # Discord documentation "Get Answer Voters"
1962
+ def get_answer_voters(channel_id, message_id, answer_id, query = {})
1963
+ json_request(:get, discord("/channels/#{channel_id}/polls/#{message_id}/answers/#{answer_id}"), query:)
1964
+ end
1965
+
1966
+ ##
1967
+ # @param channel_id [#to_s] Channel ID
1968
+ # @param message_id [#to_s] Message ID
1969
+ # @macro rResponse
1970
+ #
1971
+ # @see https://discord.com/developers/docs/resources/poll#end-poll
1972
+ # Discord documentation "End Poll"
1973
+ def end_poll(channel_id, message_id)
1974
+ json_request(:post, discord("/channels/#{channel_id}/polls/#{message_id}/expire"))
1975
+ end
1976
+
1977
+ ### }}} Poll
1978
+
1979
+ ### SKU {{{
1980
+
1981
+ ##
1982
+ # @param application_id [#to_s] Application ID
1983
+ # @macro rResponse
1984
+ #
1985
+ # @see https://discord.com/developers/docs/resources/sku#list-skus
1986
+ # Discord documentation "List SKUs"
1987
+ def list_skus(application_id)
1988
+ json_request(:get, discord("/applications/#{application_id}/skus"))
1989
+ end
1990
+
1991
+ ### }}} SKU
1992
+
1993
+ ### Soundboard {{{
1994
+
1995
+ ##
1996
+ # @param channel_id [#to_s] Channel ID
1997
+ # @macro pBody
1998
+ # @macro rResponse
1999
+ #
2000
+ # @see https://discord.com/developers/docs/resources/soundboard#send-soundboard-sound
2001
+ # Discord documentation "Send Soundboard Sound"
2002
+ def send_soundboard_sound(channel_id, body)
2003
+ json_request(:post, discord("/channels/#{channel_id}/send-soundboard-sound"), body:)
2004
+ end
2005
+
2006
+ ##
2007
+ # @macro rResponse
2008
+ #
2009
+ # @see https://discord.com/developers/docs/resources/soundboard#list-default-soundboard-sounds
2010
+ # Discord documentation "List Default Soundboard Sounds"
2011
+ def list_default_soundboard_sounds
2012
+ json_request(:get, discord("/soundboard-default-sounds"))
2013
+ end
2014
+
2015
+ ##
2016
+ # @param guild_id [#to_s] Guild ID
2017
+ # @macro rResponse
2018
+ #
2019
+ # @see https://discord.com/developers/docs/resources/soundboard#list-guild-soundboard-sounds
2020
+ # Discord documentation "List Guild Soundboard Sounds"
2021
+ def list_guild_soundboard_sounds(guild_id)
2022
+ json_request(:get, discord("/guilds/#{guild_id}/soundboard-sounds"))
2023
+ end
2024
+
2025
+ ##
2026
+ # @param guild_id [#to_s] Guild ID
2027
+ # @param sound_id [#to_s] Sound ID
2028
+ # @macro rResponse
2029
+ #
2030
+ # @see https://discord.com/developers/docs/resources/soundboard#get-guild-soundboard-sound
2031
+ # Discord documentation "Get Guild Soundboard Sound"
2032
+ def get_guild_soundboard_sound(guild_id, sound_id)
2033
+ json_request(:get, discord("/guilds/#{guild_id}/soundboard-sounds/#{sound_id}"))
2034
+ end
2035
+
2036
+ ##
2037
+ # @param guild_id [#to_s] Guild ID
2038
+ # @macro pBody
2039
+ # @macro rResponse
2040
+ #
2041
+ # @see https://discord.com/developers/docs/resources/soundboard#create-guild-soundboard-sound
2042
+ # Discord documentation "Create Guild Soundboard Sound"
2043
+ def create_guild_soundboard_sound(guild_id, body)
2044
+ json_request(:post, discord("/guilds/#{guild_id}/soundboard-sounds"), body:)
2045
+ end
2046
+
2047
+ ##
2048
+ # @param guild_id [#to_s] Guild ID
2049
+ # @param sound_id [#to_s] Sound ID
2050
+ # @macro pBody
2051
+ # @macro rResponse
2052
+ #
2053
+ # @see https://discord.com/developers/docs/resources/soundboard#modify-guild-soundboard-sound
2054
+ # Discord documentation "Modify Guild Soundboard Sound"
2055
+ def modify_guild_soundboard_sound(guild_id, sound_id, body)
2056
+ json_request(:patch, discord("/guilds/#{guild_id}/soundboard-sounds/#{sound_id}"), body:)
2057
+ end
2058
+
2059
+ ##
2060
+ # @param guild_id [#to_s] Guild ID
2061
+ # @param sound_id [#to_s] Sound ID
2062
+ # @macro rResponse
2063
+ #
2064
+ # @see https://discord.com/developers/docs/resources/soundboard#delete-guild-soundboard-sound
2065
+ # Discord documentation "Delete Guild Soundboard Sound"
2066
+ def delete_guild_soundboard_sound(guild_id, sound_id)
2067
+ json_request(:delete, discord("/guilds/#{guild_id}/soundboard-sounds/#{sound_id}"))
2068
+ end
2069
+
2070
+ ### }}} Soundboard
2071
+
2072
+ ### Stage Instance {{{
2073
+
2074
+ ##
2075
+ # @macro pBody
2076
+ # @macro rResponse
2077
+ #
2078
+ # @see https://discord.com/developers/docs/resources/stage-instance#create-stage-instance
2079
+ # Discord documentation "Create Stage Instance"
2080
+ def create_stage_instance(body)
2081
+ json_request(:post, discord("/stage-instances"), body:)
2082
+ end
2083
+
2084
+ ##
2085
+ # @param channel_id [#to_s] Channel ID
2086
+ # @macro rResponse
2087
+ #
2088
+ # @see https://discord.com/developers/docs/resources/stage-instance#get-stage-instance
2089
+ # Discord documentation "Get Stage Instance"
2090
+ def get_stage_instance(channel_id)
2091
+ json_request(:get, discord("/stage-instances/#{channel_id}"))
2092
+ end
2093
+
2094
+ ##
2095
+ # @param channel_id [#to_s] Channel ID
2096
+ # @macro pBody
2097
+ # @macro rResponse
2098
+ #
2099
+ # @see https://discord.com/developers/docs/resources/stage-instance#modify-stage-instance
2100
+ # Discord documentation "Modify Stage Instance"
2101
+ def modify_stage_instance(channel_id, body)
2102
+ json_request(:patch, discord("/stage-instances/#{channel_id}"), body:)
2103
+ end
2104
+
2105
+ ##
2106
+ # @param channel_id [#to_s] Channel ID
2107
+ # @macro rResponse
2108
+ #
2109
+ # @see https://discord.com/developers/docs/resources/stage-instance#delete-stage-instance
2110
+ # Discord documentation "Delete Stage Instance"
2111
+ def delete_stage_instance(channel_id)
2112
+ json_request(:delete, discord("/stage-instances/#{channel_id}"))
2113
+ end
2114
+
2115
+ ### }}} Stage Instance
2116
+
2117
+ ### Sticker {{{
2118
+
2119
+ ##
2120
+ # @param sticker_id [#to_s] Sticker ID
2121
+ # @macro rResponse
2122
+ #
2123
+ # @see https://discord.com/developers/docs/resources/sticker#get-sticker
2124
+ # Discord documentation "Get Sticker"
2125
+ def get_sticker(sticker_id)
2126
+ json_request(:get, discord("/stickers/#{sticker_id}"))
2127
+ end
2128
+
2129
+ ##
2130
+ # @macro rResponse
2131
+ #
2132
+ # @see https://discord.com/developers/docs/resources/sticker#list-sticker-packs
2133
+ # Discord documentation "List Sticker Packs"
2134
+ def list_sticker_packs
2135
+ json_request(:get, discord("/sticker-packs"))
2136
+ end
2137
+
2138
+ ##
2139
+ # @param pack_id [#to_s] Sticker Pack ID
2140
+ # @macro rResponse
2141
+ #
2142
+ # @see https://discord.com/developers/docs/resources/sticker#get-sticker-pack
2143
+ # Discord documentation "Get Sticker Pack"
2144
+ def get_sticker_pack(pack_id)
2145
+ json_request(:get, discord("/sticker-packs/#{pack_id}"))
2146
+ end
2147
+
2148
+ ##
2149
+ # @param guild_id [#to_s] Guild ID
2150
+ # @macro rResponse
2151
+ #
2152
+ # @see https://discord.com/developers/docs/resources/sticker#list-guild-stickers
2153
+ # Discord documentation "List Guild Stickers"
2154
+ def list_guild_stickers(guild_id)
2155
+ json_request(:get, discord("/guilds/#{guild_id}/stickers"))
2156
+ end
2157
+
2158
+ ##
2159
+ # @param guild_id [#to_s] Guild ID
2160
+ # @param sticker_id [#to_s] Sticker ID
2161
+ # @macro rResponse
2162
+ #
2163
+ # @see https://discord.com/developers/docs/resources/sticker#get-guild-sticker
2164
+ # Discord documentation "Get Guild Sticker"
2165
+ def get_guild_sticker(guild_id, sticker_id)
2166
+ json_request(:get, discord("/guilds/#{guild_id}/stickers/#{sticker_id}"))
2167
+ end
2168
+
2169
+ ##
2170
+ # @param guild_id [#to_s] Guild ID
2171
+ # @macro pBody
2172
+ # @macro rResponse
2173
+ #
2174
+ # @see https://discord.com/developers/docs/resources/sticker#create-guild-sticker
2175
+ # Discord documentation "Create Guild Sticker"
2176
+ def create_guild_sticker(guild_id, body)
2177
+ json_request(:post, discord("/guilds/#{guild_id}/stickers"), body:)
2178
+ end
2179
+
2180
+ ##
2181
+ # @param guild_id [#to_s] Guild ID
2182
+ # @param sticker_id [#to_s] Sticker ID
2183
+ # @macro pBody
2184
+ # @macro rResponse
2185
+ #
2186
+ # @see https://discord.com/developers/docs/resources/sticker#modify-guild-sticker
2187
+ # Discord documentation "Modify Guild Sticker"
2188
+ def modify_guild_sticker(guild_id, sticker_id, body)
2189
+ json_request(:patch, discord("/guilds/#{guild_id}/stickers/#{sticker_id}"), body:)
2190
+ end
2191
+
2192
+ ##
2193
+ # @param guild_id [#to_s] Guild ID
2194
+ # @param sticker_id [#to_s] Sticker ID
2195
+ # @macro rResponse
2196
+ #
2197
+ # @see https://discord.com/developers/docs/resources/sticker#delete-guild-sticker
2198
+ # Discord documentation "Delete Guild Sticker"
2199
+ def delete_guild_sticker(guild_id, sticker_id)
2200
+ json_request(:delete, discord("/guilds/#{guild_id}/stickers/#{sticker_id}"))
2201
+ end
2202
+
2203
+ ### }}} Sticker
2204
+
2205
+ ### Subscription {{{
2206
+
2207
+ ##
2208
+ # @param sku_id [#to_s] SKU ID
2209
+ # @macro pQuery
2210
+ # @macro rResponse
2211
+ #
2212
+ # @see https://discord.com/developers/docs/resources/subscription#list-sku-subscriptions
2213
+ # Discord documentation "List SKU Subscriptions"
2214
+ def list_sku_subscriptions(sku_id, query = {})
2215
+ json_request(:get, discord("/skus/#{sku_id}/subscriptions"), query:)
2216
+ end
2217
+
2218
+ ##
2219
+ # @param sku_id [#to_s] SKU ID
2220
+ # @param subscription_id [#to_s] Subscription ID
2221
+ # @macro rResponse
2222
+ #
2223
+ # @see https://discord.com/developers/docs/resources/subscription#get-sku-subscription
2224
+ # Discord documentation "Get SKU Subscription"
2225
+ def get_sku_subscription(sku_id, subscription_id)
2226
+ json_request(:get, discord("/skus/#{sku_id}/subscriptions/#{subscription_id}"))
2227
+ end
2228
+
2229
+ ### }}} Subscription
2230
+
2231
+ ### User {{{
2232
+
2233
+ ##
2234
+ # @macro rResponse
2235
+ #
2236
+ # @see https://discord.com/developers/docs/resources/user#get-current-user
2237
+ # Discord documentation "Get Current User"
2238
+ def get_current_user
2239
+ json_request(:get, discord("/users/@me"))
2240
+ end
2241
+
2242
+ ##
2243
+ # @param user_id [#to_s] User ID
2244
+ # @macro rResponse
2245
+ #
2246
+ # @see https://discord.com/developers/docs/resources/user#get-user
2247
+ # Discord documentation "Get User"
2248
+ def get_user(user_id)
2249
+ json_request(:get, discord("/users/#{user_id}"))
2250
+ end
2251
+
2252
+ ##
2253
+ # @macro pBody
2254
+ # @macro rResponse
2255
+ #
2256
+ # @see https://discord.com/developers/docs/resources/user#modify-current-user
2257
+ # Discord documentation "Modify Current User"
2258
+ def modify_current_user(body)
2259
+ json_request(:patch, discord("/users/@me"), body:)
2260
+ end
2261
+
2262
+ ##
2263
+ # @macro pQuery
2264
+ # @macro rResponse
2265
+ #
2266
+ # @see https://discord.com/developers/docs/resources/user#get-current-user-guilds
2267
+ # Discord documentation "Get Current User Guilds"
2268
+ def get_current_user_guilds(query = {})
2269
+ json_request(:get, discord("/users/@me/guilds"), query:)
2270
+ end
2271
+
2272
+ ##
2273
+ # @param guild_id [#to_s] Guild ID
2274
+ # @macro rResponse
2275
+ #
2276
+ # @see https://discord.com/developers/docs/resources/user#get-current-user-guild-member
2277
+ # Discord documentation "Get Current User Guild Member"
2278
+ def get_current_user_guild_member(guild_id)
2279
+ json_request(:get, discord("/users/@me/guilds/#{guild_id}/member"))
2280
+ end
2281
+
2282
+ ##
2283
+ # @param guild_id [#to_s] Guild ID
2284
+ # @macro rResponse
2285
+ #
2286
+ # @see https://discord.com/developers/docs/resources/user#leave-guild
2287
+ # Discord documentation "Leave Guild"
2288
+ def leave_guild(guild_id)
2289
+ json_request(:delete, discord("/users/@me/guilds/#{guild_id}"))
2290
+ end
2291
+
2292
+ ##
2293
+ # @macro pBody
2294
+ # @macro rResponse
2295
+ #
2296
+ # @see https://discord.com/developers/docs/resources/user#create-dm
2297
+ # Discord documentation "Create DM"
2298
+ def create_dm(body)
2299
+ json_request(:post, discord("/users/@me/channels"), body:)
2300
+ end
2301
+
2302
+ ##
2303
+ # @macro pBody
2304
+ # @macro rResponse
2305
+ #
2306
+ # @see https://discord.com/developers/docs/resources/user#create-group-dm
2307
+ # Discord documentation "Create Group DM"
2308
+ def create_group_dm(body)
2309
+ json_request(:post, discord("/users/@me/channels"), body:)
2310
+ end
2311
+
2312
+ ##
2313
+ # @macro rResponse
2314
+ #
2315
+ # @see https://discord.com/developers/docs/resources/user#get-current-user-connections
2316
+ # Discord documentation "Get Current User Connections"
2317
+ def get_current_user_connections
2318
+ json_request(:get, discord("/users/@me/connections"))
2319
+ end
2320
+
2321
+ ##
2322
+ # @param application_id [#to_s] Application ID
2323
+ # @macro rResponse
2324
+ #
2325
+ # @see https://discord.com/developers/docs/resources/user#get-current-user-application-role-connection
2326
+ # Discord documentation "Get Current User Application Role Connection"
2327
+ def get_current_user_application_role_connection(application_id)
2328
+ json_request(:get, discord("/users/@me/applications/#{application_id}/role-connections"))
2329
+ end
2330
+
2331
+ ##
2332
+ # @param application_id [#to_s] Application ID
2333
+ # @macro pBody
2334
+ # @macro rResponse
2335
+ #
2336
+ # @see https://discord.com/developers/docs/resources/user#update-current-user-application-role-connection
2337
+ # Discord documentation "Update Current User Application Role Connection"
2338
+ def update_current_user_application_role_connection(application_id, body)
2339
+ json_request(:put, discord("/users/@me/applications/#{application_id}/role-connection"), body:)
2340
+ end
2341
+
2342
+ ### }}} User
2343
+
2344
+ ### Voice {{{
2345
+
2346
+ ##
2347
+ # @macro rResponse
2348
+ #
2349
+ # @see https://discord.com/developers/docs/resources/voice#list-voice-regions
2350
+ # Discord documentation "List Voice Regions"
2351
+ def list_voice_regions
2352
+ json_request(:get, discord("/voice/regions"))
2353
+ end
2354
+
2355
+ ##
2356
+ # @param guild_id [#to_s] Guild ID
2357
+ # @macro rResponse
2358
+ #
2359
+ # @see https://discord.com/developers/docs/resources/voice#get-current-user-voice-state
2360
+ # Discord documentation "Get Current User Voice State"
2361
+ def get_current_user_voice_state(guild_id)
2362
+ json_request(:get, discord("/guilds/#{guild_id}/voice-states/@me"))
2363
+ end
2364
+
2365
+ ##
2366
+ # @param guild_id [#to_s] Guild ID
2367
+ # @param user_id [#to_s] User ID
2368
+ # @macro rResponse
2369
+ #
2370
+ # @see https://discord.com/developers/docs/resources/voice#get-user-voice-state
2371
+ # Discord documentation "Get User Voice State"
2372
+ def get_user_voice_state(guild_id, user_id)
2373
+ json_request(:get, discord("/guilds/#{guild_id}/voice-states/#{user_id}"))
2374
+ end
2375
+
2376
+ ##
2377
+ # @param guild_id [#to_s] Guild ID
2378
+ # @macro pBody
2379
+ # @macro rResponse
2380
+ #
2381
+ # @see https://discord.com/developers/docs/resources/voice#modify-current-user-voice-state
2382
+ # Discord documentation "Modify Current User Voice State"
2383
+ def modify_current_user_voice_state(guild_id, body)
2384
+ json_request(:patch, discord("/guilds/#{guild_id}/voice-states/@me"), body:)
2385
+ end
2386
+
2387
+ ##
2388
+ # @param guild_id [#to_s] Guild ID
2389
+ # @param user_id [#to_s] User ID
2390
+ # @macro pBody
2391
+ # @macro rResponse
2392
+ #
2393
+ # @see https://discord.com/developers/docs/resources/voice#modify-user-voice-state
2394
+ # Discord documentation "Modify User Voice State"
2395
+ def modify_user_voice_state(guild_id, user_id, body)
2396
+ json_request(:patch, discord("/guilds/#{guild_id}/voice-states/#{user_id}"), body:)
2397
+ end
2398
+
2399
+ ### }}} Voice
2400
+
2401
+ ### Webhook {{{
2402
+
2403
+ ##
2404
+ # @param channel_id [#to_s] Channel ID
2405
+ # @macro pBody
2406
+ # @macro rResponse
2407
+ #
2408
+ # @see https://discord.com/developers/docs/resources/webhook#create-webhook
2409
+ # Discord documentation "Create Webhook"
2410
+ def create_webhook(channel_id, body)
2411
+ json_request(:post, discord("/channels/#{channel_id}/webhooks"), body:)
2412
+ end
2413
+
2414
+ ##
2415
+ # @param channel_id [#to_s] Channel ID
2416
+ # @macro rResponse
2417
+ #
2418
+ # @see https://discord.com/developers/docs/resources/webhook#get-channel-webhooks
2419
+ # Discord documentation "Get Channel Webhooks"
2420
+ def get_channel_webhooks(channel_id)
2421
+ json_request(:get, discord("/channels/#{channel_id}/webhooks"))
2422
+ end
2423
+
2424
+ ##
2425
+ # @param guild_id [#to_s] Guild ID
2426
+ # @macro rResponse
2427
+ #
2428
+ # @see https://discord.com/developers/docs/resources/webhook#get-guild-webhooks
2429
+ # Discord documentation "Get Guild Webhooks"
2430
+ def get_guild_webhooks(guild_id)
2431
+ json_request(:get, discord("/guilds/#{guild_id}/webhooks"))
2432
+ end
2433
+
2434
+ ##
2435
+ # @param webhook_id [#to_s] Webhook ID
2436
+ # @macro rResponse
2437
+ #
2438
+ # @see https://discord.com/developers/docs/resources/webhook#get-webhook
2439
+ # Discord documentation "Get Webhook"
2440
+ def get_webhook(webhook_id)
2441
+ json_request(:get, discord("/webhooks/#{webhook_id}"))
2442
+ end
2443
+
2444
+ ##
2445
+ # @param webhook_id [#to_s] Webhook ID
2446
+ # @param webhook_token [#to_s] Webhook Token
2447
+ # @macro rResponse
2448
+ #
2449
+ # @see https://discord.com/developers/docs/resources/webhook#get-webhook-with-token
2450
+ # Discord documentation "Get Webhook with Token"
2451
+ def get_webhook_with_token(webhook_id, webhook_token)
2452
+ json_request(:get, discord("/webhooks/#{webhook_id}/#{webhook_token}"))
2453
+ end
2454
+
2455
+ ##
2456
+ # @param webhook_id [#to_s] Webhook ID
2457
+ # @macro pBody
2458
+ # @macro rResponse
2459
+ #
2460
+ # @see https://discord.com/developers/docs/resources/webhook#modify-webhook
2461
+ # Discord documentation "Modify Webhook"
2462
+ def modify_webhook(webhook_id, body)
2463
+ json_request(:patch, discord("/webhooks/#{webhook_id}"), body:)
2464
+ end
2465
+
2466
+ ##
2467
+ # @param webhook_id [#to_s] Webhook ID
2468
+ # @param webhook_token [#to_s] Webhook Token
2469
+ # @macro pBody
2470
+ # @macro rResponse
2471
+ #
2472
+ # @see https://discord.com/developers/docs/resources/webhook#modify-webhook-with-token
2473
+ # Discord documentation "Modify Webhook with Token"
2474
+ def modify_webhook_with_token(webhook_id, webhook_token, body)
2475
+ json_request(:patch, discord("/webhooks/#{webhook_id}/#{webhook_token}"), body:)
2476
+ end
2477
+
2478
+ ##
2479
+ # @param webhook_id [#to_s] Webhook ID
2480
+ # @macro rResponse
2481
+ #
2482
+ # @see https://discord.com/developers/docs/resources/webhook#delete-webhook
2483
+ # Discord documentation "Delete Webhook"
2484
+ def delete_webhook(webhook_id)
2485
+ json_request(:delete, discord("/webhooks/#{webhook_id}"))
2486
+ end
2487
+
2488
+ ##
2489
+ # @param webhook_id [#to_s] Webhook ID
2490
+ # @param webhook_token [#to_s] Webhook Token
2491
+ # @macro rResponse
2492
+ #
2493
+ # @see https://discord.com/developers/docs/resources/webhook#delete-webhook-with-token
2494
+ # Discord documentation "Delete Webhook with Token"
2495
+ def delete_webhook_with_token(webhook_id, webhook_token)
2496
+ json_request(:delete, discord("/webhooks/#{webhook_id}/#{webhook_token}"))
2497
+ end
2498
+
2499
+ ##
2500
+ # @param webhook_id [#to_s] Webhook ID
2501
+ # @param webhook_token [#to_s] Webhook Token
2502
+ # @macro pBody
2503
+ # @macro pQuery
2504
+ # @macro rResponse
2505
+ #
2506
+ # @see https://discord.com/developers/docs/resources/webhook#execute-webhook
2507
+ # Discord documentation "Execute Webhook"
2508
+ def execute_webhook(webhook_id, webhook_token, body, query = {})
2509
+ json_request(:post, discord("/webhooks/#{webhook_id}/#{webhook_token}"), body:, query:)
2510
+ end
2511
+
2512
+ ##
2513
+ # @param webhook_id [#to_s] Webhook ID
2514
+ # @param webhook_token [#to_s] Webhook Token
2515
+ # @macro pQuery
2516
+ # @macro rResponse
2517
+ #
2518
+ # @see https://discord.com/developers/docs/resources/webhook#execute-slackcompatible-webhook
2519
+ # Discord documentation "Execute Slack-Compatible Webhook"
2520
+ def execute_slack_compatible_webhook(webhook_id, webhook_token, query = {})
2521
+ json_request(:post, discord("/webhooks/#{webhook_id}/#{webhook_token}/slack"), query:)
2522
+ end
2523
+
2524
+ ##
2525
+ # @param webhook_id [#to_s] Webhook ID
2526
+ # @param webhook_token [#to_s] Webhook Token
2527
+ # @macro pQuery
2528
+ # @macro rResponse
2529
+ #
2530
+ # @see https://discord.com/developers/docs/resources/webhook#execute-githubcompatible-webhook
2531
+ # Discord documentation "Execute GitHub-Compatible Webhook
2532
+ def execute_github_compatible_webhook(webhook_id, webhook_token, query = {})
2533
+ json_request(:post, discord("/webhooks/#{webhook_id}/#{webhook_token}/github"), query:)
2534
+ end
2535
+
2536
+ ##
2537
+ # @param webhook_id [#to_s] Webhook ID
2538
+ # @param webhook_token [#to_s] Webhook Token
2539
+ # @param message_id [#to_s] Message ID
2540
+ # @macro pQuery
2541
+ # @macro rResponse
2542
+ #
2543
+ # @see https://discord.com/developers/docs/resources/webhook#get-webhook-message
2544
+ # Discord documentation "Get Webhook Message"
2545
+ def get_webhook_message(webhook_id, webhook_token, message_id, query = {})
2546
+ json_request(:get, discord("/webhooks/#{webhook_id}/#{webhook_token}/messages/#{message_id}"), query:)
2547
+ end
2548
+
2549
+ ##
2550
+ # @param webhook_id [#to_s] Webhook ID
2551
+ # @param webhook_token [#to_s] Webhook Token
2552
+ # @param message_id [#to_s] Message ID
2553
+ # @macro pBody
2554
+ # @macro pQuery
2555
+ # @macro rResponse
2556
+ #
2557
+ # @see https://discord.com/developers/docs/resources/webhook#edit-webhook-message
2558
+ # Discord documentation "Edit Webhook Message"
2559
+ def edit_webhook_message(webhook_id, webhook_token, message_id, body, query = {})
2560
+ json_request(:patch, discord("/webhooks/#{webhook_id}/#{webhook_token}/messages/#{message_id}"), body:, query:)
2561
+ end
2562
+
2563
+ ##
2564
+ # @param webhook_id [#to_s] Webhook ID
2565
+ # @param webhook_token [#to_s] Webhook Token
2566
+ # @param message_id [#to_s] Message ID
2567
+ # @macro rResponse
2568
+ #
2569
+ # @see https://discord.com/developers/docs/resources/webhook#delete-webhook-message
2570
+ # Discord documentation "Delete Webhook Message"
2571
+ def delete_webhook_message(webhook_id, webhook_token, message_id)
2572
+ json_request(:delete, discord("/webhooks/#{webhook_id}/#{webhook_token}/messages/#{message_id}"))
2573
+ end
2574
+
2575
+ ### }}} Webhook
2576
+
2577
+ ### OAuth2 {{{
2578
+
2579
+ ##
2580
+ # @param user [#to_s] HTTP basic authorization username
2581
+ # @param pass [#to_s] HTTP basic authorization password
2582
+ # @macro pQuery
2583
+ # @macro rResponse
2584
+ def oauth2_request_token(user, pass, query)
2585
+ net_request(
2586
+ :post,
2587
+ discord("/oauth2/token"),
2588
+ body: URI.encode_www_form(query),
2589
+ headers: {
2590
+ "Authorization" => "Basic " + base64_strictencode("#{user}:#{pass}"),
2591
+ "Content-Type" => "application/x-www-form-urlencoded"
2592
+ }
2593
+ )
2594
+ end
2595
+
2596
+ ##
2597
+ # @param user [#to_s] HTTP basic authorization username
2598
+ # @param pass [#to_s] HTTP basic authorization password
2599
+ # @macro pQuery
2600
+ # @macro rResponse
2601
+ #
2602
+ # @see https://discord.com/developers/docs/topics/oauth2#authorization-code-grant-token-revocation-example
2603
+ # Discord documentation "Token Revocation example"
2604
+ def oauth2_revoke_token(user, pass, query)
2605
+ net_request(
2606
+ :post,
2607
+ discord("/oauth2/token/revoke"),
2608
+ body: URI.encode_www_form(query),
2609
+ headers: {
2610
+ "Authorization" => "Basic " + base64_strictencode("#{user}:#{pass}"),
2611
+ "Content-Type" => "application/x-www-form-urlencoded"
2612
+ }
2613
+ )
2614
+ end
2615
+
2616
+ ##
2617
+ # Get the URL for starting the OAuth2 Authorization flow.
2618
+ #
2619
+ # @macro pQuery
2620
+ # @return [URI] OAuth2 Authorization URL, with query parameters added.
2621
+ #
2622
+ # @see https://discord.com/developers/docs/topics/oauth2#authorization-code-grant
2623
+ # Discord documentation "Authorization Code Grant"
2624
+ def get_authorize_url(query = {})
2625
+ uri = URI(discord("/oauth2/authorize", prefix: ""))
2626
+ uri.query = URI.encode_www_form(query)
2627
+ uri
2628
+ end
2629
+
2630
+ ##
2631
+ # Get the URL for installing an application.
2632
+ #
2633
+ # @macro pQuery
2634
+ # @return [URI] Application installation URL, with query parameters added.
2635
+ #
2636
+ # @see https://discord.com/developers/docs/resources/application#install-links
2637
+ # Discord documentation "Install Links"
2638
+ def get_install_url(query = {}) = get_authorize_url(query)
2639
+
2640
+ ### }}} OAuth2
2641
+
2642
+ private
2643
+
2644
+ def base64_strictencode(input) = [input].pack("m0")
2645
+
2646
+ def discord(path, prefix: "/api/v10")
2647
+ [LibDiscord::DISCORD_BASE_URL, prefix, path].join
2648
+ end
2649
+
2650
+ def net_request(verb, path, body: nil, query: {}, headers: {})
2651
+ uri = URI(path)
2652
+ uri.query = URI.encode_www_form(query)
2653
+ headers = @default_headers.merge(headers).compact
2654
+
2655
+ @logger.info("lib_discord") { "> #{verb.upcase} #{uri}" }
2656
+ @logger.debug("lib_discord") do
2657
+ headers_str = headers.map { |name, value| "#{name}: #{value}" }
2658
+ "Request headers\n#{headers_str.sort.join("\n")}\n\n" \
2659
+ "#{body || "( empty body )"}"
2660
+ end
2661
+
2662
+ http = Net::HTTP.new(uri.hostname, uri.port)
2663
+ http.use_ssl = uri.instance_of?(URI::HTTPS)
2664
+
2665
+ resp = case verb
2666
+ when :get, :delete
2667
+ http.public_send(verb, uri.request_uri, headers)
2668
+ when :post, :put, :patch
2669
+ http.public_send(verb, uri.request_uri, body.to_s, headers)
2670
+ else
2671
+ raise "Invalid HTTP request verb: #{verb}"
2672
+ end
2673
+
2674
+ @logger.info("lib_discord") { "< #{resp.code}" }
2675
+ @logger.debug("lib_discord") do
2676
+ headers_str = []
2677
+ resp.each_capitalized_name do |name|
2678
+ headers_str << "#{name}: #{resp[name]}"
2679
+ end
2680
+ "Response headers\n#{headers_str.sort.join("\n")}\n\n" \
2681
+ "#{resp.body || "( empty body )"}"
2682
+ end
2683
+
2684
+ parsed = case resp["Content-Type"]
2685
+ when "application/json"
2686
+ JSON.parse(resp.body)
2687
+ end
2688
+
2689
+ Response.new(
2690
+ success?: resp.code.start_with?("2"),
2691
+ body: resp.body,
2692
+ parsed:,
2693
+ code: resp.code,
2694
+ message: resp.message
2695
+ )
2696
+ end
2697
+
2698
+ def json_request(verb, path, body: nil, query: {}, headers: {})
2699
+ headers = {
2700
+ "Content-Type" => "application/json"
2701
+ }.merge(headers).compact
2702
+
2703
+ net_request(verb, path, body: body&.to_json, query:, headers:)
2704
+ end
2705
+ end
2706
+
2707
+ ##
2708
+ # A {Response} is returned from any {Client} public instance method call in
2709
+ # which the HTTP request sent to Discord receives a response.
2710
+ #
2711
+ # @!attribute [r] success?
2712
+ # @return [Boolean] +true+ if the HTTP response code is 2xx, +false+
2713
+ # otherwise.
2714
+ # @!attribute [r] body
2715
+ # @return [String] raw HTTP response body.
2716
+ # @!attribute [r] parsed
2717
+ # @return [Object, nil] object representation of the HTTP response body
2718
+ # parsed with +JSON.parse+ if the HTTP response's content-type is
2719
+ # +application/json+, +nil+ otherwise.
2720
+ # @see https://ruby-doc.org/3.4.1/exts/json/JSON.html#method-i-parse
2721
+ # JSON#parse
2722
+ # @!attribute [r] code
2723
+ # @return [String] HTTP response code.
2724
+ # @!attribute [r] message
2725
+ # @return [String] HTTP response message.
2726
+ # @see https://ruby-doc.org/3.4.1/stdlibs/net/Net/HTTPResponse.html
2727
+ # Net::HTTPResponse
2728
+ Response = Struct.new(
2729
+ :success?,
2730
+ :body,
2731
+ :parsed,
2732
+ :code,
2733
+ :message,
2734
+ keyword_init: true
2735
+ )
2736
+ end
2737
+
2738
+ # ex: foldmethod=marker