Module: Telegram::Bot::RoutesHelper
- Defined in:
- lib/telegram/bot/routes_helper.rb
Class Method Summary collapse
-
.route_name_for_bot(bot) ⇒ Object
Returns route name for given bot.
Instance Method Summary collapse
-
#telegram_webhooks(controllers, bots = nil, **options) ⇒ Object
# Create routes for all Telegram.bots to use same controller: telegram_webhooks TelegramController.
Class Method Details
.route_name_for_bot(bot) ⇒ Object
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`).
11 12 13 14 15 16 17 |
# File 'lib/telegram/bot/routes_helper.rb', line 11 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 |
Instance Method Details
#telegram_webhooks(controllers, bots = nil, **options) ⇒ Object
# 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,
39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 |
# File 'lib/telegram/bot/routes_helper.rb', line 39 def telegram_webhooks(controllers, bots = nil, **) 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, = controller if controller.is_a?(Array) params = { to: Middleware.new(bot, controller), as: RoutesHelper.route_name_for_bot(bot), format: false, }.merge!().merge!( || {}) post("telegram/#{bot.token}", params) UpdatesPoller.add(bot, controller) if Telegram.bot_poller_mode? end end |