discorb 0.7.3 → 0.7.6

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: c4197e97af48fc47c1062d0327ccc048cb8317701be673a2bce035b108f7cade
4
- data.tar.gz: 7c48b69868636ca4722e3ec2aee50bb6148174c1cfdcf0b31a2d227110aefa76
3
+ metadata.gz: a2d341757256d728ba6bb750b068a06f859e5d796d9e44bb1e4d616f4b439444
4
+ data.tar.gz: 3d4f6aaf740f8366a7f714011f60688871a9b4698bce9a37b6fd4c35cd31ab10
5
5
  SHA512:
6
- metadata.gz: 7215a8dc3b0c3502f1948838aac8c08cc0ae0ac4c7c874dcc695c48fc5ead628f36718f08e7e2854aa46f191e9f0c851ff23a6f96aa82edaa3c7d7c912ff490b
7
- data.tar.gz: 7ade9dcd2e56efb2513928a021d0f557d827a230b02f2c23ee6691cc9decc919f2e51b19e9e95fab13f535e8cc112cc8f3a29ac36e3a2144651a625e60ea0e25
6
+ metadata.gz: dd2620d3de3cf9e1b024701a9312d63a0990ac5360c9b5e65d096cc3792dd81effb79b26577812e6ac229f155d53ccf4a8f5aa093103e56d05c677eb8904936b
7
+ data.tar.gz: a04ab3bb0982d21d0d40d132b0b217ee4b95b214c848d970229e8f66bf0a4d5e2d07dce2006822ab07954f5a0de343a7769b1e36181778ccd501e5a02b6456fb
data/Changelog.md CHANGED
@@ -190,4 +190,16 @@ end
190
190
 
191
191
  ## 0.7.3
192
192
 
193
- - Add: Improve `discorb init`
193
+ - Add: Improve `discorb init`
194
+
195
+ ## 0.7.4 (yanked)
196
+
197
+ - Fix: Fix disconnected client
198
+
199
+ ## 0.7.5 (yanked)
200
+
201
+ - Fix: Fix critical error
202
+
203
+ ## 0.7.6
204
+
205
+ - Fix: Fix heartbeating error
@@ -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.3"
7
+ VERSION = "0.7.6"
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
 
@@ -488,7 +488,7 @@ module Discorb
488
488
  _, gateway_response = @http.get("/gateway").wait
489
489
  gateway_url = gateway_response[:url]
490
490
  endpoint = Async::HTTP::Endpoint.parse("#{gateway_url}?v=9&encoding=json&compress=zlib-stream",
491
- alpn_protocols: Async::HTTP::Protocol::HTTP11.names)
491
+ alpn_protocols: Async::HTTP::Protocol::HTTP11.names)
492
492
  begin
493
493
  Async::WebSocket::Client.connect(endpoint, headers: [["User-Agent", Discorb::USER_AGENT]], handler: RawConnection) do |connection|
494
494
  @connection = connection
@@ -510,7 +510,9 @@ module Discorb
510
510
  raise ClientError.new("Authentication failed."), cause: nil
511
511
  when "Discord WebSocket requesting client reconnect."
512
512
  @log.info "Discord WebSocket requesting client reconnect"
513
- @tasks.map(&:stop)
513
+ connect_gateway(false)
514
+ else
515
+ @log.error "Discord WebSocket closed: #{e.message}"
514
516
  connect_gateway(false)
515
517
  end
516
518
  rescue EOFError, Async::Wrapper::Cancelled
@@ -579,15 +581,18 @@ module Discorb
579
581
  end
580
582
  end
581
583
 
582
- def handle_heartbeat(interval)
584
+ def handle_heartbeat
583
585
  Async do |task|
586
+ interval = @heartbeat_interval
584
587
  sleep((interval / 1000.0 - 1) * rand)
585
588
  loop do
586
- @heartbeat_before = Time.now.to_f
587
- @connection.write({ op: 1, d: @last_s }.to_json)
588
- @connection.flush
589
- @log.debug "Sent opcode 1."
590
- @log.debug "Waiting for heartbeat."
589
+ unless @connection.closed?
590
+ @heartbeat_before = Time.now.to_f
591
+ @connection.write({ op: 1, d: @last_s }.to_json)
592
+ @connection.flush
593
+ @log.debug "Sent opcode 1."
594
+ @log.debug "Waiting for heartbeat."
595
+ end
591
596
  sleep(interval / 1000.0 - 1)
592
597
  end
593
598
  end
@@ -609,7 +614,7 @@ module Discorb
609
614
  dispatch(:ready)
610
615
  @log.info("Successfully connected to Discord.")
611
616
  end
612
- @tasks << handle_heartbeat(@heartbeat_interval)
617
+ @tasks << handle_heartbeat
613
618
  when "GUILD_CREATE"
614
619
  if @uncached_guilds.include?(data[:id])
615
620
  Guild.new(self, data, true)
@@ -839,12 +844,12 @@ module Discorb
839
844
  dispatch(:voice_state_update, old, current)
840
845
  if old&.channel != current&.channel
841
846
  dispatch(:voice_channel_update, old, current)
842
- case [old&.channel, current&.channel]
843
- in [nil, _]
847
+ case [old&.channel.nil?, current&.channel.nil?]
848
+ when [true, false]
844
849
  dispatch(:voice_channel_connect, current)
845
- in [_, nil]
850
+ when [false, true]
846
851
  dispatch(:voice_channel_disconnect, old)
847
- in _
852
+ when [false, false]
848
853
  dispatch(:voice_channel_move, old, current)
849
854
  end
850
855
  end
@@ -980,9 +985,9 @@ module Discorb
980
985
  dispatch(:reaction_add, ReactionEvent.new(self, data))
981
986
  when "MESSAGE_REACTION_REMOVE"
982
987
  if (target_message = @messages[data[:message_id]]) &&
983
- (target_reaction = target_message.reactions.find do |r|
984
- data[:emoji][:id].nil? ? r.emoji.name == data[:emoji][:name] : r.emoji.id == data[:emoji][:id]
985
- end)
988
+ (target_reaction = target_message.reactions.find do |r|
989
+ data[:emoji][:id].nil? ? r.emoji.name == data[:emoji][:name] : r.emoji.id == data[:emoji][:id]
990
+ end)
986
991
  target_reaction.instance_variable_set(:@count, target_reaction.count - 1)
987
992
  target_message.reactions.delete(target_reaction) if target_reaction.count.zero?
988
993
  end
@@ -994,7 +999,7 @@ module Discorb
994
999
  dispatch(:reaction_remove_all, ReactionRemoveAllEvent.new(self, data))
995
1000
  when "MESSAGE_REACTION_REMOVE_EMOJI"
996
1001
  if (target_message = @messages[data[:message_id]]) &&
997
- (target_reaction = target_message.reactions.find { |r| data[:emoji][:id].nil? ? r.name == data[:emoji][:name] : r.id == data[:emoji][:id] })
1002
+ (target_reaction = target_message.reactions.find { |r| data[:emoji][:id].nil? ? r.name == data[:emoji][:name] : r.id == data[:emoji][:id] })
998
1003
  target_message.reactions.delete(target_reaction)
999
1004
  end
1000
1005
  dispatch(:reaction_remove_emoji, ReactionRemoveEmojiEvent.new(data))
@@ -1017,25 +1022,35 @@ module Discorb
1017
1022
  end
1018
1023
  end
1019
1024
  end
1020
-
1025
+
1021
1026
  #
1022
1027
  # A class for connecting websocket with raw bytes data.
1023
1028
  # @private
1024
1029
  #
1025
- class RawConnection < Async::WebSocket::Connection
1026
- def initialize(...)
1030
+ class RawConnection < Async::WebSocket::Connection
1031
+ def initialize(*, **)
1027
1032
  super
1033
+ @closed = false
1028
1034
  end
1029
-
1030
- def parse(buffer)
1031
- # noop
1035
+
1036
+ def closed?
1037
+ @closed
1038
+ end
1039
+
1040
+ def close
1041
+ super
1042
+ @closed = true
1043
+ end
1044
+
1045
+ def parse(buffer)
1046
+ # noop
1032
1047
  buffer.to_s
1033
- end
1034
-
1035
- def dump(object)
1036
- # noop
1048
+ end
1049
+
1050
+ def dump(object)
1051
+ # noop
1037
1052
  object.to_s
1038
- end
1053
+ end
1039
1054
  end
1040
1055
  end
1041
- end
1056
+ 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.7.3
4
+ version: 0.7.6
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-21 00:00:00.000000000 Z
11
+ date: 2021-09-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: async