discorb 0.1.0 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile +0 -1
- data/Gemfile.lock +1 -2
- data/docs/discord_irb.md +39 -0
- data/docs/events.md +2 -2
- data/docs/extension.md +14 -0
- data/exe/discord-irb +60 -0
- data/lib/discorb/channel.rb +4 -4
- data/lib/discorb/client.rb +35 -10
- data/lib/discorb/common.rb +1 -1
- data/lib/discorb/message.rb +27 -0
- data/lib/discorb/modules.rb +76 -3
- data/lib/discorb/user.rb +2 -2
- metadata +6 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 6bdf66383e4ecb0161c962e9621861a07f49c515ce7754c8f7b630a80acbf009
|
4
|
+
data.tar.gz: 7035f001fd4ffb4523f9ca5b64c9cda440bd3d7e755174264c9f9cd74f8928a1
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e8101e84ffd48fdf3c20cbef1fe31365f0f606e05d6a031fe38a8810dd51dc5abbccf86416268a07a74b1a57e8623c2c888c9077973f3f44c7e5b15c8fa3aa0c
|
7
|
+
data.tar.gz: 39b55c52514f0c80149f7a4453ea489bd1fb9baf440cfb6fcecd1956d6837d3a666566edeecf2da35e254eab73a7e5c279c225b9937ee2259c1b605b6b94b549
|
data/Gemfile
CHANGED
data/Gemfile.lock
CHANGED
data/docs/discord_irb.md
ADDED
@@ -0,0 +1,39 @@
|
|
1
|
+
# @title discord-irb
|
2
|
+
|
3
|
+
# discord-irb
|
4
|
+
|
5
|
+
discord-irb is a command line tool for interacting with the Discord API.
|
6
|
+
|
7
|
+
|
8
|
+
## Usage
|
9
|
+
|
10
|
+
```
|
11
|
+
$ bundle exec discord-irb
|
12
|
+
```
|
13
|
+
|
14
|
+
To start.
|
15
|
+
|
16
|
+
### Load a token
|
17
|
+
|
18
|
+
discord-irb will load a token from...
|
19
|
+
1. the `DISCORD_BOT_TOKEN` environment variable
|
20
|
+
2. the `DISCORD_TOKEN` environment variable
|
21
|
+
3. `token` file in the current directory(customizable with `-f` option)
|
22
|
+
4. your input
|
23
|
+
|
24
|
+
### Arguments
|
25
|
+
|
26
|
+
#### `-i`, `--intents`
|
27
|
+
|
28
|
+
Intents to use.
|
29
|
+
Specify intents with integers.
|
30
|
+
|
31
|
+
#### `-t`, `--token-file`
|
32
|
+
|
33
|
+
Token file to load.
|
34
|
+
|
35
|
+
### Variables
|
36
|
+
|
37
|
+
#### `message`
|
38
|
+
|
39
|
+
Last message received.
|
data/docs/events.md
CHANGED
@@ -28,11 +28,11 @@ Fires when a event is received.
|
|
28
28
|
|`event_name`| Symbol | The name of the event. |
|
29
29
|
|`data` | Hash | The data of the event. |
|
30
30
|
|
31
|
-
#### `ready(
|
31
|
+
#### `ready()`
|
32
32
|
|
33
33
|
Fires when the client is ready.
|
34
34
|
|
35
|
-
#### `resumed(
|
35
|
+
#### `resumed()`
|
36
36
|
|
37
37
|
Fires when the client is resumed connection.
|
38
38
|
|
data/docs/extension.md
CHANGED
@@ -37,3 +37,17 @@ end
|
|
37
37
|
## Load extension
|
38
38
|
|
39
39
|
Use {Client#extend} to load extension.
|
40
|
+
|
41
|
+
## Access Client from extension
|
42
|
+
|
43
|
+
You can access {Client} from extension with `@client`.
|
44
|
+
|
45
|
+
```ruby
|
46
|
+
module MyExtension
|
47
|
+
extend Discorb::Extension
|
48
|
+
|
49
|
+
event :ready do |message|
|
50
|
+
puts "Logged in as #{client.user}"
|
51
|
+
end
|
52
|
+
end
|
53
|
+
```
|
data/exe/discord-irb
ADDED
@@ -0,0 +1,60 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require "io/console"
|
4
|
+
require "discorb"
|
5
|
+
require "optparse"
|
6
|
+
|
7
|
+
intents_value = Discorb::Intents.all.value
|
8
|
+
token_file = "token"
|
9
|
+
|
10
|
+
opt = OptionParser.new
|
11
|
+
opt.on("-i", "--intents", "intents to use, default to all") { |v| intents_value = v }
|
12
|
+
opt.on("-t", "--token-file", "token file to load, default to \"token\"") { |v| token_file = v }
|
13
|
+
opt.parse(ARGV)
|
14
|
+
|
15
|
+
client = Discorb::Client.new(intents: Discorb::Intents.from_value(intents_value))
|
16
|
+
$messages = []
|
17
|
+
|
18
|
+
client.on :ready do
|
19
|
+
puts "\e[96mLogged in as #{client.user}\e[m"
|
20
|
+
|
21
|
+
def message
|
22
|
+
$messages.last
|
23
|
+
end
|
24
|
+
|
25
|
+
def dirb_help
|
26
|
+
puts <<~EOS
|
27
|
+
\e[96mDiscord-IRB\e[m
|
28
|
+
This is a debug client for Discord.
|
29
|
+
\e[90mmessage\e[m to get latest message.
|
30
|
+
|
31
|
+
\e[36mhttps://rubydoc.info/gems/discorb/file/docs/discord_irb.md\e[m for more information.
|
32
|
+
EOS
|
33
|
+
end
|
34
|
+
|
35
|
+
puts <<~FIRST_MESSAGE
|
36
|
+
Running on \e[31mRuby #{RUBY_VERSION}\e[m, disco\e[31mrb #{Discorb::VERSION}\e[m
|
37
|
+
Type \e[90mdirb_help\e[m to help.
|
38
|
+
FIRST_MESSAGE
|
39
|
+
|
40
|
+
binding.irb
|
41
|
+
|
42
|
+
client.close!
|
43
|
+
end
|
44
|
+
|
45
|
+
client.on :message do |message|
|
46
|
+
$messages << message
|
47
|
+
end
|
48
|
+
|
49
|
+
token = ENV["DISCORD_BOT_TOKEN"] || ENV["DISCORD_TOKEN"]
|
50
|
+
if token.nil?
|
51
|
+
if File.exists?(token_file)
|
52
|
+
token = File.read(token_file)
|
53
|
+
else
|
54
|
+
print "\e[90mToken?\e[m : "
|
55
|
+
token = $stdin.noecho(&:gets).chomp
|
56
|
+
puts
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
client.run token
|
data/lib/discorb/channel.rb
CHANGED
@@ -68,9 +68,9 @@ module Discorb
|
|
68
68
|
end
|
69
69
|
|
70
70
|
# @!visibility private
|
71
|
-
def
|
71
|
+
def channel_id
|
72
72
|
Async do
|
73
|
-
|
73
|
+
@id
|
74
74
|
end
|
75
75
|
end
|
76
76
|
|
@@ -1090,9 +1090,9 @@ module Discorb
|
|
1090
1090
|
include Messageable
|
1091
1091
|
|
1092
1092
|
# @!visibility private
|
1093
|
-
def
|
1093
|
+
def channel_id
|
1094
1094
|
Async do
|
1095
|
-
|
1095
|
+
@id
|
1096
1096
|
end
|
1097
1097
|
end
|
1098
1098
|
|
data/lib/discorb/client.rb
CHANGED
@@ -47,6 +47,8 @@ module Discorb
|
|
47
47
|
# @note This will be calculated from heartbeat and heartbeat_ack.
|
48
48
|
# @return [nil] If not connected to the gateway.
|
49
49
|
attr_reader :ping
|
50
|
+
# @return [:initialized, :running, :closed] The status of the client.
|
51
|
+
attr_reader :status
|
50
52
|
|
51
53
|
#
|
52
54
|
# Initializes a new client.
|
@@ -85,6 +87,7 @@ module Discorb
|
|
85
87
|
@conditions = {}
|
86
88
|
@commands = []
|
87
89
|
@overwrite_application_commands = overwrite_application_commands
|
90
|
+
@status = :initialized
|
88
91
|
end
|
89
92
|
|
90
93
|
#
|
@@ -177,16 +180,6 @@ module Discorb
|
|
177
180
|
end
|
178
181
|
end
|
179
182
|
|
180
|
-
#
|
181
|
-
# Starts the client.
|
182
|
-
#
|
183
|
-
# @param [String] token The token to use.
|
184
|
-
#
|
185
|
-
def run(token)
|
186
|
-
@token = token.to_s
|
187
|
-
connect_gateway(true)
|
188
|
-
end
|
189
|
-
|
190
183
|
#
|
191
184
|
# Fetch user from ID.
|
192
185
|
# @macro async
|
@@ -376,5 +369,37 @@ module Discorb
|
|
376
369
|
|
377
370
|
include Discorb::Gateway::Handler
|
378
371
|
include Discorb::Command::Handler
|
372
|
+
|
373
|
+
#
|
374
|
+
# Starts the client.
|
375
|
+
#
|
376
|
+
# @param [String] token The token to use.
|
377
|
+
#
|
378
|
+
def run(token)
|
379
|
+
Async do |task|
|
380
|
+
@token = token.to_s
|
381
|
+
@close_condition = Async::Condition.new
|
382
|
+
main_task = Async do
|
383
|
+
@status = :running
|
384
|
+
connect_gateway(true).wait
|
385
|
+
rescue
|
386
|
+
@status = :stopped
|
387
|
+
@close_condition.signal
|
388
|
+
raise
|
389
|
+
end
|
390
|
+
@close_condition.wait
|
391
|
+
main_task.stop
|
392
|
+
end
|
393
|
+
end
|
394
|
+
|
395
|
+
#
|
396
|
+
# Stops the client.
|
397
|
+
#
|
398
|
+
def close!
|
399
|
+
@connection.send_close
|
400
|
+
@tasks.each(&:stop)
|
401
|
+
@status = :closed
|
402
|
+
@close_condition.signal
|
403
|
+
end
|
379
404
|
end
|
380
405
|
end
|
data/lib/discorb/common.rb
CHANGED
@@ -4,7 +4,7 @@ module Discorb
|
|
4
4
|
# @return [String] The API base URL.
|
5
5
|
API_BASE_URL = "https://discord.com/api/v9"
|
6
6
|
# @return [String] The version of discorb.
|
7
|
-
VERSION = "0.
|
7
|
+
VERSION = "0.2.0"
|
8
8
|
# @return [String] The user agent for the bot.
|
9
9
|
USER_AGENT = "DiscordBot (https://github.com/discorb-lib/discorb #{VERSION}) Ruby/#{RUBY_VERSION}"
|
10
10
|
|
data/lib/discorb/message.rb
CHANGED
@@ -213,6 +213,33 @@ module Discorb
|
|
213
213
|
!@updated_at.nil?
|
214
214
|
end
|
215
215
|
|
216
|
+
#
|
217
|
+
# Edit the message.
|
218
|
+
#
|
219
|
+
# @param [String] content The message content.
|
220
|
+
# @param [Discorb::Embed] embed The embed to send.
|
221
|
+
# @param [Array<Discord::Embed>] embeds The embeds to send.
|
222
|
+
# @param [Discorb::AllowedMentions] allowed_mentions The allowed mentions.
|
223
|
+
# @param [Array<Discorb::Component>, Array<Array<Discorb::Component>>] components The components to send.
|
224
|
+
# @param [Boolean] supress Whether to supress embeds.
|
225
|
+
#
|
226
|
+
def edit(...)
|
227
|
+
Async do
|
228
|
+
channel.edit_message(@id, ...).wait
|
229
|
+
end
|
230
|
+
end
|
231
|
+
|
232
|
+
#
|
233
|
+
# Delete the message.
|
234
|
+
#
|
235
|
+
# @param [String] reason The reason for deleting the message.
|
236
|
+
#
|
237
|
+
def delete!(reason: nil)
|
238
|
+
Async do
|
239
|
+
channel.delete_message!(@id, reason: reason).wait
|
240
|
+
end
|
241
|
+
end
|
242
|
+
|
216
243
|
#
|
217
244
|
# Convert the message to reference object.
|
218
245
|
#
|
data/lib/discorb/modules.rb
CHANGED
@@ -7,6 +7,8 @@ module Discorb
|
|
7
7
|
module Messageable
|
8
8
|
#
|
9
9
|
# Post a message to the channel.
|
10
|
+
# @macro async
|
11
|
+
# @macro http
|
10
12
|
#
|
11
13
|
# @param [String] content The message content.
|
12
14
|
# @param [Boolean] tts Whether the message is tts.
|
@@ -61,13 +63,82 @@ module Discorb
|
|
61
63
|
else
|
62
64
|
headers = {}
|
63
65
|
end
|
64
|
-
_resp, data = @client.http.post("
|
66
|
+
_resp, data = @client.http.post("/channels/#{channel_id.wait}/messages", payload, headers: headers).wait
|
65
67
|
Message.new(@client, data.merge({ guild_id: @guild_id.to_s }))
|
66
68
|
end
|
67
69
|
end
|
68
70
|
|
71
|
+
#
|
72
|
+
# Edit a message.
|
73
|
+
# @macro async
|
74
|
+
# @macro http
|
75
|
+
#
|
76
|
+
# @param [#to_s] message_id The message id.
|
77
|
+
# @param [String] content The message content.
|
78
|
+
# @param [Discorb::Embed] embed The embed to send.
|
79
|
+
# @param [Array<Discord::Embed>] embeds The embeds to send.
|
80
|
+
# @param [Discorb::AllowedMentions] allowed_mentions The allowed mentions.
|
81
|
+
# @param [Array<Discorb::Component>, Array<Array<Discorb::Component>>] components The components to send.
|
82
|
+
# @param [Boolean] supress Whether to supress embeds.
|
83
|
+
#
|
84
|
+
def edit_message(message_id, content = nil, embed: nil, embeds: nil, allowed_mentions: nil,
|
85
|
+
components: nil, supress: nil)
|
86
|
+
Async do
|
87
|
+
payload = {}
|
88
|
+
payload[:content] = content if content
|
89
|
+
tmp_embed = if embed
|
90
|
+
[embed]
|
91
|
+
elsif embeds
|
92
|
+
embeds
|
93
|
+
end
|
94
|
+
payload[:embeds] = tmp_embed.map(&:to_hash) if tmp_embed
|
95
|
+
payload[:allowed_mentions] =
|
96
|
+
allowed_mentions ? allowed_mentions.to_hash(@client.allowed_mentions) : @client.allowed_mentions.to_hash
|
97
|
+
if components
|
98
|
+
tmp_components = []
|
99
|
+
tmp_row = []
|
100
|
+
components.each do |c|
|
101
|
+
case c
|
102
|
+
when Array
|
103
|
+
tmp_components << tmp_row
|
104
|
+
tmp_row = []
|
105
|
+
tmp_components << c
|
106
|
+
when SelectMenu
|
107
|
+
tmp_components << tmp_row
|
108
|
+
tmp_row = []
|
109
|
+
tmp_components << [c]
|
110
|
+
else
|
111
|
+
tmp_row << c
|
112
|
+
end
|
113
|
+
end
|
114
|
+
tmp_components << tmp_row
|
115
|
+
payload[:flags] = (supress ? 1 << 2 : 0) unless flags.nil?
|
116
|
+
payload[:components] = tmp_components.filter { |c| c.length.positive? }.map { |c| { type: 1, components: c.map(&:to_hash) } }
|
117
|
+
end
|
118
|
+
@client.http.patch("/channels/#{channel_id.wait}/messages/#{message_id}", payload).wait
|
119
|
+
end
|
120
|
+
end
|
121
|
+
|
122
|
+
#
|
123
|
+
# Delete a message.
|
124
|
+
# @macro async
|
125
|
+
# @macro http
|
126
|
+
#
|
127
|
+
# @param [#to_s] message_id The message id.
|
128
|
+
# @param [String] reason The reason for deleting the message.
|
129
|
+
#
|
130
|
+
def delete_message!(message_id, reason: nil)
|
131
|
+
Async do
|
132
|
+
@client.http.delete("/channels/#{channel_id.wait}/messages/#{message_id}", reason: reason).wait
|
133
|
+
end
|
134
|
+
end
|
135
|
+
|
136
|
+
alias destroy_message! delete_message!
|
137
|
+
|
69
138
|
#
|
70
139
|
# Fetch a message from ID.
|
140
|
+
# @macro async
|
141
|
+
# @macro http
|
71
142
|
#
|
72
143
|
# @param [Discorb::Snowflake] id The ID of the message.
|
73
144
|
#
|
@@ -76,13 +147,15 @@ module Discorb
|
|
76
147
|
#
|
77
148
|
def fetch_message(id)
|
78
149
|
Async do
|
79
|
-
_resp, data = @client.http.get("
|
150
|
+
_resp, data = @client.http.get("/channels/#{channel_id.wait}/messages/#{id}").wait
|
80
151
|
Message.new(@client, data.merge({ guild_id: @guild_id.to_s }))
|
81
152
|
end
|
82
153
|
end
|
83
154
|
|
84
155
|
#
|
85
156
|
# Fetch a message history.
|
157
|
+
# @macro async
|
158
|
+
# @macro http
|
86
159
|
#
|
87
160
|
# @param [Integer] limit The number of messages to fetch.
|
88
161
|
# @param [Discorb::Snowflake] before The ID of the message to fetch before.
|
@@ -99,7 +172,7 @@ module Discorb
|
|
99
172
|
after: Discorb::Utils.try(around, :id),
|
100
173
|
around: Discorb::Utils.try(before, :id),
|
101
174
|
}.filter { |_k, v| !v.nil? }.to_h
|
102
|
-
_resp, messages = @client.http.get("
|
175
|
+
_resp, messages = @client.http.get("/channels/#{channel_id.wait}/messages?#{URI.encode_www_form(params)}").wait
|
103
176
|
messages.map { |m| Message.new(@client, m.merge({ guild_id: @guild_id.to_s })) }
|
104
177
|
end
|
105
178
|
end
|
data/lib/discorb/user.rb
CHANGED
@@ -74,13 +74,13 @@ module Discorb
|
|
74
74
|
alias app_owner? bot_owner?
|
75
75
|
|
76
76
|
# @!visibility private
|
77
|
-
def
|
77
|
+
def channel_id
|
78
78
|
Async do
|
79
79
|
next @dm_channel_id if @dm_channel_id
|
80
80
|
|
81
81
|
dm_channel = @client.http.post("/users/#{@id}/channels", { recipient_id: @client.user.id }).wait
|
82
82
|
@dm_channel_id = dm_channel[:id]
|
83
|
-
|
83
|
+
@dm_channel_id
|
84
84
|
end
|
85
85
|
end
|
86
86
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: discorb
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- sevenc-nanashi
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-
|
11
|
+
date: 2021-09-01 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: async
|
@@ -69,7 +69,8 @@ dependencies:
|
|
69
69
|
description:
|
70
70
|
email:
|
71
71
|
- sevenc-nanashi@sevenbot.jp
|
72
|
-
executables:
|
72
|
+
executables:
|
73
|
+
- discord-irb
|
73
74
|
extensions: []
|
74
75
|
extra_rdoc_files: []
|
75
76
|
files:
|
@@ -86,6 +87,7 @@ files:
|
|
86
87
|
- discorb.gemspec
|
87
88
|
- docs/Examples.md
|
88
89
|
- docs/application_command.md
|
90
|
+
- docs/discord_irb.md
|
89
91
|
- docs/events.md
|
90
92
|
- docs/extension.md
|
91
93
|
- docs/voice_events.md
|
@@ -100,6 +102,7 @@ files:
|
|
100
102
|
- examples/simple/ping_pong.rb
|
101
103
|
- examples/simple/rolepanel.rb
|
102
104
|
- examples/simple/wait_for_message.rb
|
105
|
+
- exe/discord-irb
|
103
106
|
- lib/discorb.rb
|
104
107
|
- lib/discorb/application.rb
|
105
108
|
- lib/discorb/asset.rb
|