discorb 0.16.0 → 0.17.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 +4 -4
- data/.gitattributes +1 -0
- data/.github/workflows/build_main.yml +2 -2
- data/.github/workflows/build_version.yml +1 -1
- data/.github/workflows/codeql-analysis.yml +1 -1
- data/.github/workflows/lint-push.yml +3 -5
- data/.github/workflows/lint.yml +1 -1
- data/.github/workflows/spec.yml +30 -0
- data/.lefthook/commit-msg/validator.rb +5 -0
- data/.rspec +2 -0
- data/.rspec_parallel +2 -0
- data/.rubocop.yml +43 -6
- data/Changelog.md +14 -1
- data/Gemfile +14 -8
- data/Rakefile +41 -26
- data/bin/console +3 -3
- data/docs/Examples.md +1 -1
- data/docs/application_command.md +138 -46
- data/docs/cli/irb.md +2 -2
- data/docs/cli/new.md +14 -9
- data/docs/cli/run.md +7 -11
- data/docs/cli.md +17 -10
- data/docs/events.md +209 -211
- data/docs/extension.md +1 -2
- data/docs/faq.md +0 -1
- data/docs/tutorial.md +12 -12
- data/docs/voice_events.md +106 -106
- data/examples/commands/message.rb +63 -0
- data/examples/commands/permission.rb +18 -0
- data/examples/commands/slash.rb +44 -0
- data/examples/commands/user.rb +51 -0
- data/examples/components/authorization_button.rb +2 -2
- data/examples/components/select_menu.rb +2 -2
- data/examples/extension/main.rb +1 -1
- data/examples/extension/message_expander.rb +5 -2
- data/examples/simple/eval.rb +2 -2
- data/examples/simple/ping_pong.rb +1 -1
- data/examples/simple/rolepanel.rb +1 -1
- data/examples/simple/shard.rb +1 -1
- data/examples/simple/wait_for_message.rb +1 -1
- data/exe/discorb +31 -16
- data/lefthook.yml +45 -0
- data/lib/discorb/allowed_mentions.rb +1 -0
- data/lib/discorb/app_command/command.rb +127 -65
- data/lib/discorb/app_command/common.rb +25 -0
- data/lib/discorb/app_command/handler.rb +115 -33
- data/lib/discorb/app_command.rb +2 -1
- data/lib/discorb/application.rb +1 -0
- data/lib/discorb/asset.rb +1 -2
- data/lib/discorb/attachment.rb +1 -1
- data/lib/discorb/audit_logs.rb +11 -8
- data/lib/discorb/channel/base.rb +108 -0
- data/lib/discorb/channel/category.rb +32 -0
- data/lib/discorb/channel/container.rb +44 -0
- data/lib/discorb/channel/dm.rb +28 -0
- data/lib/discorb/channel/guild.rb +245 -0
- data/lib/discorb/channel/stage.rb +140 -0
- data/lib/discorb/channel/text.rb +345 -0
- data/lib/discorb/channel/thread.rb +321 -0
- data/lib/discorb/channel/voice.rb +79 -0
- data/lib/discorb/channel.rb +2 -1165
- data/lib/discorb/client.rb +38 -26
- data/lib/discorb/common.rb +2 -1
- data/lib/discorb/components/button.rb +2 -1
- data/lib/discorb/components/select_menu.rb +4 -2
- data/lib/discorb/components/text_input.rb +12 -2
- data/lib/discorb/components.rb +1 -1
- data/lib/discorb/embed.rb +22 -7
- data/lib/discorb/emoji.rb +30 -3
- data/lib/discorb/emoji_table.rb +4969 -3
- data/lib/discorb/event.rb +29 -4
- data/lib/discorb/exe/about.rb +1 -0
- data/lib/discorb/exe/irb.rb +2 -4
- data/lib/discorb/exe/new.rb +90 -23
- data/lib/discorb/exe/run.rb +8 -22
- data/lib/discorb/exe/setup.rb +25 -12
- data/lib/discorb/exe/show.rb +4 -3
- data/lib/discorb/extend.rb +1 -0
- data/lib/discorb/extension.rb +6 -3
- data/lib/discorb/flag.rb +11 -0
- data/lib/discorb/gateway.rb +67 -19
- data/lib/discorb/guild.rb +188 -56
- data/lib/discorb/guild_template.rb +10 -4
- data/lib/discorb/http.rb +16 -9
- data/lib/discorb/integration.rb +4 -1
- data/lib/discorb/intents.rb +1 -1
- data/lib/discorb/interaction/autocomplete.rb +28 -16
- data/lib/discorb/interaction/command.rb +36 -12
- data/lib/discorb/interaction/components.rb +5 -2
- data/lib/discorb/interaction/modal.rb +0 -1
- data/lib/discorb/interaction/response.rb +61 -22
- data/lib/discorb/interaction/root.rb +13 -13
- data/lib/discorb/interaction.rb +1 -0
- data/lib/discorb/invite.rb +5 -2
- data/lib/discorb/member.rb +25 -5
- data/lib/discorb/message.rb +47 -14
- data/lib/discorb/message_meta.rb +1 -0
- data/lib/discorb/modules.rb +56 -14
- data/lib/discorb/presence.rb +2 -2
- data/lib/discorb/rate_limit.rb +7 -2
- data/lib/discorb/reaction.rb +4 -4
- data/lib/discorb/role.rb +19 -4
- data/lib/discorb/shard.rb +1 -1
- data/lib/discorb/sticker.rb +8 -7
- data/lib/discorb/user.rb +2 -1
- data/lib/discorb/utils/colored_puts.rb +1 -0
- data/lib/discorb/voice_state.rb +10 -6
- data/lib/discorb/webhook.rb +36 -24
- data/lib/discorb.rb +5 -3
- data/po/yard.pot +9 -9
- data/sig/discorb.rbs +7232 -7235
- metadata +21 -5
- data/examples/commands/bookmarker.rb +0 -42
- data/examples/commands/hello.rb +0 -10
- data/examples/commands/inspect.rb +0 -25
data/lib/discorb/gateway.rb
CHANGED
|
@@ -96,7 +96,8 @@ module Discorb
|
|
|
96
96
|
|
|
97
97
|
unless @guild.nil?
|
|
98
98
|
@member = if data.key?(:member)
|
|
99
|
-
@guild.members[data[:member][:user][:id]] || Member.new(@client, @guild_id, data[:member][:user],
|
|
99
|
+
@guild.members[data[:member][:user][:id]] || Member.new(@client, @guild_id, data[:member][:user],
|
|
100
|
+
data[:member])
|
|
100
101
|
else
|
|
101
102
|
@guild.members[data[:user_id]]
|
|
102
103
|
end
|
|
@@ -130,6 +131,7 @@ module Discorb
|
|
|
130
131
|
class IntegrationDeleteEvent < GatewayEvent
|
|
131
132
|
# @return [Discorb::Snowflake] The ID of the integration.
|
|
132
133
|
attr_reader :id
|
|
134
|
+
|
|
133
135
|
# @!attribute [r] guild
|
|
134
136
|
# @macro client_cache
|
|
135
137
|
# @return [Discorb::Guild] The guild of the integration.
|
|
@@ -281,6 +283,7 @@ module Discorb
|
|
|
281
283
|
attr_reader :guild
|
|
282
284
|
# @return [Discorb::ScheduledEvent] The scheduled event.
|
|
283
285
|
attr_reader :scheduled_event
|
|
286
|
+
|
|
284
287
|
#
|
|
285
288
|
# Initialize a new instance of the ScheduledEventUserEvent class.
|
|
286
289
|
# @private
|
|
@@ -482,7 +485,14 @@ module Discorb
|
|
|
482
485
|
@guild_id = Snowflake.new(data[:guild_id]) if data.key?(:guild_id)
|
|
483
486
|
@user_id = Snowflake.new(data[:user_id])
|
|
484
487
|
@timestamp = Time.at(data[:timestamp])
|
|
485
|
-
|
|
488
|
+
if guild
|
|
489
|
+
@member = guild.members[@user_id] || Member.new(
|
|
490
|
+
@client,
|
|
491
|
+
@guild_id,
|
|
492
|
+
@client.users[@user_id].instance_variable_get(:@data),
|
|
493
|
+
data[:member]
|
|
494
|
+
)
|
|
495
|
+
end
|
|
486
496
|
end
|
|
487
497
|
|
|
488
498
|
def user
|
|
@@ -594,7 +604,8 @@ module Discorb
|
|
|
594
604
|
_, gateway_response = @http.request(Route.new("/gateway", "//gateway", :get)).wait
|
|
595
605
|
gateway_url = gateway_response[:url]
|
|
596
606
|
gateway_version = if @intents.to_h[:message_content].nil?
|
|
597
|
-
warn "message_content intent not set, using gateway version 9.
|
|
607
|
+
warn "message_content intent not set, using gateway version 9. " \
|
|
608
|
+
"You should specify `message_content` intent for preventing unexpected changes in the future."
|
|
598
609
|
9
|
|
599
610
|
else
|
|
600
611
|
10
|
|
@@ -604,7 +615,11 @@ module Discorb
|
|
|
604
615
|
alpn_protocols: Async::HTTP::Protocol::HTTP11.names,
|
|
605
616
|
)
|
|
606
617
|
begin
|
|
607
|
-
self.connection = Async::WebSocket::Client.connect(
|
|
618
|
+
self.connection = Async::WebSocket::Client.connect(
|
|
619
|
+
endpoint,
|
|
620
|
+
headers: [["User-Agent", Discorb::USER_AGENT]],
|
|
621
|
+
handler: RawConnection,
|
|
622
|
+
)
|
|
608
623
|
zlib_stream = Zlib::Inflate.new(Zlib::MAX_WBITS)
|
|
609
624
|
buffer = +""
|
|
610
625
|
begin
|
|
@@ -632,6 +647,7 @@ module Discorb
|
|
|
632
647
|
Errno::ECONNRESET,
|
|
633
648
|
IOError => e
|
|
634
649
|
next if @status == :closed
|
|
650
|
+
|
|
635
651
|
logger.error "Gateway connection closed accidentally: #{e.class}: #{e.message}"
|
|
636
652
|
connection.force_close
|
|
637
653
|
connect_gateway(true)
|
|
@@ -688,7 +704,8 @@ module Discorb
|
|
|
688
704
|
con.write({ op: opcode, d: value }.to_json)
|
|
689
705
|
con.flush
|
|
690
706
|
end
|
|
691
|
-
logger.debug "Sent message to fd #{connection.io.fileno}: #{{ op: opcode, d: value }.to_json.gsub(@token,
|
|
707
|
+
logger.debug "Sent message to fd #{connection.io.fileno}: #{{ op: opcode, d: value }.to_json.gsub(@token,
|
|
708
|
+
"[Token]")}"
|
|
692
709
|
end
|
|
693
710
|
|
|
694
711
|
def handle_gateway(payload, reconnect)
|
|
@@ -762,7 +779,11 @@ module Discorb
|
|
|
762
779
|
end
|
|
763
780
|
|
|
764
781
|
def handle_event(event_name, data)
|
|
765
|
-
return logger.debug "Client isn't ready; event #{event_name} wasn't handled" if @wait_until_ready &&
|
|
782
|
+
return logger.debug "Client isn't ready; event #{event_name} wasn't handled" if @wait_until_ready &&
|
|
783
|
+
!@ready &&
|
|
784
|
+
!%w[
|
|
785
|
+
READY GUILD_CREATE
|
|
786
|
+
].include?(event_name)
|
|
766
787
|
|
|
767
788
|
dispatch(:event_receive, event_name, data)
|
|
768
789
|
logger.debug "Handling event #{event_name}"
|
|
@@ -829,7 +850,9 @@ module Discorb
|
|
|
829
850
|
dispatch(:role_update, before, current)
|
|
830
851
|
when "GUILD_ROLE_DELETE"
|
|
831
852
|
return logger.warn "Unknown guild id #{data[:guild_id]}, ignoring" unless (guild = @guilds[data[:guild_id]])
|
|
832
|
-
|
|
853
|
+
unless (role = guild.roles.delete(data[:role_id]))
|
|
854
|
+
return logger.warn "Unknown role id #{data[:role_id]}, ignoring"
|
|
855
|
+
end
|
|
833
856
|
|
|
834
857
|
dispatch(:role_delete, role)
|
|
835
858
|
when "CHANNEL_CREATE"
|
|
@@ -874,7 +897,9 @@ module Discorb
|
|
|
874
897
|
dispatch(:thread_delete, thread)
|
|
875
898
|
when "THREAD_LIST_SYNC"
|
|
876
899
|
data[:threads].each do |raw_thread|
|
|
877
|
-
thread = Channel.make_channel(self, raw_thread.merge({ member: raw_thread[:members].find
|
|
900
|
+
thread = Channel.make_channel(self, raw_thread.merge({ member: raw_thread[:members].find do |m|
|
|
901
|
+
m[:id] == raw_thread[:id]
|
|
902
|
+
end }))
|
|
878
903
|
@channels[thread.id] = thread
|
|
879
904
|
end
|
|
880
905
|
when "THREAD_MEMBER_UPDATE"
|
|
@@ -908,15 +933,23 @@ module Discorb
|
|
|
908
933
|
instance = StageInstance.new(self, data)
|
|
909
934
|
dispatch(:stage_instance_create, instance)
|
|
910
935
|
when "STAGE_INSTANCE_UPDATE"
|
|
911
|
-
|
|
912
|
-
|
|
936
|
+
unless (channel = @channels[data[:channel_id]])
|
|
937
|
+
return logger.warn "Unknown channel id #{data[:channel_id]} , ignoring"
|
|
938
|
+
end
|
|
939
|
+
unless (instance = channel.stage_instances[data[:id]])
|
|
940
|
+
return logger.warn "Unknown stage instance id #{data[:id]}, ignoring"
|
|
941
|
+
end
|
|
913
942
|
|
|
914
943
|
old = StageInstance.new(self, instance.instance_variable_get(:@data), no_cache: true)
|
|
915
944
|
current.send(:_set_data, data)
|
|
916
945
|
dispatch(:stage_instance_update, old, current)
|
|
917
946
|
when "STAGE_INSTANCE_DELETE"
|
|
918
|
-
|
|
919
|
-
|
|
947
|
+
unless (channel = @channels[data[:channel_id]])
|
|
948
|
+
return logger.warn "Unknown channel id #{data[:channel_id]} , ignoring"
|
|
949
|
+
end
|
|
950
|
+
unless (instance = channel.stage_instances.delete(data[:id]))
|
|
951
|
+
return logger.warn "Unknown stage instance id #{data[:id]}, ignoring"
|
|
952
|
+
end
|
|
920
953
|
|
|
921
954
|
dispatch(:stage_instance_delete, instance)
|
|
922
955
|
when "GUILD_MEMBER_ADD"
|
|
@@ -927,14 +960,18 @@ module Discorb
|
|
|
927
960
|
dispatch(:member_add, nm)
|
|
928
961
|
when "GUILD_MEMBER_UPDATE"
|
|
929
962
|
return logger.warn "Unknown guild id #{data[:guild_id]}, ignoring" unless (guild = @guilds[data[:guild_id]])
|
|
930
|
-
|
|
963
|
+
unless (nm = guild.members[data[:user][:id]])
|
|
964
|
+
return logger.warn "Unknown member id #{data[:user][:id]}, ignoring"
|
|
965
|
+
end
|
|
931
966
|
|
|
932
967
|
old = Member.new(self, data[:guild_id], data[:user], data.update({ no_cache: true }))
|
|
933
968
|
nm.send(:_set_data, data[:user], data)
|
|
934
969
|
dispatch(:member_update, old, nm)
|
|
935
970
|
when "GUILD_MEMBER_REMOVE"
|
|
936
971
|
return logger.warn "Unknown guild id #{data[:guild_id]}, ignoring" unless (guild = @guilds[data[:guild_id]])
|
|
937
|
-
|
|
972
|
+
unless (member = guild.members.delete(data[:user][:id]))
|
|
973
|
+
return logger.warn "Unknown member id #{data[:user][:id]}, ignoring"
|
|
974
|
+
end
|
|
938
975
|
|
|
939
976
|
dispatch(:member_remove, member)
|
|
940
977
|
when "GUILD_BAN_ADD"
|
|
@@ -1111,7 +1148,8 @@ module Discorb
|
|
|
1111
1148
|
when "MESSAGE_DELETE"
|
|
1112
1149
|
message.instance_variable_set(:@deleted, true) if (message = @messages[data[:id]])
|
|
1113
1150
|
|
|
1114
|
-
dispatch(:message_delete_id, Snowflake.new(data[:id]), channels[data[:channel_id]],
|
|
1151
|
+
dispatch(:message_delete_id, Snowflake.new(data[:id]), channels[data[:channel_id]],
|
|
1152
|
+
data[:guild_id] && guilds[data[:guild_id]])
|
|
1115
1153
|
dispatch(:message_delete, message, channels[data[:channel_id]], data[:guild_id] && guilds[data[:guild_id]])
|
|
1116
1154
|
when "MESSAGE_DELETE_BULK"
|
|
1117
1155
|
messages = []
|
|
@@ -1158,7 +1196,9 @@ module Discorb
|
|
|
1158
1196
|
dispatch(:reaction_remove_all, ReactionRemoveAllEvent.new(self, data))
|
|
1159
1197
|
when "MESSAGE_REACTION_REMOVE_EMOJI"
|
|
1160
1198
|
if (target_message = @messages[data[:message_id]]) &&
|
|
1161
|
-
(target_reaction = target_message.reactions.find
|
|
1199
|
+
(target_reaction = target_message.reactions.find do |r|
|
|
1200
|
+
data[:emoji][:id].nil? ? r.name == data[:emoji][:name] : r.id == data[:emoji][:id]
|
|
1201
|
+
end)
|
|
1162
1202
|
target_message.reactions.delete(target_reaction)
|
|
1163
1203
|
end
|
|
1164
1204
|
dispatch(:reaction_remove_emoji, ReactionRemoveEmojiEvent.new(self, data))
|
|
@@ -1184,7 +1224,9 @@ module Discorb
|
|
|
1184
1224
|
dispatch(:scheduled_event_create, event)
|
|
1185
1225
|
when "GUILD_SCHEDULED_EVENT_UPDATE"
|
|
1186
1226
|
logger.warn("Unknown guild id #{data[:guild_id]}, ignoring") unless (guild = @guilds[data[:guild_id]])
|
|
1187
|
-
|
|
1227
|
+
unless (event = guild.scheduled_events[data[:id]])
|
|
1228
|
+
logger.warn("Unknown scheduled event id #{data[:id]}, ignoring")
|
|
1229
|
+
end
|
|
1188
1230
|
old = event.dup
|
|
1189
1231
|
event.send(:_set_data, data)
|
|
1190
1232
|
dispatch(:scheduled_event_update, old, event)
|
|
@@ -1200,7 +1242,9 @@ module Discorb
|
|
|
1200
1242
|
end
|
|
1201
1243
|
when "GUILD_SCHEDULED_EVENT_DELETE"
|
|
1202
1244
|
logger.warn("Unknown guild id #{data[:guild_id]}, ignoring") unless (guild = @guilds[data[:guild_id]])
|
|
1203
|
-
|
|
1245
|
+
unless (event = guild.scheduled_events[data[:id]])
|
|
1246
|
+
logger.warn("Unknown scheduled event id #{data[:id]}, ignoring")
|
|
1247
|
+
end
|
|
1204
1248
|
guild.scheduled_events.remove(data[:id])
|
|
1205
1249
|
dispatch(:scheduled_event_delete, event)
|
|
1206
1250
|
dispatch(:scheduled_event_cancel, event)
|
|
@@ -1287,7 +1331,11 @@ module Discorb
|
|
|
1287
1331
|
end
|
|
1288
1332
|
|
|
1289
1333
|
def io
|
|
1290
|
-
@framer
|
|
1334
|
+
@framer
|
|
1335
|
+
.instance_variable_get(:@stream)
|
|
1336
|
+
.instance_variable_get(:@io)
|
|
1337
|
+
.instance_variable_get(:@io)
|
|
1338
|
+
.instance_variable_get(:@io)
|
|
1291
1339
|
end
|
|
1292
1340
|
|
|
1293
1341
|
def parse(buffer)
|