discorb 0.2.5 → 0.4.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -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: []