discordrb 3.5.0 → 3.6.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 (78) hide show
  1. checksums.yaml +4 -4
  2. data/.devcontainer/Dockerfile +13 -0
  3. data/.devcontainer/devcontainer.json +29 -0
  4. data/.devcontainer/postcreate.sh +4 -0
  5. data/.github/workflows/ci.yml +78 -0
  6. data/.github/workflows/codeql.yml +3 -3
  7. data/.github/workflows/deploy.yml +54 -0
  8. data/.github/workflows/release.yml +51 -0
  9. data/.rubocop.yml +52 -2
  10. data/CHANGELOG.md +95 -0
  11. data/README.md +5 -5
  12. data/discordrb-webhooks.gemspec +1 -1
  13. data/discordrb.gemspec +16 -11
  14. data/lib/discordrb/api/application.rb +84 -8
  15. data/lib/discordrb/api/channel.rb +51 -13
  16. data/lib/discordrb/api/interaction.rb +15 -6
  17. data/lib/discordrb/api/invite.rb +1 -1
  18. data/lib/discordrb/api/server.rb +96 -60
  19. data/lib/discordrb/api/user.rb +12 -2
  20. data/lib/discordrb/api/webhook.rb +20 -5
  21. data/lib/discordrb/api.rb +16 -20
  22. data/lib/discordrb/bot.rb +139 -53
  23. data/lib/discordrb/cache.rb +15 -1
  24. data/lib/discordrb/commands/command_bot.rb +7 -17
  25. data/lib/discordrb/commands/parser.rb +7 -7
  26. data/lib/discordrb/container.rb +46 -0
  27. data/lib/discordrb/data/activity.rb +1 -1
  28. data/lib/discordrb/data/application.rb +1 -0
  29. data/lib/discordrb/data/attachment.rb +23 -3
  30. data/lib/discordrb/data/avatar_decoration.rb +26 -0
  31. data/lib/discordrb/data/call.rb +22 -0
  32. data/lib/discordrb/data/channel.rb +140 -15
  33. data/lib/discordrb/data/collectibles.rb +45 -0
  34. data/lib/discordrb/data/embed.rb +10 -3
  35. data/lib/discordrb/data/emoji.rb +20 -1
  36. data/lib/discordrb/data/integration.rb +3 -0
  37. data/lib/discordrb/data/interaction.rb +164 -27
  38. data/lib/discordrb/data/member.rb +145 -28
  39. data/lib/discordrb/data/message.rb +198 -51
  40. data/lib/discordrb/data/overwrite.rb +2 -0
  41. data/lib/discordrb/data/primary_server.rb +60 -0
  42. data/lib/discordrb/data/profile.rb +2 -7
  43. data/lib/discordrb/data/reaction.rb +2 -1
  44. data/lib/discordrb/data/recipient.rb +1 -1
  45. data/lib/discordrb/data/role.rb +151 -22
  46. data/lib/discordrb/data/server.rb +115 -41
  47. data/lib/discordrb/data/server_preview.rb +68 -0
  48. data/lib/discordrb/data/snapshot.rb +110 -0
  49. data/lib/discordrb/data/user.rb +68 -8
  50. data/lib/discordrb/data/voice_region.rb +1 -0
  51. data/lib/discordrb/data/webhook.rb +2 -5
  52. data/lib/discordrb/data.rb +6 -0
  53. data/lib/discordrb/errors.rb +5 -2
  54. data/lib/discordrb/events/await.rb +1 -1
  55. data/lib/discordrb/events/channels.rb +37 -0
  56. data/lib/discordrb/events/generic.rb +2 -0
  57. data/lib/discordrb/events/guilds.rb +6 -1
  58. data/lib/discordrb/events/interactions.rb +135 -42
  59. data/lib/discordrb/events/invites.rb +2 -0
  60. data/lib/discordrb/events/members.rb +19 -2
  61. data/lib/discordrb/events/message.rb +39 -8
  62. data/lib/discordrb/events/presence.rb +2 -0
  63. data/lib/discordrb/events/raw.rb +1 -0
  64. data/lib/discordrb/events/reactions.rb +2 -0
  65. data/lib/discordrb/events/roles.rb +2 -0
  66. data/lib/discordrb/events/threads.rb +10 -6
  67. data/lib/discordrb/events/typing.rb +1 -0
  68. data/lib/discordrb/events/voice_server_update.rb +1 -0
  69. data/lib/discordrb/events/voice_state_update.rb +1 -0
  70. data/lib/discordrb/events/webhooks.rb +1 -0
  71. data/lib/discordrb/gateway.rb +29 -13
  72. data/lib/discordrb/paginator.rb +3 -3
  73. data/lib/discordrb/permissions.rb +54 -43
  74. data/lib/discordrb/version.rb +1 -1
  75. data/lib/discordrb/websocket.rb +0 -10
  76. data/lib/discordrb.rb +17 -1
  77. metadata +53 -28
  78. data/.circleci/config.yml +0 -152
@@ -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
- def initialize(session_id)
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
- @bot.raise_heartbeat_event
456
- heartbeat
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 && (@intents & INTENTS[:servers]).zero?
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
 
@@ -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 limit_check
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 limit_check
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 limit_check
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, # 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
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 = ((@bits >> position) & 0x1) == 1
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| (@bits & (1 << value)).positive? ? name : nil }
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
@@ -3,5 +3,5 @@
3
3
  # Discordrb and all its functionality, in this case only the version.
4
4
  module Discordrb
5
5
  # The current version of discordrb.
6
- VERSION = '3.5.0'
6
+ VERSION = '3.6.1'
7
7
  end
@@ -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,16 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: discordrb
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.5.0
4
+ version: 3.6.1
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: 2023-07-05 00:00:00.000000000 Z
11
+ date: 1980-01-02 00:00:00.000000000 Z
13
12
  dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: base64
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: 0.2.0
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: 0.2.0
14
27
  - !ruby/object:Gem::Dependency
15
28
  name: ffi
16
29
  requirement: !ruby/object:Gem::Requirement
@@ -59,28 +72,28 @@ dependencies:
59
72
  requirements:
60
73
  - - ">="
61
74
  - !ruby/object:Gem::Version
62
- version: 0.3.0
75
+ version: 0.9.0
63
76
  type: :runtime
64
77
  prerelease: false
65
78
  version_requirements: !ruby/object:Gem::Requirement
66
79
  requirements:
67
80
  - - ">="
68
81
  - !ruby/object:Gem::Version
69
- version: 0.3.0
82
+ version: 0.9.0
70
83
  - !ruby/object:Gem::Dependency
71
84
  name: discordrb-webhooks
72
85
  requirement: !ruby/object:Gem::Requirement
73
86
  requirements:
74
87
  - - "~>"
75
88
  - !ruby/object:Gem::Version
76
- version: 3.5.0
89
+ version: 3.6.1
77
90
  type: :runtime
78
91
  prerelease: false
79
92
  version_requirements: !ruby/object:Gem::Requirement
80
93
  requirements:
81
94
  - - "~>"
82
95
  - !ruby/object:Gem::Version
83
- version: 3.5.0
96
+ version: 3.6.1
84
97
  - !ruby/object:Gem::Dependency
85
98
  name: bundler
86
99
  requirement: !ruby/object:Gem::Requirement
@@ -121,42 +134,42 @@ dependencies:
121
134
  requirements:
122
135
  - - "~>"
123
136
  - !ruby/object:Gem::Version
124
- version: 3.5.0
137
+ version: '3.5'
125
138
  type: :development
126
139
  prerelease: false
127
140
  version_requirements: !ruby/object:Gem::Requirement
128
141
  requirements:
129
142
  - - "~>"
130
143
  - !ruby/object:Gem::Version
131
- version: 3.5.0
144
+ version: '3.5'
132
145
  - !ruby/object:Gem::Dependency
133
146
  name: rspec
134
147
  requirement: !ruby/object:Gem::Requirement
135
148
  requirements:
136
149
  - - "~>"
137
150
  - !ruby/object:Gem::Version
138
- version: 3.11.0
151
+ version: '3.0'
139
152
  type: :development
140
153
  prerelease: false
141
154
  version_requirements: !ruby/object:Gem::Requirement
142
155
  requirements:
143
156
  - - "~>"
144
157
  - !ruby/object:Gem::Version
145
- version: 3.11.0
158
+ version: '3.0'
146
159
  - !ruby/object:Gem::Dependency
147
160
  name: rspec_junit_formatter
148
161
  requirement: !ruby/object:Gem::Requirement
149
162
  requirements:
150
163
  - - "~>"
151
164
  - !ruby/object:Gem::Version
152
- version: 0.5.1
165
+ version: 0.6.0
153
166
  type: :development
154
167
  prerelease: false
155
168
  version_requirements: !ruby/object:Gem::Requirement
156
169
  requirements:
157
170
  - - "~>"
158
171
  - !ruby/object:Gem::Version
159
- version: 0.5.1
172
+ version: 0.6.0
160
173
  - !ruby/object:Gem::Dependency
161
174
  name: rspec-prof
162
175
  requirement: !ruby/object:Gem::Requirement
@@ -177,70 +190,70 @@ dependencies:
177
190
  requirements:
178
191
  - - "~>"
179
192
  - !ruby/object:Gem::Version
180
- version: 1.36.0
193
+ version: 1.77.0
181
194
  type: :development
182
195
  prerelease: false
183
196
  version_requirements: !ruby/object:Gem::Requirement
184
197
  requirements:
185
198
  - - "~>"
186
199
  - !ruby/object:Gem::Version
187
- version: 1.36.0
200
+ version: 1.77.0
188
201
  - !ruby/object:Gem::Dependency
189
202
  name: rubocop-performance
190
203
  requirement: !ruby/object:Gem::Requirement
191
204
  requirements:
192
205
  - - "~>"
193
206
  - !ruby/object:Gem::Version
194
- version: '1.0'
207
+ version: 1.25.0
195
208
  type: :development
196
209
  prerelease: false
197
210
  version_requirements: !ruby/object:Gem::Requirement
198
211
  requirements:
199
212
  - - "~>"
200
213
  - !ruby/object:Gem::Version
201
- version: '1.0'
214
+ version: 1.25.0
202
215
  - !ruby/object:Gem::Dependency
203
216
  name: rubocop-rake
204
217
  requirement: !ruby/object:Gem::Requirement
205
218
  requirements:
206
219
  - - "~>"
207
220
  - !ruby/object:Gem::Version
208
- version: 0.6.0
221
+ version: 0.7.0
209
222
  type: :development
210
223
  prerelease: false
211
224
  version_requirements: !ruby/object:Gem::Requirement
212
225
  requirements:
213
226
  - - "~>"
214
227
  - !ruby/object:Gem::Version
215
- version: 0.6.0
228
+ version: 0.7.0
216
229
  - !ruby/object:Gem::Dependency
217
230
  name: simplecov
218
231
  requirement: !ruby/object:Gem::Requirement
219
232
  requirements:
220
233
  - - "~>"
221
234
  - !ruby/object:Gem::Version
222
- version: 0.21.0
235
+ version: '0.21'
223
236
  type: :development
224
237
  prerelease: false
225
238
  version_requirements: !ruby/object:Gem::Requirement
226
239
  requirements:
227
240
  - - "~>"
228
241
  - !ruby/object:Gem::Version
229
- version: 0.21.0
242
+ version: '0.21'
230
243
  - !ruby/object:Gem::Dependency
231
244
  name: yard
232
245
  requirement: !ruby/object:Gem::Requirement
233
246
  requirements:
234
247
  - - "~>"
235
248
  - !ruby/object:Gem::Version
236
- version: 0.9.9
249
+ version: 0.9.37
237
250
  type: :development
238
251
  prerelease: false
239
252
  version_requirements: !ruby/object:Gem::Requirement
240
253
  requirements:
241
254
  - - "~>"
242
255
  - !ruby/object:Gem::Version
243
- version: 0.9.9
256
+ version: 0.9.37
244
257
  description: A Ruby implementation of the Discord (https://discord.com) API.
245
258
  email:
246
259
  - ''
@@ -248,12 +261,17 @@ executables: []
248
261
  extensions: []
249
262
  extra_rdoc_files: []
250
263
  files:
251
- - ".circleci/config.yml"
264
+ - ".devcontainer/Dockerfile"
265
+ - ".devcontainer/devcontainer.json"
266
+ - ".devcontainer/postcreate.sh"
252
267
  - ".github/CONTRIBUTING.md"
253
268
  - ".github/ISSUE_TEMPLATE/bug_report.md"
254
269
  - ".github/ISSUE_TEMPLATE/feature_request.md"
255
270
  - ".github/pull_request_template.md"
271
+ - ".github/workflows/ci.yml"
256
272
  - ".github/workflows/codeql.yml"
273
+ - ".github/workflows/deploy.yml"
274
+ - ".github/workflows/release.yml"
257
275
  - ".gitignore"
258
276
  - ".markdownlint.json"
259
277
  - ".overcommit.yml"
@@ -294,7 +312,10 @@ files:
294
312
  - lib/discordrb/data/application.rb
295
313
  - lib/discordrb/data/attachment.rb
296
314
  - lib/discordrb/data/audit_logs.rb
315
+ - lib/discordrb/data/avatar_decoration.rb
316
+ - lib/discordrb/data/call.rb
297
317
  - lib/discordrb/data/channel.rb
318
+ - lib/discordrb/data/collectibles.rb
298
319
  - lib/discordrb/data/component.rb
299
320
  - lib/discordrb/data/embed.rb
300
321
  - lib/discordrb/data/emoji.rb
@@ -304,11 +325,14 @@ files:
304
325
  - lib/discordrb/data/member.rb
305
326
  - lib/discordrb/data/message.rb
306
327
  - lib/discordrb/data/overwrite.rb
328
+ - lib/discordrb/data/primary_server.rb
307
329
  - lib/discordrb/data/profile.rb
308
330
  - lib/discordrb/data/reaction.rb
309
331
  - lib/discordrb/data/recipient.rb
310
332
  - lib/discordrb/data/role.rb
311
333
  - lib/discordrb/data/server.rb
334
+ - lib/discordrb/data/server_preview.rb
335
+ - lib/discordrb/data/snapshot.rb
312
336
  - lib/discordrb/data/user.rb
313
337
  - lib/discordrb/data/voice_region.rb
314
338
  - lib/discordrb/data/voice_state.rb
@@ -353,9 +377,11 @@ homepage: https://github.com/shardlab/discordrb
353
377
  licenses:
354
378
  - MIT
355
379
  metadata:
380
+ bug_tracker_uri: https://github.com/shardlab/discordrb/issues
356
381
  changelog_uri: https://github.com/shardlab/discordrb/blob/main/CHANGELOG.md
382
+ documentation_uri: https://github.com/shardlab/discordrb/wiki
383
+ source_code_uri: https://github.com/shardlab/discordrb
357
384
  rubygems_mfa_required: 'true'
358
- post_install_message:
359
385
  rdoc_options: []
360
386
  require_paths:
361
387
  - lib
@@ -363,15 +389,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
363
389
  requirements:
364
390
  - - ">="
365
391
  - !ruby/object:Gem::Version
366
- version: '2.7'
392
+ version: '3.2'
367
393
  required_rubygems_version: !ruby/object:Gem::Requirement
368
394
  requirements:
369
395
  - - ">="
370
396
  - !ruby/object:Gem::Version
371
397
  version: '0'
372
398
  requirements: []
373
- rubygems_version: 3.3.3
374
- signing_key:
399
+ rubygems_version: 3.6.9
375
400
  specification_version: 4
376
401
  summary: Discord API for Ruby
377
402
  test_files: []