discorb 0.12.4 → 0.13.0

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 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.