discorb 0.8.0 → 0.8.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: eb2e5dd94a2bda9644a1a5679fdab3006bbdb1b10c8bf3780764b7fc115aa002
4
- data.tar.gz: 4bfd645c6e39a4f3bd48ed2b2afaaccc8c2cf5702eb6dc675cfb01b17667b09f
3
+ metadata.gz: dd489ad4debd6585ee50f7e260288c862b1b655d2dda44af6151398e9b722b01
4
+ data.tar.gz: b5fd92c939bdbc8456dd0302b1a6d5e362afba2f39bdbe337e03918d30eb6357
5
5
  SHA512:
6
- metadata.gz: 8c18b4e0b809e66350c952a8d50cb2e4f899e2844cd33b43bfd6120cc4560c6889e2cc8015fe9729ecb84c1af26a434ac566f69baa1a58cfcc5b6e2232b41151
7
- data.tar.gz: de89179dffd53f575e148c2240d278eb101dde91f8f2288c9cefcae403eb4ce2f04547a030bebb3912d33df639e8e516c92878d6eb1fe1650cde8dc4c6903d25
6
+ metadata.gz: ebf5a3685316ab02f18ff2d21af0f494c13beac47554968a54b96109eebfa98c38b6e4e0c5f4c1c8e8d8ce2dee70a6424a87782ca75804830e8826da1ce64c43
7
+ data.tar.gz: dfb9ee552ed4eae349ed6cf99f846f391a1afab96941a181de11a3257d1a9234bb7304baeedd36b29f751374a59492299697856728b1a7779b930dc22e43ff81
@@ -0,0 +1,12 @@
1
+ changelog = File.read("./Changelog.md")
2
+ releases = changelog.split("## ")
3
+ releases_hash = releases.map do |release|
4
+ release_name = "v" + release.split("\n")[0]
5
+ release_body = release.split("\n")[1..-1].join("\n").strip
6
+ [release_name, release_body]
7
+ end.to_h
8
+
9
+ release_version = ENV["GITHUB_REF"].split("/")[-1]
10
+
11
+ release_body = releases_hash[release_version] || "No release notes for this version"
12
+ puts "::set-output name=release_body::#{release_body.gsub("\n", "\\n")}"
@@ -0,0 +1,39 @@
1
+ name: Release from changelog
2
+
3
+ on:
4
+ workflow_dispatch:
5
+ push:
6
+ tags:
7
+ - "v*"
8
+ jobs:
9
+ main:
10
+
11
+ runs-on: ubuntu-latest
12
+
13
+ steps:
14
+ - uses: actions/checkout@v2
15
+ with:
16
+ fetch-depth: 0
17
+ - name: Set up Ruby
18
+ uses: ruby/setup-ruby@v1
19
+ with:
20
+ ruby-version: 3.0.2
21
+ bundler-cache: true
22
+ - name: Install dependencies
23
+ run: |
24
+ bundle install
25
+ - name: Get changelog
26
+ run: |
27
+ bundle exec ruby .github/workflows/changelog.rb
28
+ id: get-changelog
29
+ - name: Build gem
30
+ run: |
31
+ bundle exec rake build
32
+ - name: Release
33
+ uses: softprops/action-gh-release@v1
34
+ with:
35
+ files: |
36
+ $(ls -1 pkg/*.gem)
37
+ body: ${{ steps.get-changelog.outputs.release_body }}
38
+ env:
39
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
data/Changelog.md CHANGED
@@ -211,4 +211,12 @@ end
211
211
  - Add: Add `Intents#to_h`
212
212
  - Add: Add `fetch_member` parameter to `Client#initialize`; Note you should set `false` if your bot doesn't have `GUILD_MEMBERS` intent
213
213
  - Change: Change `ready` to `standby` event
214
- - Change: `ready` will be fired when client receives `READY` event
214
+ - Change: `ready` will be fired when client receives `READY` event
215
+
216
+ ## 0.8.1
217
+
218
+ - Add: Add FAQ
219
+ - Fix: Fix sending files
220
+ - Add: Add `File.from_string`
221
+ - Fix: Fix `Client#update_presence`
222
+ - Add: Add information in `discorb run -d`
data/README.md CHANGED
@@ -1,8 +1,8 @@
1
1
  ![discorb](./assets/banner.svg)
2
2
 
3
3
  <div align="center"><a href="https://discorb-lib.github.io/"><img src="https://img.shields.io/badge/Document-discorb--lib.github.io-blue.svg" alt="Document"></a>
4
- <a href="https://rubygems.org/gems/discorb"><img src="https://img.shields.io/gem/dt/discorb?logo=rubygems&logoColor=fff" alt="Gem"></a>
5
- <a href="https://rubygems.org/gems/discorb"><img src="https://img.shields.io/gem/v/discorb?logo=rubygems&logoColor=fff" alt="Gem"></a>
4
+ <a href="https://rubygems.org/gems/discorb"><img src="https://img.shields.io/gem/dt/discorb?logo=rubygems&logoColor=fff&label=Downloads" alt="Gem"></a>
5
+ <a href="https://rubygems.org/gems/discorb"><img src="https://img.shields.io/gem/v/discorb?logo=rubygems&logoColor=fff&label=Version" alt="Gem"></a>
6
6
  <a href="https://discord.gg/hCP6zq8Vpj"><img src="https://img.shields.io/discord/863581274916913193?logo=discord&logoColor=fff&color=5865f2&label=Discord" alt="Discord"></a>
7
7
  <a href="https://github.com/discorb-lib/discorb"><img src="https://img.shields.io/github/stars/discorb-lib/discorb?color=24292e&label=Stars&logo=GitHub&logoColor=fff" alt="GitHub"></a></div>
8
8
 
@@ -28,7 +28,7 @@ Or install it yourself as:
28
28
 
29
29
  ## Usage
30
30
 
31
- ### Simple ping-pong
31
+ ### Ping & Pong
32
32
 
33
33
  ```ruby
34
34
  require "discorb"
@@ -49,6 +49,57 @@ end
49
49
  client.run(ENV["DISCORD_BOT_TOKEN"])
50
50
  ```
51
51
 
52
+ ### Quiz Game
53
+
54
+ ```ruby
55
+ require "discorb"
56
+
57
+ client = Discorb::Client.new
58
+
59
+ client.once :standby do
60
+ puts "Logged in as #{client.user}"
61
+ end
62
+
63
+ client.on :message do |message|
64
+ next if message.author.bot?
65
+ next unless message.content == "!quiz"
66
+
67
+ operator = [:+, :-, :*].sample
68
+ num1 = rand(1..10)
69
+ num2 = rand(1..10)
70
+
71
+ val = num1.send(operator, num2)
72
+ message.channel.post("Quiz: `#{num1} #{operator} #{num2}`")
73
+ begin
74
+ msg = client.event_lock(:message, 30) { |m|
75
+ m.content == val.to_s && m.channel == message.channel
76
+ }.wait
77
+ rescue Discorb::TimeoutError
78
+ message.channel.post("No one answered...")
79
+ else
80
+ msg.reply("Correct!")
81
+ end
82
+ end
83
+
84
+ client.run(ENV["DISCORD_BOT_TOKEN"])
85
+ ```
86
+
87
+ ### Slash Commands
88
+
89
+ ```ruby
90
+ require "discorb"
91
+
92
+ client = Discorb::Client.new
93
+
94
+ client.slash("hello", "Greet for you") do |interaction|
95
+ interaction.post("Hello!", ephemeral: true)
96
+ end
97
+
98
+ client.run(ENV["DISCORD_BOT_TOKEN"])
99
+ ```
100
+
101
+ Note: You must run `discorb setup` before using slash commands.
102
+
52
103
  ## Contributing
53
104
 
54
105
  Bug reports and pull requests are welcome on GitHub at https://github.com/discorb-lib/discorb.
data/assets/banner.svg CHANGED
@@ -1,125 +1,101 @@
1
- <?xml version="1.0" encoding="utf-8"?>
2
- <!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
3
- <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
4
- <svg version="1.1" id="レイヤー_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px"
5
- y="0px" width="1080px" height="150px" viewBox="0 0 1080 150" enable-background="new 0 0 1080 150" xml:space="preserve">
6
- <g>
7
- <defs>
8
- <rect id="SVGID_1_" x="283.667" y="-12.667" width="343.333" height="201.333"/>
9
- </defs>
10
- <clipPath id="SVGID_2_">
11
- <use xlink:href="#SVGID_1_" overflow="visible"/>
12
- </clipPath>
13
- <g clip-path="url(#SVGID_2_)">
14
- <g>
15
- <g>
16
- <path fill="#2E3338" d="M370.533,119.061c-13.503,0-21.565-10.312-21.565-27.582c0-18.543,9.872-30.525,25.149-30.525
17
- c5.186,0,10.446,0.915,14.432,2.509l3.429,1.372V31.79l6.393-1.006v86.997h-4.456l-1.936-12.146l-3.522,4.208
18
- C383.265,116.045,377.402,119.061,370.533,119.061z M374.501,65.554c-9.191,0-19.013,6.676-19.013,25.413
19
- c0,13.96,6.559,22.98,16.708,22.98c7.18,0,13.308-3.736,19.286-11.758l0.495-0.665V69.983l-1.358-0.697
20
- C385.253,66.53,381.035,65.554,374.501,65.554z"/>
21
- </g>
22
- <g>
23
- <path fill="#2E3338" d="M419.624,117.78V61.721h6.393v56.059H419.624z M422.884,44.433c-2.645,0-4.796-2.094-4.796-4.668
24
- c0-2.6,2.196-4.796,4.796-4.796c2.574,0,4.668,2.152,4.668,4.796C427.552,42.338,425.458,44.433,422.884,44.433z"/>
25
- </g>
26
- <g>
27
- <path fill="#2E3338" d="M463.332,119.061c-7.015,0-14.662-2.282-19.529-4.647l0.809-5.23c4.905,2.794,11.627,5.405,19.616,5.405
28
- c9.34,0,14.917-3.949,14.917-10.564c0-8.187-6.482-10.382-16.372-12.797c-13.937-3.485-18.19-7.314-18.19-16.388
29
- c0-8.611,7.638-14.397,19.005-14.397c6.173,0,11.985,1.055,17.305,3.139l-0.902,5.412c-5.417-2.532-11.33-3.95-16.659-3.95
30
- c-12.06,0-12.997,7.302-12.997,9.54c0,6.302,5.57,8.979,14.559,11.256c15.329,3.897,20.003,7.967,20.003,17.418
31
- C484.897,113.3,477.037,119.061,463.332,119.061z"/>
32
- </g>
33
- <g>
34
- <path fill="#2E3338" d="M523.746,119.061c-15.986,0-25.917-11.206-25.917-29.246c0-17.843,10.273-29.373,26.173-29.373
35
- c6.897,0,12.696,1.453,17.263,4.322l-0.821,5.493c-5.086-3.282-10.441-4.83-16.57-4.83c-12.043,0-19.525,9.296-19.525,24.262
36
- c0,15.271,7.777,24.389,20.805,24.389c6.137,0,11.114-1.451,15.996-4.757l0.746,4.59
37
- C536.669,117.509,531.15,119.061,523.746,119.061z"/>
38
- </g>
39
- <g>
40
- <path fill="#2E3338" d="M580.834,119.061c-15.511,0-25.533-11.479-25.533-29.246c0-17.843,10.022-29.373,25.533-29.373
41
- c15.744,0,25.917,11.53,25.917,29.373C606.751,107.581,596.578,119.061,580.834,119.061z M580.834,65.042
42
- c-11.729,0-19.014,9.492-19.014,24.772c0,15.049,7.463,24.773,19.014,24.773c11.964,0,19.396-9.492,19.396-24.773
43
- C600.23,74.766,592.617,65.042,580.834,65.042z"/>
44
- </g>
45
- <g>
46
- <path d="M623.652,117.78V61.721h4.444l2.615,16.91l3.563-5.661c3.16-5.019,8.634-11.016,17.176-12.309l0.981,5.953
47
- c-9.186,1.447-17.664,7.67-22.117,16.437l-0.271,0.533v34.196H623.652z"/>
48
- </g>
49
- <g>
50
- <path d="M688.224,118.549c-8.27,0-14.267-1.167-21.31-3.208V31.79l6.393-1.006V72.56l4.295-4.43
51
- c5.017-5.173,10.417-7.688,16.51-7.688c13.302,0,21.565,10.569,21.565,27.582C715.677,107.423,705.671,118.549,688.224,118.549z
52
- M692.447,65.554c-6.539,0-12.794,3.675-18.593,10.923l-0.548,0.685v33.856l1.64,0.601c3.981,1.461,7.108,2.202,13.148,2.202
53
- c9.608,0,21.062-4.387,21.062-25.285C709.156,74.575,702.598,65.554,692.447,65.554z"/>
54
- </g>
55
- </g>
56
- </g>
57
- </g>
58
- <g>
59
- <defs>
60
- <rect id="SVGID_3_" x="610.334" y="8" width="268" height="246"/>
61
- </defs>
62
- <clipPath id="SVGID_4_">
63
- <use xlink:href="#SVGID_3_" overflow="visible"/>
64
- </clipPath>
65
- <g clip-path="url(#SVGID_4_)">
66
- <g>
67
- <path fill="#2E3338" d="M391.782,120.28l-1.408-8.833c-4.608,5.505-10.88,10.113-19.841,10.113
68
- c-13.185,0-24.065-9.601-24.065-30.082c0-22.272,12.8-33.025,27.649-33.025c6.017,0,11.521,1.152,15.361,2.688v-31.49
69
- l11.393-1.792v92.42H391.782z M389.478,71.51c-4.736-2.432-8.448-3.456-14.977-3.456c-9.601,0-16.513,7.809-16.513,22.913
70
- c0,13.441,6.016,20.48,14.208,20.48c7.041,0,12.417-4.224,17.281-10.752V71.51z"/>
71
- <path fill="#2E3338" d="M422.884,46.933c-3.968,0-7.296-3.2-7.296-7.168s3.328-7.296,7.296-7.296s7.168,3.328,7.168,7.296
72
- S426.852,46.933,422.884,46.933z M417.124,120.28V59.221h11.393v61.059H417.124z"/>
73
- <path fill="#2E3338" d="M463.332,121.561c-8.064,0-17.025-2.816-22.273-5.76l1.664-10.754c5.76,3.969,13.185,7.041,21.505,7.041
74
- c7.808,0,12.417-2.944,12.417-8.064c0-5.633-3.456-7.68-14.465-10.368c-14.336-3.585-20.097-7.937-20.097-18.817
75
- c0-9.729,8.192-16.897,21.505-16.897c7.552,0,14.336,1.536,20.097,4.096l-1.792,10.752c-5.376-3.072-12.161-5.248-18.561-5.248
76
- c-6.913,0-10.497,2.688-10.497,7.04c0,4.096,3.072,6.4,12.672,8.832c15.105,3.841,21.889,8.193,21.889,19.842
77
- C487.397,114.393,479.077,121.561,463.332,121.561z"/>
78
- <path fill="#2E3338" d="M523.746,121.561c-16.385,0-28.417-11.393-28.417-31.746c0-20.865,12.8-31.873,28.673-31.873
79
- c8.96,0,15.36,2.304,19.968,5.632l-1.664,11.136c-5.632-4.608-11.392-6.784-18.432-6.784c-9.985,0-17.025,7.552-17.025,21.762
80
- c0,14.848,7.552,21.889,18.305,21.889c6.145,0,11.521-1.408,17.793-6.785l1.664,10.241
81
- C538.339,119.768,531.938,121.561,523.746,121.561z"/>
82
- <path fill="#2E3338" d="M580.834,121.561c-16.258,0-28.033-11.648-28.033-31.746c0-20.097,11.775-31.873,28.033-31.873
83
- c16.385,0,28.417,11.776,28.417,31.873C609.251,109.912,597.219,121.561,580.834,121.561z M580.834,67.542
84
- c-11.009,0-16.514,9.472-16.514,22.272c0,12.545,5.761,22.273,16.514,22.273c11.264,0,16.896-9.473,16.896-22.273
85
- C597.73,77.271,591.842,67.542,580.834,67.542z"/>
86
- <path fill="#CC342D" d="M632.545,84.183v36.098h-11.393V59.221h9.088l1.92,12.417c4.353-6.913,11.393-13.185,21.377-13.697
87
- l1.793,10.88C645.217,69.334,636.641,76.118,632.545,84.183z"/>
88
- <path fill="#CC342D" d="M688.224,121.049c-9.217,0-15.745-1.408-23.81-3.841V29.652l11.393-1.792v38.53
89
- c4.096-4.224,9.984-8.448,18.305-8.448c13.185,0,24.065,9.729,24.065,30.082C718.177,110.296,705.888,121.049,688.224,121.049z
90
- M692.447,68.054c-6.4,0-12.032,4.224-16.641,9.984v31.233c3.84,1.408,6.656,2.049,12.288,2.049
91
- c11.905,0,18.562-7.041,18.562-22.785C706.656,75.222,700.64,68.054,692.447,68.054z"/>
92
- </g>
93
- </g>
94
- </g>
95
- <g>
96
- </g>
97
- <g>
98
- </g>
99
- <g>
100
- </g>
101
- <g>
102
- </g>
103
- <g>
104
- </g>
105
- <g>
106
- </g>
107
- <g>
108
- </g>
109
- <g>
110
- </g>
111
- <g>
112
- </g>
113
- <g>
114
- </g>
115
- <g>
116
- </g>
117
- <g>
118
- </g>
119
- <g>
120
- </g>
121
- <g>
122
- </g>
123
- <g>
124
- </g>
125
- </svg>
1
+ <?xml version="1.0" encoding="utf-8"?>
2
+ <!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
3
+ <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
4
+ <svg version="1.1" id="レイヤー_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px"
5
+ y="0px" width="1080px" height="150px" viewBox="0 0 1080 150" enable-background="new 0 0 1080 150" xml:space="preserve">
6
+ <rect x="0" fill="#FFFFFF" width="1080" height="150"/>
7
+ <g>
8
+ <g>
9
+ <defs>
10
+ <rect id="SVGID_1_" x="283.667" y="-12.667" width="343.333" height="201.333"/>
11
+ </defs>
12
+ <clipPath id="SVGID_2_">
13
+ <use xlink:href="#SVGID_1_" overflow="visible"/>
14
+ </clipPath>
15
+ <g clip-path="url(#SVGID_2_)">
16
+ <g>
17
+ <g>
18
+ <path fill="#2E3338" d="M370.532,119.061c-13.503,0-21.564-10.312-21.564-27.582c0-18.542,9.872-30.524,25.148-30.524
19
+ c5.187,0,10.446,0.915,14.433,2.509l3.429,1.372V31.79l6.393-1.006v86.997h-4.456l-1.936-12.146l-3.522,4.209
20
+ C383.265,116.045,377.402,119.061,370.532,119.061z M374.501,65.554c-9.191,0-19.014,6.676-19.014,25.413
21
+ c0,13.961,6.56,22.98,16.708,22.98c7.181,0,13.309-3.736,19.286-11.758l0.495-0.666V69.983l-1.358-0.697
22
+ C385.253,66.53,381.034,65.554,374.501,65.554z"/>
23
+ </g>
24
+ <g>
25
+ <path fill="#2E3338" d="M419.623,117.779V61.721h6.394v56.058H419.623z M422.884,44.433c-2.646,0-4.796-2.094-4.796-4.668
26
+ c0-2.6,2.195-4.796,4.796-4.796c2.573,0,4.668,2.152,4.668,4.796C427.552,42.338,425.457,44.433,422.884,44.433z"/>
27
+ </g>
28
+ <g>
29
+ <path fill="#2E3338" d="M463.332,119.061c-7.016,0-14.662-2.281-19.529-4.646l0.809-5.23
30
+ c4.905,2.795,11.627,5.405,19.616,5.405c9.34,0,14.917-3.948,14.917-10.563c0-8.188-6.482-10.383-16.372-12.797
31
+ c-13.937-3.485-18.19-7.314-18.19-16.389c0-8.611,7.639-14.397,19.006-14.397c6.173,0,11.984,1.055,17.305,3.139l-0.902,5.412
32
+ c-5.417-2.532-11.33-3.95-16.659-3.95c-12.06,0-12.997,7.302-12.997,9.54c0,6.303,5.57,8.979,14.56,11.256
33
+ c15.329,3.896,20.003,7.967,20.003,17.418C484.897,113.3,477.036,119.061,463.332,119.061z"/>
34
+ </g>
35
+ <g>
36
+ <path fill="#2E3338" d="M523.745,119.061c-15.985,0-25.917-11.205-25.917-29.246c0-17.842,10.273-29.373,26.174-29.373
37
+ c6.896,0,12.695,1.453,17.263,4.322l-0.821,5.493c-5.086-3.282-10.44-4.83-16.57-4.83c-12.043,0-19.524,9.296-19.524,24.262
38
+ c0,15.271,7.776,24.389,20.805,24.389c6.138,0,11.114-1.451,15.996-4.758l0.746,4.591
39
+ C536.669,117.51,531.15,119.061,523.745,119.061z"/>
40
+ </g>
41
+ <g>
42
+ <path fill="#2E3338" d="M580.834,119.061c-15.512,0-25.533-11.479-25.533-29.246c0-17.842,10.021-29.373,25.533-29.373
43
+ c15.743,0,25.916,11.53,25.916,29.373C606.75,107.581,596.577,119.061,580.834,119.061z M580.834,65.042
44
+ c-11.729,0-19.015,9.492-19.015,24.772c0,15.049,7.463,24.772,19.015,24.772c11.964,0,19.396-9.491,19.396-24.772
45
+ C600.23,74.766,592.616,65.042,580.834,65.042z"/>
46
+ </g>
47
+ <g>
48
+ <path d="M623.652,117.779V61.721h4.444l2.615,16.91l3.563-5.661c3.16-5.019,8.634-11.016,17.176-12.309l0.981,5.953
49
+ c-9.187,1.447-17.664,7.67-22.117,16.437l-0.271,0.533v34.195H623.652L623.652,117.779z"/>
50
+ </g>
51
+ <g>
52
+ <path d="M688.224,118.549c-8.271,0-14.268-1.167-21.311-3.208V31.79l6.394-1.006V72.56l4.295-4.43
53
+ c5.017-5.173,10.417-7.688,16.51-7.688c13.302,0,21.565,10.569,21.565,27.582C715.677,107.423,705.671,118.549,688.224,118.549
54
+ z M692.447,65.554c-6.539,0-12.794,3.675-18.593,10.922l-0.548,0.686v33.855l1.64,0.602c3.981,1.461,7.108,2.201,13.148,2.201
55
+ c9.607,0,21.062-4.387,21.062-25.284C709.156,74.575,702.598,65.554,692.447,65.554z"/>
56
+ </g>
57
+ </g>
58
+ </g>
59
+ </g>
60
+ </g>
61
+ <g>
62
+ <g>
63
+ <defs>
64
+ <rect id="SVGID_3_" x="610.334" y="8" width="268" height="246"/>
65
+ </defs>
66
+ <clipPath id="SVGID_4_">
67
+ <use xlink:href="#SVGID_3_" overflow="visible"/>
68
+ </clipPath>
69
+ <g clip-path="url(#SVGID_4_)">
70
+ <g>
71
+ <path fill="#2E3338" d="M391.781,120.279l-1.408-8.832c-4.607,5.505-10.88,10.113-19.841,10.113
72
+ c-13.185,0-24.064-9.602-24.064-30.082c0-22.272,12.8-33.025,27.648-33.025c6.018,0,11.521,1.152,15.361,2.688v-31.49
73
+ l11.393-1.792v92.42H391.781L391.781,120.279z M389.478,71.51c-4.736-2.432-8.448-3.456-14.977-3.456
74
+ c-9.602,0-16.514,7.809-16.514,22.913c0,13.441,6.017,20.48,14.208,20.48c7.041,0,12.417-4.225,17.281-10.752L389.478,71.51
75
+ L389.478,71.51z"/>
76
+ <path fill="#2E3338" d="M422.884,46.933c-3.968,0-7.296-3.2-7.296-7.168c0-3.968,3.328-7.296,7.296-7.296
77
+ s7.168,3.328,7.168,7.296C430.052,43.733,426.852,46.933,422.884,46.933z M417.123,120.279V59.221h11.394v61.058H417.123z"/>
78
+ <path fill="#2E3338" d="M463.332,121.561c-8.064,0-17.025-2.815-22.273-5.76l1.664-10.754c5.76,3.969,13.185,7.041,21.505,7.041
79
+ c7.808,0,12.417-2.943,12.417-8.064c0-5.633-3.456-7.68-14.465-10.367c-14.336-3.586-20.098-7.938-20.098-18.817
80
+ c0-9.729,8.192-16.897,21.506-16.897c7.552,0,14.336,1.536,20.097,4.096l-1.792,10.752c-5.376-3.072-12.161-5.248-18.561-5.248
81
+ c-6.913,0-10.498,2.688-10.498,7.04c0,4.096,3.072,6.4,12.673,8.832c15.104,3.841,21.889,8.193,21.889,19.842
82
+ C487.397,114.393,479.076,121.561,463.332,121.561z"/>
83
+ <path fill="#2E3338" d="M523.745,121.561c-16.385,0-28.417-11.393-28.417-31.746c0-20.864,12.801-31.873,28.674-31.873
84
+ c8.96,0,15.359,2.304,19.968,5.632l-1.664,11.136c-5.632-4.608-11.393-6.784-18.433-6.784c-9.984,0-17.024,7.552-17.024,21.761
85
+ c0,14.849,7.552,21.89,18.305,21.89c6.146,0,11.521-1.408,17.793-6.785l1.664,10.241
86
+ C538.339,119.768,531.938,121.561,523.745,121.561z"/>
87
+ <path fill="#2E3338" d="M580.834,121.561c-16.259,0-28.033-11.647-28.033-31.746c0-20.096,11.774-31.873,28.033-31.873
88
+ c16.385,0,28.416,11.776,28.416,31.873C609.25,109.912,597.219,121.561,580.834,121.561z M580.834,67.542
89
+ c-11.01,0-16.515,9.472-16.515,22.272c0,12.545,5.761,22.272,16.515,22.272c11.264,0,16.896-9.474,16.896-22.272
90
+ C597.73,77.271,591.842,67.542,580.834,67.542z"/>
91
+ <path fill="#CC342D" d="M632.545,84.184v36.098h-11.394v-61.06h9.088l1.92,12.417c4.354-6.913,11.394-13.185,21.377-13.697
92
+ l1.793,10.88C645.217,69.334,636.641,76.118,632.545,84.184z"/>
93
+ <path fill="#CC342D" d="M688.224,121.049c-9.217,0-15.745-1.408-23.811-3.841V29.652l11.394-1.792v38.53
94
+ c4.096-4.224,9.984-8.448,18.305-8.448c13.186,0,24.065,9.729,24.065,30.082C718.177,110.296,705.888,121.049,688.224,121.049z
95
+ M692.447,68.054c-6.399,0-12.032,4.224-16.641,9.984v31.233c3.84,1.408,6.656,2.049,12.288,2.049
96
+ c11.905,0,18.562-7.041,18.562-22.785C706.656,75.222,700.64,68.054,692.447,68.054z"/>
97
+ </g>
98
+ </g>
99
+ </g>
100
+ </g>
101
+ </svg>
data/docs/faq.md ADDED
@@ -0,0 +1,77 @@
1
+ # @title FAQ
2
+
3
+ # Fequently asked questions
4
+
5
+ ## What is `Async::Task`?
6
+
7
+ Async::Task is a object for asynchronous tasks.
8
+
9
+ https://socketry.github.io/async/ for more information.
10
+
11
+ ## How do I do something with sent messages?
12
+
13
+ Use `Async::Task#wait` method.
14
+
15
+ ```ruby
16
+ # NG
17
+ message = channel.post("Hello world!") # => Async::Task
18
+ message.pin # => NoMethodError
19
+
20
+ # OK
21
+ message = channel.post("Hello world!").wait # => Message
22
+ message.pin
23
+ ```
24
+
25
+ ## How can I send DM to a user?
26
+
27
+ Use {Discorb::User#post} method, {Discorb::User} includes {Discorb::Messageable}.
28
+
29
+ ## How can I edit status?
30
+
31
+ Use {Discorb::Client#update_presence} method.
32
+
33
+ ```ruby
34
+ %i[standby guild_join guild_leave].each do |event|
35
+ client.on event do
36
+ client.update_presence(
37
+ Discorb::Activity.new(
38
+ name: "#{client.guilds.length} Servers"
39
+ ),
40
+ status: :online
41
+ )
42
+ end
43
+ end
44
+
45
+ client.on :ready do
46
+ client.update_presence(status: :dnd)
47
+ end
48
+ ```
49
+
50
+ ## How can I send files?
51
+
52
+ Use {Discorb::File} class.
53
+
54
+ ```ruby
55
+ # Send a file
56
+ message.channel.post file: Discorb::File.new(File.open("./README.md"))
57
+
58
+ # Send some files with text
59
+ message.channel.post "File!", files: [Discorb::File.new(File.open("./README.md")), Discorb::File.new(File.open("./License.txt"))]
60
+
61
+ # Send a string as a file
62
+ message.channel.post file: Discorb::File.from_string("Hello world!", "hello.txt")
63
+ ```
64
+
65
+ # Not fequently asked questions
66
+
67
+ ## How can I pronounce `discorb`?
68
+
69
+ Discorb is pronounced `disco-R-B`.
70
+
71
+ ## Why did you make `discorb`?
72
+
73
+ There are many reasons -- One is I didn't like `discordrb`'s `bot.message` -- but the main reason is, "Just for Fun".
74
+
75
+ ## How was `discorb` named?
76
+
77
+ `discord` and `.rb`.
data/docs/license.md ADDED
@@ -0,0 +1,7 @@
1
+ # @title License
2
+
3
+ # License
4
+
5
+ discorb is licensed under the [MIT license](https://opensource.org/licenses/MIT).
6
+
7
+ {include:file:License.txt}
@@ -5,6 +5,7 @@ require "logger"
5
5
 
6
6
  require "async"
7
7
  require "async/websocket/client"
8
+ require_relative "./utils/colored_puts"
8
9
 
9
10
  module Discorb
10
11
  #
@@ -302,9 +303,15 @@ module Discorb
302
303
  #
303
304
  # @param [Discorb::Activity] activity The activity to update.
304
305
  # @param [:online, :idle, :dnd, :invisible] status The status to update.
305
- #
306
- def update_presence(activity = nil, status: nil)
307
- payload = {}
306
+ # @param [String] afk Whether to set the client as AFK.
307
+ #
308
+ def update_presence(activity = nil, status: nil, afk: false)
309
+ payload = {
310
+ activities: [],
311
+ status: status,
312
+ afk: nil,
313
+ since: nil,
314
+ }
308
315
  if !activity.nil?
309
316
  payload[:activities] = [activity.to_hash]
310
317
  end
@@ -408,7 +415,8 @@ module Discorb
408
415
  when "run"
409
416
  require "json"
410
417
  options = JSON.parse(ENV["DISCORB_CLI_OPTIONS"], symbolize_names: true)
411
- Process.daemon if options[:daemon]
418
+ @daemon = options[:daemon]
419
+
412
420
  setup_commands(token) if options[:setup]
413
421
  if options[:log_level]
414
422
  if options[:log_level] == "none"
@@ -486,6 +494,18 @@ module Discorb
486
494
  message = "An error occurred while dispatching #{event_name}:\n#{e.full_message}"
487
495
  @log.error message, fallback: $stderr
488
496
  end
497
+
498
+ once :standby do
499
+ if @daemon
500
+ title = "discorb: #{@user}"
501
+ Process.setproctitle title
502
+ sputs "Your discorb client is now in standby mode."
503
+ iputs "Process ID: #{Process.pid}"
504
+ iputs "Title: #{title}"
505
+
506
+ Process.daemon
507
+ end
508
+ end
489
509
  end
490
510
  end
491
511
  end
@@ -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.8.0"
7
+ VERSION = "0.8.1"
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
 
@@ -11,5 +11,5 @@ informations = {
11
11
  }
12
12
 
13
13
  informations.each do |key, value|
14
- puts "\e[90m#{key}:\e[m #{value}"
14
+ puts "\e[90m#{key.rjust(informations.keys.map(&:size).max)}:\e[m #{value}"
15
15
  end
data/lib/discorb/file.rb CHANGED
@@ -1,6 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require "mime/types"
4
+ require "stringio"
4
5
 
5
6
  module Discorb
6
7
  #
@@ -62,8 +63,13 @@ module Discorb
62
63
  def initialize(io, filename = nil, content_type: nil)
63
64
  @io = io
64
65
  @filename = filename || (io.respond_to?(:path) ? io.path : io.object_id)
65
- @content_type = content_type || MIME::Types.type_for(@filename)[0].to_s
66
+ @content_type = content_type || MIME::Types.type_for(@filename.to_s)[0].to_s
66
67
  @content_type = "application/octet-stream" if @content_type == ""
67
68
  end
69
+
70
+ def self.from_string(string, filename: nil, content_type: nil)
71
+ io = StringIO.new(string)
72
+ new(io, filename, content_type: content_type)
73
+ end
68
74
  end
69
75
  end
@@ -499,9 +499,17 @@ module Discorb
499
499
  while (message = @connection.read)
500
500
  @buffer << message
501
501
  if message.end_with?((+"\x00\x00\xff\xff").force_encoding("ASCII-8BIT"))
502
- message = JSON.parse(@zlib_stream.inflate(@buffer), symbolize_names: true)
503
- @buffer = +""
504
- handle_gateway(message)
502
+ begin
503
+ data = @zlib_stream.inflate(@buffer)
504
+ @buffer = +""
505
+ message = JSON.parse(data, symbolize_names: true)
506
+ rescue JSON::ParserError
507
+ @buffer = +""
508
+ @log.error "Received invalid JSON from gateway."
509
+ @log.debug data
510
+ else
511
+ handle_gateway(message)
512
+ end
505
513
  end
506
514
  end
507
515
  end
@@ -526,7 +534,7 @@ module Discorb
526
534
  def send_gateway(opcode, **value)
527
535
  @connection.write({ op: opcode, d: value }.to_json)
528
536
  @connection.flush
529
- @log.debug "Sent message with opcode #{opcode}: #{value.to_json.gsub(@token, "[Token]")}"
537
+ @log.debug "Sent message: #{{ op: opcode, d: value }.to_json.gsub(@token, "[Token]")}"
530
538
  end
531
539
 
532
540
  def handle_gateway(payload)
data/lib/discorb/http.rb CHANGED
@@ -221,7 +221,7 @@ module Discorb
221
221
  { "User-Agent" => USER_AGENT, "authorization" => "Bot #{@client.token}",
222
222
  "content-type" => "application/json" }
223
223
  end
224
- ret.merge(headers) if !headers.nil? && headers.length.positive?
224
+ ret.merge!(headers) if !headers.nil? && headers.length.positive?
225
225
  ret["X-Audit-Log-Reason"] = audit_log_reason unless audit_log_reason.nil?
226
226
  ret
227
227
  end
@@ -59,7 +59,8 @@ module Discorb
59
59
  end
60
60
  files = [file] if file
61
61
  if files
62
- headers, payload = HTTP.multipart(payload, files)
62
+ seperator, payload = HTTP.multipart(payload, files)
63
+ headers = { "content-type" => "multipart/form-data; boundary=#{seperator}" }
63
64
  else
64
65
  headers = {}
65
66
  end
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.8.0
4
+ version: 0.8.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-22 00:00:00.000000000 Z
11
+ date: 2021-09-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: async
@@ -79,6 +79,8 @@ files:
79
79
  - ".github/ISSUE_TEMPLATE/feature_request.md"
80
80
  - ".github/workflows/build_main.yml"
81
81
  - ".github/workflows/build_version.yml"
82
+ - ".github/workflows/changelog.rb"
83
+ - ".github/workflows/release_from_changelog.yml"
82
84
  - ".gitignore"
83
85
  - ".yardopts"
84
86
  - Changelog.md
@@ -109,6 +111,8 @@ files:
109
111
  - docs/cli/setup.md
110
112
  - docs/events.md
111
113
  - docs/extension.md
114
+ - docs/faq.md
115
+ - docs/license.md
112
116
  - docs/tutorial.md
113
117
  - docs/voice_events.md
114
118
  - examples/commands/bookmarker.rb