-
Notifications
You must be signed in to change notification settings - Fork 117
/
reply_helpers.rb
76 lines (69 loc) · 2.69 KB
/
reply_helpers.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
# frozen_string_literal: true
module Telegram
module Bot
class UpdatesController
module ReplyHelpers
# Helper to call bot's `send_#{type}` method with already set `chat_id`:
#
# respond_with :message, text: 'Hello!'
# respond_with :message, text: '__Hello!__', parse_mode: :Markdown
# respond_with :photo, photo: File.open(photo_to_send), caption: "It's incredible!"
def respond_with(type, params)
chat = self.chat
chat_id = chat && chat['id'] or raise 'Can not respond_with when chat is not present'
bot.public_send("send_#{type}", params.merge(chat_id: chat_id))
end
# Same as respond_with but also sets `reply_to_message_id`.
def reply_with(type, params)
payload = self.payload
message_id = payload && payload['message_id']
params = params.merge(reply_to_message_id: message_id) if message_id
respond_with(type, params)
end
# Same as respond_with, but for inline queries.
def answer_inline_query(results, params = {})
params = params.merge(
inline_query_id: payload['id'],
results: results,
)
bot.answer_inline_query(params)
end
# Same as respond_with, but for callback queries.
def answer_callback_query(text, params = {})
params = params.merge(
callback_query_id: payload['id'],
text: text,
)
bot.answer_callback_query(params)
end
# Same as respond_with, but for pre checkout queries.
def answer_pre_checkout_query(ok, params = {})
params = params.merge(
pre_checkout_query_id: payload['id'],
ok: ok,
)
bot.answer_pre_checkout_query(params)
end
def answer_shipping_query(ok, params = {})
params = params.merge(
shipping_query_id: payload['id'],
ok: ok,
)
bot.answer_shipping_query(params)
end
# Edit message from callback query.
def edit_message(type, params = {})
params =
if message_id = payload['inline_message_id'] # rubocop:disable Lint/AssignmentInCondition
params.merge(inline_message_id: message_id)
elsif message = payload['message'] # rubocop:disable Lint/AssignmentInCondition
params.merge(chat_id: message['chat']['id'], message_id: message['message_id'])
else
raise 'Can not edit message without `inline_message_id` or `message`'
end
bot.public_send("edit_message_#{type}", params)
end
end
end
end
end