discordrb 3.5.0 → 3.6.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/.devcontainer/Dockerfile +13 -0
- data/.devcontainer/devcontainer.json +29 -0
- data/.devcontainer/postcreate.sh +4 -0
- data/.github/workflows/ci.yml +78 -0
- data/.github/workflows/codeql.yml +3 -3
- data/.github/workflows/deploy.yml +54 -0
- data/.github/workflows/release.yml +45 -0
- data/.rubocop.yml +52 -2
- data/CHANGELOG.md +95 -0
- data/README.md +5 -5
- data/discordrb-webhooks.gemspec +1 -1
- data/discordrb.gemspec +16 -11
- data/lib/discordrb/api/application.rb +84 -8
- data/lib/discordrb/api/channel.rb +51 -13
- data/lib/discordrb/api/interaction.rb +15 -6
- data/lib/discordrb/api/invite.rb +1 -1
- data/lib/discordrb/api/server.rb +96 -60
- data/lib/discordrb/api/user.rb +12 -2
- data/lib/discordrb/api/webhook.rb +20 -5
- data/lib/discordrb/api.rb +16 -20
- data/lib/discordrb/bot.rb +139 -53
- data/lib/discordrb/cache.rb +15 -1
- data/lib/discordrb/commands/command_bot.rb +7 -17
- data/lib/discordrb/commands/parser.rb +7 -7
- data/lib/discordrb/container.rb +46 -0
- data/lib/discordrb/data/activity.rb +1 -1
- data/lib/discordrb/data/application.rb +1 -0
- data/lib/discordrb/data/attachment.rb +23 -3
- data/lib/discordrb/data/avatar_decoration.rb +26 -0
- data/lib/discordrb/data/call.rb +22 -0
- data/lib/discordrb/data/channel.rb +140 -15
- data/lib/discordrb/data/collectibles.rb +45 -0
- data/lib/discordrb/data/embed.rb +10 -3
- data/lib/discordrb/data/emoji.rb +20 -1
- data/lib/discordrb/data/integration.rb +3 -0
- data/lib/discordrb/data/interaction.rb +164 -27
- data/lib/discordrb/data/member.rb +145 -28
- data/lib/discordrb/data/message.rb +198 -51
- data/lib/discordrb/data/overwrite.rb +2 -0
- data/lib/discordrb/data/primary_server.rb +60 -0
- data/lib/discordrb/data/profile.rb +2 -7
- data/lib/discordrb/data/reaction.rb +2 -1
- data/lib/discordrb/data/recipient.rb +1 -1
- data/lib/discordrb/data/role.rb +151 -22
- data/lib/discordrb/data/server.rb +115 -41
- data/lib/discordrb/data/server_preview.rb +68 -0
- data/lib/discordrb/data/snapshot.rb +110 -0
- data/lib/discordrb/data/user.rb +68 -8
- data/lib/discordrb/data/voice_region.rb +1 -0
- data/lib/discordrb/data/webhook.rb +2 -5
- data/lib/discordrb/data.rb +6 -0
- data/lib/discordrb/errors.rb +5 -2
- data/lib/discordrb/events/await.rb +1 -1
- data/lib/discordrb/events/channels.rb +37 -0
- data/lib/discordrb/events/generic.rb +2 -0
- data/lib/discordrb/events/guilds.rb +6 -1
- data/lib/discordrb/events/interactions.rb +135 -42
- data/lib/discordrb/events/invites.rb +2 -0
- data/lib/discordrb/events/members.rb +19 -2
- data/lib/discordrb/events/message.rb +39 -8
- data/lib/discordrb/events/presence.rb +2 -0
- data/lib/discordrb/events/raw.rb +1 -0
- data/lib/discordrb/events/reactions.rb +2 -0
- data/lib/discordrb/events/roles.rb +2 -0
- data/lib/discordrb/events/threads.rb +10 -6
- data/lib/discordrb/events/typing.rb +1 -0
- data/lib/discordrb/events/voice_server_update.rb +1 -0
- data/lib/discordrb/events/voice_state_update.rb +1 -0
- data/lib/discordrb/events/webhooks.rb +1 -0
- data/lib/discordrb/gateway.rb +29 -13
- data/lib/discordrb/paginator.rb +3 -3
- data/lib/discordrb/permissions.rb +54 -43
- data/lib/discordrb/version.rb +1 -1
- data/lib/discordrb/websocket.rb +0 -10
- data/lib/discordrb.rb +17 -1
- metadata +53 -25
- data/.circleci/config.yml +0 -152
data/lib/discordrb/gateway.rb
CHANGED
|
@@ -90,14 +90,22 @@ module Discordrb
|
|
|
90
90
|
# This class stores the data of an active gateway session. Note that this is different from a websocket connection -
|
|
91
91
|
# there may be multiple sessions per connection or one session may persist over multiple connections.
|
|
92
92
|
class Session
|
|
93
|
+
# @return [String] Used to uniquely identify this session. Mostly used when resuming connections.
|
|
93
94
|
attr_reader :session_id
|
|
95
|
+
|
|
96
|
+
# @return [Integer] Incrementing integer used to determine the most recent event reccived from Discord.
|
|
94
97
|
attr_accessor :sequence
|
|
95
98
|
|
|
96
|
-
|
|
99
|
+
# @return [String] Gateway URL used to reconnect to the gateway node that Discord wants this session to use.
|
|
100
|
+
attr_reader :resume_gateway_url
|
|
101
|
+
|
|
102
|
+
# @!visibility private
|
|
103
|
+
def initialize(session_id, resume_gateway_url)
|
|
97
104
|
@session_id = session_id
|
|
98
105
|
@sequence = 0
|
|
99
106
|
@suspended = false
|
|
100
107
|
@invalid = false
|
|
108
|
+
@resume_gateway_url = resume_gateway_url
|
|
101
109
|
end
|
|
102
110
|
|
|
103
111
|
# Flags this session as suspended, so we know not to try and send heartbeats, etc. to the gateway until we've reconnected
|
|
@@ -117,6 +125,7 @@ module Discordrb
|
|
|
117
125
|
# Flags this session as being invalid
|
|
118
126
|
def invalidate
|
|
119
127
|
@invalid = true
|
|
128
|
+
@resume_gateway_url = nil
|
|
120
129
|
end
|
|
121
130
|
|
|
122
131
|
def invalid?
|
|
@@ -136,6 +145,13 @@ module Discordrb
|
|
|
136
145
|
# The version of the gateway that's supposed to be used.
|
|
137
146
|
GATEWAY_VERSION = 9
|
|
138
147
|
|
|
148
|
+
# Close codes that are unrecoverable, after which we should not try to reconnect.
|
|
149
|
+
# - 4003: Not authenticated. How did this happen?
|
|
150
|
+
# - 4004: Authentication failed. Token was wrong, nothing we can do.
|
|
151
|
+
# - 4011: Sharding required. Currently requires developer intervention.
|
|
152
|
+
# - 4014: Use of disabled privileged intents.
|
|
153
|
+
FATAL_CLOSE_CODES = [4003, 4004, 4011, 4014].freeze
|
|
154
|
+
|
|
139
155
|
# Heartbeat ACKs are Discord's way of verifying on the client side whether the connection is still alive. If this is
|
|
140
156
|
# set to true (default value) the gateway client will use that functionality to detect zombie connections and
|
|
141
157
|
# reconnect in such a case; however it may lead to instability if there's some problem with the ACKs. If this occurs
|
|
@@ -452,8 +468,13 @@ module Discordrb
|
|
|
452
468
|
# suspended (e.g. after op7)
|
|
453
469
|
if (@session && !@session.suspended?) || !@session
|
|
454
470
|
sleep @heartbeat_interval
|
|
455
|
-
|
|
456
|
-
|
|
471
|
+
# Check if we're connected here, since we could possibly be waiting for a reconnect to occur.
|
|
472
|
+
if @handshaked && !@closed
|
|
473
|
+
@bot.raise_heartbeat_event
|
|
474
|
+
heartbeat
|
|
475
|
+
else
|
|
476
|
+
LOGGER.debug('Tried to send a heartbeat without being connected! Ignoring, we should be fine.')
|
|
477
|
+
end
|
|
457
478
|
else
|
|
458
479
|
sleep 1
|
|
459
480
|
end
|
|
@@ -538,7 +559,7 @@ module Discordrb
|
|
|
538
559
|
end
|
|
539
560
|
|
|
540
561
|
def process_gateway
|
|
541
|
-
raw_url = find_gateway
|
|
562
|
+
raw_url = @session&.resume_gateway_url || find_gateway
|
|
542
563
|
|
|
543
564
|
# Append a slash in case it's not there (I'm not sure how well WSCS handles it otherwise)
|
|
544
565
|
raw_url += '/' unless raw_url.end_with? '/'
|
|
@@ -656,7 +677,9 @@ module Discordrb
|
|
|
656
677
|
LOGGER.log_exception(e)
|
|
657
678
|
end
|
|
658
679
|
|
|
680
|
+
# rubocop:disable Lint/UselessConstantScoping
|
|
659
681
|
ZLIB_SUFFIX = "\x00\x00\xFF\xFF".b.freeze
|
|
682
|
+
# rubocop:enable Lint/UselessConstantScoping
|
|
660
683
|
|
|
661
684
|
def handle_message(msg)
|
|
662
685
|
case @compress_mode
|
|
@@ -716,9 +739,9 @@ module Discordrb
|
|
|
716
739
|
when :READY
|
|
717
740
|
LOGGER.info("Discord using gateway protocol version: #{data['v']}, requested: #{GATEWAY_VERSION}")
|
|
718
741
|
|
|
719
|
-
@session = Session.new(data['session_id'])
|
|
742
|
+
@session = Session.new(data['session_id'], data['resume_gateway_url'])
|
|
720
743
|
@session.sequence = 0
|
|
721
|
-
@bot.__send__(:notify_ready) if @intents &&
|
|
744
|
+
@bot.__send__(:notify_ready) if @intents && @intents.nobits?(INTENTS[:servers])
|
|
722
745
|
when :RESUMED
|
|
723
746
|
# The RESUMED event is received after a successful op 6 (resume). It does nothing except tell the bot the
|
|
724
747
|
# connection is initiated (like READY would). Starting with v5, it doesn't set a new heartbeat interval anymore
|
|
@@ -789,13 +812,6 @@ module Discordrb
|
|
|
789
812
|
handle_close(e)
|
|
790
813
|
end
|
|
791
814
|
|
|
792
|
-
# Close codes that are unrecoverable, after which we should not try to reconnect.
|
|
793
|
-
# - 4003: Not authenticated. How did this happen?
|
|
794
|
-
# - 4004: Authentication failed. Token was wrong, nothing we can do.
|
|
795
|
-
# - 4011: Sharding required. Currently requires developer intervention.
|
|
796
|
-
# - 4014: Use of disabled privileged intents.
|
|
797
|
-
FATAL_CLOSE_CODES = [4003, 4004, 4011, 4014].freeze
|
|
798
|
-
|
|
799
815
|
def handle_close(e)
|
|
800
816
|
@bot.__send__(:raise_event, Events::DisconnectEvent.new(@bot))
|
|
801
817
|
|
data/lib/discordrb/paginator.rb
CHANGED
|
@@ -24,7 +24,7 @@ module Discordrb
|
|
|
24
24
|
# no more results or the configured `limit` is reached.
|
|
25
25
|
def each
|
|
26
26
|
last_page = nil
|
|
27
|
-
until
|
|
27
|
+
until limit_exceeded?
|
|
28
28
|
page = @block.call(last_page)
|
|
29
29
|
return if page.empty?
|
|
30
30
|
|
|
@@ -38,7 +38,7 @@ module Discordrb
|
|
|
38
38
|
enumerator.each do |item|
|
|
39
39
|
yield item
|
|
40
40
|
@count += 1
|
|
41
|
-
break if
|
|
41
|
+
break if limit_exceeded?
|
|
42
42
|
end
|
|
43
43
|
|
|
44
44
|
last_page = page
|
|
@@ -48,7 +48,7 @@ module Discordrb
|
|
|
48
48
|
private
|
|
49
49
|
|
|
50
50
|
# Whether the paginator limit has been exceeded
|
|
51
|
-
def
|
|
51
|
+
def limit_exceeded?
|
|
52
52
|
return false if @limit.nil?
|
|
53
53
|
|
|
54
54
|
@count >= @limit
|
|
@@ -6,47 +6,56 @@ module Discordrb
|
|
|
6
6
|
# This hash maps bit positions to logical permissions.
|
|
7
7
|
FLAGS = {
|
|
8
8
|
# Bit => Permission # Value
|
|
9
|
-
0 => :create_instant_invite,
|
|
10
|
-
1 => :kick_members,
|
|
11
|
-
2 => :ban_members,
|
|
12
|
-
3 => :administrator,
|
|
13
|
-
4 => :manage_channels,
|
|
14
|
-
5 => :manage_server,
|
|
15
|
-
6 => :add_reactions,
|
|
16
|
-
7 => :view_audit_log,
|
|
17
|
-
8 => :priority_speaker,
|
|
18
|
-
9 => :stream,
|
|
19
|
-
10 => :read_messages,
|
|
20
|
-
11 => :send_messages,
|
|
21
|
-
12 => :send_tts_messages,
|
|
22
|
-
13 => :manage_messages,
|
|
23
|
-
14 => :embed_links,
|
|
24
|
-
15 => :attach_files,
|
|
25
|
-
16 => :read_message_history,
|
|
26
|
-
17 => :mention_everyone,
|
|
27
|
-
18 => :use_external_emoji,
|
|
28
|
-
19 => :view_server_insights,
|
|
29
|
-
20 => :connect,
|
|
30
|
-
21 => :speak,
|
|
31
|
-
22 => :mute_members,
|
|
32
|
-
23 => :deafen_members,
|
|
33
|
-
24 => :move_members,
|
|
34
|
-
25 => :use_voice_activity,
|
|
35
|
-
26 => :change_nickname,
|
|
36
|
-
27 => :manage_nicknames,
|
|
37
|
-
28 => :manage_roles,
|
|
38
|
-
29 => :manage_webhooks,
|
|
39
|
-
30 => :manage_emojis,
|
|
40
|
-
31 => :use_slash_commands,
|
|
41
|
-
32 => :request_to_speak,
|
|
42
|
-
33 => :manage_events,
|
|
43
|
-
34 => :manage_threads,
|
|
44
|
-
35 => :use_public_threads,
|
|
45
|
-
36 => :use_private_threads,
|
|
46
|
-
37 => :use_external_stickers,
|
|
47
|
-
38 => :send_messages_in_threads,
|
|
48
|
-
39 => :use_embedded_activities,
|
|
49
|
-
40 => :moderate_members
|
|
9
|
+
0 => :create_instant_invite, # 1
|
|
10
|
+
1 => :kick_members, # 2
|
|
11
|
+
2 => :ban_members, # 4
|
|
12
|
+
3 => :administrator, # 8
|
|
13
|
+
4 => :manage_channels, # 16
|
|
14
|
+
5 => :manage_server, # 32
|
|
15
|
+
6 => :add_reactions, # 64
|
|
16
|
+
7 => :view_audit_log, # 128
|
|
17
|
+
8 => :priority_speaker, # 256
|
|
18
|
+
9 => :stream, # 512
|
|
19
|
+
10 => :read_messages, # 1024
|
|
20
|
+
11 => :send_messages, # 2048
|
|
21
|
+
12 => :send_tts_messages, # 4096
|
|
22
|
+
13 => :manage_messages, # 8192
|
|
23
|
+
14 => :embed_links, # 16384
|
|
24
|
+
15 => :attach_files, # 32768
|
|
25
|
+
16 => :read_message_history, # 65536
|
|
26
|
+
17 => :mention_everyone, # 131072
|
|
27
|
+
18 => :use_external_emoji, # 262144
|
|
28
|
+
19 => :view_server_insights, # 524288
|
|
29
|
+
20 => :connect, # 1048576
|
|
30
|
+
21 => :speak, # 2097152
|
|
31
|
+
22 => :mute_members, # 4194304
|
|
32
|
+
23 => :deafen_members, # 8388608
|
|
33
|
+
24 => :move_members, # 16777216
|
|
34
|
+
25 => :use_voice_activity, # 33554432
|
|
35
|
+
26 => :change_nickname, # 67108864
|
|
36
|
+
27 => :manage_nicknames, # 134217728
|
|
37
|
+
28 => :manage_roles, # 268435456, also Manage Permissions
|
|
38
|
+
29 => :manage_webhooks, # 536870912
|
|
39
|
+
30 => :manage_emojis, # 1073741824, also Manage Stickers
|
|
40
|
+
31 => :use_slash_commands, # 2147483648
|
|
41
|
+
32 => :request_to_speak, # 4294967296
|
|
42
|
+
33 => :manage_events, # 8589934592
|
|
43
|
+
34 => :manage_threads, # 17179869184
|
|
44
|
+
35 => :use_public_threads, # 34359738368
|
|
45
|
+
36 => :use_private_threads, # 68719476736
|
|
46
|
+
37 => :use_external_stickers, # 137438953472
|
|
47
|
+
38 => :send_messages_in_threads, # 274877906944
|
|
48
|
+
39 => :use_embedded_activities, # 549755813888
|
|
49
|
+
40 => :moderate_members, # 1099511627776
|
|
50
|
+
41 => :view_monetization_analytics, # 2199023255552
|
|
51
|
+
42 => :use_soundboard, # 4398046511104
|
|
52
|
+
43 => :create_server_expressions, # 8796093022208
|
|
53
|
+
44 => :create_scheduled_events, # 17592186044416
|
|
54
|
+
45 => :use_external_sounds, # 35184372088832
|
|
55
|
+
46 => :send_voice_messages, # 70368744177664
|
|
56
|
+
49 => :send_polls, # 562949953421312
|
|
57
|
+
50 => :use_external_apps, # 1125899906842624
|
|
58
|
+
51 => :pin_messages # 2251799813685248
|
|
50
59
|
}.freeze
|
|
51
60
|
|
|
52
61
|
FLAGS.each do |position, flag|
|
|
@@ -80,7 +89,7 @@ module Discordrb
|
|
|
80
89
|
# Initialize the instance variables based on the bitset.
|
|
81
90
|
def init_vars
|
|
82
91
|
FLAGS.each do |position, flag|
|
|
83
|
-
flag_set = (
|
|
92
|
+
flag_set = (@bits >> position).allbits?(0x1)
|
|
84
93
|
instance_variable_set "@#{flag}", flag_set
|
|
85
94
|
end
|
|
86
95
|
end
|
|
@@ -131,12 +140,14 @@ module Discordrb
|
|
|
131
140
|
# permissions.defined_permissions #=> [:create_instant_invite, :administrator]
|
|
132
141
|
# @return [Array<Symbol>] the permissions
|
|
133
142
|
def defined_permissions
|
|
134
|
-
FLAGS.filter_map { |value, name|
|
|
143
|
+
FLAGS.filter_map { |value, name| @bits.anybits?((1 << value)) ? name : nil }
|
|
135
144
|
end
|
|
136
145
|
|
|
137
146
|
# Comparison based on permission bits
|
|
138
147
|
def ==(other)
|
|
148
|
+
# rubocop:disable Lint/Void
|
|
139
149
|
false unless other.is_a? Discordrb::Permissions
|
|
150
|
+
# rubocop:enable Lint/Void
|
|
140
151
|
bits == other.bits
|
|
141
152
|
end
|
|
142
153
|
end
|
data/lib/discordrb/version.rb
CHANGED
data/lib/discordrb/websocket.rb
CHANGED
|
@@ -2,16 +2,6 @@
|
|
|
2
2
|
|
|
3
3
|
require 'websocket-client-simple'
|
|
4
4
|
|
|
5
|
-
# The WSCS module which we're hooking
|
|
6
|
-
# @see Websocket::Client::Simple::Client
|
|
7
|
-
module WebSocket::Client::Simple
|
|
8
|
-
# Patch to the WSCS class to allow reading the internal thread
|
|
9
|
-
class Client
|
|
10
|
-
# @return [Thread] the internal thread this client is using for the event loop.
|
|
11
|
-
attr_reader :thread
|
|
12
|
-
end
|
|
13
|
-
end
|
|
14
|
-
|
|
15
5
|
module Discordrb
|
|
16
6
|
# Utility wrapper class that abstracts an instance of WSCS. Useful should we decide that WSCS isn't good either -
|
|
17
7
|
# in that case we can just switch to something else
|
data/lib/discordrb.rb
CHANGED
|
@@ -46,10 +46,13 @@ module Discordrb
|
|
|
46
46
|
NO_INTENTS = 0
|
|
47
47
|
|
|
48
48
|
# Compares two objects based on IDs - either the objects' IDs are equal, or one object is equal to the other's ID.
|
|
49
|
-
def self.id_compare(one_id, other)
|
|
49
|
+
def self.id_compare?(one_id, other)
|
|
50
50
|
other.respond_to?(:resolve_id) ? (one_id.resolve_id == other.resolve_id) : (one_id == other)
|
|
51
51
|
end
|
|
52
52
|
|
|
53
|
+
# @deprecated Please use {Discordrb.id_compare?}
|
|
54
|
+
singleton_class.alias_method :id_compare, :id_compare?
|
|
55
|
+
|
|
53
56
|
# The maximum length a Discord message can have
|
|
54
57
|
CHARACTER_LIMIT = 2000
|
|
55
58
|
|
|
@@ -117,6 +120,19 @@ module Discordrb
|
|
|
117
120
|
"<t:#{time.to_i}:#{TIMESTAMP_STYLES[style] || style}>"
|
|
118
121
|
end
|
|
119
122
|
end
|
|
123
|
+
|
|
124
|
+
# A utility method to base64 encode a file like object using its mime type.
|
|
125
|
+
# @param file [File, #read] A file like object that responds to #read.
|
|
126
|
+
# @return [String] The file object encoded as base64 image data.
|
|
127
|
+
def self.encode64(file)
|
|
128
|
+
path_method = %i[original_filename path local_path].find { |method| file.respond_to?(method) }
|
|
129
|
+
|
|
130
|
+
raise ArgumentError, 'File object must respond to original_filename, path, or local path.' unless path_method
|
|
131
|
+
raise ArgumentError, 'File object must respond to read.' unless file.respond_to?(:read)
|
|
132
|
+
|
|
133
|
+
mime_type = MIME::Types.type_for(file.__send__(path_method)).first&.to_s || 'image/jpeg'
|
|
134
|
+
"data:#{mime_type};base64,#{Base64.encode64(file.read).strip}"
|
|
135
|
+
end
|
|
120
136
|
end
|
|
121
137
|
|
|
122
138
|
# In discordrb, Integer and {String} are monkey-patched to allow for easy resolution of IDs
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: discordrb
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 3.
|
|
4
|
+
version: 3.6.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- meew0
|
|
@@ -9,8 +9,22 @@ authors:
|
|
|
9
9
|
autorequire:
|
|
10
10
|
bindir: exe
|
|
11
11
|
cert_chain: []
|
|
12
|
-
date:
|
|
12
|
+
date: 2025-10-22 00:00:00.000000000 Z
|
|
13
13
|
dependencies:
|
|
14
|
+
- !ruby/object:Gem::Dependency
|
|
15
|
+
name: base64
|
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
|
17
|
+
requirements:
|
|
18
|
+
- - "~>"
|
|
19
|
+
- !ruby/object:Gem::Version
|
|
20
|
+
version: 0.2.0
|
|
21
|
+
type: :runtime
|
|
22
|
+
prerelease: false
|
|
23
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
24
|
+
requirements:
|
|
25
|
+
- - "~>"
|
|
26
|
+
- !ruby/object:Gem::Version
|
|
27
|
+
version: 0.2.0
|
|
14
28
|
- !ruby/object:Gem::Dependency
|
|
15
29
|
name: ffi
|
|
16
30
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -59,28 +73,28 @@ dependencies:
|
|
|
59
73
|
requirements:
|
|
60
74
|
- - ">="
|
|
61
75
|
- !ruby/object:Gem::Version
|
|
62
|
-
version: 0.
|
|
76
|
+
version: 0.9.0
|
|
63
77
|
type: :runtime
|
|
64
78
|
prerelease: false
|
|
65
79
|
version_requirements: !ruby/object:Gem::Requirement
|
|
66
80
|
requirements:
|
|
67
81
|
- - ">="
|
|
68
82
|
- !ruby/object:Gem::Version
|
|
69
|
-
version: 0.
|
|
83
|
+
version: 0.9.0
|
|
70
84
|
- !ruby/object:Gem::Dependency
|
|
71
85
|
name: discordrb-webhooks
|
|
72
86
|
requirement: !ruby/object:Gem::Requirement
|
|
73
87
|
requirements:
|
|
74
88
|
- - "~>"
|
|
75
89
|
- !ruby/object:Gem::Version
|
|
76
|
-
version: 3.
|
|
90
|
+
version: 3.6.0
|
|
77
91
|
type: :runtime
|
|
78
92
|
prerelease: false
|
|
79
93
|
version_requirements: !ruby/object:Gem::Requirement
|
|
80
94
|
requirements:
|
|
81
95
|
- - "~>"
|
|
82
96
|
- !ruby/object:Gem::Version
|
|
83
|
-
version: 3.
|
|
97
|
+
version: 3.6.0
|
|
84
98
|
- !ruby/object:Gem::Dependency
|
|
85
99
|
name: bundler
|
|
86
100
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -121,42 +135,42 @@ dependencies:
|
|
|
121
135
|
requirements:
|
|
122
136
|
- - "~>"
|
|
123
137
|
- !ruby/object:Gem::Version
|
|
124
|
-
version: 3.5
|
|
138
|
+
version: '3.5'
|
|
125
139
|
type: :development
|
|
126
140
|
prerelease: false
|
|
127
141
|
version_requirements: !ruby/object:Gem::Requirement
|
|
128
142
|
requirements:
|
|
129
143
|
- - "~>"
|
|
130
144
|
- !ruby/object:Gem::Version
|
|
131
|
-
version: 3.5
|
|
145
|
+
version: '3.5'
|
|
132
146
|
- !ruby/object:Gem::Dependency
|
|
133
147
|
name: rspec
|
|
134
148
|
requirement: !ruby/object:Gem::Requirement
|
|
135
149
|
requirements:
|
|
136
150
|
- - "~>"
|
|
137
151
|
- !ruby/object:Gem::Version
|
|
138
|
-
version: 3.
|
|
152
|
+
version: '3.0'
|
|
139
153
|
type: :development
|
|
140
154
|
prerelease: false
|
|
141
155
|
version_requirements: !ruby/object:Gem::Requirement
|
|
142
156
|
requirements:
|
|
143
157
|
- - "~>"
|
|
144
158
|
- !ruby/object:Gem::Version
|
|
145
|
-
version: 3.
|
|
159
|
+
version: '3.0'
|
|
146
160
|
- !ruby/object:Gem::Dependency
|
|
147
161
|
name: rspec_junit_formatter
|
|
148
162
|
requirement: !ruby/object:Gem::Requirement
|
|
149
163
|
requirements:
|
|
150
164
|
- - "~>"
|
|
151
165
|
- !ruby/object:Gem::Version
|
|
152
|
-
version: 0.
|
|
166
|
+
version: 0.6.0
|
|
153
167
|
type: :development
|
|
154
168
|
prerelease: false
|
|
155
169
|
version_requirements: !ruby/object:Gem::Requirement
|
|
156
170
|
requirements:
|
|
157
171
|
- - "~>"
|
|
158
172
|
- !ruby/object:Gem::Version
|
|
159
|
-
version: 0.
|
|
173
|
+
version: 0.6.0
|
|
160
174
|
- !ruby/object:Gem::Dependency
|
|
161
175
|
name: rspec-prof
|
|
162
176
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -177,70 +191,70 @@ dependencies:
|
|
|
177
191
|
requirements:
|
|
178
192
|
- - "~>"
|
|
179
193
|
- !ruby/object:Gem::Version
|
|
180
|
-
version: 1.
|
|
194
|
+
version: 1.77.0
|
|
181
195
|
type: :development
|
|
182
196
|
prerelease: false
|
|
183
197
|
version_requirements: !ruby/object:Gem::Requirement
|
|
184
198
|
requirements:
|
|
185
199
|
- - "~>"
|
|
186
200
|
- !ruby/object:Gem::Version
|
|
187
|
-
version: 1.
|
|
201
|
+
version: 1.77.0
|
|
188
202
|
- !ruby/object:Gem::Dependency
|
|
189
203
|
name: rubocop-performance
|
|
190
204
|
requirement: !ruby/object:Gem::Requirement
|
|
191
205
|
requirements:
|
|
192
206
|
- - "~>"
|
|
193
207
|
- !ruby/object:Gem::Version
|
|
194
|
-
version:
|
|
208
|
+
version: 1.25.0
|
|
195
209
|
type: :development
|
|
196
210
|
prerelease: false
|
|
197
211
|
version_requirements: !ruby/object:Gem::Requirement
|
|
198
212
|
requirements:
|
|
199
213
|
- - "~>"
|
|
200
214
|
- !ruby/object:Gem::Version
|
|
201
|
-
version:
|
|
215
|
+
version: 1.25.0
|
|
202
216
|
- !ruby/object:Gem::Dependency
|
|
203
217
|
name: rubocop-rake
|
|
204
218
|
requirement: !ruby/object:Gem::Requirement
|
|
205
219
|
requirements:
|
|
206
220
|
- - "~>"
|
|
207
221
|
- !ruby/object:Gem::Version
|
|
208
|
-
version: 0.
|
|
222
|
+
version: 0.7.0
|
|
209
223
|
type: :development
|
|
210
224
|
prerelease: false
|
|
211
225
|
version_requirements: !ruby/object:Gem::Requirement
|
|
212
226
|
requirements:
|
|
213
227
|
- - "~>"
|
|
214
228
|
- !ruby/object:Gem::Version
|
|
215
|
-
version: 0.
|
|
229
|
+
version: 0.7.0
|
|
216
230
|
- !ruby/object:Gem::Dependency
|
|
217
231
|
name: simplecov
|
|
218
232
|
requirement: !ruby/object:Gem::Requirement
|
|
219
233
|
requirements:
|
|
220
234
|
- - "~>"
|
|
221
235
|
- !ruby/object:Gem::Version
|
|
222
|
-
version: 0.21
|
|
236
|
+
version: '0.21'
|
|
223
237
|
type: :development
|
|
224
238
|
prerelease: false
|
|
225
239
|
version_requirements: !ruby/object:Gem::Requirement
|
|
226
240
|
requirements:
|
|
227
241
|
- - "~>"
|
|
228
242
|
- !ruby/object:Gem::Version
|
|
229
|
-
version: 0.21
|
|
243
|
+
version: '0.21'
|
|
230
244
|
- !ruby/object:Gem::Dependency
|
|
231
245
|
name: yard
|
|
232
246
|
requirement: !ruby/object:Gem::Requirement
|
|
233
247
|
requirements:
|
|
234
248
|
- - "~>"
|
|
235
249
|
- !ruby/object:Gem::Version
|
|
236
|
-
version: 0.9.
|
|
250
|
+
version: 0.9.37
|
|
237
251
|
type: :development
|
|
238
252
|
prerelease: false
|
|
239
253
|
version_requirements: !ruby/object:Gem::Requirement
|
|
240
254
|
requirements:
|
|
241
255
|
- - "~>"
|
|
242
256
|
- !ruby/object:Gem::Version
|
|
243
|
-
version: 0.9.
|
|
257
|
+
version: 0.9.37
|
|
244
258
|
description: A Ruby implementation of the Discord (https://discord.com) API.
|
|
245
259
|
email:
|
|
246
260
|
- ''
|
|
@@ -248,12 +262,17 @@ executables: []
|
|
|
248
262
|
extensions: []
|
|
249
263
|
extra_rdoc_files: []
|
|
250
264
|
files:
|
|
251
|
-
- ".
|
|
265
|
+
- ".devcontainer/Dockerfile"
|
|
266
|
+
- ".devcontainer/devcontainer.json"
|
|
267
|
+
- ".devcontainer/postcreate.sh"
|
|
252
268
|
- ".github/CONTRIBUTING.md"
|
|
253
269
|
- ".github/ISSUE_TEMPLATE/bug_report.md"
|
|
254
270
|
- ".github/ISSUE_TEMPLATE/feature_request.md"
|
|
255
271
|
- ".github/pull_request_template.md"
|
|
272
|
+
- ".github/workflows/ci.yml"
|
|
256
273
|
- ".github/workflows/codeql.yml"
|
|
274
|
+
- ".github/workflows/deploy.yml"
|
|
275
|
+
- ".github/workflows/release.yml"
|
|
257
276
|
- ".gitignore"
|
|
258
277
|
- ".markdownlint.json"
|
|
259
278
|
- ".overcommit.yml"
|
|
@@ -294,7 +313,10 @@ files:
|
|
|
294
313
|
- lib/discordrb/data/application.rb
|
|
295
314
|
- lib/discordrb/data/attachment.rb
|
|
296
315
|
- lib/discordrb/data/audit_logs.rb
|
|
316
|
+
- lib/discordrb/data/avatar_decoration.rb
|
|
317
|
+
- lib/discordrb/data/call.rb
|
|
297
318
|
- lib/discordrb/data/channel.rb
|
|
319
|
+
- lib/discordrb/data/collectibles.rb
|
|
298
320
|
- lib/discordrb/data/component.rb
|
|
299
321
|
- lib/discordrb/data/embed.rb
|
|
300
322
|
- lib/discordrb/data/emoji.rb
|
|
@@ -304,11 +326,14 @@ files:
|
|
|
304
326
|
- lib/discordrb/data/member.rb
|
|
305
327
|
- lib/discordrb/data/message.rb
|
|
306
328
|
- lib/discordrb/data/overwrite.rb
|
|
329
|
+
- lib/discordrb/data/primary_server.rb
|
|
307
330
|
- lib/discordrb/data/profile.rb
|
|
308
331
|
- lib/discordrb/data/reaction.rb
|
|
309
332
|
- lib/discordrb/data/recipient.rb
|
|
310
333
|
- lib/discordrb/data/role.rb
|
|
311
334
|
- lib/discordrb/data/server.rb
|
|
335
|
+
- lib/discordrb/data/server_preview.rb
|
|
336
|
+
- lib/discordrb/data/snapshot.rb
|
|
312
337
|
- lib/discordrb/data/user.rb
|
|
313
338
|
- lib/discordrb/data/voice_region.rb
|
|
314
339
|
- lib/discordrb/data/voice_state.rb
|
|
@@ -353,7 +378,10 @@ homepage: https://github.com/shardlab/discordrb
|
|
|
353
378
|
licenses:
|
|
354
379
|
- MIT
|
|
355
380
|
metadata:
|
|
381
|
+
bug_tracker_uri: https://github.com/shardlab/discordrb/issues
|
|
356
382
|
changelog_uri: https://github.com/shardlab/discordrb/blob/main/CHANGELOG.md
|
|
383
|
+
documentation_uri: https://github.com/shardlab/discordrb/wiki
|
|
384
|
+
source_code_uri: https://github.com/shardlab/discordrb
|
|
357
385
|
rubygems_mfa_required: 'true'
|
|
358
386
|
post_install_message:
|
|
359
387
|
rdoc_options: []
|
|
@@ -363,14 +391,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
|
363
391
|
requirements:
|
|
364
392
|
- - ">="
|
|
365
393
|
- !ruby/object:Gem::Version
|
|
366
|
-
version: '2
|
|
394
|
+
version: '3.2'
|
|
367
395
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
368
396
|
requirements:
|
|
369
397
|
- - ">="
|
|
370
398
|
- !ruby/object:Gem::Version
|
|
371
399
|
version: '0'
|
|
372
400
|
requirements: []
|
|
373
|
-
rubygems_version: 3.
|
|
401
|
+
rubygems_version: 3.5.3
|
|
374
402
|
signing_key:
|
|
375
403
|
specification_version: 4
|
|
376
404
|
summary: Discord API for Ruby
|