discorb 0.12.4 → 0.13.0

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: bb6441bf1c3ae4d181aa1a6048b72bc60bea0d0894e1da00c79a2648dd59c13e
4
- data.tar.gz: 835bb57c283b00f9e4863f026f6500ddd81345d51f3b1482ac1c68e23f3debdd
3
+ metadata.gz: 54c0aa4482415e2d38abe5adf4765ec71681d7f0874a5208b868797c4ebc4626
4
+ data.tar.gz: 6d15fbcc255d6fddb22e4d8b73f6a7fee40b3690a2f79b4356adcec029d1e90c
5
5
  SHA512:
6
- metadata.gz: 1af485b0c8476e5e538c70d146ef2819587148a813a31d55cefe7d727e6060462b9e063ab8eb7fad8e1249d0e6d77214a65d4aa7b8843e149b38bc4c21d588b4
7
- data.tar.gz: f50a9468ceed0d21e753867a5c42177022792a1550477272843d1a26fa5339d59b3b2c0cf1493edc84627856258aea05a8342531fc620b27c02c149e696169a2
6
+ metadata.gz: d866205f326de7437f2f8464e0e69fa14c024cd2427507b428507249352902c84003d741265e1b40b86e545435362fd001d949ebe2d9828216bcb5440f93eee3
7
+ data.tar.gz: 1b2797ea34e32198aa660486771db933ea6893b9542e30a813ce14c2d4b49299ef24c4ecc7ea052dbd7260c5eabe728b120026f543aca49ecc0f2040450741bc
data/Changelog.md CHANGED
@@ -2,6 +2,16 @@
2
2
 
3
3
  # Changelog
4
4
 
5
+ ## v0.13
6
+
7
+ ### v0.13.0
8
+
9
+ - Change!: Event is now EventHandler.
10
+ - Add: Support for scheduled events.
11
+ - Fix: Fix bug in sticker initialization.
12
+ - Add: Support application flags
13
+ - Add: Add `#inspect` method to many classes.
14
+
5
15
  ## v0.12
6
16
 
7
17
  ### v0.12.4
@@ -49,6 +49,8 @@ client.run(ENV["DISCORD_BOT_TOKEN"])
49
49
  | `guild_ids` | The ID of the guild to register the command in. |
50
50
  | `block` | A block that will be called when the command is invoked. |
51
51
 
52
+ Block will be called with a {Discorb::ApplicationCommand::Interaction} object and specified options.
53
+
52
54
  In `options`, hash should be like this:
53
55
 
54
56
  ```ruby
@@ -121,16 +123,16 @@ group.slash("message_expand", "Whether bot should expand message.", {
121
123
  type: :boolean,
122
124
  description: "Whether bot should expand message."
123
125
  }
124
- }) do |interaction|
126
+ }) do |interaction, enabled|
125
127
  # ...
126
128
  end
127
129
 
128
- group.slash("bump_alert", "Whether bot should notify DISBOARD bump.", {
130
+ group.slash("level", "Whether level system is enabled.", {
129
131
  "enabled" => {
130
132
  type: :boolean,
131
- description: "Whether bot should notify DISBOARD bump."
133
+ description: "Whether level system is enabled."
132
134
  }
133
- }) do |interaction|
135
+ }) do |interaction, enabled|
134
136
  # ...
135
137
  end
136
138
 
@@ -146,15 +148,15 @@ client.slash_group("settings", "Set settings of bot.") do |group|
146
148
  type: :boolean,
147
149
  description: "Whether bot should expand message."
148
150
  }
149
- }) do |interaction|
151
+ }) do |interaction, enabled|
150
152
  # ...
151
153
  end
152
- group.slash("bump_alert", "Whether bot should notify DISBOARD bump.", {
154
+ group.slash("bump_alert", "Whether level system is enabled.", {
153
155
  "enabled" => {
154
156
  type: :boolean,
155
- description: "Whether bot should notify DISBOARD bump."
157
+ description: "Whether level system is enabled."
156
158
  }
157
- }) do |interaction|
159
+ }) do |interaction, enabled|
158
160
  # ...
159
161
  end
160
162
  end
data/docs/events.md CHANGED
@@ -503,7 +503,50 @@ Fires when a select menu is selected.
503
503
 
504
504
  ### Voice events
505
505
 
506
- It's too big, so they're documented in {file:docs/voice_events.md}
506
+ Because it's big, it's documented in {file:docs/voice_events.md}.
507
+
508
+ ### Guild scheduled event events
509
+
510
+ #### `scheduled_event_create(event)`
511
+
512
+ Fires when a scheduled event is created.
513
+
514
+ | Parameter | Type | Description |
515
+ | ---------- | ----- | ----------- |
516
+ | `event` | {Discorb::ScheduledEvent}| The created scheduled event. |
517
+
518
+ #### `scheduled_event_cancel(event)`, `scheduled_event_delete(event)`
519
+
520
+ Fires when a scheduled event is canceled or deleted.
521
+
522
+ | Parameter | Type | Description |
523
+ | ---------- | ----- | ----------- |
524
+ | `event` | {Discorb::ScheduledEvent}| The deleted scheduled event. |
525
+
526
+ #### `scheduled_event_edit(before, after)`
527
+
528
+ Fires when a scheduled event is edited.
529
+
530
+ | Parameter | Type | Description |
531
+ | ---------- | ----- | ----------- |
532
+ | `before` | {Discorb::ScheduledEvent}| The scheduled event before the edit. |
533
+ | `after` | {Discorb::ScheduledEvent}| The scheduled event after the edit. |
534
+
535
+ #### `scheduled_event_start(event)`
536
+
537
+ Fires when a scheduled event is started.
538
+
539
+ | Parameter | Type | Description |
540
+ | ---------- | ----- | ----------- |
541
+ | `event` | {Discorb::ScheduledEvent}| The scheduled event that started. |
542
+
543
+ #### `scheduled_event_end(event)`
544
+
545
+ Fires when a scheduled event is ended.
546
+
547
+ | Parameter | Type | Description |
548
+ | ---------- | ----- | ----------- |
549
+ | `event` | {Discorb::ScheduledEvent}| The scheduled event that ended. |
507
550
 
508
551
  ### Low-level events
509
552
 
@@ -530,3 +573,12 @@ Fires when `THREAD_CREATE` is received.
530
573
  | Parameter | Type | Description |
531
574
  | ---------- | ----- | ----------- |
532
575
  |`thread` | {Discorb::ThreadChannel}| The thread of the event. |
576
+
577
+ #### `scheduled_event_update(before, after)`
578
+
579
+ Fires when `SCHEDULED_EVENT_UPDATE` is received.
580
+
581
+ | Parameter | Type | Description |
582
+ | ---------- | ----- | ----------- |
583
+ | `before` | {Discorb::ScheduledEvent}| The scheduled event before the update. |
584
+ |`after` | {Discorb::ScheduledEvent}| The scheduled event after the update. |
@@ -27,7 +27,8 @@ module Discorb
27
27
  # @return [Boolean] Whether the application's bot requires a code grant.
28
28
  attr_reader :bot_require_code_grant
29
29
  alias bot_require_code_grant? bot_require_code_grant
30
-
30
+ # @return [Discorb::Application::Flag] The application's flags.
31
+ attr_reader :flags
31
32
  # @private
32
33
  def initialize(client, data)
33
34
  @client = client
@@ -42,6 +43,7 @@ module Discorb
42
43
  @verify_key = data[:verify_key]
43
44
  @owner = @client.users[data[:owner][:id]] || User.new(@client, data[:owner])
44
45
  @team = data[:team] && Team.new(@client, data[:team])
46
+ @flags = Flag.new(data[:flags])
45
47
  end
46
48
 
47
49
  def inspect
@@ -52,6 +54,34 @@ module Discorb
52
54
 
53
55
  alias require_code_grant? bot_require_code_grant?
54
56
 
57
+ #
58
+ # Represents a flag for an application.
59
+ # ## Flag fields
60
+ #
61
+ # | Field|Value|
62
+ # |---|---|
63
+ # | `1 << 12` | `:gateway_presence` |
64
+ # | `1 << 13` | `:gateway_presence_limited` |
65
+ # | `1 << 14` | `:gateway_guild_members` |
66
+ # | `1 << 15` | `:gateway_guild_members_limited` |
67
+ # | `1 << 16` | `:verification_pending_guild_limit` |
68
+ # | `1 << 17` | `:embedded` |
69
+ # | `1 << 18` | `:gateway_message_content` |
70
+ # | `1 << 19` | `:gateway_message_content_limited` |
71
+ #
72
+ class Flag < Discorb::Flag
73
+ @bits = {
74
+ gateway_presence: 12,
75
+ gateway_presence_limited: 13,
76
+ gateway_guild_members: 14,
77
+ gateway_guild_members_limited: 15,
78
+ verification_pending_guild_limit: 16,
79
+ embedded: 17,
80
+ gateway_message_content: 18,
81
+ gateway_message_content_limited: 19,
82
+ }
83
+ end
84
+
55
85
  #
56
86
  # Represents a team for an application.
57
87
  #
@@ -90,6 +90,9 @@ module Discorb
90
90
  # * `:sticker_create`
91
91
  # * `:sticker_update`
92
92
  # * `:sticker_delete`
93
+ # * `:guild_scheduled_event_create`
94
+ # * `:guild_scheduled_event_update`
95
+ # * `:guild_scheduled_event_delete`
93
96
  # * `:thread_create`
94
97
  # * `:thread_update`
95
98
  # * `:thread_delete`
@@ -148,9 +151,12 @@ module Discorb
148
151
  90 => :sticker_create,
149
152
  91 => :sticker_update,
150
153
  92 => :sticker_delete,
154
+ 100 => :guild_scheduled_event_create,
155
+ 101 => :guild_scheduled_event_update,
156
+ 102 => :guild_scheduled_event_delete,
151
157
  110 => :thread_create,
152
158
  111 => :thread_update,
153
- 112 => :thread_delete
159
+ 112 => :thread_delete,
154
160
  }.freeze
155
161
 
156
162
  # @private
@@ -160,7 +166,7 @@ module Discorb
160
166
  role: ->(client, id, guild_id) { client.guilds[guild_id]&.roles&.[](id) },
161
167
  member: ->(client, id, guild_id) { client.guilds[guild_id]&.members&.[](id) },
162
168
  guild: ->(client, id, _guild_id) { client.guilds[id] },
163
- message: ->(client, id, _guild_id) { client.messages[id] }
169
+ message: ->(client, id, _guild_id) { client.messages[id] },
164
170
  }
165
171
 
166
172
  # @private
@@ -171,15 +177,15 @@ module Discorb
171
177
  @user_id = Snowflake.new(data[:user_id])
172
178
  @target_id = Snowflake.new(data[:target_id])
173
179
  @type = self.class.events[data[:action_type]]
174
- @target = self.class.converts[@type.to_s.split('_')[0].to_sym]&.call(client, @target_id, @gui)
180
+ @target = self.class.converts[@type.to_s.split("_")[0].to_sym]&.call(client, @target_id, @gui)
175
181
  @target ||= Snowflake.new(data[:target_id])
176
182
  @changes = data[:changes] && Changes.new(data[:changes])
177
183
  @reason = data[:reason]
178
184
  data[:options]&.each do |option, value|
179
185
  define_singleton_method(option) { value }
180
- if option.end_with?('_id')
181
- define_singleton_method(option.to_s.sub('_id', '')) do
182
- self.class.converts[option.to_s.split('_')[0].to_sym]&.call(client, value, @guild_id)
186
+ if option.end_with?("_id")
187
+ define_singleton_method(option.to_s.sub("_id", "")) do
188
+ self.class.converts[option.to_s.split("_")[0].to_sym]&.call(client, value, @guild_id)
183
189
  end
184
190
  end
185
191
  end
@@ -203,7 +209,7 @@ module Discorb
203
209
  end
204
210
 
205
211
  def inspect
206
- "#<#{self.class} #{@changes&.data&.length || 'No'} changes>"
212
+ "#<#{self.class} #{@changes&.data&.length || "No"} changes>"
207
213
  end
208
214
 
209
215
  class << self
@@ -268,15 +274,21 @@ module Discorb
268
274
  def initialize(data)
269
275
  @key = data[:key].to_sym
270
276
  method = case @key.to_s
271
- when /.*_id$/, 'id'
272
- ->(v) { Snowflake.new(v) }
273
- when 'permissions'
274
- ->(v) { Discorb::Permission.new(v.to_i) }
275
- else
276
- ->(v) { v }
277
- end
278
- @old_value = data[:old_value].then(&method)
279
- @new_value = data[:new_value].then(&method)
277
+ when /.*_id$/, "id"
278
+ ->(v) { Snowflake.new(v) }
279
+ when "permissions"
280
+ ->(v) { Discorb::Permission.new(v.to_i) }
281
+ when "status"
282
+ ->(v) { Discorb::ScheduledEvent.status[v] }
283
+ when "entity_type"
284
+ ->(v) { Discorb::ScheduledEvent.entity_type[v] }
285
+ when "privacy_level"
286
+ ->(v) { Discorb::StageInstance.privacy_level[v] || Discorb::ScheduledEvent.privacy_level[v] }
287
+ else
288
+ ->(v) { v }
289
+ end
290
+ @old_value = method.(data[:old_value])
291
+ @new_value = method.(data[:new_value])
280
292
  end
281
293
 
282
294
  #
@@ -491,17 +491,24 @@ module Discorb
491
491
  # @param [Discorb::Message] message The message to start the thread.
492
492
  # @param [Integer] auto_archive_duration The duration of auto-archiving.
493
493
  # @param [Boolean] public Whether the thread is public.
494
+ # @param [Integer] rate_limit_per_user The rate limit per user.
495
+ # @param [Integer] slowmode Alias of `rate_limit_per_user`.
494
496
  # @param [String] reason The reason of starting the thread.
495
497
  #
496
498
  # @return [Async::Task<Discorb::ThreadChannel>] The started thread.
497
499
  #
498
- def start_thread(name, message: nil, auto_archive_duration: 1440, public: true, reason: nil)
500
+ def start_thread(name, message: nil, auto_archive_duration: 1440, public: true, rate_limit_per_user: nil, slowmode: nil, reason: nil)
499
501
  Async do
500
502
  _resp, data = if message.nil?
501
- @client.http.post("/channels/#{@id}/threads", {
502
- name: name, auto_archive_duration: auto_archive_duration, type: public ? 11 : 10,
503
- },
504
- audit_log_reason: reason).wait
503
+ @client.http.post(
504
+ "/channels/#{@id}/threads", {
505
+ name: name,
506
+ auto_archive_duration: auto_archive_duration,
507
+ type: public ? 11 : 10,
508
+ rate_limit_per_user: rate_limit_per_user || slowmode,
509
+ },
510
+ audit_log_reason: reason,
511
+ ).wait
505
512
  else
506
513
  @client.http.post("/channels/#{@id}/messages/#{Utils.try(message, :id)}/threads", {
507
514
  name: name, auto_archive_duration: auto_archive_duration,
@@ -112,10 +112,10 @@ module Discorb
112
112
  # @param [Hash] metadata The metadata of the event.
113
113
  # @param [Proc] block The block to execute when the event is triggered.
114
114
  #
115
- # @return [Discorb::Event] The event.
115
+ # @return [Discorb::EventHandler] The event.
116
116
  #
117
117
  def on(event_name, id: nil, **metadata, &block)
118
- ne = Event.new(block, id, metadata)
118
+ ne = EventHandler.new(block, id, metadata)
119
119
  @events[event_name] ||= []
120
120
  @events[event_name].delete_if { |e| e.metadata[:override] }
121
121
  @events[event_name] << ne
@@ -127,7 +127,7 @@ module Discorb
127
127
  #
128
128
  # @param (see #on)
129
129
  #
130
- # @return [Discorb::Event] The event.
130
+ # @return [Discorb::EventHandler] The event.
131
131
  #
132
132
  def once(event_name, id: nil, **metadata, &block)
133
133
  metadata[:once] = true
@@ -184,7 +184,7 @@ module Discorb
184
184
  events.each do |block|
185
185
  Async do
186
186
  Async(annotation: "Discorb event: #{event_name}") do |task|
187
- if block.is_a?(Discorb::Event)
187
+ if block.is_a?(Discorb::EventHandler)
188
188
  @events[event_name].delete(block) if block.metadata[:once]
189
189
  end
190
190
  block.call(*args)
@@ -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.12.4"
7
+ VERSION = "0.13.0"
8
8
  # @return [String] The user agent for the bot.
9
9
  USER_AGENT = "DiscordBot (https://discorb-lib.github.io #{VERSION}) Ruby/#{RUBY_VERSION}"
10
10
 
@@ -110,6 +110,31 @@ module Discorb
110
110
  @value & 0xFFF
111
111
  end
112
112
 
113
+ def inspect
114
+ "#<#{self.class} #{to_s}>"
115
+ end
116
+
113
117
  alias id to_s
114
118
  end
119
+
120
+ Unset = Object.new
121
+ class << Unset
122
+ def method_missing(*)
123
+ self
124
+ end
125
+
126
+ def or(other)
127
+ other
128
+ end
129
+ end
130
+
131
+ module DefineOr
132
+ refine Object do
133
+ def or(other)
134
+ self
135
+ end
136
+ end
137
+ end
138
+
139
+ using DefineOr
115
140
  end
@@ -6,6 +6,10 @@ module Discorb
6
6
  # Represents a Discord component.
7
7
  #
8
8
  class Component
9
+ def inspect
10
+ "#<#{self.class}>"
11
+ end
12
+
9
13
  class << self
10
14
  #
11
15
  # Create a new component from hash data.
@@ -142,6 +146,10 @@ module Discorb
142
146
  end
143
147
  end
144
148
 
149
+ def inspect
150
+ "#<#{self.class}: #{@custom_id || @url}>"
151
+ end
152
+
145
153
  class << self
146
154
  # @private
147
155
  attr_reader :styles
@@ -218,6 +226,10 @@ module Discorb
218
226
  }
219
227
  end
220
228
 
229
+ def inspect
230
+ "#<#{self.class}: #{@custom_id}>"
231
+ end
232
+
221
233
  #
222
234
  # Represents an option of a select menu.
223
235
  #
@@ -48,7 +48,7 @@ module Discorb
48
48
  # @param [#to_s] id The ID of the item to remove.
49
49
  #
50
50
  def remove(id)
51
- @cache.remove(id.to_s)
51
+ @cache.delete(id.to_s)
52
52
  end
53
53
 
54
54
  #
data/lib/discorb/embed.rb CHANGED
@@ -86,6 +86,10 @@ module Discorb
86
86
  @thumbnail = (value.is_a?(String)) ? Thumbnail.new(value) : value
87
87
  end
88
88
 
89
+ def inspect
90
+ "#<#{self.class} \"#{@title}\">"
91
+ end
92
+
89
93
  #
90
94
  # Convert embed to hash.
91
95
  #
data/lib/discorb/emoji.rb CHANGED
@@ -13,6 +13,10 @@ module Discorb
13
13
  def ==(other)
14
14
  eql?(other)
15
15
  end
16
+
17
+ def inspect
18
+ "#<#{self.class}>"
19
+ end
16
20
  end
17
21
 
18
22
  # Represents a custom emoji in discord.