discorb 0.2.5 → 0.4.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.
@@ -1,5 +1,7 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
+ # description: Connect to discord and start IRB.
4
+
3
5
  require "io/console"
4
6
  require "discorb"
5
7
  require "optparse"
@@ -7,10 +9,16 @@ require "optparse"
7
9
  intents_value = Discorb::Intents.all.value
8
10
  token_file = "token"
9
11
 
10
- opt = OptionParser.new
12
+ ARGV.delete_at 0
13
+
14
+ opt = OptionParser.new <<~BANNER
15
+ This command will start an interactive Ruby shell with connected client.
16
+
17
+ Usage: discorb irb [options]
18
+ BANNER
11
19
  opt.on("-i", "--intents", "intents to use, default to all") { |v| intents_value = v }
12
20
  opt.on("-t", "--token-file", "token file to load, default to \"token\"") { |v| token_file = v }
13
- opt.parse(ARGV)
21
+ opt.parse!(ARGV)
14
22
 
15
23
  client = Discorb::Client.new(intents: Discorb::Intents.from_value(intents_value))
16
24
  $messages = []
@@ -28,7 +36,7 @@ client.on :ready do
28
36
  This is a debug client for Discord.
29
37
  \e[90mmessage\e[m to get latest message.
30
38
 
31
- \e[36mhttps://rubydoc.info/gems/discorb/file/docs/discord_irb.md\e[m for more information.
39
+ \e[36mhttps://discorb-lib.github.io/#{Discorb::VERSION}/file.irb.html\e[m for more information.
32
40
  EOS
33
41
  end
34
42
 
@@ -0,0 +1,49 @@
1
+ # description: Run a client.
2
+ require "optparse"
3
+ require "json"
4
+ require "discorb/utils/colored_puts"
5
+
6
+ ARGV.delete_at 0
7
+ # @!visibility private
8
+ LOG_LEVELS = %w[none debug info warn error fatal]
9
+
10
+ opt = OptionParser.new <<~BANNER
11
+ This command will run a client.
12
+
13
+ Usage: discorb run [options] [script]
14
+
15
+ script The script to run. Defaults to 'main.rb'.
16
+ BANNER
17
+ options = {
18
+ deamon: false,
19
+ log_level: nil,
20
+ log_file: nil,
21
+ log_color: nil,
22
+ setup: nil,
23
+ }
24
+ opt.on("-d", "--deamon", "Run as a daemon.") { |v| options[:daemon] = v }
25
+ opt.on("-l", "--log-level LEVEL", "Log level.") do |v|
26
+ unless LOG_LEVELS.include? v.downcase
27
+ eputs "Invalid log level: \e[31m#{v}\e[91m"
28
+ eputs "Valid log levels: \e[31m#{LOG_LEVELS.join("\e[91m, \e[31m")}\e[91m"
29
+ exit 1
30
+ end
31
+ options[:log_level] = v.downcase
32
+ end
33
+ opt.on("-f", "--log-file FILE", "File to write log to.") { |v| options[:log_file] = v }
34
+ opt.on("-c", "--[no-]log-color", "Whether to colorize log output.") { |v| options[:log_color] = v }
35
+ opt.on("-s", "--setup", "Whether to setup application commands.") { |v| options[:setup] = v }
36
+ opt.parse!(ARGV)
37
+
38
+ script = ARGV[0]
39
+
40
+ script ||= "main.rb"
41
+
42
+ ENV["DISCORB_CLI_FLAG"] = "run"
43
+ ENV["DISCORB_CLI_OPTIONS"] = JSON.generate(options)
44
+
45
+ begin
46
+ load script
47
+ rescue LoadError
48
+ eputs "Could not load script: \e[31m#{script}\e[91m"
49
+ end
@@ -0,0 +1,26 @@
1
+ # description: Setup application commands.
2
+ require "optparse"
3
+ require "discorb/utils/colored_puts"
4
+
5
+ ARGV.delete_at 0
6
+
7
+ opt = OptionParser.new <<~BANNER
8
+ This command will setup application commands.
9
+
10
+ Usage: discorb setup [script]
11
+
12
+ script The script to setup.
13
+ BANNER
14
+ opt.parse!(ARGV)
15
+
16
+ script = ARGV[0]
17
+ script ||= "main.rb"
18
+ ENV["DISCORB_CLI_FLAG"] = "setup"
19
+
20
+ begin
21
+ load script
22
+ rescue LoadError
23
+ eputs "Could not load script: \e[31m#{script}\e[m"
24
+ else
25
+ sputs "Successfully set up commands for \e[32m#{script}\e[m."
26
+ end
@@ -0,0 +1,8 @@
1
+ # description: Show information of your environment.
2
+
3
+ require "etc"
4
+ require "discorb"
5
+ puts "\e[90mRuby:\e[m #{RUBY_VERSION}"
6
+ puts "\e[90mdiscorb:\e[m #{Discorb::VERSION}"
7
+ uname = Etc.uname
8
+ puts "\e[90mSystem:\e[m #{uname[:sysname]} #{uname[:release]}"
data/lib/discorb/flag.rb CHANGED
@@ -25,6 +25,9 @@ module Discorb
25
25
  end
26
26
  end
27
27
 
28
+ #
29
+ # Returns the value of the flag.
30
+ #
28
31
  def method_missing(name, args = nil)
29
32
  if @values.key?(name.to_s.delete_suffix("?").to_sym)
30
33
  @values[name.to_s.delete_suffix("?").to_sym]
@@ -574,7 +574,6 @@ module Discorb
574
574
  @uncached_guilds.delete(data[:id])
575
575
  if @uncached_guilds == []
576
576
  @ready = true
577
- setup_commands.wait if @overwrite_application_commands
578
577
  dispatch(:ready)
579
578
  @log.info("Guilds were cached")
580
579
  end
data/lib/discorb/http.rb CHANGED
@@ -32,12 +32,7 @@ module Discorb
32
32
  def get(path, headers: nil, audit_log_reason: nil, **kwargs)
33
33
  Async do |task|
34
34
  resp = http.get(get_path(path), get_headers(headers, "", audit_log_reason), **kwargs)
35
- rd = resp.body
36
- data = if rd.nil? || rd.empty?
37
- nil
38
- else
39
- JSON.parse(rd, symbolize_names: true)
40
- end
35
+ data = get_response_data(resp)
41
36
  test_error(if resp.code == "429"
42
37
  @client.log.warn "Ratelimit exceeded for #{path}, trying again in #{data[:retry_after]} seconds."
43
38
  task.sleep(data[:retry_after])
@@ -66,12 +61,7 @@ module Discorb
66
61
  def post(path, body = "", headers: nil, audit_log_reason: nil, **kwargs)
67
62
  Async do |task|
68
63
  resp = http.post(get_path(path), get_body(body), get_headers(headers, body, audit_log_reason), **kwargs)
69
- rd = resp.body
70
- data = if rd.nil? || rd.empty?
71
- nil
72
- else
73
- JSON.parse(rd, symbolize_names: true)
74
- end
64
+ data = get_response_data(resp)
75
65
  test_error(if resp.code == "429"
76
66
  task.sleep(data[:retry_after])
77
67
  post(path, body, headers: headers, audit_log_reason: audit_log_reason, **kwargs).wait
@@ -132,12 +122,7 @@ module Discorb
132
122
  def put(path, body = "", headers: nil, audit_log_reason: nil, **kwargs)
133
123
  Async do |task|
134
124
  resp = http.put(get_path(path), get_body(body), get_headers(headers, body, audit_log_reason), **kwargs)
135
- rd = resp.body
136
- data = if rd.nil? || rd.empty?
137
- nil
138
- else
139
- JSON.parse(rd, symbolize_names: true)
140
- end
125
+ data = get_response_data(resp)
141
126
  test_error(if resp.code == "429"
142
127
  task.sleep(data[:retry_after])
143
128
  put(path, body, headers: headers, audit_log_reason: audit_log_reason, **kwargs).wait
@@ -164,12 +149,7 @@ module Discorb
164
149
  def delete(path, headers: nil, audit_log_reason: nil, **kwargs)
165
150
  Async do |task|
166
151
  resp = http.delete(get_path(path), get_headers(headers, "", audit_log_reason))
167
- rd = resp.body
168
- data = if rd.nil? || rd.empty?
169
- nil
170
- else
171
- JSON.parse(rd, symbolize_names: true)
172
- end
152
+ data = get_response_data(resp)
173
153
  test_error(if resp.code == "429"
174
154
  task.sleep(data[:retry_after])
175
155
  delete(path, headers: headers, audit_log_reason: audit_log_reason, **kwargs).wait
@@ -257,6 +237,18 @@ module Discorb
257
237
  URI(full_path).path
258
238
  end
259
239
 
240
+ def get_response_data(resp)
241
+ if resp["Via"].nil?
242
+ raise CloudFlareBanError.new(@client, resp)
243
+ end
244
+ rd = resp.body
245
+ if rd.nil? || rd.empty?
246
+ nil
247
+ else
248
+ JSON.parse(rd, symbolize_names: true)
249
+ end
250
+ end
251
+
260
252
  def http
261
253
  https = Net::HTTP.new("discord.com", 443)
262
254
  https.use_ssl = true
@@ -75,6 +75,9 @@ module Discorb
75
75
  }
76
76
  end
77
77
 
78
+ #
79
+ # (see Flag#method_missing)
80
+ #
78
81
  def method_missing(name, args = nil)
79
82
  if @raw_value.key?(name)
80
83
  @raw_value[name]
data/lib/discorb/log.rb CHANGED
@@ -3,7 +3,7 @@
3
3
  module Discorb
4
4
  # @!visibility private
5
5
  class Logger
6
- attr_reader :out, :colorize_log
6
+ attr_accessor :out, :colorize_log
7
7
 
8
8
  @levels = %i[debug info warn error fatal].freeze
9
9
 
@@ -14,11 +14,12 @@ module Discorb
14
14
  end
15
15
 
16
16
  def level
17
- @levels[@level]
17
+ self.class.levels[@level]
18
18
  end
19
19
 
20
20
  def level=(level)
21
- @level = @levels.index(level)
21
+ @level = self.class.levels.index(level)
22
+ raise ArgumentError, "Invalid log level: #{level}" unless @level
22
23
  end
23
24
 
24
25
  def debug(message)
@@ -229,6 +229,9 @@ module Discorb
229
229
  end
230
230
  end
231
231
 
232
+ #
233
+ # (see Flag#method_missing)
234
+ #
232
235
  def method_missing(method, bool = nil)
233
236
  if self.class.bits.key?(method)
234
237
  self[method]
@@ -0,0 +1,14 @@
1
+ # @!visibility private
2
+ def sputs(text)
3
+ puts "\e[92m#{text}\e[m"
4
+ end
5
+
6
+ # @!visibility private
7
+ def eputs(text)
8
+ puts "\e[91m#{text}\e[m"
9
+ end
10
+
11
+ # @!visibility private
12
+ def iputs(text)
13
+ puts "\e[90m#{text}\e[m"
14
+ end
@@ -216,8 +216,8 @@ tt {
216
216
  font-family: var(--monospace-font);
217
217
  }
218
218
 
219
- pre.code {
220
- color: var(--header-secondary);
219
+ pre.code code {
220
+ color: var(--header-secondary) !important;
221
221
  tab-size: 2;
222
222
  }
223
223
 
@@ -310,6 +310,11 @@ li.even {
310
310
  background: var(--background-secondary);
311
311
  }
312
312
 
313
+ li.current {
314
+ background: var(--background-tertiary);
315
+ }
316
+
317
+
313
318
  .item:hover {
314
319
  background: var(--background-secondary-alt);
315
320
  }
@@ -516,4 +521,10 @@ li.r2 {
516
521
  border-color: var(--background-tertiary);
517
522
  color: var(--interactive-active);
518
523
  fill: var(--interactive-active);
524
+ }
525
+
526
+ dd pre.code {
527
+ padding: 9px 14px;
528
+ border-radius: 4px;
529
+ border: 1px solid var(--background-tertiary);
519
530
  }
@@ -47,9 +47,9 @@
47
47
  <ul id="full_list" class="method">
48
48
  <!--replace-->
49
49
  <!--template-->
50
- <li class="!eo!">
50
+ <li class="!class!">
51
51
  <div class="item">
52
- <span class='object_link'><a href="../!version!/index.html" title="!version!">!version!</a></span>
52
+ <span class='object_link'><a href="!path!/index.html" title="!version!">!version!</a></span>
53
53
  <small class='git_sha'>!sha!</small>
54
54
  </div>
55
55
  </li>
@@ -1,12 +1,24 @@
1
- def build_version_sidebar(dir)
1
+ def build_version_sidebar(dir, version)
2
2
  raw = File.read("template-replace/resources/version_list.html")
3
3
  template = raw.match(/<!--template-->(.*)<!--endtemplate-->/m)[1]
4
4
  raw.gsub!(template, "")
5
5
  res = +""
6
- `git tag`.force_encoding("utf-8").split("\n").each.with_index do |tag, i|
6
+ i = 0
7
+ `git tag`.force_encoding("utf-8").split("\n").each.with_index do |tag|
8
+ i += 1
7
9
  sha = `git rev-parse #{tag}`.force_encoding("utf-8").strip
8
10
  version = tag.delete_prefix("v")
9
- res += template.gsub("!version!", version).gsub("!eo!", i % 2 == 0 ? "even" : "odd").gsub("!sha!", sha)
11
+ cls = i % 2 == 0 ? "even" : "odd"
12
+ if version == "."
13
+ cls += " current"
14
+ end
15
+ res += template.gsub("!version!", version).gsub("!path!", "../" + version).gsub("!class!", cls).gsub("!sha!", sha)
10
16
  end
17
+ i += 1
18
+ cls = i % 2 == 0 ? "even" : "odd"
19
+ if version == "main"
20
+ cls += " current"
21
+ end
22
+ res += template.gsub("!version!", "main").gsub("!path!", "../main").gsub("!class!", cls).gsub("!sha!", "(Latest on GitHub)")
11
23
  File.write(dir + "/version_list.html", raw.gsub("<!--replace-->", res))
12
24
  end
metadata CHANGED
@@ -1,57 +1,57 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: discorb
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.5
4
+ version: 0.4.1
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-09-05 00:00:00.000000000 Z
11
+ date: 2021-09-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: async
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ">="
17
+ - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '0'
19
+ version: 1.30.1
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - ">="
24
+ - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: '0'
26
+ version: 1.30.1
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: async-http
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - ">="
31
+ - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: '0'
33
+ version: 0.56.5
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - ">="
38
+ - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: '0'
40
+ version: 0.56.5
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: async-websocket
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - ">="
45
+ - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: '0'
47
+ version: 0.19.0
48
48
  type: :runtime
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - ">="
52
+ - - "~>"
53
53
  - !ruby/object:Gem::Version
54
- version: '0'
54
+ version: 0.19.0
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: mime-types
57
57
  requirement: !ruby/object:Gem::Requirement
@@ -70,10 +70,11 @@ description:
70
70
  email:
71
71
  - sevenc-nanashi@sevenbot.jp
72
72
  executables:
73
- - discord-irb
73
+ - discorb
74
74
  extensions: []
75
75
  extra_rdoc_files: []
76
76
  files:
77
+ - ".github/workflows/build_main.yml"
77
78
  - ".gitignore"
78
79
  - ".yardopts"
79
80
  - Changelog.md
@@ -88,7 +89,11 @@ files:
88
89
  - discorb.gemspec
89
90
  - docs/Examples.md
90
91
  - docs/application_command.md
91
- - docs/discord_irb.md
92
+ - docs/cli.md
93
+ - docs/cli/init.md
94
+ - docs/cli/irb.md
95
+ - docs/cli/run.md
96
+ - docs/cli/setup.md
92
97
  - docs/events.md
93
98
  - docs/extension.md
94
99
  - docs/voice_events.md
@@ -103,7 +108,7 @@ files:
103
108
  - examples/simple/ping_pong.rb
104
109
  - examples/simple/rolepanel.rb
105
110
  - examples/simple/wait_for_message.rb
106
- - exe/discord-irb
111
+ - exe/discorb
107
112
  - lib/discorb.rb
108
113
  - lib/discorb/application.rb
109
114
  - lib/discorb/asset.rb
@@ -120,6 +125,12 @@ files:
120
125
  - lib/discorb/emoji_table.rb
121
126
  - lib/discorb/error.rb
122
127
  - lib/discorb/event.rb
128
+ - lib/discorb/exe/about.rb
129
+ - lib/discorb/exe/init.rb
130
+ - lib/discorb/exe/irb.rb
131
+ - lib/discorb/exe/run.rb
132
+ - lib/discorb/exe/setup.rb
133
+ - lib/discorb/exe/show.rb
123
134
  - lib/discorb/extend.rb
124
135
  - lib/discorb/extension.rb
125
136
  - lib/discorb/file.rb
@@ -145,6 +156,7 @@ files:
145
156
  - lib/discorb/sticker.rb
146
157
  - lib/discorb/user.rb
147
158
  - lib/discorb/utils.rb
159
+ - lib/discorb/utils/colored_puts.rb
148
160
  - lib/discorb/voice_state.rb
149
161
  - lib/discorb/webhook.rb
150
162
  - po/yard.pot
@@ -161,7 +173,7 @@ metadata:
161
173
  allowed_push_host: https://rubygems.org
162
174
  homepage_uri: https://github.com/discorb-lib/discorb
163
175
  source_code_uri: https://github.com/discorb-lib/discorb
164
- changelog_uri: https://github.com/discorb-lib/discorb/blob/main/Changelog.md
176
+ changelog_uri: https://discorb-lib.github.io/file.Changelog.html
165
177
  documentation_uri: https://discorb-lib.github.io
166
178
  post_install_message:
167
179
  rdoc_options: []