1
0
зеркало из https://github.com/glebtv/telegram-bot.git synced 2026-09-08 11:55:51 +03:00
Этот коммит содержится в:
Max Melentiev
2016-02-22 22:53:59 +06:00
Коммит 37a63f7b23
29 изменённых файлов: 1333 добавлений и 0 удалений

58
lib/telegram/bot/routes_helper.rb Обычный файл
Просмотреть файл

@@ -0,0 +1,58 @@
require 'telegram/bot'
module Telegram
class Bot
module RoutesHelper
class << self
# Returns route name for given bot. Result depends on `Telegram.bots`.
# When there is single bot it returns 'telegram_webhook'.
# When there are it will use bot's key in the `Telegram.bots` as prefix
# (eg. `chat_telegram_webhook`).
def route_name_for_bot(bot)
bots = Telegram.bots
if bots.size != 1
name = bots.invert[bot]
name && "#{name}_telegram_webhook"
end || 'telegram_webhook'
end
end
# # Create routes for all Telegram.bots to use same controller:
# telegram_webhooks TelegramController
#
# # Or pass custom bots usin any of supported config options:
# telegram_webhooks TelegramController,
# bot,
# {token: token, username: username},
# other_bot_token
#
# # Use different controllers for each bot:
# telegram_webhooks bot => TelegramChatController,
# other_bot => TelegramAuctionController
#
# # telegram_webhooks creates named routes. See
# # RoutesHelper.route_name_for_bot for more info.
# # You can override this options or specify others:
# telegram_webhooks TelegramController, as: :my_webhook
# telegram_webhooks bot => [TelegramChatController, as: :chat_webhook],
# other_bot => [TelegramAuctionController,
def telegram_webhooks(controllers, bots = nil, **options)
unless controllers.is_a?(Hash)
bots = bots ? Array.wrap(bots) : Telegram.bots.values
controllers = Hash[bots.map { |x| [x, controllers] }]
end
controllers.each do |bot, controller|
bot = Bot.wrap(bot)
controller, bot_options = controller if controller.is_a?(Array)
params = {
to: Middleware.new(bot, controller),
as: RoutesHelper.route_name_for_bot(bot),
format: false,
}.merge!(options).merge!(bot_options || {})
post("telegram/#{bot.token}", params)
UpdatesPoller.add(bot, controller) if Telegram.bot_poller_mode?
end
end
end
end
end