discorb 0.3.0 → 0.4.2
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 +4 -4
- data/.github/workflows/build_main.yml +51 -0
- data/.gitignore +5 -1
- data/Changelog.md +26 -1
- data/Gemfile.lock +5 -4
- data/Rakefile +60 -27
- data/discorb.gemspec +4 -4
- data/docs/application_command.md +7 -1
- data/docs/cli/irb.md +1 -1
- data/docs/cli/run.md +46 -0
- data/docs/cli/setup.md +17 -0
- data/docs/cli.md +6 -1
- data/exe/discorb +3 -0
- data/lib/discorb/client.rb +59 -13
- data/lib/discorb/command.rb +0 -1
- data/lib/discorb/common.rb +1 -1
- data/lib/discorb/error.rb +15 -0
- data/lib/discorb/exe/about.rb +14 -0
- data/lib/discorb/exe/init.rb +23 -13
- data/lib/discorb/exe/irb.rb +9 -3
- data/lib/discorb/exe/run.rb +49 -0
- data/lib/discorb/exe/setup.rb +26 -0
- data/lib/discorb/exe/show.rb +8 -0
- data/lib/discorb/gateway.rb +0 -1
- data/lib/discorb/http.rb +16 -24
- data/lib/discorb/log.rb +4 -3
- data/lib/discorb/utils/colored_puts.rb +3 -0
- data/template-replace/files/css/common.css +13 -2
- data/template-replace/resources/version_list.html +2 -2
- data/template-replace/scripts/version.rb +15 -3
- metadata +22 -15
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7322e6131e0e5d070df790e4a4b7ea6ea6ea7a286c975b0732c0c7eff2e9903d
|
4
|
+
data.tar.gz: 045ef3ab63628e0e0fe867de4aef8b1f872076cd74912b38e035c8cb6907c731
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f2b045e2b31b6a8fb95d74f87de931b30e67c8f34f647a0994b4feb4f3c3d8c270f2fddab03e995cce4eaf2f770d2698ae537e0e5d328152dc0244f3e6f5c59d
|
7
|
+
data.tar.gz: 3582014d604c85091c3c6180a13766ccab7dce8e0df0319278eb0d89e7cd0d0df2d236b3a58763cc55e5ccf80ef6c46317ad62028c30f0d89002bf48f1bc4b8b
|
@@ -0,0 +1,51 @@
|
|
1
|
+
name: Build YARD with main
|
2
|
+
|
3
|
+
on:
|
4
|
+
workflow_dispatch:
|
5
|
+
schedule:
|
6
|
+
- cron: "*/8 * * * *"
|
7
|
+
|
8
|
+
jobs:
|
9
|
+
main:
|
10
|
+
|
11
|
+
runs-on: ubuntu-latest
|
12
|
+
|
13
|
+
steps:
|
14
|
+
- uses: actions/checkout@v2
|
15
|
+
- name: Set up Ruby
|
16
|
+
uses: ruby/setup-ruby@v1
|
17
|
+
with:
|
18
|
+
ruby-version: 3.0.2
|
19
|
+
bundler-cache: true
|
20
|
+
- name: Set up git settings
|
21
|
+
run: |
|
22
|
+
git config --global user.email "action@github.com"
|
23
|
+
git config --global user.name "GitHub Action"
|
24
|
+
- name: Clone pages
|
25
|
+
env:
|
26
|
+
SSH_SECRET: ${{ secrets.SSH }}
|
27
|
+
GIT_SSH_COMMAND: ssh -i ~/ssh_secret
|
28
|
+
run: |
|
29
|
+
echo "$SSH_SECRET" > ~/ssh_secret
|
30
|
+
chmod 600 ~/ssh_secret
|
31
|
+
git clone git@github.com:discorb-lib/discorb-lib.github.io /tmp/pages
|
32
|
+
- name: Install dependencies
|
33
|
+
run: |
|
34
|
+
bundle config --local with 'docs'
|
35
|
+
bundle install
|
36
|
+
- name: Generate document
|
37
|
+
run: bundle exec rake document
|
38
|
+
- name: Push document
|
39
|
+
env:
|
40
|
+
SSH_SECRET: ${{ secrets.SSH }}
|
41
|
+
GIT_SSH_COMMAND: ssh -i ~/ssh_secret
|
42
|
+
run: |
|
43
|
+
echo "$SSH_SECRET" > ~/ssh_secret
|
44
|
+
chmod 600 ~/ssh_secret
|
45
|
+
cp -r ./doc/. /tmp/pages
|
46
|
+
cd /tmp/pages
|
47
|
+
git add -A
|
48
|
+
git commit -m "Update: Update document for ${{ github.sha }} by cron"
|
49
|
+
git update-ref -d refs/remotes/origin/user
|
50
|
+
git push origin main -f
|
51
|
+
continue-on-error: true
|
data/.gitignore
CHANGED
@@ -35,7 +35,7 @@ build-iPhoneSimulator/
|
|
35
35
|
## Documentation cache and generated files:
|
36
36
|
/.yardoc/
|
37
37
|
/_yardoc/
|
38
|
-
/doc/
|
38
|
+
# /doc/
|
39
39
|
/rdoc/
|
40
40
|
|
41
41
|
## Environment normalization:
|
@@ -54,4 +54,8 @@ build-iPhoneSimulator/
|
|
54
54
|
|
55
55
|
# Used by RuboCop. Remote config files pulled in from inherit_from directive.
|
56
56
|
# .rubocop-https?--*
|
57
|
+
|
58
|
+
# For documentation generation.
|
57
59
|
tmp-template-replace
|
60
|
+
tmp-doc
|
61
|
+
doc
|
data/Changelog.md
CHANGED
@@ -73,4 +73,29 @@
|
|
73
73
|
## 0.2.5
|
74
74
|
|
75
75
|
- Add: Add way to add event listener
|
76
|
-
- Change: Move document to https://discorb-lib.github.io/
|
76
|
+
- Change: Move document to https://discorb-lib.github.io/
|
77
|
+
|
78
|
+
## 0.3.0
|
79
|
+
|
80
|
+
- Add: Improve CLI tools
|
81
|
+
- Add: Add `discorb init`
|
82
|
+
- Change: Change `discord-irb` to `discorb irb`
|
83
|
+
|
84
|
+
## 0.3.1
|
85
|
+
|
86
|
+
- Add: Add `discorb show`
|
87
|
+
- Fix: Fix documenting
|
88
|
+
|
89
|
+
## 0.4.0
|
90
|
+
|
91
|
+
- Add: Add `discorb setup`
|
92
|
+
- Add: Add `discorb run`
|
93
|
+
- Add: Add realtime documentation
|
94
|
+
|
95
|
+
## 0.4.1
|
96
|
+
|
97
|
+
- Add: Add `-s` option to `discorb run`
|
98
|
+
|
99
|
+
## 0.4.2
|
100
|
+
|
101
|
+
- Fix: Fix error in `discorb run`
|
data/Gemfile.lock
CHANGED
@@ -1,10 +1,10 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
discorb (0.
|
5
|
-
async
|
6
|
-
async-http
|
7
|
-
async-websocket
|
4
|
+
discorb (0.4.2)
|
5
|
+
async (~> 1.30.1)
|
6
|
+
async-http (~> 0.56.5)
|
7
|
+
async-websocket (~> 0.19.0)
|
8
8
|
mime-types (~> 3.3)
|
9
9
|
|
10
10
|
GEM
|
@@ -54,6 +54,7 @@ GEM
|
|
54
54
|
|
55
55
|
PLATFORMS
|
56
56
|
x86-mingw32
|
57
|
+
x86_64-linux
|
57
58
|
|
58
59
|
DEPENDENCIES
|
59
60
|
discorb!
|
data/Rakefile
CHANGED
@@ -1,30 +1,26 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
require "bundler/gem_tasks"
|
4
|
+
require_relative "lib/discorb/utils/colored_puts"
|
4
5
|
task default: %i[]
|
5
6
|
|
7
|
+
# @!visibility private
|
6
8
|
def get_version
|
7
9
|
require_relative "lib/discorb/common"
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
10
|
+
tag = `git tag --points-at HEAD`.force_encoding("utf-8").strip
|
11
|
+
if tag.empty?
|
12
|
+
version = "main"
|
13
|
+
else
|
14
|
+
version = Discorb::VERSION
|
12
15
|
end
|
13
16
|
version
|
14
17
|
end
|
15
18
|
|
16
|
-
|
17
|
-
puts "\e[90m#{text}\e[m"
|
18
|
-
end
|
19
|
-
|
20
|
-
def sputs(text)
|
21
|
-
puts "\e[92m#{text}\e[m"
|
22
|
-
end
|
23
|
-
|
19
|
+
desc "Build emoji_table.rb"
|
24
20
|
task :emoji_table do
|
25
21
|
require_relative "lib/discorb"
|
26
22
|
|
27
|
-
|
23
|
+
iputs "Building emoji_table.rb"
|
28
24
|
res = {}
|
29
25
|
Discorb::EmojiTable::DISCORD_TO_UNICODE.each do |discord, unicode|
|
30
26
|
res[unicode] ||= []
|
@@ -47,11 +43,12 @@ task :emoji_table do
|
|
47
43
|
sputs "Successfully made emoji_table.rb"
|
48
44
|
end
|
49
45
|
|
46
|
+
desc "Format files"
|
50
47
|
task :format do
|
51
48
|
Dir.glob("**/*.rb").each do |file|
|
52
49
|
next if file.start_with?("vendor")
|
53
50
|
|
54
|
-
|
51
|
+
iputs "Formatting #{file}"
|
55
52
|
`rufo ./#{file}`
|
56
53
|
content = ""
|
57
54
|
File.open(file, "rb") do |f|
|
@@ -63,27 +60,37 @@ task :format do
|
|
63
60
|
end
|
64
61
|
end
|
65
62
|
end
|
63
|
+
|
64
|
+
desc "Generate document and replace"
|
66
65
|
namespace :document do
|
67
66
|
version = get_version
|
67
|
+
|
68
|
+
desc "Just generate document"
|
68
69
|
task :yard do
|
69
|
-
sh "yardoc -o doc/#{version}"
|
70
|
+
sh "bundle exec yardoc -o doc/#{version}"
|
70
71
|
end
|
72
|
+
|
73
|
+
desc "Replace files"
|
71
74
|
namespace :replace do
|
72
75
|
require "fileutils"
|
76
|
+
|
77
|
+
desc "Replace CSS"
|
73
78
|
task :css do
|
74
|
-
|
79
|
+
iputs "Replacing css"
|
75
80
|
Dir.glob("template-replace/files/**/*.*")
|
76
81
|
.map { |f| f.delete_prefix("template-replace/files") }.each do |file|
|
77
82
|
FileUtils.cp("template-replace/files" + file, "doc/#{version}/#{file}")
|
78
83
|
end
|
79
84
|
sputs "Successfully replaced css"
|
80
85
|
end
|
86
|
+
|
87
|
+
desc "Replace HTML"
|
81
88
|
task :html do
|
82
89
|
require_relative "template-replace/scripts/sidebar.rb"
|
83
90
|
require_relative "template-replace/scripts/version.rb"
|
84
91
|
require_relative "template-replace/scripts/index.rb"
|
85
92
|
require_relative "template-replace/scripts/yard_replace.rb"
|
86
|
-
|
93
|
+
iputs "Resetting changes"
|
87
94
|
Dir.glob("doc/#{version}/**/*.html") do |f|
|
88
95
|
next if (m = f.match(/[0-9]+\.[0-9]+\.[0-9]+(-[a-z]+)?/)) && m[0] != version
|
89
96
|
|
@@ -91,21 +98,23 @@ namespace :document do
|
|
91
98
|
content.gsub!(/<!--od-->[\s\S]*<!--eod-->/, "")
|
92
99
|
File.write(f, content)
|
93
100
|
end
|
94
|
-
|
101
|
+
iputs "Adding version tab"
|
95
102
|
%w[file_list class_list method_list].each do |f|
|
96
103
|
replace_sidebar("doc/#{version}/#{f}.html")
|
97
104
|
end
|
98
105
|
|
99
|
-
|
100
|
-
build_version_sidebar("doc/#{version}")
|
101
|
-
|
106
|
+
iputs "Building version tab"
|
107
|
+
build_version_sidebar("doc/#{version}", version)
|
108
|
+
iputs "Replacing _index.html"
|
102
109
|
replace_index("doc/#{version}", version)
|
103
|
-
|
110
|
+
iputs "Replacing YARD credits"
|
104
111
|
yard_replace("doc/#{version}", version)
|
105
|
-
|
112
|
+
iputs "Successfully replaced htmls"
|
106
113
|
end
|
114
|
+
|
115
|
+
desc "Replace EOL"
|
107
116
|
task :eol do
|
108
|
-
|
117
|
+
iputs "Replacing CRLF with LF"
|
109
118
|
Dir.glob("doc/**/*.*") do |file|
|
110
119
|
next unless File.file?(file)
|
111
120
|
|
@@ -122,20 +131,36 @@ namespace :document do
|
|
122
131
|
end
|
123
132
|
end
|
124
133
|
task :replace => %i[replace:css replace:html replace:eol]
|
134
|
+
|
135
|
+
desc "Build all versions"
|
125
136
|
task :build_all do
|
126
137
|
require "fileutils"
|
127
|
-
|
138
|
+
|
139
|
+
class Bundler::Definition
|
140
|
+
def validate_platforms!
|
141
|
+
# noop
|
142
|
+
end
|
143
|
+
end
|
144
|
+
|
145
|
+
iputs "Building all versions"
|
146
|
+
FileUtils.rm_rf("doc") rescue nil
|
128
147
|
FileUtils.cp_r("./template-replace/.", "./tmp-template-replace")
|
148
|
+
Rake::Task["document:yard"].execute
|
149
|
+
Rake::Task["document:replace:html"].execute
|
150
|
+
Rake::Task["document:replace:css"].execute
|
151
|
+
Rake::Task["document:replace:eol"].execute
|
129
152
|
tags = `git tag`.force_encoding("utf-8").split("\n")
|
130
153
|
tags.each do |tag|
|
131
154
|
sh "git checkout #{tag} -f"
|
132
|
-
|
155
|
+
iputs "Building #{tag}"
|
133
156
|
FileUtils.cp_r("./tmp-template-replace/.", "./template-replace")
|
134
157
|
version = tag.delete_prefix("v")
|
135
158
|
Rake::Task["document:yard"].execute
|
136
159
|
Rake::Task["document:replace:html"].execute
|
137
160
|
Rake::Task["document:replace:css"].execute
|
138
161
|
Rake::Task["document:replace:eol"].execute
|
162
|
+
FileUtils.cp_r("./doc/.", "./tmp-doc")
|
163
|
+
FileUtils.rm_rf("doc")
|
139
164
|
end
|
140
165
|
version = "."
|
141
166
|
Rake::Task["document:yard"].execute
|
@@ -143,11 +168,19 @@ namespace :document do
|
|
143
168
|
Rake::Task["document:replace:css"].execute
|
144
169
|
Rake::Task["document:replace:eol"].execute
|
145
170
|
sh "git switch main -f"
|
171
|
+
FileUtils.cp_r("./tmp-doc/.", "./doc")
|
146
172
|
sputs "Successfully built all versions"
|
173
|
+
rescue => e
|
174
|
+
sh "git switch main -f"
|
175
|
+
raise e
|
147
176
|
end
|
177
|
+
|
178
|
+
desc "Push to discorb-lib/discorb-lib.github.io"
|
148
179
|
task :push do
|
149
|
-
|
180
|
+
iputs "Pushing documents"
|
150
181
|
Dir.chdir("doc") do
|
182
|
+
sh "git init"
|
183
|
+
sh "git remote add origin git@github.com:discorb-lib/discorb-lib.github.io"
|
151
184
|
sh "git add ."
|
152
185
|
sh "git commit -m \"Update: Update document\""
|
153
186
|
sh "git push -f"
|
data/discorb.gemspec
CHANGED
@@ -17,7 +17,7 @@ Gem::Specification.new do |spec|
|
|
17
17
|
|
18
18
|
spec.metadata["homepage_uri"] = spec.homepage
|
19
19
|
spec.metadata["source_code_uri"] = "https://github.com/discorb-lib/discorb"
|
20
|
-
spec.metadata["changelog_uri"] = "https://
|
20
|
+
spec.metadata["changelog_uri"] = "https://discorb-lib.github.io/file.Changelog.html"
|
21
21
|
spec.metadata["documentation_uri"] = "https://discorb-lib.github.io"
|
22
22
|
|
23
23
|
# Specify which files should be added to the gem when it is released.
|
@@ -30,9 +30,9 @@ Gem::Specification.new do |spec|
|
|
30
30
|
spec.require_paths = ["lib"]
|
31
31
|
|
32
32
|
# Uncomment to register a new dependency of your gem
|
33
|
-
spec.add_dependency "async"
|
34
|
-
spec.add_dependency "async-http"
|
35
|
-
spec.add_dependency "async-websocket"
|
33
|
+
spec.add_dependency "async", "~> 1.30.1"
|
34
|
+
spec.add_dependency "async-http", "~> 0.56.5"
|
35
|
+
spec.add_dependency "async-websocket", "~> 0.19.0"
|
36
36
|
|
37
37
|
spec.add_dependency "mime-types", "~> 3.3"
|
38
38
|
# For more information and examples about making a new gem, checkout our
|
data/docs/application_command.md
CHANGED
@@ -10,7 +10,13 @@ From: [Discord API docs](https://discord.com/developers/docs/interactions/applic
|
|
10
10
|
|
11
11
|
## How do I register an application command?
|
12
12
|
|
13
|
-
|
13
|
+
Write to a your script:
|
14
|
+
- {Discorb::Command::Handler.slash}, {Discorb::Command::Handler.slash_group} for slash commands,
|
15
|
+
- {Discorb::Command::Handler.user_command} for user menu commands,
|
16
|
+
- {Discorb::Command::Handler.message_command} for message menu commands.
|
17
|
+
|
18
|
+
And then run `discorb setup` to register your application commands.
|
19
|
+
{file:docs/cli/setup.md Learn more about `discorb setup`}.
|
14
20
|
|
15
21
|
### Note
|
16
22
|
|
data/docs/cli/irb.md
CHANGED
data/docs/cli/run.md
ADDED
@@ -0,0 +1,46 @@
|
|
1
|
+
# @title CLI: discorb run
|
2
|
+
|
3
|
+
# discorb run
|
4
|
+
|
5
|
+
This command will run a client.
|
6
|
+
|
7
|
+
|
8
|
+
## Usage
|
9
|
+
|
10
|
+
```
|
11
|
+
discorb run [options] [script]
|
12
|
+
```
|
13
|
+
|
14
|
+
### Arguments
|
15
|
+
|
16
|
+
#### `script`
|
17
|
+
|
18
|
+
The script to run. Defaults to `main.rb`.
|
19
|
+
|
20
|
+
#### `-d`, `--deamon`
|
21
|
+
|
22
|
+
Run the client in deamon mode.
|
23
|
+
|
24
|
+
#### `-l`, `--log-level`
|
25
|
+
|
26
|
+
Specify the log level.
|
27
|
+
Should be one of the following:
|
28
|
+
|
29
|
+
* `none`
|
30
|
+
* `debug`
|
31
|
+
* `info`
|
32
|
+
* `warn`
|
33
|
+
* `error`
|
34
|
+
* `fatal`
|
35
|
+
|
36
|
+
#### `-f`, `--log-file`
|
37
|
+
|
38
|
+
Specify the file to write logs to.
|
39
|
+
You can use `stdout` to write to the standard output, and `stderr` to write to the standard error.
|
40
|
+
|
41
|
+
#### `-c`, `--[no-]log-color`
|
42
|
+
|
43
|
+
Whether to colorize the log output.
|
44
|
+
If not specified, the default will be:
|
45
|
+
- `true` if the file to write logs to is `stdout` or `stderr`.
|
46
|
+
- `false` otherwise.
|
data/docs/cli/setup.md
ADDED
data/docs/cli.md
CHANGED
@@ -17,4 +17,9 @@ Currently, discorb has the following commands:
|
|
17
17
|
| Command | Description |
|
18
18
|
|---------|-------------|
|
19
19
|
| {file:docs/cli/init.md `init`} | Create a new project. |
|
20
|
-
| {file:docs/cli/irb.md `irb`} | Start an interactive Ruby shell with connected client. |
|
20
|
+
| {file:docs/cli/irb.md `irb`} | Start an interactive Ruby shell with connected client. |
|
21
|
+
| {file:docs/cli/run.md `run`} | Run a client. |
|
22
|
+
| {file:docs/cli/setup.md `setup`} | Setup application commands. |
|
23
|
+
| `show` | Show your environment. (No document) |
|
24
|
+
|
25
|
+
Click the command name to see the document.
|
data/exe/discorb
CHANGED
data/lib/discorb/client.rb
CHANGED
@@ -60,12 +60,11 @@ module Discorb
|
|
60
60
|
# @param [Boolean] colorize_log Whether to colorize the log.
|
61
61
|
# @param [:debug, :info, :warn, :error, :critical] log_level The log level.
|
62
62
|
# @param [Boolean] wait_until_ready Whether to delay event dispatch until ready.
|
63
|
-
# @param [Boolean] overwrite_application_commands Whether to overwrite application commands on ready.
|
64
63
|
#
|
65
64
|
def initialize(
|
66
65
|
allowed_mentions: nil, intents: nil, message_caches: 1000,
|
67
66
|
log: nil, colorize_log: false, log_level: :info,
|
68
|
-
wait_until_ready: true
|
67
|
+
wait_until_ready: true
|
69
68
|
)
|
70
69
|
@allowed_mentions = allowed_mentions || AllowedMentions.new(everyone: true, roles: true, users: true)
|
71
70
|
@intents = (intents or Intents.default)
|
@@ -86,7 +85,6 @@ module Discorb
|
|
86
85
|
@tasks = []
|
87
86
|
@conditions = {}
|
88
87
|
@commands = []
|
89
|
-
@overwrite_application_commands = overwrite_application_commands
|
90
88
|
@status = :initialized
|
91
89
|
end
|
92
90
|
|
@@ -384,11 +382,69 @@ module Discorb
|
|
384
382
|
|
385
383
|
#
|
386
384
|
# Starts the client.
|
385
|
+
# @note This method behavior will change by CLI.
|
386
|
+
# @see file:docs/cli.md
|
387
387
|
#
|
388
388
|
# @param [String] token The token to use.
|
389
389
|
#
|
390
390
|
def run(token)
|
391
|
+
case ENV["DISCORB_CLI_FLAG"]
|
392
|
+
when nil
|
393
|
+
start_client(token)
|
394
|
+
when "run"
|
395
|
+
require "json"
|
396
|
+
options = JSON.parse(ENV["DISCORB_CLI_OPTIONS"], symbolize_names: true)
|
397
|
+
Process.daemon if options[:daemon]
|
398
|
+
setup_commands(token) if options[:setup]
|
399
|
+
if options[:log_level]
|
400
|
+
if options[:log_level] == "none"
|
401
|
+
@log.out = nil
|
402
|
+
else
|
403
|
+
@log.out = case options[:log_file]
|
404
|
+
when nil, "stderr"
|
405
|
+
$stderr
|
406
|
+
when "stdout"
|
407
|
+
$stdout
|
408
|
+
else
|
409
|
+
::File.open(options[:log_file], "a")
|
410
|
+
end
|
411
|
+
@log.level = options[:log_level].to_sym
|
412
|
+
@log.colorize_log = case options[:log_color]
|
413
|
+
when nil
|
414
|
+
if @log.out == $stdout || @log.out == $stderr
|
415
|
+
true
|
416
|
+
else
|
417
|
+
false
|
418
|
+
end
|
419
|
+
when true, false
|
420
|
+
options[:log_color]
|
421
|
+
end
|
422
|
+
end
|
423
|
+
end
|
424
|
+
start_client(token)
|
425
|
+
when "setup_command"
|
426
|
+
setup_commands(token)
|
427
|
+
end
|
428
|
+
end
|
429
|
+
|
430
|
+
#
|
431
|
+
# Stops the client.
|
432
|
+
#
|
433
|
+
def close!
|
434
|
+
@connection.send_close
|
435
|
+
@tasks.each(&:stop)
|
436
|
+
@status = :closed
|
437
|
+
@close_condition.signal
|
438
|
+
end
|
439
|
+
|
440
|
+
private
|
441
|
+
|
442
|
+
def start_client(token)
|
391
443
|
Async do |task|
|
444
|
+
trap(:SIGINT) {
|
445
|
+
@log.info "SIGINT received, closing..."
|
446
|
+
close!
|
447
|
+
}
|
392
448
|
@token = token.to_s
|
393
449
|
@close_condition = Async::Condition.new
|
394
450
|
main_task = Async do
|
@@ -403,15 +459,5 @@ module Discorb
|
|
403
459
|
main_task.stop
|
404
460
|
end
|
405
461
|
end
|
406
|
-
|
407
|
-
#
|
408
|
-
# Stops the client.
|
409
|
-
#
|
410
|
-
def close!
|
411
|
-
@connection.send_close
|
412
|
-
@tasks.each(&:stop)
|
413
|
-
@status = :closed
|
414
|
-
@close_condition.signal
|
415
|
-
end
|
416
462
|
end
|
417
463
|
end
|
data/lib/discorb/command.rb
CHANGED
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.4.2"
|
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/error.rb
CHANGED
@@ -35,6 +35,7 @@ module Discorb
|
|
35
35
|
|
36
36
|
#
|
37
37
|
# Represents a HTTP error.
|
38
|
+
# @abstract
|
38
39
|
#
|
39
40
|
class HTTPError < DiscorbError
|
40
41
|
# @return [String] the HTTP response code.
|
@@ -78,6 +79,20 @@ module Discorb
|
|
78
79
|
class NotFoundError < HTTPError
|
79
80
|
end
|
80
81
|
|
82
|
+
#
|
83
|
+
# Represents a error because of a cloudflare ban.
|
84
|
+
#
|
85
|
+
class CloudFlareBanError < HTTPError
|
86
|
+
def initialize(resp, client)
|
87
|
+
@client = client
|
88
|
+
@client.close!
|
89
|
+
DiscorbError.instance_method(:initialize).bind(self).call(<<~MESSAGE)
|
90
|
+
The client is banned from CloudFlare.
|
91
|
+
Hint: Try to increase the number of requests per second, e.g. Use sleep in between requests.
|
92
|
+
MESSAGE
|
93
|
+
end
|
94
|
+
end
|
95
|
+
|
81
96
|
#
|
82
97
|
# Represents a error in client-side.
|
83
98
|
#
|
@@ -0,0 +1,14 @@
|
|
1
|
+
# description: Show information of discorb.
|
2
|
+
|
3
|
+
puts " disco\e[31mrb\e[m - A new Discord API wrapper in Ruby. \n\n"
|
4
|
+
|
5
|
+
informations = {
|
6
|
+
"GitHub" => "https://github.com/discorb-lib/discorb",
|
7
|
+
"Documentation" => "https://discorb-lib.github.io",
|
8
|
+
"RubyGems" => "https://rubygems.org/gems/discorb",
|
9
|
+
"Changelog" => "https://discorb-lib.github.io/file.Changelog.html",
|
10
|
+
}
|
11
|
+
|
12
|
+
informations.each do |key, value|
|
13
|
+
puts "\e[90m#{key}:\e[m #{value}"
|
14
|
+
end
|
data/lib/discorb/exe/init.rb
CHANGED
@@ -5,6 +5,7 @@ require_relative "../utils/colored_puts"
|
|
5
5
|
|
6
6
|
$path = Dir.pwd
|
7
7
|
|
8
|
+
# @!visibility private
|
8
9
|
FILES = {
|
9
10
|
"main.rb" => <<~'RUBY',
|
10
11
|
require "discorb"
|
@@ -84,19 +85,7 @@ FILES = {
|
|
84
85
|
# This gitignore is from github/gitignore.
|
85
86
|
# https://github.com/github/gitignore/blob/master/Ruby.gitignore
|
86
87
|
GITIGNORE
|
87
|
-
|
88
|
-
|
89
|
-
def make_files
|
90
|
-
iputs "Making files..."
|
91
|
-
FILES.each do |file, content|
|
92
|
-
File.write($path + "/#{file}", format(content, token: $values[:token]), mode: "wb")
|
93
|
-
end
|
94
|
-
sputs "Made files.\n"
|
95
|
-
end
|
96
|
-
|
97
|
-
def bundle_init
|
98
|
-
iputs "Initializing bundle..."
|
99
|
-
File.write($path + "/Gemfile", <<~'RUBY', mode: "wb")
|
88
|
+
"Gemfile" => <<~RUBY,
|
100
89
|
# frozen_string_literal: true
|
101
90
|
|
102
91
|
source "https://rubygems.org"
|
@@ -106,12 +95,33 @@ def bundle_init
|
|
106
95
|
gem "discorb", "~> 0.2.5"
|
107
96
|
gem "dotenv", "~> 2.7"
|
108
97
|
RUBY
|
98
|
+
}
|
99
|
+
|
100
|
+
# @!visibility private
|
101
|
+
def create_file(name)
|
102
|
+
File.write($path + "/#{name}", format(FILES[name], token: $values[:token]), mode: "wb")
|
103
|
+
end
|
104
|
+
|
105
|
+
# @!visibility private
|
106
|
+
def make_files
|
107
|
+
iputs "Making files..."
|
108
|
+
create_file("main.rb")
|
109
|
+
create_file(".env")
|
110
|
+
sputs "Made files.\n"
|
111
|
+
end
|
112
|
+
|
113
|
+
# @!visibility private
|
114
|
+
def bundle_init
|
115
|
+
iputs "Initializing bundle..."
|
116
|
+
create_file("Gemfile")
|
109
117
|
iputs "Installing gems..."
|
110
118
|
system "bundle install"
|
111
119
|
sputs "Installed gems.\n"
|
112
120
|
end
|
113
121
|
|
122
|
+
# @!visibility private
|
114
123
|
def git_init
|
124
|
+
create_file(".gitignore")
|
115
125
|
iputs "Initializing git repository..."
|
116
126
|
system "git init"
|
117
127
|
system "git add ."
|
data/lib/discorb/exe/irb.rb
CHANGED
@@ -9,10 +9,16 @@ require "optparse"
|
|
9
9
|
intents_value = Discorb::Intents.all.value
|
10
10
|
token_file = "token"
|
11
11
|
|
12
|
-
|
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
|
13
19
|
opt.on("-i", "--intents", "intents to use, default to all") { |v| intents_value = v }
|
14
20
|
opt.on("-t", "--token-file", "token file to load, default to \"token\"") { |v| token_file = v }
|
15
|
-
opt.parse(ARGV)
|
21
|
+
opt.parse!(ARGV)
|
16
22
|
|
17
23
|
client = Discorb::Client.new(intents: Discorb::Intents.from_value(intents_value))
|
18
24
|
$messages = []
|
@@ -30,7 +36,7 @@ client.on :ready do
|
|
30
36
|
This is a debug client for Discord.
|
31
37
|
\e[90mmessage\e[m to get latest message.
|
32
38
|
|
33
|
-
\e[36mhttps://
|
39
|
+
\e[36mhttps://discorb-lib.github.io/#{Discorb::VERSION}/file.irb.html\e[m for more information.
|
34
40
|
EOS
|
35
41
|
end
|
36
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
|
data/lib/discorb/gateway.rb
CHANGED
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
data/lib/discorb/log.rb
CHANGED
@@ -3,7 +3,7 @@
|
|
3
3
|
module Discorb
|
4
4
|
# @!visibility private
|
5
5
|
class Logger
|
6
|
-
|
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
|
-
|
17
|
+
self.class.levels[@level]
|
18
18
|
end
|
19
19
|
|
20
20
|
def level=(level)
|
21
|
-
@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)
|
@@ -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="!
|
50
|
+
<li class="!class!">
|
51
51
|
<div class="item">
|
52
|
-
<span class='object_link'><a href="
|
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
|
-
|
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
|
-
|
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.
|
4
|
+
version: 0.4.2
|
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-
|
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:
|
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:
|
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:
|
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:
|
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:
|
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:
|
54
|
+
version: 0.19.0
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
name: mime-types
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
@@ -74,6 +74,7 @@ executables:
|
|
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
|
@@ -91,6 +92,8 @@ files:
|
|
91
92
|
- docs/cli.md
|
92
93
|
- docs/cli/init.md
|
93
94
|
- docs/cli/irb.md
|
95
|
+
- docs/cli/run.md
|
96
|
+
- docs/cli/setup.md
|
94
97
|
- docs/events.md
|
95
98
|
- docs/extension.md
|
96
99
|
- docs/voice_events.md
|
@@ -122,8 +125,12 @@ files:
|
|
122
125
|
- lib/discorb/emoji_table.rb
|
123
126
|
- lib/discorb/error.rb
|
124
127
|
- lib/discorb/event.rb
|
128
|
+
- lib/discorb/exe/about.rb
|
125
129
|
- lib/discorb/exe/init.rb
|
126
130
|
- lib/discorb/exe/irb.rb
|
131
|
+
- lib/discorb/exe/run.rb
|
132
|
+
- lib/discorb/exe/setup.rb
|
133
|
+
- lib/discorb/exe/show.rb
|
127
134
|
- lib/discorb/extend.rb
|
128
135
|
- lib/discorb/extension.rb
|
129
136
|
- lib/discorb/file.rb
|
@@ -166,7 +173,7 @@ metadata:
|
|
166
173
|
allowed_push_host: https://rubygems.org
|
167
174
|
homepage_uri: https://github.com/discorb-lib/discorb
|
168
175
|
source_code_uri: https://github.com/discorb-lib/discorb
|
169
|
-
changelog_uri: https://
|
176
|
+
changelog_uri: https://discorb-lib.github.io/file.Changelog.html
|
170
177
|
documentation_uri: https://discorb-lib.github.io
|
171
178
|
post_install_message:
|
172
179
|
rdoc_options: []
|