discorb 0.0.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.
- checksums.yaml +7 -0
- data/.gitignore +56 -0
- data/.yardopts +6 -0
- data/Changelog.md +5 -0
- data/Gemfile +23 -0
- data/Gemfile.lock +70 -0
- data/LICENSE.txt +21 -0
- data/README.md +53 -0
- data/Rakefile +46 -0
- data/bin/console +15 -0
- data/bin/setup +8 -0
- data/discorb.gemspec +37 -0
- data/docs/Examples.md +26 -0
- data/docs/events.md +480 -0
- data/docs/voice_events.md +283 -0
- data/examples/components/authorization_button.rb +43 -0
- data/examples/components/select_menu.rb +61 -0
- data/examples/extension/main.rb +12 -0
- data/examples/extension/message_expander.rb +41 -0
- data/examples/simple/eval.rb +32 -0
- data/examples/simple/ping_pong.rb +16 -0
- data/examples/simple/rolepanel.rb +65 -0
- data/examples/simple/wait_for_message.rb +30 -0
- data/lib/discorb/application.rb +157 -0
- data/lib/discorb/asset.rb +57 -0
- data/lib/discorb/audit_logs.rb +323 -0
- data/lib/discorb/channel.rb +1101 -0
- data/lib/discorb/client.rb +363 -0
- data/lib/discorb/color.rb +173 -0
- data/lib/discorb/common.rb +123 -0
- data/lib/discorb/components.rb +290 -0
- data/lib/discorb/dictionary.rb +119 -0
- data/lib/discorb/embed.rb +345 -0
- data/lib/discorb/emoji.rb +218 -0
- data/lib/discorb/emoji_table.rb +3799 -0
- data/lib/discorb/error.rb +98 -0
- data/lib/discorb/event.rb +35 -0
- data/lib/discorb/extend.rb +18 -0
- data/lib/discorb/extension.rb +54 -0
- data/lib/discorb/file.rb +69 -0
- data/lib/discorb/flag.rb +109 -0
- data/lib/discorb/gateway.rb +967 -0
- data/lib/discorb/gateway_requests.rb +47 -0
- data/lib/discorb/guild.rb +1244 -0
- data/lib/discorb/guild_template.rb +211 -0
- data/lib/discorb/image.rb +43 -0
- data/lib/discorb/integration.rb +111 -0
- data/lib/discorb/intents.rb +137 -0
- data/lib/discorb/interaction.rb +333 -0
- data/lib/discorb/internet.rb +285 -0
- data/lib/discorb/invite.rb +145 -0
- data/lib/discorb/log.rb +70 -0
- data/lib/discorb/member.rb +232 -0
- data/lib/discorb/message.rb +583 -0
- data/lib/discorb/modules.rb +138 -0
- data/lib/discorb/permission.rb +270 -0
- data/lib/discorb/presence.rb +308 -0
- data/lib/discorb/reaction.rb +48 -0
- data/lib/discorb/role.rb +189 -0
- data/lib/discorb/sticker.rb +157 -0
- data/lib/discorb/user.rb +163 -0
- data/lib/discorb/utils.rb +16 -0
- data/lib/discorb/voice_state.rb +251 -0
- data/lib/discorb/webhook.rb +420 -0
- data/lib/discorb.rb +51 -0
- metadata +120 -0
@@ -0,0 +1,283 @@
|
|
1
|
+
# @title Voice Events
|
2
|
+
|
3
|
+
# Voice Events
|
4
|
+
|
5
|
+
### Voice Channel Events
|
6
|
+
|
7
|
+
#### `voice_channel_connect(task, state)`
|
8
|
+
|
9
|
+
Fires when someone joins a voice channel.
|
10
|
+
|
11
|
+
| Parameter | Type | Description |
|
12
|
+
| --- | --- | --- |
|
13
|
+
| state | {Discorb::VoiceState} | The voice state of the user that joined. |
|
14
|
+
|
15
|
+
#### `voice_channel_disconnect(task, state)`
|
16
|
+
|
17
|
+
Fires when someone leaves a voice channel.
|
18
|
+
|
19
|
+
| Parameter | Type | Description |
|
20
|
+
| --- | --- | --- |
|
21
|
+
| state | {Discorb::VoiceState} | The voice state of the user that left. |
|
22
|
+
|
23
|
+
#### `voice_channel_move(task, before, after)`
|
24
|
+
|
25
|
+
Fires when someone moves to a different voice channel.
|
26
|
+
|
27
|
+
| Parameter | Type | Description |
|
28
|
+
| --- | --- | --- |
|
29
|
+
| before | {Discorb::VoiceState} | The voice state of the user before the move. |
|
30
|
+
| after | {Discorb::VoiceState} | The voice state of the user after the move. |
|
31
|
+
|
32
|
+
#### `voice_channel_update(task, before, after)`
|
33
|
+
|
34
|
+
Fires when a voice channel is connected, disconnected, or updated.
|
35
|
+
|
36
|
+
| Parameter | Type | Description |
|
37
|
+
| --- | --- | --- |
|
38
|
+
| before | {Discorb::VoiceState} | The voice state before the update. |
|
39
|
+
| after | {Discorb::VoiceState} | The voice state after the update. |
|
40
|
+
|
41
|
+
### Mute Events
|
42
|
+
|
43
|
+
#### `voice_mute_disable(task, state)`
|
44
|
+
|
45
|
+
Fires when a user's voice mute is disabled.
|
46
|
+
|
47
|
+
| Parameter | Type | Description |
|
48
|
+
| --- | --- | --- |
|
49
|
+
| `state` | {Discorb::VoiceState} | The voice state. |
|
50
|
+
|
51
|
+
#### `voice_mute_enable(task, state)`
|
52
|
+
|
53
|
+
Fires when a user's voice mute is enabled.
|
54
|
+
|
55
|
+
| Parameter | Type | Description |
|
56
|
+
| --- | --- | --- |
|
57
|
+
| `state` | {Discorb::VoiceState} | The voice state. |
|
58
|
+
|
59
|
+
#### `voice_mute_update(task, before, after)`
|
60
|
+
|
61
|
+
Fires when a user's voice mute is enabled or disabled.
|
62
|
+
|
63
|
+
| Parameter | Type | Description |
|
64
|
+
| --- | --- | --- |
|
65
|
+
| `before` | {Discorb::VoiceState} | The voice state before the update. |
|
66
|
+
| `after` | {Discorb::VoiceState} | The voice state after the update. |
|
67
|
+
|
68
|
+
#### `voice_server_mute_enable(task, state)`
|
69
|
+
|
70
|
+
Fires when a user's server voice mute is enabled.
|
71
|
+
|
72
|
+
| Parameter | Type | Description |
|
73
|
+
| --- | --- | --- |
|
74
|
+
| `state` | {Discorb::VoiceState} | The voice state. |
|
75
|
+
|
76
|
+
#### `voice_server_mute_disable(task, state)`
|
77
|
+
|
78
|
+
Fires when a user's server voice mute is disabled.
|
79
|
+
|
80
|
+
| Parameter | Type | Description |
|
81
|
+
| --- | --- | --- |
|
82
|
+
| `state` | {Discorb::VoiceState} | The voice state. |
|
83
|
+
|
84
|
+
#### `voice_server_mute_update(task, before, after)`
|
85
|
+
|
86
|
+
Fires when a user's server voice mute is enabled or disabled.
|
87
|
+
|
88
|
+
| Parameter | Type | Description |
|
89
|
+
| --- | --- | --- |
|
90
|
+
| `before` | {Discorb::VoiceState} | The voice state before the update. |
|
91
|
+
| `after` | {Discorb::VoiceState} | The voice state after the update. |
|
92
|
+
|
93
|
+
#### `voice_self_mute_enable(task, state)`
|
94
|
+
|
95
|
+
Fires when a user's self voice mute is enabled.
|
96
|
+
|
97
|
+
| Parameter | Type | Description |
|
98
|
+
| --- | --- | --- |
|
99
|
+
| `state` | {Discorb::VoiceState} | The voice state. |
|
100
|
+
|
101
|
+
#### `voice_self_mute_disable(task, state)`
|
102
|
+
|
103
|
+
Fires when a user's self voice mute is disabled.
|
104
|
+
|
105
|
+
| Parameter | Type | Description |
|
106
|
+
| --- | --- | --- |
|
107
|
+
| `state` | {Discorb::VoiceState} | The voice state. |
|
108
|
+
|
109
|
+
#### `voice_self_mute_update(task, before, after)`
|
110
|
+
|
111
|
+
Fires when a user's self voice mute is enabled or disabled.
|
112
|
+
|
113
|
+
| Parameter | Type | Description |
|
114
|
+
| --- | --- | --- |
|
115
|
+
| `before` | {Discorb::VoiceState} | The voice state before the update. |
|
116
|
+
| `after` | {Discorb::VoiceState} | The voice state after the update. |
|
117
|
+
|
118
|
+
### Deaf Events
|
119
|
+
|
120
|
+
#### `voice_deaf_enable(task, state)`
|
121
|
+
|
122
|
+
Fires when a user's voice deaf is enabled.
|
123
|
+
|
124
|
+
| Parameter | Type | Description |
|
125
|
+
| --- | --- | --- |
|
126
|
+
| `state` | {Discorb::VoiceState} | The voice state. |
|
127
|
+
|
128
|
+
#### `voice_deaf_disable(task, state)`
|
129
|
+
|
130
|
+
Fires when a user's voice deaf is disabled.
|
131
|
+
|
132
|
+
| Parameter | Type | Description |
|
133
|
+
| --- | --- | --- |
|
134
|
+
| `state` | {Discorb::VoiceState} | The voice state. |
|
135
|
+
|
136
|
+
#### `voice_deaf_update(task, before, after)`
|
137
|
+
|
138
|
+
Fires when a user's voice deaf is enabled or disabled.
|
139
|
+
|
140
|
+
| Parameter | Type | Description |
|
141
|
+
| --- | --- | --- |
|
142
|
+
| `before` | {Discorb::VoiceState} | The voice state before the update. |
|
143
|
+
| `after` | {Discorb::VoiceState} | The voice state after the update. |
|
144
|
+
|
145
|
+
#### `voice_server_deaf_enable(task, state)`
|
146
|
+
|
147
|
+
Fires when a user's server voice deaf is enabled.
|
148
|
+
|
149
|
+
| Parameter | Type | Description |
|
150
|
+
| --- | --- | --- |
|
151
|
+
| `state` | {Discorb::VoiceState} | The voice state. |
|
152
|
+
|
153
|
+
#### `voice_server_deaf_disable(task, state)`
|
154
|
+
|
155
|
+
Fires when a user's server voice deaf is disabled.
|
156
|
+
|
157
|
+
| Parameter | Type | Description |
|
158
|
+
| --- | --- | --- |
|
159
|
+
| `state` | {Discorb::VoiceState} | The voice state. |
|
160
|
+
|
161
|
+
#### `voice_server_deaf_update(task, before, after)`
|
162
|
+
|
163
|
+
Fires when a user's server voice deaf is enabled or disabled.
|
164
|
+
|
165
|
+
| Parameter | Type | Description |
|
166
|
+
| --- | --- | --- |
|
167
|
+
| `before` | {Discorb::VoiceState} | The voice state before the update. |
|
168
|
+
| `after` | {Discorb::VoiceState} | The voice state after the update. |
|
169
|
+
|
170
|
+
#### `voice_self_deaf_enable(task, state)`
|
171
|
+
|
172
|
+
Fires when a user's self voice deaf is enabled.
|
173
|
+
|
174
|
+
| Parameter | Type | Description |
|
175
|
+
| --- | --- | --- |
|
176
|
+
| `state` | {Discorb::VoiceState} | The voice state. |
|
177
|
+
|
178
|
+
#### `voice_self_deaf_disable(task, state)`
|
179
|
+
|
180
|
+
Fires when a user's self voice deaf is disabled.
|
181
|
+
|
182
|
+
| Parameter | Type | Description |
|
183
|
+
| --- | --- | --- |
|
184
|
+
| `state` | {Discorb::VoiceState} | The voice state. |
|
185
|
+
|
186
|
+
#### `voice_self_deaf_update(task, before, after)`
|
187
|
+
|
188
|
+
| Parameter | Type | Description |
|
189
|
+
| --- | --- | --- |
|
190
|
+
| `before` | {Discorb::VoiceState} | The voice state before the update. |
|
191
|
+
| `after` | {Discorb::VoiceState} | The voice state after the update. |
|
192
|
+
|
193
|
+
### Stream Events
|
194
|
+
|
195
|
+
#### `voice_stream_start(task, state)`
|
196
|
+
|
197
|
+
Fires when a stream is started.
|
198
|
+
|
199
|
+
| Parameter | Type | Description |
|
200
|
+
| --- | --- | --- |
|
201
|
+
| `state` | {Discorb::VoiceState} | The voice state. |
|
202
|
+
|
203
|
+
#### `voice_stream_end(task, state)`
|
204
|
+
|
205
|
+
Fires when a stream is ended.
|
206
|
+
|
207
|
+
| Parameter | Type | Description |
|
208
|
+
| --- | --- | --- |
|
209
|
+
| `state` | {Discorb::VoiceState} | The voice state. |
|
210
|
+
|
211
|
+
#### `voice_stream_update(task, before, after)`
|
212
|
+
|
213
|
+
Fires when a stream is started or ended.
|
214
|
+
|
215
|
+
| Parameter | Type | Description |
|
216
|
+
| --- | --- | --- |
|
217
|
+
| `before` | {Discorb::VoiceState} | The voice state before the update. |
|
218
|
+
| `after` | {Discorb::VoiceState} | The voice state after the update. |
|
219
|
+
|
220
|
+
### Video Events
|
221
|
+
|
222
|
+
#### `voice_video_start(task, state)`
|
223
|
+
|
224
|
+
Fires when a video is started.
|
225
|
+
|
226
|
+
| Parameter | Type | Description |
|
227
|
+
| --- | --- | --- |
|
228
|
+
| `state` | {Discorb::VoiceState} | The voice state. |
|
229
|
+
|
230
|
+
#### `voice_video_end(task, state)`
|
231
|
+
|
232
|
+
Fires when a video is ended.
|
233
|
+
|
234
|
+
| Parameter | Type | Description |
|
235
|
+
| --- | --- | --- |
|
236
|
+
| `state` | {Discorb::VoiceState} | The voice state. |
|
237
|
+
|
238
|
+
#### `voice_video_update(task, before, after)`
|
239
|
+
|
240
|
+
Fires when a video is started or ended.
|
241
|
+
|
242
|
+
| Parameter | Type | Description |
|
243
|
+
| --- | --- | --- |
|
244
|
+
| `before` | {Discorb::VoiceState} | The voice state before the update. |
|
245
|
+
| `after` | {Discorb::VoiceState} | The voice state after the update. |
|
246
|
+
|
247
|
+
### Stage Instances Events
|
248
|
+
|
249
|
+
#### `stage_instance_create(task, instance)`
|
250
|
+
|
251
|
+
Fires when a new stage instance is created.
|
252
|
+
|
253
|
+
| Parameter | Type | Description |
|
254
|
+
| --- | --- | --- |
|
255
|
+
| `instance` | {Discorb::StageInstance} | The created instance. |
|
256
|
+
|
257
|
+
#### `stage_instance_delete(task, instance)`
|
258
|
+
|
259
|
+
Fires when a stage instance is deleted.
|
260
|
+
|
261
|
+
| Parameter | Type | Description |
|
262
|
+
| --- | --- | --- |
|
263
|
+
| `instance` | {Discorb::StageInstance} | The deleted instance. |
|
264
|
+
|
265
|
+
#### `stage_instance_update(task, before, after)`
|
266
|
+
|
267
|
+
Fires when a stage instance is updated.
|
268
|
+
|
269
|
+
| Parameter | Type | Description |
|
270
|
+
| --- | --- | --- |
|
271
|
+
| `before` | {Discorb::StageInstance} | The instance before the update. |
|
272
|
+
| `after` | {Discorb::StageInstance} | The instance after the update. |
|
273
|
+
|
274
|
+
### Misc Events
|
275
|
+
|
276
|
+
#### `voice_state_update(task, before, after)`
|
277
|
+
|
278
|
+
Fired when a user changes voice state.
|
279
|
+
|
280
|
+
| Parameter | Type | Description |
|
281
|
+
| --- | --- | --- |
|
282
|
+
| before | {Discorb::VoiceState} | The voice state before the update. |
|
283
|
+
| after | {Discorb::VoiceState} | The voice state after the update. |
|
@@ -0,0 +1,43 @@
|
|
1
|
+
require "discorb"
|
2
|
+
|
3
|
+
client = Discorb::Client.new
|
4
|
+
|
5
|
+
def convert_role(guild, string)
|
6
|
+
guild.roles.find do |role|
|
7
|
+
role.id == string || role.name == string || role.mention == string
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
client.once :ready do
|
12
|
+
puts "Logged in as #{client.user}"
|
13
|
+
end
|
14
|
+
|
15
|
+
client.on :message do |_task, message|
|
16
|
+
next if message.author.bot?
|
17
|
+
next unless message.content.start_with?("!auth ")
|
18
|
+
|
19
|
+
role_name = message.content.delete_prefix("!auth ")
|
20
|
+
role = convert_role(message.guild, role_name)
|
21
|
+
if role.nil?
|
22
|
+
message.reply("Unknown role: #{role_name}").wait
|
23
|
+
next
|
24
|
+
end
|
25
|
+
message.channel.post(
|
26
|
+
"Click this button if you are human:",
|
27
|
+
components: [
|
28
|
+
Discorb::Button.new(
|
29
|
+
"Get role", custom_id: "auth:#{role.id}",
|
30
|
+
),
|
31
|
+
],
|
32
|
+
)
|
33
|
+
end
|
34
|
+
|
35
|
+
client.on :button_click do |_task, response|
|
36
|
+
if response.custom_id.start_with?("auth:")
|
37
|
+
id = response.custom_id.delete_prefix("auth:")
|
38
|
+
response.fired_by.add_role(id).wait
|
39
|
+
response.post("You got your role!\nHere's your role: <@&#{id}>", hide: true)
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
client.run(ENV["DISCORD_BOT_TOKEN"])
|
@@ -0,0 +1,61 @@
|
|
1
|
+
require "discorb"
|
2
|
+
|
3
|
+
client = Discorb::Client.new
|
4
|
+
|
5
|
+
SECTIONS = [
|
6
|
+
["About", <<~WIKI],
|
7
|
+
Ruby is an interpreted, high-level, general-purpose programming language.
|
8
|
+
It was designed and developed in the mid-1990s by Yukihiro "Matz" Matsumoto in Japan.\n\n
|
9
|
+
Ruby is dynamically typed and uses garbage collection and just-in-time compilation.
|
10
|
+
It supports multiple programming paradigms, including procedural, object-oriented, and functional programming.
|
11
|
+
According to the creator, Ruby was influenced by Perl, Smalltalk, Eiffel, Ada, BASIC, and Lisp.
|
12
|
+
WIKI
|
13
|
+
["Early concept", <<~WIKI],
|
14
|
+
Matsumoto has said that Ruby was conceived in 1993.
|
15
|
+
In a 1999 post to the ruby-talk mailing list, he describes some of his early ideas about the language:
|
16
|
+
> I was talking with my colleague about the possibility of an object-oriented scripting language.
|
17
|
+
> I knew Perl (Perl4, not Perl5), but I didn't like it really, because it had the smell of a toy language (it still has).
|
18
|
+
> The object-oriented language seemed very promising. I knew Python then.
|
19
|
+
> But I didn't like it, because I didn't think it was a true object-oriented language - OO features appeared to be add-on to the language.
|
20
|
+
> As a language maniac and OO fan for 15 years, I really wanted a genuine object-oriented, easy-to-use scripting language. I looked for but couldn't find one.
|
21
|
+
> So I decided to make it.
|
22
|
+
Matsumoto describes the design of Ruby as being like a simple Lisp language at its core, with an object system like that of Smalltalk, blocks inspired by higher-order functions, and practical utility like that of Perl.
|
23
|
+
WIKI
|
24
|
+
["First publication", <<~WIKI],
|
25
|
+
The first public release of Ruby 0.95 was announced on Japanese domestic newsgroups on December 21, 1995.
|
26
|
+
Subsequently, three more versions of Ruby were released in two days.
|
27
|
+
The release coincided with the launch of the Japanese-language ruby-list mailing list, which was the first mailing list for the new language.
|
28
|
+
|
29
|
+
Already present at this stage of development were many of the features familiar in later releases of Ruby, including object-oriented design, classes with inheritance, mixins, iterators, closures, exception handling and garbage collection.
|
30
|
+
WIKI
|
31
|
+
].freeze
|
32
|
+
|
33
|
+
WIKIPEDIA_CREDIT = "(From: [Wikipedia](https://en.wikipedia.org/wiki/Ruby_(programming_language)))"
|
34
|
+
|
35
|
+
client.once :ready do
|
36
|
+
puts "Logged in as #{client.user}"
|
37
|
+
end
|
38
|
+
|
39
|
+
client.on :message do |_task, message|
|
40
|
+
next if message.author.bot?
|
41
|
+
next unless message.content == "!ruby"
|
42
|
+
|
43
|
+
options = SECTIONS.map.with_index { |section, i| Discorb::SelectMenu::Option.new("Page #{i + 1}", "sections:#{i}", description: section[0]) }
|
44
|
+
message.channel.post(
|
45
|
+
"Select a section", components: [Discorb::SelectMenu.new("sections", options)],
|
46
|
+
)
|
47
|
+
end
|
48
|
+
|
49
|
+
client.on :select_menu_select do |_task, response|
|
50
|
+
next unless response.custom_id == "sections"
|
51
|
+
|
52
|
+
id = response.value.delete_prefix("sections:")
|
53
|
+
selected_section = SECTIONS[id.to_i]
|
54
|
+
response.post(
|
55
|
+
"**#{selected_section[0]}**\n" \
|
56
|
+
"#{selected_section[1].strip}\n\n" \
|
57
|
+
"#{WIKIPEDIA_CREDIT}", hide: true,
|
58
|
+
)
|
59
|
+
end
|
60
|
+
|
61
|
+
client.run(ENV["DISCORD_BOT_TOKEN"])
|
@@ -0,0 +1,41 @@
|
|
1
|
+
require "discorb"
|
2
|
+
|
3
|
+
module MessageExpander
|
4
|
+
extend Discorb::Extension
|
5
|
+
|
6
|
+
@message_regex = Regexp.new(
|
7
|
+
'(?!<)https://(?:ptb\.|canary\.)?discord(?:app)?\.com/channels/' \
|
8
|
+
"(?<guild>[0-9]{18})/(?<channel>[0-9]{18})/(?<message>[0-9]{18})(?!>)"
|
9
|
+
)
|
10
|
+
|
11
|
+
event :message do |_task, message|
|
12
|
+
next if message.author.bot?
|
13
|
+
|
14
|
+
message.content.to_enum(:scan, @message_regex).map { Regexp.last_match }.each do |match|
|
15
|
+
ch = @client.channels[match[:channel]]
|
16
|
+
next if ch.nil?
|
17
|
+
|
18
|
+
begin
|
19
|
+
url_message = ch.fetch_message(match[:message]).wait
|
20
|
+
rescue Discorb::NotFoundError
|
21
|
+
url_message.add_reaction(Discorb::UnicodeEmoji["x"])
|
22
|
+
else
|
23
|
+
embed = Discorb::Embed.new(
|
24
|
+
nil, url_message.content,
|
25
|
+
color: Discorb::Color[:blurple],
|
26
|
+
timestamp: url_message.created_at,
|
27
|
+
author: Discorb::Embed::Author.new(
|
28
|
+
url_message.author.name,
|
29
|
+
url: url_message.jump_url,
|
30
|
+
icon: url_message.author.display_avatar.url,
|
31
|
+
),
|
32
|
+
footer: Discorb::Embed::Footer.new(
|
33
|
+
"#{url_message.guild.name} / #{ch.name}",
|
34
|
+
icon: url_message.guild.icon&.url,
|
35
|
+
),
|
36
|
+
)
|
37
|
+
message.reply embed: embed
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
require "discorb"
|
2
|
+
|
3
|
+
client = Discorb::Client.new
|
4
|
+
|
5
|
+
client.once :ready do |_task|
|
6
|
+
puts "Logged in as #{client.user}"
|
7
|
+
end
|
8
|
+
|
9
|
+
client.on :message do |_task, message|
|
10
|
+
next if message.author.bot?
|
11
|
+
next unless message.content.start_with?("eval ")
|
12
|
+
|
13
|
+
unless message.author.bot_owner?.wait
|
14
|
+
message.reply("You don't have permission to use this command.")
|
15
|
+
next
|
16
|
+
end
|
17
|
+
|
18
|
+
code = message.content.delete_prefix("eval ").delete_prefix("```rb").delete_suffix("```")
|
19
|
+
message.add_reaction(Discorb::UnicodeEmoji["clock3"])
|
20
|
+
res = eval("Async { |task| #{code} }.wait", binding, __FILE__, __LINE__) # rubocop:disable Security/Eval
|
21
|
+
message.remove_reaction(Discorb::UnicodeEmoji["clock3"])
|
22
|
+
message.add_reaction(Discorb::UnicodeEmoji["white_check_mark"])
|
23
|
+
unless res.nil?
|
24
|
+
res = res.wait if res.is_a? Async::Task
|
25
|
+
message.channel.post("```rb\n#{res.inspect[...1990]}\n```")
|
26
|
+
end
|
27
|
+
rescue Exception => error
|
28
|
+
message.reply embed: Discorb::Embed.new("Error!", "```rb\n#{error.full_message(highlight: false)[...1990]}\n```",
|
29
|
+
color: Discorb::Color[:red])
|
30
|
+
end
|
31
|
+
|
32
|
+
client.run(ENV["discord_bot_token"])
|