зеркало из
https://github.com/glebtv/telegram-bot.git
synced 2026-09-06 19:15:50 +03:00
Take chat from message for callback queries
Этот коммит содержится в:
@@ -131,6 +131,7 @@ class Telegram::WebhookController < Telegram::Bot::UpdatesController
|
|||||||
# do_smth_with(data)
|
# do_smth_with(data)
|
||||||
|
|
||||||
# There are `chat` & `from` shortcut methods.
|
# There are `chat` & `from` shortcut methods.
|
||||||
|
# For callback queries `chat` if taken from `message` when it's available.
|
||||||
response = from ? "Hello #{from['username']}!" : 'Hi there!'
|
response = from ? "Hello #{from['username']}!" : 'Hi there!'
|
||||||
# There is `respond_with` helper to set `chat_id` from received message:
|
# There is `respond_with` helper to set `chat_id` from received message:
|
||||||
respond_with :message, text: response
|
respond_with :message, text: response
|
||||||
|
|||||||
@@ -141,10 +141,12 @@ module Telegram
|
|||||||
@_payload, @_payload_type = payload_data
|
@_payload, @_payload_type = payload_data
|
||||||
end
|
end
|
||||||
|
|
||||||
# Accessor to `'chat'` field of payload. Can be overriden with `chat` option
|
# Accessor to `'chat'` field of payload. Also tries `'chat'` in `'message'`
|
||||||
# for #initialize.
|
# when there is no such field in payload.
|
||||||
|
#
|
||||||
|
# Can be overriden with `chat` option for #initialize.
|
||||||
def chat
|
def chat
|
||||||
@_chat ||= payload && payload['chat']
|
@_chat ||= payload.try! { |x| x['chat'] || x['message'] && x['message']['chat'] }
|
||||||
end
|
end
|
||||||
|
|
||||||
# Accessor to `'from'` field of payload. Can be overriden with `from` option
|
# Accessor to `'from'` field of payload. Can be overriden with `from` option
|
||||||
|
|||||||
@@ -293,4 +293,49 @@ RSpec.describe Telegram::Bot::UpdatesController do
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
describe '#chat' do
|
||||||
|
subject { controller.chat }
|
||||||
|
let(:payload_type) { :message }
|
||||||
|
let(:payload) { {chat: 'test_value'} }
|
||||||
|
it { should eq payload[:chat] }
|
||||||
|
|
||||||
|
context 'when payload is not set' do
|
||||||
|
let(:payload) {}
|
||||||
|
it { should eq nil }
|
||||||
|
end
|
||||||
|
|
||||||
|
context 'when payload has no such field' do
|
||||||
|
let(:payload) { {smth: 'other'} }
|
||||||
|
it { should eq nil }
|
||||||
|
|
||||||
|
context 'but has `message`' do
|
||||||
|
let(:payload) { {message: message} }
|
||||||
|
let(:message) { {text: 'Hello bot!'} }
|
||||||
|
it { should eq nil }
|
||||||
|
|
||||||
|
context 'with `chat` set' do
|
||||||
|
let(:message) { super().merge(chat: 'test value') }
|
||||||
|
it { should eq message[:chat] }
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
describe '#from' do
|
||||||
|
subject { controller.from }
|
||||||
|
let(:payload_type) { :message }
|
||||||
|
let(:payload) { {from: 'test_value'} }
|
||||||
|
it { should eq payload[:from] }
|
||||||
|
|
||||||
|
context 'when payload is not set' do
|
||||||
|
let(:payload) {}
|
||||||
|
it { should eq nil }
|
||||||
|
end
|
||||||
|
|
||||||
|
context 'when payload has no such field' do
|
||||||
|
let(:payload) { {smth: 'other'} }
|
||||||
|
it { should eq nil }
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
Ссылка в новой задаче
Block a user