Module: Telegram::Bot::RoutesHelper

Defined in:
lib/telegram/bot/routes_helper.rb

Class Method Summary collapse

Instance Method Summary collapse

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, **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