зеркало из
https://github.com/glebtv/telegram-bot.git
synced 2026-09-03 09:46:17 +03:00
Fixed controller crashes on unsupported update types
Этот коммит содержится в:
@@ -143,13 +143,13 @@ module Telegram
|
||||
# Accessor to `'chat'` field of payload. Can be overriden with `chat` option
|
||||
# for #initialize.
|
||||
def chat
|
||||
@_chat || payload && payload['chat']
|
||||
@_chat ||= payload && payload['chat']
|
||||
end
|
||||
|
||||
# Accessor to `'from'` field of payload. Can be overriden with `from` option
|
||||
# for #initialize.
|
||||
def from
|
||||
@_from || payload && payload['from']
|
||||
@_from ||= payload && payload['from']
|
||||
end
|
||||
|
||||
# Processes current update.
|
||||
@@ -164,7 +164,11 @@ module Telegram
|
||||
# it uses fallback with action same as payload type.
|
||||
# Returns array `[is_command?, action, args]`.
|
||||
def action_for_payload
|
||||
send("action_for_#{payload_type}") || [false, payload_type, [payload]]
|
||||
if payload_type
|
||||
send("action_for_#{payload_type}") || [false, payload_type, [payload]]
|
||||
else
|
||||
[false, :unsupported_payload_type, []]
|
||||
end
|
||||
end
|
||||
|
||||
# If payload is a message with command, then returned action is an
|
||||
|
||||
@@ -17,11 +17,15 @@ module Telegram
|
||||
protected
|
||||
|
||||
def session
|
||||
@_session ||= SessionHash.new(self.class.session_store, session_key)
|
||||
@_session ||= begin
|
||||
key = session_key
|
||||
key ? SessionHash.new(self.class.session_store, key) : NullSessionHash.new
|
||||
end
|
||||
end
|
||||
|
||||
def session_key
|
||||
"#{bot.username}:#{from ? "from:#{from['id']}" : "chat:#{chat['id']}"}"
|
||||
subject = from || chat
|
||||
"#{bot.username}:#{subject['id']}" if subject
|
||||
end
|
||||
|
||||
# Rack::Session::Abstract::SessionHash is taken to provide lazy loading.
|
||||
@@ -59,6 +63,18 @@ module Telegram
|
||||
end
|
||||
end
|
||||
|
||||
class NullSessionHash < Session::SessionHash
|
||||
def initialize
|
||||
@data = {}
|
||||
@loaded = true
|
||||
@exists = true
|
||||
end
|
||||
|
||||
alias_method :destroy, :clear
|
||||
alias_method :load!, :id
|
||||
alias_method :commit, :id
|
||||
end
|
||||
|
||||
module ConfigMethods
|
||||
delegate :session_store, to: :config
|
||||
|
||||
|
||||
@@ -27,19 +27,7 @@ module Telegram
|
||||
|
||||
# Stubs session.
|
||||
def session
|
||||
@_session ||= Testing::SessionHash.new
|
||||
end
|
||||
|
||||
class SessionHash < Session::SessionHash
|
||||
def initialize
|
||||
@data = {}
|
||||
@loaded = true
|
||||
@exists = true
|
||||
end
|
||||
|
||||
alias_method :destroy, :clear
|
||||
alias_method :load!, :id
|
||||
alias_method :commit, :id
|
||||
@_session ||= Session::NullSessionHash.new
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
Ссылка в новой задаче
Block a user