rubycord 1.0.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 +7 -0
- data/lib/rubycord/allowed_mentions.rb +34 -0
- data/lib/rubycord/api/application.rb +200 -0
- data/lib/rubycord/api/channel.rb +597 -0
- data/lib/rubycord/api/interaction.rb +52 -0
- data/lib/rubycord/api/invite.rb +42 -0
- data/lib/rubycord/api/server.rb +557 -0
- data/lib/rubycord/api/user.rb +153 -0
- data/lib/rubycord/api/webhook.rb +138 -0
- data/lib/rubycord/api.rb +356 -0
- data/lib/rubycord/await.rb +49 -0
- data/lib/rubycord/bot.rb +1757 -0
- data/lib/rubycord/cache.rb +259 -0
- data/lib/rubycord/colour_rgb.rb +41 -0
- data/lib/rubycord/commands/command_bot.rb +519 -0
- data/lib/rubycord/commands/container.rb +110 -0
- data/lib/rubycord/commands/events.rb +9 -0
- data/lib/rubycord/commands/parser.rb +325 -0
- data/lib/rubycord/commands/rate_limiter.rb +142 -0
- data/lib/rubycord/container.rb +753 -0
- data/lib/rubycord/data/activity.rb +269 -0
- data/lib/rubycord/data/application.rb +48 -0
- data/lib/rubycord/data/attachment.rb +109 -0
- data/lib/rubycord/data/audit_logs.rb +343 -0
- data/lib/rubycord/data/channel.rb +996 -0
- data/lib/rubycord/data/component.rb +227 -0
- data/lib/rubycord/data/embed.rb +249 -0
- data/lib/rubycord/data/emoji.rb +80 -0
- data/lib/rubycord/data/integration.rb +120 -0
- data/lib/rubycord/data/interaction.rb +798 -0
- data/lib/rubycord/data/invite.rb +135 -0
- data/lib/rubycord/data/member.rb +370 -0
- data/lib/rubycord/data/message.rb +412 -0
- data/lib/rubycord/data/overwrite.rb +106 -0
- data/lib/rubycord/data/profile.rb +89 -0
- data/lib/rubycord/data/reaction.rb +31 -0
- data/lib/rubycord/data/recipient.rb +32 -0
- data/lib/rubycord/data/role.rb +246 -0
- data/lib/rubycord/data/server.rb +1002 -0
- data/lib/rubycord/data/user.rb +261 -0
- data/lib/rubycord/data/voice_region.rb +43 -0
- data/lib/rubycord/data/voice_state.rb +39 -0
- data/lib/rubycord/data/webhook.rb +232 -0
- data/lib/rubycord/data.rb +40 -0
- data/lib/rubycord/errors.rb +737 -0
- data/lib/rubycord/events/await.rb +46 -0
- data/lib/rubycord/events/bans.rb +58 -0
- data/lib/rubycord/events/channels.rb +186 -0
- data/lib/rubycord/events/generic.rb +126 -0
- data/lib/rubycord/events/guilds.rb +191 -0
- data/lib/rubycord/events/interactions.rb +480 -0
- data/lib/rubycord/events/invites.rb +123 -0
- data/lib/rubycord/events/lifetime.rb +29 -0
- data/lib/rubycord/events/members.rb +91 -0
- data/lib/rubycord/events/message.rb +337 -0
- data/lib/rubycord/events/presence.rb +127 -0
- data/lib/rubycord/events/raw.rb +45 -0
- data/lib/rubycord/events/reactions.rb +156 -0
- data/lib/rubycord/events/roles.rb +86 -0
- data/lib/rubycord/events/threads.rb +94 -0
- data/lib/rubycord/events/typing.rb +70 -0
- data/lib/rubycord/events/voice_server_update.rb +45 -0
- data/lib/rubycord/events/voice_state_update.rb +103 -0
- data/lib/rubycord/events/webhooks.rb +62 -0
- data/lib/rubycord/gateway.rb +867 -0
- data/lib/rubycord/id_object.rb +37 -0
- data/lib/rubycord/light/data.rb +60 -0
- data/lib/rubycord/light/integrations.rb +71 -0
- data/lib/rubycord/light/light_bot.rb +56 -0
- data/lib/rubycord/light.rb +6 -0
- data/lib/rubycord/logger.rb +118 -0
- data/lib/rubycord/paginator.rb +55 -0
- data/lib/rubycord/permissions.rb +251 -0
- data/lib/rubycord/version.rb +5 -0
- data/lib/rubycord/voice/encoder.rb +113 -0
- data/lib/rubycord/voice/network.rb +366 -0
- data/lib/rubycord/voice/sodium.rb +96 -0
- data/lib/rubycord/voice/voice_bot.rb +408 -0
- data/lib/rubycord/webhooks/builder.rb +100 -0
- data/lib/rubycord/webhooks/client.rb +132 -0
- data/lib/rubycord/webhooks/embeds.rb +248 -0
- data/lib/rubycord/webhooks/modal.rb +78 -0
- data/lib/rubycord/webhooks/version.rb +7 -0
- data/lib/rubycord/webhooks/view.rb +192 -0
- data/lib/rubycord/webhooks.rb +12 -0
- data/lib/rubycord/websocket.rb +70 -0
- data/lib/rubycord.rb +140 -0
- metadata +231 -0
data/lib/rubycord.rb
ADDED
@@ -0,0 +1,140 @@
|
|
1
|
+
require "rubycord/version"
|
2
|
+
require "rubycord/bot"
|
3
|
+
require "rubycord/commands/command_bot"
|
4
|
+
require "rubycord/logger"
|
5
|
+
|
6
|
+
# All rubycord functionality, to be extended by other files
|
7
|
+
module Rubycord
|
8
|
+
Thread.current[:rubycord_name] = "main"
|
9
|
+
|
10
|
+
# The default debug logger used by rubycord.
|
11
|
+
LOGGER = Logger.new(ENV.fetch("RUBYCORD_FANCY_LOG", false))
|
12
|
+
|
13
|
+
# The Unix timestamp Discord IDs are based on
|
14
|
+
DISCORD_EPOCH = 1_420_070_400_000
|
15
|
+
|
16
|
+
# Used to declare what events you wish to recieve from Discord.
|
17
|
+
# @see https://discord.com/developers/docs/topics/gateway#gateway-intents
|
18
|
+
INTENTS = {
|
19
|
+
servers: 1 << 0,
|
20
|
+
server_members: 1 << 1,
|
21
|
+
server_moderation: 1 << 2,
|
22
|
+
server_emojis_and_stickers: 1 << 3,
|
23
|
+
server_integrations: 1 << 4,
|
24
|
+
server_webhooks: 1 << 5,
|
25
|
+
server_invites: 1 << 6,
|
26
|
+
server_voice_states: 1 << 7,
|
27
|
+
server_presences: 1 << 8,
|
28
|
+
server_messages: 1 << 9,
|
29
|
+
server_message_reactions: 1 << 10,
|
30
|
+
server_message_typing: 1 << 11,
|
31
|
+
direct_messages: 1 << 12,
|
32
|
+
direct_message_reactions: 1 << 13,
|
33
|
+
direct_message_typing: 1 << 14,
|
34
|
+
message_content: 1 << 15,
|
35
|
+
server_scheduled_events: 1 << 16,
|
36
|
+
auto_moderation_configuration: 1 << 20,
|
37
|
+
auto_moderation_execution: 1 << 21,
|
38
|
+
server_message_polls: 1 << 24,
|
39
|
+
direct_message_polls: 1 << 25
|
40
|
+
}.freeze
|
41
|
+
|
42
|
+
# All available intents
|
43
|
+
ALL_INTENTS = INTENTS.values.reduce(&:|)
|
44
|
+
|
45
|
+
# All unprivileged intents
|
46
|
+
# @see https://discord.com/developers/docs/topics/gateway#privileged-intents
|
47
|
+
UNPRIVILEGED_INTENTS = ALL_INTENTS & ~(INTENTS[:server_members] | INTENTS[:server_presences] | INTENTS[:message_content])
|
48
|
+
|
49
|
+
# No intents
|
50
|
+
NO_INTENTS = 0
|
51
|
+
|
52
|
+
# Compares two objects based on IDs - either the objects' IDs are equal, or one object is equal to the other's ID.
|
53
|
+
def self.id_compare(one_id, other)
|
54
|
+
other.respond_to?(:resolve_id) ? (one_id.resolve_id == other.resolve_id) : (one_id == other)
|
55
|
+
end
|
56
|
+
|
57
|
+
# The maximum length a Discord message can have
|
58
|
+
CHARACTER_LIMIT = 2000
|
59
|
+
|
60
|
+
# For creating timestamps with {timestamp}
|
61
|
+
# @see https://discord.com/developers/docs/reference#message-formatting-timestamp-styles
|
62
|
+
TIMESTAMP_STYLES = {
|
63
|
+
short_time: "t", # 16:20
|
64
|
+
long_time: "T", # 16:20:30
|
65
|
+
short_date: "d", # 20/04/2021
|
66
|
+
long_date: "D", # 20 April 2021
|
67
|
+
short_datetime: "f", # 20 April 2021 16:20
|
68
|
+
long_datetime: "F", # Tuesday, 20 April 2021 16:20
|
69
|
+
relative: "R" # 2 months ago
|
70
|
+
}.freeze
|
71
|
+
|
72
|
+
# Splits a message into chunks of 2000 characters. Attempts to split by lines if possible.
|
73
|
+
# @param msg [String] The message to split.
|
74
|
+
# @return [Array<String>] the message split into chunks
|
75
|
+
def self.split_message(msg)
|
76
|
+
# If the messages is empty, return an empty array
|
77
|
+
return [] if msg.empty?
|
78
|
+
|
79
|
+
# Split the message into lines
|
80
|
+
lines = msg.lines
|
81
|
+
|
82
|
+
# Turn the message into a "triangle" of consecutively longer slices, for example the array [1,2,3,4] would become
|
83
|
+
# [
|
84
|
+
# [1],
|
85
|
+
# [1, 2],
|
86
|
+
# [1, 2, 3],
|
87
|
+
# [1, 2, 3, 4]
|
88
|
+
# ]
|
89
|
+
tri = (0...lines.length).map { |i| lines.combination(i + 1).first }
|
90
|
+
|
91
|
+
# Join the individual elements together to get an array of strings with consecutively more lines
|
92
|
+
joined = tri.map(&:join)
|
93
|
+
|
94
|
+
# Find the largest element that is still below the character limit, or if none such element exists return the first
|
95
|
+
ideal = joined.max_by { |e| (e.length > CHARACTER_LIMIT) ? -1 : e.length }
|
96
|
+
|
97
|
+
# If it's still larger than the character limit (none was smaller than it) split it into the largest chunk without
|
98
|
+
# cutting words apart, breaking on the nearest space within character limit, otherwise just return an array with one element
|
99
|
+
ideal_ary = (ideal.length > CHARACTER_LIMIT) ? ideal.split(/(.{1,#{CHARACTER_LIMIT}}\b|.{1,#{CHARACTER_LIMIT}})/o).reject(&:empty?) : [ideal]
|
100
|
+
|
101
|
+
# Slice off the ideal part and strip newlines
|
102
|
+
rest = msg[ideal.length..].strip
|
103
|
+
|
104
|
+
# If none remains, return an empty array -> we're done
|
105
|
+
return [] unless rest
|
106
|
+
|
107
|
+
# Otherwise, call the method recursively to split the rest of the string and add it onto the ideal array
|
108
|
+
ideal_ary + split_message(rest)
|
109
|
+
end
|
110
|
+
|
111
|
+
# @param time [Time, Integer] The time to create the timestamp from, or a unix timestamp integer.
|
112
|
+
# @param style [Symbol, String] One of the keys from {TIMESTAMP_STYLES} or a string with the style.
|
113
|
+
# @return [String]
|
114
|
+
# @example
|
115
|
+
# Rubycord.timestamp(Time.now, :short_time)
|
116
|
+
# # => "<t:1632146954:t>"
|
117
|
+
def self.timestamp(time, style = nil)
|
118
|
+
if style.nil?
|
119
|
+
"<t:#{time.to_i}>"
|
120
|
+
else
|
121
|
+
"<t:#{time.to_i}:#{TIMESTAMP_STYLES[style] || style}>"
|
122
|
+
end
|
123
|
+
end
|
124
|
+
end
|
125
|
+
|
126
|
+
# In rubycord, Integer and {String} are monkey-patched to allow for easy resolution of IDs
|
127
|
+
class Integer
|
128
|
+
# @return [Integer] The Discord ID represented by this integer, i.e. the integer itself
|
129
|
+
def resolve_id
|
130
|
+
self
|
131
|
+
end
|
132
|
+
end
|
133
|
+
|
134
|
+
# In rubycord, {Integer} and String are monkey-patched to allow for easy resolution of IDs
|
135
|
+
class String
|
136
|
+
# @return [Integer] The Discord ID represented by this string, i.e. the string converted to an integer
|
137
|
+
def resolve_id
|
138
|
+
to_i
|
139
|
+
end
|
140
|
+
end
|
metadata
ADDED
@@ -0,0 +1,231 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: rubycord
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.0.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Dakurei
|
8
|
+
autorequire:
|
9
|
+
bindir: exe
|
10
|
+
cert_chain: []
|
11
|
+
date: 2024-08-12 00:00:00.000000000 Z
|
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
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: bigdecimal
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: 3.1.8
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: 3.1.8
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: ffi
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: 1.9.24
|
48
|
+
type: :runtime
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: 1.9.24
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: opus-ruby
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: 1.0.1
|
62
|
+
type: :runtime
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: 1.0.1
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: rest-client
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - ">="
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: 2.0.0
|
76
|
+
type: :runtime
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - ">="
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: 2.0.0
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: websocket-client-simple
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - ">="
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: 0.3.0
|
90
|
+
type: :runtime
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - ">="
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: 0.3.0
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: rubycord-webhooks
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - "~>"
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: 1.0.0
|
104
|
+
type: :runtime
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - "~>"
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: 1.0.0
|
111
|
+
description: A Ruby implementation of the Discord (https://discord.com) API.
|
112
|
+
email:
|
113
|
+
- maxime.palanchini@gmail.com
|
114
|
+
executables: []
|
115
|
+
extensions: []
|
116
|
+
extra_rdoc_files: []
|
117
|
+
files:
|
118
|
+
- lib/rubycord.rb
|
119
|
+
- lib/rubycord/allowed_mentions.rb
|
120
|
+
- lib/rubycord/api.rb
|
121
|
+
- lib/rubycord/api/application.rb
|
122
|
+
- lib/rubycord/api/channel.rb
|
123
|
+
- lib/rubycord/api/interaction.rb
|
124
|
+
- lib/rubycord/api/invite.rb
|
125
|
+
- lib/rubycord/api/server.rb
|
126
|
+
- lib/rubycord/api/user.rb
|
127
|
+
- lib/rubycord/api/webhook.rb
|
128
|
+
- lib/rubycord/await.rb
|
129
|
+
- lib/rubycord/bot.rb
|
130
|
+
- lib/rubycord/cache.rb
|
131
|
+
- lib/rubycord/colour_rgb.rb
|
132
|
+
- lib/rubycord/commands/command_bot.rb
|
133
|
+
- lib/rubycord/commands/container.rb
|
134
|
+
- lib/rubycord/commands/events.rb
|
135
|
+
- lib/rubycord/commands/parser.rb
|
136
|
+
- lib/rubycord/commands/rate_limiter.rb
|
137
|
+
- lib/rubycord/container.rb
|
138
|
+
- lib/rubycord/data.rb
|
139
|
+
- lib/rubycord/data/activity.rb
|
140
|
+
- lib/rubycord/data/application.rb
|
141
|
+
- lib/rubycord/data/attachment.rb
|
142
|
+
- lib/rubycord/data/audit_logs.rb
|
143
|
+
- lib/rubycord/data/channel.rb
|
144
|
+
- lib/rubycord/data/component.rb
|
145
|
+
- lib/rubycord/data/embed.rb
|
146
|
+
- lib/rubycord/data/emoji.rb
|
147
|
+
- lib/rubycord/data/integration.rb
|
148
|
+
- lib/rubycord/data/interaction.rb
|
149
|
+
- lib/rubycord/data/invite.rb
|
150
|
+
- lib/rubycord/data/member.rb
|
151
|
+
- lib/rubycord/data/message.rb
|
152
|
+
- lib/rubycord/data/overwrite.rb
|
153
|
+
- lib/rubycord/data/profile.rb
|
154
|
+
- lib/rubycord/data/reaction.rb
|
155
|
+
- lib/rubycord/data/recipient.rb
|
156
|
+
- lib/rubycord/data/role.rb
|
157
|
+
- lib/rubycord/data/server.rb
|
158
|
+
- lib/rubycord/data/user.rb
|
159
|
+
- lib/rubycord/data/voice_region.rb
|
160
|
+
- lib/rubycord/data/voice_state.rb
|
161
|
+
- lib/rubycord/data/webhook.rb
|
162
|
+
- lib/rubycord/errors.rb
|
163
|
+
- lib/rubycord/events/await.rb
|
164
|
+
- lib/rubycord/events/bans.rb
|
165
|
+
- lib/rubycord/events/channels.rb
|
166
|
+
- lib/rubycord/events/generic.rb
|
167
|
+
- lib/rubycord/events/guilds.rb
|
168
|
+
- lib/rubycord/events/interactions.rb
|
169
|
+
- lib/rubycord/events/invites.rb
|
170
|
+
- lib/rubycord/events/lifetime.rb
|
171
|
+
- lib/rubycord/events/members.rb
|
172
|
+
- lib/rubycord/events/message.rb
|
173
|
+
- lib/rubycord/events/presence.rb
|
174
|
+
- lib/rubycord/events/raw.rb
|
175
|
+
- lib/rubycord/events/reactions.rb
|
176
|
+
- lib/rubycord/events/roles.rb
|
177
|
+
- lib/rubycord/events/threads.rb
|
178
|
+
- lib/rubycord/events/typing.rb
|
179
|
+
- lib/rubycord/events/voice_server_update.rb
|
180
|
+
- lib/rubycord/events/voice_state_update.rb
|
181
|
+
- lib/rubycord/events/webhooks.rb
|
182
|
+
- lib/rubycord/gateway.rb
|
183
|
+
- lib/rubycord/id_object.rb
|
184
|
+
- lib/rubycord/light.rb
|
185
|
+
- lib/rubycord/light/data.rb
|
186
|
+
- lib/rubycord/light/integrations.rb
|
187
|
+
- lib/rubycord/light/light_bot.rb
|
188
|
+
- lib/rubycord/logger.rb
|
189
|
+
- lib/rubycord/paginator.rb
|
190
|
+
- lib/rubycord/permissions.rb
|
191
|
+
- lib/rubycord/version.rb
|
192
|
+
- lib/rubycord/voice/encoder.rb
|
193
|
+
- lib/rubycord/voice/network.rb
|
194
|
+
- lib/rubycord/voice/sodium.rb
|
195
|
+
- lib/rubycord/voice/voice_bot.rb
|
196
|
+
- lib/rubycord/webhooks.rb
|
197
|
+
- lib/rubycord/webhooks/builder.rb
|
198
|
+
- lib/rubycord/webhooks/client.rb
|
199
|
+
- lib/rubycord/webhooks/embeds.rb
|
200
|
+
- lib/rubycord/webhooks/modal.rb
|
201
|
+
- lib/rubycord/webhooks/version.rb
|
202
|
+
- lib/rubycord/webhooks/view.rb
|
203
|
+
- lib/rubycord/websocket.rb
|
204
|
+
homepage: https://github.com/dakurei-gems/rubycord
|
205
|
+
licenses:
|
206
|
+
- MIT
|
207
|
+
metadata:
|
208
|
+
allowed_push_host: https://rubygems.org
|
209
|
+
homepage_uri: https://github.com/dakurei-gems/rubycord
|
210
|
+
source_code_uri: https://github.com/dakurei-gems/rubycord
|
211
|
+
changelog_uri: https://github.com/dakurei-gems/rubycord/blob/main/CHANGELOG.md
|
212
|
+
post_install_message:
|
213
|
+
rdoc_options: []
|
214
|
+
require_paths:
|
215
|
+
- lib
|
216
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
217
|
+
requirements:
|
218
|
+
- - ">="
|
219
|
+
- !ruby/object:Gem::Version
|
220
|
+
version: 3.1.3
|
221
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
222
|
+
requirements:
|
223
|
+
- - ">="
|
224
|
+
- !ruby/object:Gem::Version
|
225
|
+
version: '0'
|
226
|
+
requirements: []
|
227
|
+
rubygems_version: 3.5.17
|
228
|
+
signing_key:
|
229
|
+
specification_version: 4
|
230
|
+
summary: Discord API for Ruby
|
231
|
+
test_files: []
|