зеркало из
https://github.com/glebtv/telegram-bot.git
synced 2026-08-28 15:26:18 +03:00
Take chat from message for callback queries
Этот коммит содержится в:
@@ -131,6 +131,7 @@ class Telegram::WebhookController < Telegram::Bot::UpdatesController
|
||||
# do_smth_with(data)
|
||||
|
||||
# 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!'
|
||||
# There is `respond_with` helper to set `chat_id` from received message:
|
||||
respond_with :message, text: response
|
||||
|
||||
@@ -141,10 +141,12 @@ module Telegram
|
||||
@_payload, @_payload_type = payload_data
|
||||
end
|
||||
|
||||
# Accessor to `'chat'` field of payload. Can be overriden with `chat` option
|
||||
# for #initialize.
|
||||
# Accessor to `'chat'` field of payload. Also tries `'chat'` in `'message'`
|
||||
# when there is no such field in payload.
|
||||
#
|
||||
# Can be overriden with `chat` option for #initialize.
|
||||
def chat
|
||||
@_chat ||= payload && payload['chat']
|
||||
@_chat ||= payload.try! { |x| x['chat'] || x['message'] && x['message']['chat'] }
|
||||
end
|
||||
|
||||
# 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
|
||||
|
||||
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
|
||||
|
||||
Ссылка в новой задаче
Block a user