vox 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,292 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'vox/http/route'
4
+ require 'vox/http/util'
5
+
6
+ module Vox
7
+ module HTTP
8
+ module Routes
9
+ # Mixin for guild routes.
10
+ module Guild
11
+ include Util
12
+
13
+ # @param name [String] The name of the guild.
14
+ # @param region [String] A [voice region](https://discord.com/developers/docs/resources/voice#voice-region-object).
15
+ # @param icon [UploadIO] TODO
16
+ # @param verification_level [Integer] [Verification level](https://discord.com/developers/docs/resources/guild#guild-object-verification-level).
17
+ # @param default_message_notifications [Integer] [Notification level](https://discord.com/developers/docs/resources/guild#guild-object-default-message-notification-level).
18
+ # @param explicit_content_filter [Integer] [Content filter level](https://discord.com/developers/docs/resources/guild#guild-object-explicit-content-filter-level).
19
+ # @param roles [Array<Hash<Symbol, Object>>] An array of [role](https://discord.com/developers/docs/topics/permissions#role-object)
20
+ # objects.
21
+ # @param channels [Array<Hash<Symbol, Object>>] An array of partial [channel](https://discord.com/developers/docs/resources/channel#channel-object)
22
+ # objects.
23
+ # @param afk_channel_id [String, Integer] The ID for the AFK channel.
24
+ # @param afk_timeout [Integer] AFK timeout in seconds.
25
+ # @param system_channel_id [String, Integer] The ID of the channel where guild notices such as welcome messages
26
+ # and boost events are posted
27
+ # @vox.api_docs https://discord.com/developers/docs/resources/guild#create-guild
28
+ def create_guild(name:, region: :undef, icon: :undef, verification_level: :undef,
29
+ default_message_notifications: :undef, explicit_content_filter: :undef,
30
+ roles: :undef, channels: :undef, afk_channel_id: :undef,
31
+ afk_timeout: :undef, system_channel_id: :undef)
32
+ json = filter_undef(
33
+ {
34
+ name: name, region: region, icon: icon, verification_level: verification_level,
35
+ default_message_notifications: default_message_notifications,
36
+ explicit_content_filter: explicit_content_filter, roles: roles, channels: channels,
37
+ afk_channel_id: afk_channel_id, afk_timeout: afk_timeout, system_channel_id: system_channel_id
38
+ }
39
+ )
40
+ request(Route.new(:POST, '/guilds'), json: json)
41
+ end
42
+
43
+ # @param guild_id [String, Integer]
44
+ # @vox.api_docs https://discord.com/developers/docs/resources/guild#get-guild-preview
45
+ def get_guild_preview(guild_id)
46
+ request(Route.new(:GET, '/guilds/%{guild_id}/preview', guild_id: guild_id))
47
+ end
48
+
49
+ # @vox.api_docs https://discord.com/developers/docs/resources/guild#modify-guild
50
+ def modify_guild(guild_id, name: :undef, region: :undef, verification_level: :undef,
51
+ default_message_notifications: :undef, explicit_content_filter: :undef,
52
+ afk_channel_id: :undef, afk_timeout: :undef, icon: :undef, owner_id: :undef,
53
+ splash: :undef, banner: :undef, system_channel_id: :undef,
54
+ rules_channel_id: :undef, public_updates_channel_id: :undef,
55
+ preferred_locale: :undef, reason: nil)
56
+ json = filter_undef(
57
+ {
58
+ name: name, region: region, verification_level: verification_level,
59
+ default_message_notifications: default_message_notifications,
60
+ explicit_content_filter: explicit_content_filter, afk_channel_id: afk_channel_id,
61
+ afk_timeout: afk_timeout, icon: icon, owner_id: owner_id, splash: splash, banner: banner,
62
+ system_channel_id: system_channel_id, rules_channel_id: rules_channel_id,
63
+ public_updates_channel_id: public_updates_channel_id, preferred_locale: preferred_locale
64
+ }
65
+ )
66
+ request(Route.new(:PATCH, '/guilds/%{guild_id}', guild_id: guild_id), json: json, reason: reason)
67
+ end
68
+
69
+ # @vox.api_docs https://discord.com/developers/docs/resources/guild#delete-guild
70
+ def delete_guild(guild_id)
71
+ request(Route.new(:DELETE, '/guilds/%{guild_id}', guild_id: guild_id))
72
+ end
73
+
74
+ # @vox.api_docs https://discord.com/developers/docs/resources/guild#get-guild-channels
75
+ def get_guild_channels(guild_id)
76
+ request(Route.new(:GET, '/guilds/%{guild_id}/channels', guild_id: guild_id))
77
+ end
78
+
79
+ # @vox.api_docs https://discord.com/developers/docs/resources/guild#create-guild-channel
80
+ def create_guild_channel(guild_id, name: :undef, type: :undef, topic: :undef, bitrate: :undef,
81
+ user_limit: :undef, rate_limit_per_user: :undef, position: :undef,
82
+ permission_overwrites: :undef, parent_id: :undef, nsfw: :undef, reason: nil)
83
+ json = filter_undef(
84
+ {
85
+ name: name, type: type, topic: topic, bitrate: bitrate, user_limit: user_limit,
86
+ rate_limit_per_user: rate_limit_per_user, position: position,
87
+ permission_overwrites: permission_overwrites, parent_id: parent_id, nsfw: nsfw
88
+ }
89
+ )
90
+ request(Route.new(:POST, '/guilds/%{guild_id}/channels', guild_id: guild_id), json: json, reason: reason)
91
+ end
92
+
93
+ # @vox.api_docs https://discord.com/developers/docs/resources/guild#modify-guild-channel-positions
94
+ def modify_guild_channel_positions(guild_id, positions, reason: nil)
95
+ route = Route.new(:PATCH, '/guilds/%{guild_id}/channels', guild_id: guild_id)
96
+ request(route, json: positions, reason: reason)
97
+ end
98
+
99
+ # @vox.api_docs https://discord.com/developers/docs/resources/guild#get-guild-member
100
+ def get_guild_member(guild_id, user_id)
101
+ request(Route.new(:GET, '/guilds/%{guild_id}/members/%{user_id}', guild_id: guild_id, user_id: user_id))
102
+ end
103
+
104
+ # @vox.api_docs https://discord.com/developers/docs/resources/guild#list-guild-members
105
+ def list_guild_members(guild_id, limit: :undef, after: :undef)
106
+ params = filter_undef({ limit: limit, after: after })
107
+ request(Route.new(:GET, '/guilds/%{guild_id}/members', guild_id: guild_id), query: params)
108
+ end
109
+
110
+ # @vox.oauth_scope guilds.join
111
+ def add_guild_member(guild_id, user_id, access_token:, nick: :undef, roles: :undef, mute: :undef, deaf: :undef)
112
+ json = filter_undef({ access_token: access_token, nick: nick, roles: roles, mute: mute, deaf: deaf })
113
+ route = Route.new(:PUT, '/guilds/%{guild_id}/members/%{user_id}', guild_id: guild_id, user_id: user_id)
114
+ request(route, json: json)
115
+ end
116
+
117
+ # @vox.api_docs https://discord.com/developers/docs/resources/guild#modify-guild-member
118
+ def modify_guild_member(guild_id, user_id, nick: :undef, roles: :undef, mute: :undef, deaf: :undef,
119
+ channel_id: :undef, reason: nil)
120
+ json = filter_undef({ nick: nick, roles: roles, mute: mute, deaf: deaf, channel_id: channel_id })
121
+ route = Route.new(:PATCH, '/guilds/%{guild_id}/members/%{user_id}', guild_id: guild_id, user_id: user_id)
122
+ request(route, json: json, reason: reason)
123
+ end
124
+
125
+ # @vox.api_docs https://discord.com/developers/docs/resources/guild#modify-current-user-nick
126
+ def modify_current_user_nick(guild_id, nick: :undef, reason: nil)
127
+ json = filter_undef({ nick: nick })
128
+ route = Route.new(:PATCH, '/guilds/%{guild_id}/members/@me/nick', guild_id: guild_id)
129
+ request(route, json: json, reason: reason)
130
+ end
131
+
132
+ # @vox.api_docs https://discord.com/developers/docs/resources/guild#add-guild-member-role
133
+ def add_guild_member_role(guild_id, user_id, role_id, reason: nil)
134
+ route = Route.new(:PUT, '/guilds/%{guild_id}/members/%{user_id}/roles/%{role_id}',
135
+ guild_id: guild_id, user_id: user_id, role_id: role_id)
136
+ request(route, reason: reason)
137
+ end
138
+
139
+ # @vox.api_docs https://discord.com/developers/docs/resources/guild#remove-guild-member-role
140
+ def remove_guild_member_role(guild_id, user_id, role_id, reason: nil)
141
+ route = Route.new(:DELETE, '/guilds/%{guild_id}/members/%{user_id}/roles/%{role_id}',
142
+ guild_id: guild_id, user_id: user_id, role_id: role_id)
143
+ request(route, reason: reason)
144
+ end
145
+
146
+ # @vox.api_docs https://discord.com/developers/docs/resources/guild#remove-guild-member
147
+ def remove_guild_member(guild_id, user_id, reason: nil)
148
+ route = Route.new(:DELETE, '/guilds/%{guild_id}/members/%{user_id}', guild_id: guild_id, user_id: user_id)
149
+ request(route, reason: reason)
150
+ end
151
+
152
+ # @vox.api_docs https://discord.com/developers/docs/resources/guild#get-guild-bans
153
+ def get_guild_bans(guild_id)
154
+ request(Route.new(:GET, '/guilds/%{guild_id}/bans', guild_id: guild_id))
155
+ end
156
+
157
+ # @vox.api_docs https://discord.com/developers/docs/resources/guild#get-guild-ban
158
+ def get_guild_ban(guild_id, user_id)
159
+ request(Route.new(:GET, '/guilds/%{guild_id}/bans/%{user_id}', guild_id: guild_id, user_id: user_id))
160
+ end
161
+
162
+ # @vox.api_docs https://discord.com/developers/docs/resources/guild#create-guild-ban
163
+ def create_guild_ban(guild_id, user_id, deleted_message_days: :undef, reason: :undef)
164
+ json = filter_undef({ deleted_message_days: deleted_message_days, reason: reason })
165
+ route = Route.new(:PUT, '/guilds/%{guild_id}/bans/%{user_id}', guild_id: guild_id, user_id: user_id)
166
+ request(route, json: json)
167
+ end
168
+
169
+ # @vox.api_docs https://discord.com/developers/docs/resources/guild#remove-guild-ban
170
+ def remove_guild_ban(guild_id, user_id, reason: nil)
171
+ route = Route.new(:DELETE, '/guilds/%{guild_id}/bans/%{user_id}', guild_id: guild_id, user_id: user_id)
172
+ request(route, reason: reason)
173
+ end
174
+
175
+ # @vox.api_docs https://discord.com/developers/docs/resources/guild#get-guild-roles
176
+ def get_guild_roles(guild_id)
177
+ request(Route.new(:GET, '/guilds/%{guild_id}/roles', guild_id: guild_id))
178
+ end
179
+
180
+ # @vox.api_docs https://discord.com/developers/docs/resources/guild#create-guild-role
181
+ def create_guild_role(guild_id, name: :undef, permissions: :undef, color: :undef, hoist: :undef,
182
+ mentionable: :undef, reason: nil)
183
+ json = filter_undef({ name: name, permissions: permissions, color: color,
184
+ hoist: hoist, mentionable: mentionable })
185
+ request(Route.new(:POST, '/guilds/%{guild_id}/roles', guild_id: guild_id), json: json, reason: reason)
186
+ end
187
+
188
+ # @vox.api_docs https://discord.com/developers/docs/resources/guild#modify-guild-role-positions
189
+ def modify_guild_role_positions(guild_id, positions, reason: nil)
190
+ request(Route.new(:PATCH, '/guilds/%{guild_id}/roles', guild_id: guild_id), json: positions, reason: reason)
191
+ end
192
+
193
+ # @vox.api_docs https://discord.com/developers/docs/resources/guild#modify-guild-role
194
+ def modify_guild_role(guild_id, role_id, name: :undef, permissions: :undef, color: :undef, hoist: :undef,
195
+ mentionable: :undef, reason: nil)
196
+ json = filter_undef({ name: name, permissions: permissions, color: color,
197
+ hoist: hoist, mentionable: mentionable })
198
+ route = Route.new(:PATCH, '/guilds/%{guild_id}/roles/%{role_id}', guild_id: guild_id, role_id: role_id)
199
+ request(route, json: json, reason: reason)
200
+ end
201
+
202
+ # @vox.api_docs https://discord.com/developers/docs/resources/guild#delete-guild-role
203
+ def delete_guild_role(guild_id, role_id, reason: nil)
204
+ route = Route.new(:DELETE, '/guilds/%{guild_id}/roles/%{role_id}', guild_id: guild_id, role_id: role_id)
205
+ request(route, reason: reason)
206
+ end
207
+
208
+ # @vox.api_docs https://discord.com/developers/docs/resources/guild#get-guild-prune-count
209
+ def get_guild_prune_count(guild_id, days: :undef, include_roles: :undef)
210
+ params = filter_undef({ days: days, include_roles: include_roles })
211
+ request(Route.new(:GET, '/guilds/%{guild_id}/prune', guild_id: guild_id), query: params)
212
+ end
213
+
214
+ # @vox.api_docs https://discord.com/developers/docs/resources/guild#begin-guild-prune
215
+ def begin_guild_prune(guild_id, days: :undef, compute_prune_count: :undef, include_roles: :undef, reason: nil)
216
+ json = filter_undef({ days: days, compute_prune_count: compute_prune_count, include_roles: include_roles })
217
+ route = Route.new(:POST, '/guilds/%{guild_id}/prune', guild_id: guild_id)
218
+ request(route, json: json, reason: reason)
219
+ end
220
+
221
+ # @vox.api_docs https://discord.com/developers/docs/resources/guild#get-guild-voice-regions
222
+ def get_guild_voice_regions(guild_id)
223
+ request(Route.new(:GET, '/guilds/%{guild_id}/regions', guild_id: guild_id))
224
+ end
225
+
226
+ # @vox.api_docs https://discord.com/developers/docs/resources/guild#get-guild-invites
227
+ def get_guild_invites(guild_id)
228
+ request(Route.new(:GET, '/guilds/%{guild_id}/invites', guild_id: guild_id))
229
+ end
230
+
231
+ # @vox.api_docs https://discord.com/developers/docs/resources/guild#get-guild-integrations
232
+ def get_guild_integrations(guild_id)
233
+ request(Route.new(:GET, '/guilds/%{guild_id}/integrations', guild_id: guild_id))
234
+ end
235
+
236
+ # @vox.api_docs https://discord.com/developers/docs/resources/guild#create-guild-integration
237
+ def create_guild_integration(guild_id, type:, id:)
238
+ json = { type: type, id: id }
239
+ request(Route.new(:POST, '/guilds/%{guild_id}/integrations', guild_id: guild_id), json: json)
240
+ end
241
+
242
+ # @vox.api_docs https://discord.com/developers/docs/resources/guild#modify-guild-integration
243
+ def modify_guild_integration(guild_id, integration_id, expire_behavior: :undef, expire_grace_period: :undef,
244
+ enable_emoticons: :undef, reason: nil)
245
+ json = filter_undef({ expire_behavior: expire_behavior, expire_grace_period: expire_grace_period,
246
+ enable_emoticons: enable_emoticons })
247
+ route = Route.new(:PATCH, '/guilds/%{guild_id}/integrations/%{integration_id}',
248
+ guild_id: guild_id, integration_id: integration_id)
249
+ request(route, json: json, reason: reason)
250
+ end
251
+
252
+ # @vox.api_docs https://discord.com/developers/docs/resources/guild#delete-guild-integration
253
+ def delete_guild_integration(guild_id, integration_id, reason: nil)
254
+ route = Route.new(:DELETE, '/guilds/%{guild_id}/integrations/%{integration_id}',
255
+ guild_id: guild_id, integration_id: integration_id)
256
+ request(route, reason: reason)
257
+ end
258
+
259
+ # @vox.api_docs https://discord.com/developers/docs/resources/guild#sync-guild-integration
260
+ def sync_guild_integration(guild_id, integration_id, reason: nil)
261
+ route = Route.new(:POST, '/guilds/%{guild_id}/integrations/%{integration_id}/sync',
262
+ guild_id: guild_id, integration_id: integration_id)
263
+ request(route, reason: reason)
264
+ end
265
+
266
+ # @vox.api_docs https://discord.com/developers/docs/resources/guild#get-guild-widget
267
+ def get_guild_widget(guild_id)
268
+ request(Route.new(:GET, '/guilds/%{guild_id}/widget', guild_id: guild_id))
269
+ end
270
+
271
+ # @vox.api_docs https://discord.com/developers/docs/resources/guild#modify-guild-widget
272
+ def modify_guild_widget(guild_id, enabled: :undef, channel_id: :undef, reason: nil)
273
+ json = filter_undef({ enabled: enabled, channel_id: channel_id })
274
+ route = Route.new(:PATCH, '/guilds/%{guild_id}/widget', guild_id: guild_id)
275
+ request(route, json: json, reason: reason)
276
+ end
277
+
278
+ # @vox.api_docs https://discord.com/developers/docs/resources/guild#get-guild-vanity-url
279
+ def get_guild_vanity_url(guild_id)
280
+ request(Route.new(:GET, '/guilds/%{guild_id}/vanity-url', guild_id: guild_id))
281
+ end
282
+
283
+ # @vox.api_docs https://discord.com/developers/docs/resources/guild#get-guild-widget-image
284
+ def get_guild_widget_image(guild_id, style: :undef)
285
+ params = filter_undef({ style: style })
286
+ route = Route.new(:GET, '/guilds/%{guild_id}/widget.png', guild_id: guild_id)
287
+ request(route, query: params, raw: true)
288
+ end
289
+ end
290
+ end
291
+ end
292
+ end
@@ -0,0 +1,37 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'vox/http/route'
4
+ require 'vox/http/util'
5
+
6
+ module Vox
7
+ module HTTP
8
+ module Routes
9
+ # Mixin for invite routes.
10
+ module Invite
11
+ include Util
12
+
13
+ # Get an invite by its code.
14
+ # @param invite_code [String]
15
+ # @param with_counts [true, false] Whether the invite object should contain approximate member counts.
16
+ # @return [Hash<Symbol, Object>] The [invite](https://discord.com/developers/docs/resources/invite#invite-object)
17
+ # object.
18
+ # @vox.api_docs https://discord.com/developers/docs/resources/invite#get-invite
19
+ def get_invite(invite_code, with_counts: :undef)
20
+ route = Route.new(:GET, '/invites/%{invite_code}', invite_code: invite_code)
21
+ request(route, query: filter_undef({ with_counts: with_counts }))
22
+ end
23
+
24
+ # Delete an invite by its code.
25
+ # @param invite_code [String]
26
+ # @return [Hash<Symbol, Object>] The deleted [invite](https://discord.com/developers/docs/resources/invite#invite-object)
27
+ # object.
28
+ # @vox.permissions MANAGE_CHANNELS or MANAGE_GUILD
29
+ # @vox.api_docs https://discord.com/developers/docs/resources/invite#delete-invite
30
+ def delete_invite(invite_code, reason: nil)
31
+ route = Route.new(:DELETE, '/invites/%{invite_code}', invite_code: invite_code)
32
+ request(route, reason: reason)
33
+ end
34
+ end
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,114 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'vox/http/route'
4
+ require 'vox/http/util'
5
+
6
+ module Vox
7
+ module HTTP
8
+ module Routes
9
+ # Mixin for user routes.
10
+ module User
11
+ include Util
12
+
13
+ # rubocop:disable Naming/AccessorMethodName
14
+
15
+ # Get information about the current user.
16
+ # @return [Hash<Symbol, Object>] The [user](https://discord.com/developers/docs/resources/user#user-object)
17
+ # object for the current user.
18
+ # @vox.oauth_scope identify
19
+ # @vox.api_docs https://discord.com/developers/docs/resources/user#get-current-user
20
+ def get_current_user
21
+ request(Route.new(:GET, '/users/@me'))
22
+ end
23
+
24
+ # Get information about a user by ID.
25
+ # @return [Hash<Symbol, Object] The [user](https://discord.com/developers/docs/resources/user#user-object)
26
+ # object for the target user.
27
+ # @vox.api_docs https://discord.com/developers/docs/resources/user#get-user
28
+ def get_user(user_id)
29
+ request(Route.new(:GET, '/users/%{user_id}', user_id: user_id))
30
+ end
31
+
32
+ # Modify the current user.
33
+ # @param username [String]
34
+ # @param avatar [UploadIO]
35
+ # @return [Hash<Symbol, Object>] The updated [user](https://discord.com/developers/docs/resources/user#user-object)
36
+ # object.
37
+ # @vox.api_docs https://discord.com/developers/docs/resources/user#modify-current-user
38
+ def modify_current_user(username: :undef, avatar: :undef)
39
+ avatar = if avatar != :undef && !avatar.nil?
40
+ image_data = avatar.io.read
41
+ "data:#{avatar.content_type};base64,#{Base64.encode64(image_data)}"
42
+ else
43
+ :undef
44
+ end
45
+ json = filter_undef({ username: username, avatar: avatar })
46
+ request(Route.new(:PATCH, '/users/@me'), json: json)
47
+ end
48
+
49
+ # List the guilds that the current user is in.
50
+ # @param before [String, Integer] Get guilds before this ID.
51
+ # @param after [String, Integer] Get guilds after this ID.
52
+ # @param limit [String, Integer] Maximum number of guilds to return.
53
+ # @return [Array<Hash<Symbol, Object>>] An array of [guild](https://discord.com/developers/docs/resources/guild#guild-object)
54
+ # objects.
55
+ # @vox.oauth_scope guilds
56
+ # @vox.api_docs https://discord.com/developers/docs/resources/user#get-current-user-guilds
57
+ def get_current_user_guilds(before: :undef, after: :undef, limit: :undef)
58
+ params = filter_undef({ before: before, after: after, limit: limit })
59
+ request(Route.new(:GET, '/users/@me/guilds'), query: params)
60
+ end
61
+
62
+ # Leave a guild.
63
+ # @param guild_id [String, Integer] The ID of the guild to leave.
64
+ # @return [nil] Returns nil on success.
65
+ # @vox.api_docs https://discord.com/developers/docs/resources/user#get-current-user-guilds
66
+ def leave_guild(guild_id)
67
+ request(Route.new(:DELETE, '/users/@me/guilds/%{guild_id}', guild_id: guild_id))
68
+ end
69
+
70
+ # Get a list of the current user's DM channels.
71
+ # @return [Array<Hash<Symbol, Object>>] An array of [DM channel](https://discord.com/developers/docs/resources/channel#channel-object)
72
+ # objects.
73
+ # @vox.api_docs https://discord.com/developers/docs/resources/user#get-user-dms
74
+ def get_user_dms
75
+ request(Route.new(:GET, '/users/@me/channels'))
76
+ end
77
+
78
+ # Create a new DM channel with a user.
79
+ # @param recipient_id [String, Integer] The ID of the recipient to open a DM with.
80
+ # @return [Hash<Symbol, Object>] The [DM channel](https://discord.com/developers/docs/resources/channel#channel-object)
81
+ # object.
82
+ # @vox.api_docs https://discord.com/developers/docs/resources/user#create-dm
83
+ def create_dm(recipient_id)
84
+ request(Route.new(:POST, '/users/@me/channels'), json: { recipient_id: recipient_id })
85
+ end
86
+
87
+ # Create a new DM with multiple users.
88
+ # @param access_tokens [Array<String, Integer>] Access tokens of users that have granted your app the `gdm.join`
89
+ # scope.
90
+ # @param nicks [Hash<(String, Integer), String>] A hash mapping user IDs to their nicknames.
91
+ # @note This endpoint was intended for a now deprecated SDK. DMs created with this endpoint are not
92
+ # visible in the Discord client.
93
+ # @note This endpoint is limited to 10 active group DMs.
94
+ # @vox.oauth_scope gdm.join
95
+ # @vox.api_docs https://discord.com/developers/docs/resources/user#create-group-dm
96
+ def create_group_dm(access_tokens, nicks: :undef)
97
+ json = filter_undef({ access_tokens: access_tokens, nicks: nicks })
98
+ request(Route.new(:POST, '/users/@me/channels'), json: json)
99
+ end
100
+
101
+ # Get a list of connection objects for the current user.
102
+ # @return [Array<Hash<Symbol, Object>>] An array of [connection](https://discord.com/developers/docs/resources/user#connection-object)
103
+ # objects.
104
+ # @vox.oauth_scope connections
105
+ # @vox.api_docs https://discord.com/developers/docs/resources/user#get-user-connections
106
+ def get_user_connections
107
+ request(Route.new(:GET, '/users/@me/connections'))
108
+ end
109
+
110
+ # rubocop:enable Naming/AccessorMethodName
111
+ end
112
+ end
113
+ end
114
+ end
@@ -0,0 +1,22 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'vox/http/route'
4
+ require 'vox/http/util'
5
+
6
+ module Vox
7
+ module HTTP
8
+ module Routes
9
+ # Mixin for voice routes.
10
+ module Voice
11
+ # Lists voice regions that can be used when creating guilds.
12
+ # @return [Array<Hash<Symbol, Object>>] An array of [voice region](https://discord.com/developers/docs/resources/voice#voice-region-object)
13
+ # objects.
14
+ # @vox.api_docs https://discord.com/developers/docs/resources/voice#list-voice-regions
15
+ def list_voice_regions
16
+ route = Route.new(:GET, '/voice/regions')
17
+ request(route)
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end