discorb 0.13.0 → 0.13.4
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.
- checksums.yaml +4 -4
- data/.github/workflows/build_main.yml +1 -0
- data/.github/workflows/build_version.yml +4 -3
- data/.github/workflows/crowdin.yml +32 -0
- data/.gitignore +3 -1
- data/.yardopts +2 -0
- data/CODE_OF_CONDUCT.md +128 -0
- data/Changelog.md +420 -388
- data/Gemfile +5 -1
- data/README.md +2 -2
- data/Rakefile +131 -1
- data/crowdin.yml +2 -0
- data/discorb.gemspec +12 -1
- data/docs/Examples.md +2 -0
- data/docs/application_command.md +7 -5
- data/docs/cli/irb.md +2 -0
- data/docs/cli/new.md +2 -0
- data/docs/cli/run.md +3 -1
- data/docs/cli/setup.md +4 -2
- data/docs/cli.md +2 -0
- data/docs/events.md +6 -4
- data/docs/extension.md +2 -2
- data/docs/faq.md +4 -2
- data/docs/license.md +2 -0
- data/docs/tutorial.md +4 -3
- data/docs/voice_events.md +2 -0
- data/lib/discorb/app_command.rb +32 -9
- data/lib/discorb/application.rb +1 -1
- data/lib/discorb/asset.rb +1 -1
- data/lib/discorb/channel.rb +170 -125
- data/lib/discorb/client.rb +20 -22
- data/lib/discorb/common.rb +32 -1
- data/lib/discorb/dictionary.rb +10 -2
- data/lib/discorb/emoji.rb +7 -9
- data/lib/discorb/emoji_table.rb +3891 -3891
- data/lib/discorb/event.rb +12 -11
- data/lib/discorb/exe/show.rb +2 -0
- data/lib/discorb/extension.rb +1 -1
- data/lib/discorb/flag.rb +1 -1
- data/lib/discorb/gateway.rb +63 -17
- data/lib/discorb/guild.rb +110 -156
- data/lib/discorb/guild_template.rb +15 -12
- data/lib/discorb/http.rb +41 -136
- data/lib/discorb/integration.rb +34 -2
- data/lib/discorb/interaction/autocomplete.rb +1 -1
- data/lib/discorb/interaction/response.rb +34 -32
- data/lib/discorb/interaction/root.rb +8 -0
- data/lib/discorb/invite.rb +4 -3
- data/lib/discorb/log.rb +3 -2
- data/lib/discorb/member.rb +44 -15
- data/lib/discorb/message.rb +33 -22
- data/lib/discorb/modules.rb +28 -35
- data/lib/discorb/presence.rb +2 -2
- data/lib/discorb/rate_limit.rb +14 -18
- data/lib/discorb/role.rb +18 -14
- data/lib/discorb/sticker.rb +10 -14
- data/lib/discorb/user.rb +10 -10
- data/lib/discorb/voice_state.rb +12 -7
- data/lib/discorb/webhook.rb +44 -50
- data/lib/discorb.rb +1 -1
- data/po/yard.pot +7772 -5154
- data/sig/discorb.rbs +3316 -3819
- data/template-replace/scripts/locale_ja.rb +62 -0
- metadata +18 -5
data/lib/discorb/channel.rb
CHANGED
@@ -166,8 +166,7 @@ module Discorb
|
|
166
166
|
|
167
167
|
#
|
168
168
|
# Deletes the channel.
|
169
|
-
# @
|
170
|
-
# @macro http
|
169
|
+
# @async
|
171
170
|
#
|
172
171
|
# @param [String] reason The reason of deleting the channel.
|
173
172
|
#
|
@@ -175,7 +174,7 @@ module Discorb
|
|
175
174
|
#
|
176
175
|
def delete!(reason: nil)
|
177
176
|
Async do
|
178
|
-
@client.http.
|
177
|
+
@client.http.request(Route.new(base_url.wait.to_s, "//webhooks/:webhook_id/:token", :delete), audit_log_reason: reason).wait
|
179
178
|
@deleted = true
|
180
179
|
self
|
181
180
|
end
|
@@ -186,8 +185,7 @@ module Discorb
|
|
186
185
|
|
187
186
|
#
|
188
187
|
# Moves the channel to another position.
|
189
|
-
# @
|
190
|
-
# @macro http
|
188
|
+
# @async
|
191
189
|
#
|
192
190
|
# @param [Integer] position The position to move the channel.
|
193
191
|
# @param [Boolean] lock_permissions Whether to lock the permissions of the channel.
|
@@ -196,14 +194,14 @@ module Discorb
|
|
196
194
|
#
|
197
195
|
# @return [Async::Task<self>] The moved channel.
|
198
196
|
#
|
199
|
-
def move(position, lock_permissions: false, parent:
|
197
|
+
def move(position, lock_permissions: false, parent: Discorb::Unset, reason: nil)
|
200
198
|
Async do
|
201
199
|
payload = {
|
202
200
|
position: position,
|
203
201
|
}
|
204
202
|
payload[:lock_permissions] = lock_permissions
|
205
|
-
payload[:parent_id] = parent&.id if parent !=
|
206
|
-
@client.http.
|
203
|
+
payload[:parent_id] = parent&.id if parent != Discorb::Unset
|
204
|
+
@client.http.request(Route.new("/guilds/#{@guild_id}/channels", "//guilds/:guild_id/channels", :patch), payload, audit_log_reason: reason).wait
|
207
205
|
end
|
208
206
|
end
|
209
207
|
|
@@ -256,8 +254,7 @@ module Discorb
|
|
256
254
|
|
257
255
|
#
|
258
256
|
# Edits the channel.
|
259
|
-
# @
|
260
|
-
# @macro http
|
257
|
+
# @async
|
261
258
|
# @macro edit
|
262
259
|
#
|
263
260
|
# @param [String] name The name of the channel.
|
@@ -275,27 +272,27 @@ module Discorb
|
|
275
272
|
#
|
276
273
|
# @return [Async::Task<self>] The edited channel.
|
277
274
|
#
|
278
|
-
def edit(name:
|
279
|
-
topic:
|
280
|
-
rate_limit_per_user:
|
281
|
-
archive_in:
|
275
|
+
def edit(name: Discorb::Unset, position: Discorb::Unset, category: Discorb::Unset, parent: Discorb::Unset,
|
276
|
+
topic: Discorb::Unset, nsfw: Discorb::Unset, announce: Discorb::Unset,
|
277
|
+
rate_limit_per_user: Discorb::Unset, slowmode: Discorb::Unset, default_auto_archive_duration: Discorb::Unset,
|
278
|
+
archive_in: Discorb::Unset, reason: nil)
|
282
279
|
Async do
|
283
280
|
payload = {}
|
284
|
-
payload[:name] = name if name !=
|
285
|
-
payload[:announce] = announce ? 5 : 0 if announce !=
|
286
|
-
payload[:position] = position if position !=
|
287
|
-
payload[:topic] = topic || "" if topic !=
|
288
|
-
payload[:nsfw] = nsfw if nsfw !=
|
281
|
+
payload[:name] = name if name != Discorb::Unset
|
282
|
+
payload[:announce] = announce ? 5 : 0 if announce != Discorb::Unset
|
283
|
+
payload[:position] = position if position != Discorb::Unset
|
284
|
+
payload[:topic] = topic || "" if topic != Discorb::Unset
|
285
|
+
payload[:nsfw] = nsfw if nsfw != Discorb::Unset
|
289
286
|
|
290
|
-
slowmode = rate_limit_per_user if slowmode ==
|
291
|
-
payload[:rate_limit_per_user] = slowmode || 0 if slowmode !=
|
292
|
-
parent = category if parent ==
|
293
|
-
payload[:parent_id] = parent&.id if parent !=
|
287
|
+
slowmode = rate_limit_per_user if slowmode == Discorb::Unset
|
288
|
+
payload[:rate_limit_per_user] = slowmode || 0 if slowmode != Discorb::Unset
|
289
|
+
parent = category if parent == Discorb::Unset
|
290
|
+
payload[:parent_id] = parent&.id if parent != Discorb::Unset
|
294
291
|
|
295
292
|
default_auto_archive_duration ||= archive_in
|
296
|
-
payload[:default_auto_archive_duration] = default_auto_archive_duration if default_auto_archive_duration !=
|
293
|
+
payload[:default_auto_archive_duration] = default_auto_archive_duration if default_auto_archive_duration != Discorb::Unset
|
297
294
|
|
298
|
-
@client.http.
|
295
|
+
@client.http.request(Route.new("/channels/#{@id}", "//channels/:channel_id", :patch), payload, audit_log_reason: reason).wait
|
299
296
|
self
|
300
297
|
end
|
301
298
|
end
|
@@ -304,8 +301,7 @@ module Discorb
|
|
304
301
|
|
305
302
|
#
|
306
303
|
# Create webhook in the channel.
|
307
|
-
# @
|
308
|
-
# @macro http
|
304
|
+
# @async
|
309
305
|
#
|
310
306
|
# @param [String] name The name of the webhook.
|
311
307
|
# @param [Discorb::Image] avatar The avatar of the webhook.
|
@@ -317,33 +313,33 @@ module Discorb
|
|
317
313
|
payload = {}
|
318
314
|
payload[:name] = name
|
319
315
|
payload[:avatar] = avatar.to_s if avatar
|
320
|
-
_resp, data = @client.http.
|
316
|
+
_resp, data = @client.http.request(Route.new("/channels/#{@id}/webhooks", "//channels/:channel_id/webhooks", :post), payload).wait
|
321
317
|
Webhook.new([@client, data])
|
322
318
|
end
|
323
319
|
end
|
324
320
|
|
325
321
|
#
|
326
322
|
# Fetch webhooks in the channel.
|
327
|
-
# @
|
328
|
-
# @macro http
|
323
|
+
# @async
|
329
324
|
#
|
330
325
|
# @return [Async::Task<Array<Discorb::Webhook>>] The webhooks in the channel.
|
331
326
|
#
|
332
327
|
def fetch_webhooks
|
333
328
|
Async do
|
334
|
-
_resp, data = @client.http.
|
329
|
+
_resp, data = @client.http.request(Route.new("/channels/#{@id}/webhooks", "//channels/:channel_id/webhooks", :get)).wait
|
335
330
|
data.map { |webhook| Webhook.new([@client, webhook]) }
|
336
331
|
end
|
337
332
|
end
|
338
333
|
|
339
334
|
#
|
340
335
|
# Bulk delete messages in the channel.
|
341
|
-
# @
|
342
|
-
# @macro http
|
336
|
+
# @async
|
343
337
|
#
|
344
338
|
# @param [Discorb::Message] messages The messages to delete.
|
345
339
|
# @param [Boolean] force Whether to ignore the validation for message (14 days limit).
|
346
340
|
#
|
341
|
+
# @return [Async::Task<void>] The task.
|
342
|
+
#
|
347
343
|
def delete_messages!(*messages, force: false)
|
348
344
|
Async do
|
349
345
|
messages = messages.first if messages.length == 1 && messages.first.is_a?(Array)
|
@@ -358,7 +354,7 @@ module Discorb
|
|
358
354
|
|
359
355
|
message_ids = messages.map { |m| Discorb::Utils.try(m, :id).to_s }
|
360
356
|
|
361
|
-
@client.http.
|
357
|
+
@client.http.request(Route.new("/channels/#{@id}/messages/bulk-delete", "//channels/:channel_id/messages/bulk-delete", :post), { messages: message_ids }).wait
|
362
358
|
end
|
363
359
|
end
|
364
360
|
|
@@ -367,12 +363,13 @@ module Discorb
|
|
367
363
|
|
368
364
|
#
|
369
365
|
# Set the channel's permission overwrite.
|
370
|
-
# @
|
371
|
-
# @macro http
|
366
|
+
# @async
|
372
367
|
#
|
373
368
|
# @param [Discorb::Role, Discorb::Member] target The target of the overwrite.
|
374
369
|
# @param [String] reason The reason of setting the overwrite.
|
375
|
-
# @param [Symbol => Boolean] perms The permission overwrites to replace.
|
370
|
+
# @param [{Symbol => Boolean}] perms The permission overwrites to replace.
|
371
|
+
#
|
372
|
+
# @return [Async::Task<void>] The task.
|
376
373
|
#
|
377
374
|
def set_permissions(target, reason: nil, **perms)
|
378
375
|
Async do
|
@@ -387,7 +384,7 @@ module Discorb
|
|
387
384
|
deny: deny_value,
|
388
385
|
type: target.is_a?(Member) ? 1 : 0,
|
389
386
|
}
|
390
|
-
@client.http.
|
387
|
+
@client.http.request(Route.new("/channels/#{@id}/permissions/#{target.id}", "//channels/:channel_id/permissions/:target_id", :put), payload, audit_log_reason: reason).wait
|
391
388
|
end
|
392
389
|
end
|
393
390
|
|
@@ -398,15 +395,16 @@ module Discorb
|
|
398
395
|
|
399
396
|
#
|
400
397
|
# Delete the channel's permission overwrite.
|
401
|
-
# @
|
402
|
-
# @macro http
|
398
|
+
# @async
|
403
399
|
#
|
404
400
|
# @param [Discorb::Role, Discorb::Member] target The target of the overwrite.
|
405
401
|
# @param [String] reason The reason of deleting the overwrite.
|
406
402
|
#
|
403
|
+
# @return [Async::Task<void>] The task.
|
404
|
+
#
|
407
405
|
def delete_permissions(target, reason: nil)
|
408
406
|
Async do
|
409
|
-
@client.http.
|
407
|
+
@client.http.request(Route.new("/channels/#{@id}/permissions/#{target.id}", "//channels/:channel_id/permissions/:target_id", :delete), audit_log_reason: reason).wait
|
410
408
|
end
|
411
409
|
end
|
412
410
|
|
@@ -416,22 +414,20 @@ module Discorb
|
|
416
414
|
|
417
415
|
#
|
418
416
|
# Fetch the channel's invites.
|
419
|
-
# @
|
420
|
-
# @macro http
|
417
|
+
# @async
|
421
418
|
#
|
422
419
|
# @return [Async::Task<Array<Discorb::Invite>>] The invites in the channel.
|
423
420
|
#
|
424
421
|
def fetch_invites
|
425
422
|
Async do
|
426
|
-
_resp, data = @client.http.
|
423
|
+
_resp, data = @client.http.request(Route.new("/channels/#{@id}/invites", "//channels/:channel_id/invites", :get)).wait
|
427
424
|
data.map { |invite| Invite.new(@client, invite) }
|
428
425
|
end
|
429
426
|
end
|
430
427
|
|
431
428
|
#
|
432
429
|
# Create an invite in the channel.
|
433
|
-
# @
|
434
|
-
# @macro http
|
430
|
+
# @async
|
435
431
|
#
|
436
432
|
# @param [Integer] max_age The max age of the invite.
|
437
433
|
# @param [Integer] max_uses The max uses of the invite.
|
@@ -444,7 +440,7 @@ module Discorb
|
|
444
440
|
#
|
445
441
|
def create_invite(max_age: nil, max_uses: nil, temporary: false, unique: false, reason: nil)
|
446
442
|
Async do
|
447
|
-
_resp, data = @client.http.
|
443
|
+
_resp, data = @client.http.request(Route.new("/channels/#{@id}/invites", "//channels/:channel_id/invites", :post), {
|
448
444
|
max_age: max_age,
|
449
445
|
max_uses: max_uses,
|
450
446
|
temporary: temporary,
|
@@ -456,36 +452,37 @@ module Discorb
|
|
456
452
|
|
457
453
|
#
|
458
454
|
# Follow the existing announcement channel.
|
459
|
-
# @
|
460
|
-
# @macro http
|
455
|
+
# @async
|
461
456
|
#
|
462
457
|
# @param [Discorb::NewsChannel] target The channel to follow.
|
463
458
|
# @param [String] reason The reason of following the channel.
|
464
459
|
#
|
460
|
+
# @return [Async::Task<void>] The task.
|
461
|
+
#
|
465
462
|
def follow_from(target, reason: nil)
|
466
463
|
Async do
|
467
|
-
@client.http.
|
464
|
+
@client.http.request(Route.new("/channels/#{target.id}/followers", "//channels/:channel_id/followers", :post), { webhook_channel_id: @id }, audit_log_reason: reason).wait
|
468
465
|
end
|
469
466
|
end
|
470
467
|
|
471
468
|
#
|
472
469
|
# Follow the existing announcement channel from self.
|
473
|
-
# @
|
474
|
-
# @macro http
|
470
|
+
# @async
|
475
471
|
#
|
476
472
|
# @param [Discorb::TextChannel] target The channel to follow to.
|
477
473
|
# @param [String] reason The reason of following the channel.
|
478
474
|
#
|
475
|
+
# @return [Async::Task<void>] The task.
|
476
|
+
#
|
479
477
|
def follow_to(target, reason: nil)
|
480
478
|
Async do
|
481
|
-
@client.http.
|
479
|
+
@client.http.request(Route.new("/channels/#{@id}/followers", "//channels/:channel_id/followers", :post), { webhook_channel_id: target.id }, audit_log_reason: reason).wait
|
482
480
|
end
|
483
481
|
end
|
484
482
|
|
485
483
|
#
|
486
484
|
# Start thread in the channel.
|
487
|
-
# @
|
488
|
-
# @macro http
|
485
|
+
# @async
|
489
486
|
#
|
490
487
|
# @param [String] name The name of the thread.
|
491
488
|
# @param [Discorb::Message] message The message to start the thread.
|
@@ -500,17 +497,15 @@ module Discorb
|
|
500
497
|
def start_thread(name, message: nil, auto_archive_duration: 1440, public: true, rate_limit_per_user: nil, slowmode: nil, reason: nil)
|
501
498
|
Async do
|
502
499
|
_resp, data = if message.nil?
|
503
|
-
@client.http.post
|
504
|
-
|
505
|
-
|
506
|
-
|
507
|
-
|
508
|
-
|
509
|
-
|
510
|
-
audit_log_reason: reason,
|
511
|
-
).wait
|
500
|
+
@client.http.request(Route.new("/channels/#{@id}/threads", "//channels/:channel_id/threads", :post), {
|
501
|
+
name: name,
|
502
|
+
auto_archive_duration: auto_archive_duration,
|
503
|
+
type: public ? 11 : 10,
|
504
|
+
rate_limit_per_user: rate_limit_per_user || slowmode,
|
505
|
+
},
|
506
|
+
audit_log_reason: reason).wait
|
512
507
|
else
|
513
|
-
@client.http.
|
508
|
+
@client.http.request(Route.new("/channels/#{@id}/messages/#{Utils.try(message, :id)}/threads", "//channels/:channel_id/messages/:message_id/threads", :post), {
|
514
509
|
name: name, auto_archive_duration: auto_archive_duration,
|
515
510
|
}, audit_log_reason: reason).wait
|
516
511
|
end
|
@@ -522,36 +517,33 @@ module Discorb
|
|
522
517
|
|
523
518
|
#
|
524
519
|
# Fetch archived threads in the channel.
|
525
|
-
# @
|
526
|
-
# @macro http
|
520
|
+
# @async
|
527
521
|
#
|
528
522
|
# @return [Async::Task<Array<Discorb::ThreadChannel>>] The archived threads in the channel.
|
529
523
|
#
|
530
524
|
def fetch_archived_public_threads
|
531
525
|
Async do
|
532
|
-
_resp, data = @client.http.
|
526
|
+
_resp, data = @client.http.request(Route.new("/channels/#{@id}/threads/archived/public", "//channels/:channel_id/threads/archived/public", :get)).wait
|
533
527
|
data.map { |thread| Channel.make_channel(@client, thread) }
|
534
528
|
end
|
535
529
|
end
|
536
530
|
|
537
531
|
#
|
538
532
|
# Fetch archived private threads in the channel.
|
539
|
-
# @
|
540
|
-
# @macro http
|
533
|
+
# @async
|
541
534
|
#
|
542
535
|
# @return [Async::Task<Array<Discorb::ThreadChannel>>] The archived private threads in the channel.
|
543
536
|
#
|
544
537
|
def fetch_archived_private_threads
|
545
538
|
Async do
|
546
|
-
_resp, data = @client.http.
|
539
|
+
_resp, data = @client.http.request(Route.new("/channels/#{@id}/threads/archived/private", "//channels/:channel_id/threads/archived/private", :get)).wait
|
547
540
|
data.map { |thread| Channel.make_channel(@client, thread) }
|
548
541
|
end
|
549
542
|
end
|
550
543
|
|
551
544
|
#
|
552
545
|
# Fetch joined archived private threads in the channel.
|
553
|
-
# @
|
554
|
-
# @macro http
|
546
|
+
# @async
|
555
547
|
#
|
556
548
|
# @param [Integer] limit The limit of threads to fetch.
|
557
549
|
# @param [Time] before <description>
|
@@ -564,7 +556,7 @@ module Discorb
|
|
564
556
|
before = 0
|
565
557
|
threads = []
|
566
558
|
loop do
|
567
|
-
_resp, data = @client.http.
|
559
|
+
_resp, data = @client.http.request(Route.new("/channels/#{@id}/users/@me/threads/archived/private?before=#{before}", "//channels/:channel_id/users/@me/threads/archived/private", :get)).wait
|
568
560
|
threads += data[:threads].map { |thread| Channel.make_channel(@client, thread) }
|
569
561
|
before = data[:threads][-1][:id]
|
570
562
|
|
@@ -572,7 +564,7 @@ module Discorb
|
|
572
564
|
end
|
573
565
|
threads
|
574
566
|
else
|
575
|
-
_resp, data = @client.http.
|
567
|
+
_resp, data = @client.http.request(Route.new("/channels/#{@id}/users/@me/threads/archived/private?limit=#{limit}&before=#{before}", "//channels/:channel_id/users/@me/threads/archived/private", :get)).wait
|
576
568
|
data.map { |thread| Channel.make_channel(@client, thread) }
|
577
569
|
end
|
578
570
|
end
|
@@ -609,13 +601,17 @@ module Discorb
|
|
609
601
|
# @return [nil] If the user limit is not set.
|
610
602
|
attr_reader :user_limit
|
611
603
|
|
604
|
+
# @!attribute [r] members
|
605
|
+
# @return [Array<Discorb::Member>] The members in the voice channel.
|
606
|
+
# @!attribute [r] voice_states
|
607
|
+
# @return [Array<Discorb::VoiceState>] The voice states associated with the voice channel.
|
608
|
+
|
612
609
|
include Connectable
|
613
610
|
|
614
611
|
@channel_type = 2
|
615
612
|
#
|
616
613
|
# Edit the voice channel.
|
617
|
-
# @
|
618
|
-
# @macro http
|
614
|
+
# @async
|
619
615
|
# @macro edit
|
620
616
|
#
|
621
617
|
# @param [String] name The name of the voice channel.
|
@@ -627,22 +623,30 @@ module Discorb
|
|
627
623
|
#
|
628
624
|
# @return [Async::Task<self>] The edited voice channel.
|
629
625
|
#
|
630
|
-
def edit(name:
|
626
|
+
def edit(name: Discorb::Unset, position: Discorb::Unset, bitrate: Discorb::Unset, user_limit: Discorb::Unset, rtc_region: Discorb::Unset, reason: nil)
|
631
627
|
Async do
|
632
628
|
payload = {}
|
633
|
-
payload[:name] = name if name !=
|
634
|
-
payload[:position] = position if position !=
|
635
|
-
payload[:bitrate] = bitrate if bitrate !=
|
636
|
-
payload[:user_limit] = user_limit if user_limit !=
|
637
|
-
payload[:rtc_region] = rtc_region if rtc_region !=
|
629
|
+
payload[:name] = name if name != Discorb::Unset
|
630
|
+
payload[:position] = position if position != Discorb::Unset
|
631
|
+
payload[:bitrate] = bitrate if bitrate != Discorb::Unset
|
632
|
+
payload[:user_limit] = user_limit if user_limit != Discorb::Unset
|
633
|
+
payload[:rtc_region] = rtc_region if rtc_region != Discorb::Unset
|
638
634
|
|
639
|
-
@client.http.
|
635
|
+
@client.http.request(Route.new("/channels/#{@id}", "//channels/:channel_id", :patch), payload, audit_log_reason: reason).wait
|
640
636
|
self
|
641
637
|
end
|
642
638
|
end
|
643
639
|
|
644
640
|
alias modify edit
|
645
641
|
|
642
|
+
def voice_states
|
643
|
+
guild.voice_states.select { |state| state.channel&.id == @id }
|
644
|
+
end
|
645
|
+
|
646
|
+
def members
|
647
|
+
voice_states.map(&:member)
|
648
|
+
end
|
649
|
+
|
646
650
|
private
|
647
651
|
|
648
652
|
def _set_data(data)
|
@@ -683,8 +687,7 @@ module Discorb
|
|
683
687
|
|
684
688
|
#
|
685
689
|
# Edit the stage channel.
|
686
|
-
# @
|
687
|
-
# @macro http
|
690
|
+
# @async
|
688
691
|
# @macro edit
|
689
692
|
#
|
690
693
|
# @param [String] name The name of the stage channel.
|
@@ -695,14 +698,14 @@ module Discorb
|
|
695
698
|
#
|
696
699
|
# @return [Async::Task<self>] The edited stage channel.
|
697
700
|
#
|
698
|
-
def edit(name:
|
701
|
+
def edit(name: Discorb::Unset, position: Discorb::Unset, bitrate: Discorb::Unset, rtc_region: Discorb::Unset, reason: nil)
|
699
702
|
Async do
|
700
703
|
payload = {}
|
701
|
-
payload[:name] = name if name !=
|
702
|
-
payload[:position] = position if position !=
|
703
|
-
payload[:bitrate] = bitrate if bitrate !=
|
704
|
-
payload[:rtc_region] = rtc_region if rtc_region !=
|
705
|
-
@client.http.
|
704
|
+
payload[:name] = name if name != Discorb::Unset
|
705
|
+
payload[:position] = position if position != Discorb::Unset
|
706
|
+
payload[:bitrate] = bitrate if bitrate != Discorb::Unset
|
707
|
+
payload[:rtc_region] = rtc_region if rtc_region != Discorb::Unset
|
708
|
+
@client.http.request(Route.new("/channels/#{@id}", "//channels/:channel_id", :patch), payload, audit_log_reason: reason).wait
|
706
709
|
self
|
707
710
|
end
|
708
711
|
end
|
@@ -711,8 +714,7 @@ module Discorb
|
|
711
714
|
|
712
715
|
#
|
713
716
|
# Start a stage instance.
|
714
|
-
# @
|
715
|
-
# @macro http
|
717
|
+
# @async
|
716
718
|
#
|
717
719
|
# @param [String] topic The topic of the stage instance.
|
718
720
|
# @param [Boolean] public Whether the stage instance is public or not.
|
@@ -722,22 +724,21 @@ module Discorb
|
|
722
724
|
#
|
723
725
|
def start(topic, public: false, reason: nil)
|
724
726
|
Async do
|
725
|
-
_resp, data = @client.http.
|
727
|
+
_resp, data = @client.http.request(Route.new("/stage-instances", "//stage-instances", :post), { channel_id: @id, topic: topic, public: public ? 2 : 1 }, audit_log_reason: reason).wait
|
726
728
|
StageInstance.new(@client, data)
|
727
729
|
end
|
728
730
|
end
|
729
731
|
|
730
732
|
#
|
731
733
|
# Fetch a current stage instance.
|
732
|
-
# @
|
733
|
-
# @macro http
|
734
|
+
# @async
|
734
735
|
#
|
735
736
|
# @return [Async::Task<StageInstance>] The current stage instance.
|
736
737
|
# @return [Async::Task<nil>] If there is no current stage instance.
|
737
738
|
#
|
738
739
|
def fetch_stage_instance
|
739
740
|
Async do
|
740
|
-
_resp, data = @client.http.
|
741
|
+
_resp, data = @client.http.request(Route.new("/stage-instances/#{@id}", "//stage-instances/:stage_instance_id", :get)).wait
|
741
742
|
rescue Discorb::NotFoundError
|
742
743
|
nil
|
743
744
|
else
|
@@ -745,6 +746,22 @@ module Discorb
|
|
745
746
|
end
|
746
747
|
end
|
747
748
|
|
749
|
+
def voice_states
|
750
|
+
guild.voice_states.select { |state| state.channel&.id == @id }
|
751
|
+
end
|
752
|
+
|
753
|
+
def members
|
754
|
+
voice_states.map(&:member)
|
755
|
+
end
|
756
|
+
|
757
|
+
def speakers
|
758
|
+
voice_states.filter { |state| !state.suppress? }.map(&:member)
|
759
|
+
end
|
760
|
+
|
761
|
+
def audiences
|
762
|
+
voice_states.filter { |state| state.suppress? }.map(&:member)
|
763
|
+
end
|
764
|
+
|
748
765
|
private
|
749
766
|
|
750
767
|
def _set_data(data)
|
@@ -792,6 +809,18 @@ module Discorb
|
|
792
809
|
# @!attribute [r] parent
|
793
810
|
# @macro client_cache
|
794
811
|
# @return [Discorb::GuildChannel] The parent channel of the thread.
|
812
|
+
# @!attribute [r] me
|
813
|
+
# @return [Discorb::ThreadChannel::Member] The bot's member in the thread.
|
814
|
+
# @return [nil] If the bot is not in the thread.
|
815
|
+
# @!attribute [r] joined?
|
816
|
+
# @return [Boolean] Whether the bot is in the thread or not.
|
817
|
+
# @!attribute [r] guild
|
818
|
+
# @macro client_cache
|
819
|
+
# @return [Discorb::Guild] The guild of the thread.
|
820
|
+
# @!attribute [r] owner
|
821
|
+
# @macro client_cache
|
822
|
+
# @macro members_intent
|
823
|
+
# @return [Discorb::Member] The owner of the thread.
|
795
824
|
|
796
825
|
include Messageable
|
797
826
|
@channel_type = nil
|
@@ -807,8 +836,7 @@ module Discorb
|
|
807
836
|
|
808
837
|
#
|
809
838
|
# Edit the thread.
|
810
|
-
# @
|
811
|
-
# @macro http
|
839
|
+
# @async
|
812
840
|
# @macro edit
|
813
841
|
#
|
814
842
|
# @param [String] name The name of the thread.
|
@@ -825,15 +853,15 @@ module Discorb
|
|
825
853
|
# @see #unarchive
|
826
854
|
# @see #unlock
|
827
855
|
#
|
828
|
-
def edit(name:
|
856
|
+
def edit(name: Discorb::Unset, archived: Discorb::Unset, auto_archive_duration: Discorb::Unset, archive_in: Discorb::Unset, locked: Discorb::Unset, reason: nil)
|
829
857
|
Async do
|
830
858
|
payload = {}
|
831
|
-
payload[:name] = name if name !=
|
832
|
-
payload[:archived] = archived if archived !=
|
859
|
+
payload[:name] = name if name != Discorb::Unset
|
860
|
+
payload[:archived] = archived if archived != Discorb::Unset
|
833
861
|
auto_archive_duration ||= archive_in
|
834
|
-
payload[:auto_archive_duration] = auto_archive_duration if auto_archive_duration !=
|
835
|
-
payload[:locked] = locked if locked !=
|
836
|
-
@client.http.
|
862
|
+
payload[:auto_archive_duration] = auto_archive_duration if auto_archive_duration != Discorb::Unset
|
863
|
+
payload[:locked] = locked if locked != Discorb::Unset
|
864
|
+
@client.http.request(Route.new("/channels/#{@id}", "//channels/:channel_id", :patch), payload, audit_log_reason: reason).wait
|
837
865
|
self
|
838
866
|
end
|
839
867
|
end
|
@@ -897,7 +925,7 @@ module Discorb
|
|
897
925
|
end
|
898
926
|
|
899
927
|
def joined?
|
900
|
-
|
928
|
+
!!me
|
901
929
|
end
|
902
930
|
|
903
931
|
def guild
|
@@ -912,33 +940,52 @@ module Discorb
|
|
912
940
|
"#<#{self.class} \"##{@name}\" id=#{@id}>"
|
913
941
|
end
|
914
942
|
|
943
|
+
#
|
944
|
+
# Add a member to the thread.
|
945
|
+
#
|
946
|
+
# @param [Discorb::Member, :me] member The member to add. If `:me` is given, the bot will be added.
|
947
|
+
#
|
948
|
+
# @return [Async::Task<void>] The task.
|
949
|
+
#
|
915
950
|
def add_member(member = :me)
|
916
951
|
Async do
|
917
952
|
if member == :me
|
918
|
-
@client.http.
|
953
|
+
@client.http.request(Route.new("/channels/#{@id}/thread-members/@me", "//channels/:channel_id/thread-members/@me", :post)).wait
|
919
954
|
else
|
920
|
-
@client.http.
|
955
|
+
@client.http.request(Route.new("/channels/#{@id}/thread-members/#{Utils.try(member, :id)}", "//channels/:channel_id/thread-members/:user_id", :post)).wait
|
921
956
|
end
|
922
957
|
end
|
923
958
|
end
|
924
959
|
|
925
960
|
alias join add_member
|
926
961
|
|
962
|
+
#
|
963
|
+
# Remove a member from the thread.
|
964
|
+
#
|
965
|
+
# @param [Discorb::Member, :me] member The member to remove. If `:me` is given, the bot will be removed.
|
966
|
+
#
|
967
|
+
# @return [Async::Task<void>] The task.
|
968
|
+
#
|
927
969
|
def remove_member(member = :me)
|
928
970
|
Async do
|
929
971
|
if member == :me
|
930
|
-
@client.http.
|
972
|
+
@client.http.request(Route.new("/channels/#{@id}/thread-members/@me", "//channels/:channel_id/thread-members/@me", :delete)).wait
|
931
973
|
else
|
932
|
-
@client.http.
|
974
|
+
@client.http.request(Route.new("/channels/#{@id}/thread-members/#{Utils.try(member, :id)}", "//channels/:channel_id/thread-members/:user_id", :delete)).wait
|
933
975
|
end
|
934
976
|
end
|
935
977
|
end
|
936
978
|
|
937
979
|
alias leave remove_member
|
938
980
|
|
981
|
+
#
|
982
|
+
# Fetch members in the thread.
|
983
|
+
#
|
984
|
+
# @return [Array<Discorb::ThreadChannel::Member>] The members in the thread.
|
985
|
+
#
|
939
986
|
def fetch_members
|
940
987
|
Async do
|
941
|
-
_resp, data = @client.http.
|
988
|
+
_resp, data = @client.http.request(Route.new("/channels/#{@id}/thread-members", "//channels/:channel_id/thread-members", :get)).wait
|
942
989
|
data.map { |d| @members[d[:id]] = Member.new(@client, d) }
|
943
990
|
end
|
944
991
|
end
|
@@ -959,6 +1006,9 @@ module Discorb
|
|
959
1006
|
attr_reader :channel_type
|
960
1007
|
end
|
961
1008
|
|
1009
|
+
#
|
1010
|
+
# Repre
|
1011
|
+
#
|
962
1012
|
class Member < DiscordModel
|
963
1013
|
attr_reader :joined_at
|
964
1014
|
|
@@ -1010,24 +1060,26 @@ module Discorb
|
|
1010
1060
|
end
|
1011
1061
|
|
1012
1062
|
class CategoryChannel < GuildChannel
|
1013
|
-
attr_reader :channels
|
1014
|
-
|
1015
1063
|
@channel_type = 4
|
1016
1064
|
|
1065
|
+
def channels
|
1066
|
+
@client.channels.values.filter { |channel| channel.parent == self }
|
1067
|
+
end
|
1068
|
+
|
1017
1069
|
def text_channels
|
1018
|
-
|
1070
|
+
channels.filter { |c| c.is_a? TextChannel }
|
1019
1071
|
end
|
1020
1072
|
|
1021
1073
|
def voice_channels
|
1022
|
-
|
1074
|
+
channels.filter { |c| c.is_a? VoiceChannel }
|
1023
1075
|
end
|
1024
1076
|
|
1025
1077
|
def news_channel
|
1026
|
-
|
1078
|
+
channels.filter { |c| c.is_a? NewsChannel }
|
1027
1079
|
end
|
1028
1080
|
|
1029
1081
|
def stage_channels
|
1030
|
-
|
1082
|
+
channels.filter { |c| c.is_a? StageChannel }
|
1031
1083
|
end
|
1032
1084
|
|
1033
1085
|
def create_text_channel(*args, **kwargs)
|
@@ -1045,13 +1097,6 @@ module Discorb
|
|
1045
1097
|
def create_stage_channel(*args, **kwargs)
|
1046
1098
|
guild.create_stage_channel(*args, parent: self, **kwargs)
|
1047
1099
|
end
|
1048
|
-
|
1049
|
-
private
|
1050
|
-
|
1051
|
-
def _set_data(data)
|
1052
|
-
@channels = @client.channels.values.filter { |channel| channel.parent == self }
|
1053
|
-
super
|
1054
|
-
end
|
1055
1100
|
end
|
1056
1101
|
|
1057
1102
|
class DMChannel < Channel
|