discordrb 3.6.0 → 3.7.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.
- checksums.yaml +4 -4
- data/.github/workflows/release.yml +10 -4
- data/.rubocop.yml +7 -0
- data/CHANGELOG.md +60 -3
- data/discordrb.gemspec +1 -1
- data/lib/discordrb/api/channel.rb +3 -3
- data/lib/discordrb/api/server.rb +2 -2
- data/lib/discordrb/api/user.rb +9 -16
- data/lib/discordrb/api.rb +5 -0
- data/lib/discordrb/bot.rb +24 -4
- data/lib/discordrb/container.rb +15 -0
- data/lib/discordrb/data/channel.rb +72 -2
- data/lib/discordrb/data/collectibles.rb +5 -3
- data/lib/discordrb/data/emoji.rb +1 -1
- data/lib/discordrb/data/interaction.rb +41 -9
- data/lib/discordrb/data/member.rb +39 -5
- data/lib/discordrb/data/message.rb +52 -25
- data/lib/discordrb/data/overwrite.rb +2 -3
- data/lib/discordrb/data/primary_server.rb +1 -1
- data/lib/discordrb/data/profile.rb +21 -40
- data/lib/discordrb/data/reaction.rb +25 -1
- data/lib/discordrb/data/role_subscription.rb +41 -0
- data/lib/discordrb/data/server.rb +6 -4
- data/lib/discordrb/data.rb +1 -0
- data/lib/discordrb/events/interactions.rb +7 -1
- data/lib/discordrb/events/message.rb +32 -3
- data/lib/discordrb/events/reactions.rb +58 -0
- data/lib/discordrb/gateway.rb +2 -5
- data/lib/discordrb/id_object.rb +1 -1
- data/lib/discordrb/permissions.rb +2 -3
- data/lib/discordrb/version.rb +1 -1
- data/lib/discordrb/voice/network.rb +64 -52
- data/lib/discordrb/voice/opcodes.rb +29 -0
- data/lib/discordrb/voice/sodium.rb +137 -78
- data/lib/discordrb/voice/timer.rb +19 -0
- data/lib/discordrb/voice/voice_bot.rb +20 -42
- data/lib/discordrb.rb +3 -1
- metadata +10 -10
|
@@ -2,7 +2,9 @@
|
|
|
2
2
|
|
|
3
3
|
require 'discordrb/voice/encoder'
|
|
4
4
|
require 'discordrb/voice/network'
|
|
5
|
+
require 'discordrb/voice/timer'
|
|
5
6
|
require 'discordrb/logger'
|
|
7
|
+
require 'ffi'
|
|
6
8
|
|
|
7
9
|
# Voice support
|
|
8
10
|
module Discordrb::Voice
|
|
@@ -304,20 +306,19 @@ module Discordrb::Voice
|
|
|
304
306
|
def play_internal
|
|
305
307
|
count = 0
|
|
306
308
|
@playing = true
|
|
309
|
+
self.speaking = true
|
|
307
310
|
|
|
308
|
-
|
|
309
|
-
@length = IDEAL_LENGTH
|
|
311
|
+
last_sent = Process.clock_gettime(Process::CLOCK_MONOTONIC, :millisecond)
|
|
310
312
|
|
|
311
|
-
self.speaking = true
|
|
312
313
|
loop do
|
|
313
|
-
#
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
# If we should adjust, start now
|
|
317
|
-
@length_adjust = Time.now.nsec if should_adjust_this_packet
|
|
314
|
+
# If paused, wait
|
|
315
|
+
sleep 0.1 while @paused
|
|
318
316
|
|
|
319
317
|
break unless @playing
|
|
320
318
|
|
|
319
|
+
# Get timestamp before encoding
|
|
320
|
+
start_time = Process.clock_gettime(Process::CLOCK_MONOTONIC, :millisecond)
|
|
321
|
+
|
|
321
322
|
# If we should skip, get some data, discard it and go to the next iteration
|
|
322
323
|
if @skips.positive?
|
|
323
324
|
@skips -= 1
|
|
@@ -339,45 +340,22 @@ module Discordrb::Voice
|
|
|
339
340
|
next unless buf
|
|
340
341
|
|
|
341
342
|
# Track intermediate adjustment so we can measure how much encoding contributes to the total time
|
|
342
|
-
|
|
343
|
+
intermediate_adjust = Process.clock_gettime(Process::CLOCK_MONOTONIC, :millisecond)
|
|
343
344
|
|
|
344
|
-
|
|
345
|
-
@udp.send_audio(buf, @sequence, @time)
|
|
345
|
+
Process.clock_gettime(Process::CLOCK_MONOTONIC, :millisecond)
|
|
346
346
|
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
@length = @length_override
|
|
352
|
-
elsif @length_adjust # Perform length adjustment
|
|
353
|
-
# Define the time once so it doesn't get inaccurate
|
|
354
|
-
now = Time.now.nsec
|
|
355
|
-
|
|
356
|
-
# Difference between length_adjust and now in ms
|
|
357
|
-
ms_diff = (now - @length_adjust) / 1_000_000.0
|
|
358
|
-
if ms_diff >= 0
|
|
359
|
-
@length = if @adjust_average
|
|
360
|
-
(IDEAL_LENGTH - ms_diff + @length) / 2.0
|
|
361
|
-
else
|
|
362
|
-
IDEAL_LENGTH - ms_diff
|
|
363
|
-
end
|
|
364
|
-
|
|
365
|
-
# Track the time it took to encode
|
|
366
|
-
encode_ms = (@intermediate_adjust - @length_adjust) / 1_000_000.0
|
|
367
|
-
@bot.debug("Length adjustment: new length #{@length} (measured #{ms_diff}, #{(100 * encode_ms) / ms_diff}% encoding)") if @adjust_debug
|
|
368
|
-
end
|
|
369
|
-
@length_adjust = nil
|
|
347
|
+
if (last_sent + IDEAL_LENGTH) > Process.clock_gettime(Process::CLOCK_MONOTONIC, :millisecond)
|
|
348
|
+
sleep_duration = (last_sent + IDEAL_LENGTH - Process.clock_gettime(Process::CLOCK_MONOTONIC, :millisecond)) / 1000.0
|
|
349
|
+
@bot.debug("Waiting for next frame: #{sleep_duration * 1000}ms (encoding #{intermediate_adjust - start_time}ms)") if @adjust_debug
|
|
350
|
+
sleep sleep_duration if sleep_duration.positive?
|
|
370
351
|
end
|
|
371
352
|
|
|
372
|
-
#
|
|
373
|
-
|
|
353
|
+
# Send the packet
|
|
354
|
+
@udp.send_audio(buf, @sequence, @time)
|
|
374
355
|
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
else
|
|
379
|
-
Discordrb::LOGGER.warn('Audio encoding and sending together took longer than Discord expects one packet to be (20 ms)! This may be indicative of network problems.')
|
|
380
|
-
end
|
|
356
|
+
# Set the stream time (for tracking how long we've been playing)
|
|
357
|
+
@stream_time = count * IDEAL_LENGTH / 1000
|
|
358
|
+
last_sent = Process.clock_gettime(Process::CLOCK_MONOTONIC, :millisecond)
|
|
381
359
|
end
|
|
382
360
|
|
|
383
361
|
@bot.debug('Sending five silent frames to clear out buffers')
|
data/lib/discordrb.rb
CHANGED
|
@@ -65,7 +65,9 @@ module Discordrb
|
|
|
65
65
|
long_date: 'D', # 20 April 2021
|
|
66
66
|
short_datetime: 'f', # 20 April 2021 16:20
|
|
67
67
|
long_datetime: 'F', # Tuesday, 20 April 2021 16:20
|
|
68
|
-
relative: 'R' # 2 months ago
|
|
68
|
+
relative: 'R', # 2 months ago
|
|
69
|
+
simple_datetime: 's', # 20/04/2021, 16:20
|
|
70
|
+
medium_datetime: 'S' # 20/04/2021, 16:20:30
|
|
69
71
|
}.freeze
|
|
70
72
|
|
|
71
73
|
# Splits a message into chunks of 2000 characters. Attempts to split by lines if possible.
|
metadata
CHANGED
|
@@ -1,15 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: discordrb
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 3.
|
|
4
|
+
version: 3.7.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- meew0
|
|
8
8
|
- swarley
|
|
9
|
-
autorequire:
|
|
10
9
|
bindir: exe
|
|
11
10
|
cert_chain: []
|
|
12
|
-
date:
|
|
11
|
+
date: 1980-01-02 00:00:00.000000000 Z
|
|
13
12
|
dependencies:
|
|
14
13
|
- !ruby/object:Gem::Dependency
|
|
15
14
|
name: base64
|
|
@@ -17,14 +16,14 @@ dependencies:
|
|
|
17
16
|
requirements:
|
|
18
17
|
- - "~>"
|
|
19
18
|
- !ruby/object:Gem::Version
|
|
20
|
-
version: 0.2
|
|
19
|
+
version: '0.2'
|
|
21
20
|
type: :runtime
|
|
22
21
|
prerelease: false
|
|
23
22
|
version_requirements: !ruby/object:Gem::Requirement
|
|
24
23
|
requirements:
|
|
25
24
|
- - "~>"
|
|
26
25
|
- !ruby/object:Gem::Version
|
|
27
|
-
version: 0.2
|
|
26
|
+
version: '0.2'
|
|
28
27
|
- !ruby/object:Gem::Dependency
|
|
29
28
|
name: ffi
|
|
30
29
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -87,14 +86,14 @@ dependencies:
|
|
|
87
86
|
requirements:
|
|
88
87
|
- - "~>"
|
|
89
88
|
- !ruby/object:Gem::Version
|
|
90
|
-
version: 3.
|
|
89
|
+
version: 3.7.0
|
|
91
90
|
type: :runtime
|
|
92
91
|
prerelease: false
|
|
93
92
|
version_requirements: !ruby/object:Gem::Requirement
|
|
94
93
|
requirements:
|
|
95
94
|
- - "~>"
|
|
96
95
|
- !ruby/object:Gem::Version
|
|
97
|
-
version: 3.
|
|
96
|
+
version: 3.7.0
|
|
98
97
|
- !ruby/object:Gem::Dependency
|
|
99
98
|
name: bundler
|
|
100
99
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -331,6 +330,7 @@ files:
|
|
|
331
330
|
- lib/discordrb/data/reaction.rb
|
|
332
331
|
- lib/discordrb/data/recipient.rb
|
|
333
332
|
- lib/discordrb/data/role.rb
|
|
333
|
+
- lib/discordrb/data/role_subscription.rb
|
|
334
334
|
- lib/discordrb/data/server.rb
|
|
335
335
|
- lib/discordrb/data/server_preview.rb
|
|
336
336
|
- lib/discordrb/data/snapshot.rb
|
|
@@ -370,7 +370,9 @@ files:
|
|
|
370
370
|
- lib/discordrb/version.rb
|
|
371
371
|
- lib/discordrb/voice/encoder.rb
|
|
372
372
|
- lib/discordrb/voice/network.rb
|
|
373
|
+
- lib/discordrb/voice/opcodes.rb
|
|
373
374
|
- lib/discordrb/voice/sodium.rb
|
|
375
|
+
- lib/discordrb/voice/timer.rb
|
|
374
376
|
- lib/discordrb/voice/voice_bot.rb
|
|
375
377
|
- lib/discordrb/webhooks.rb
|
|
376
378
|
- lib/discordrb/websocket.rb
|
|
@@ -383,7 +385,6 @@ metadata:
|
|
|
383
385
|
documentation_uri: https://github.com/shardlab/discordrb/wiki
|
|
384
386
|
source_code_uri: https://github.com/shardlab/discordrb
|
|
385
387
|
rubygems_mfa_required: 'true'
|
|
386
|
-
post_install_message:
|
|
387
388
|
rdoc_options: []
|
|
388
389
|
require_paths:
|
|
389
390
|
- lib
|
|
@@ -398,8 +399,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
398
399
|
- !ruby/object:Gem::Version
|
|
399
400
|
version: '0'
|
|
400
401
|
requirements: []
|
|
401
|
-
rubygems_version: 3.
|
|
402
|
-
signing_key:
|
|
402
|
+
rubygems_version: 3.6.9
|
|
403
403
|
specification_version: 4
|
|
404
404
|
summary: Discord API for Ruby
|
|
405
405
|
test_files: []
|