module Telegram::Bot::RoutesHelper

Public Class Methods

route_name_for_bot(bot) click to toggle source

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`).

# File lib/telegram/bot/routes_helper.rb, line 15
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
token_hash(token) click to toggle source
# File lib/telegram/bot/routes_helper.rb, line 23
def token_hash(token)
  Base64.urlsafe_encode64(OpenSSL::Digest::SHA1.digest(token), padding: false)
end

Public Instance Methods

telegram_webhook(controller, bot = :default, path: nil, **options) click to toggle source

Define route which processes requests using given controller and bot.

telegram_webhook TelegramController, bot

telegram_webhook TelegramController
# same as:
telegram_webhook TelegramController, :default

# pass additional options
telegram_webhook TelegramController, :default, as: :custom_route_name

# Default path is generated using hashed bot token. Override it using:
telegram_webhook TelegramController, :default, path: 'top/secret'
# File lib/telegram/bot/routes_helper.rb, line 41
def telegram_webhook(controller, bot = :default, path: nil, **options)
  bot = Client.wrap(bot)
  params = {
    to: Middleware.new(bot, controller),
    as: RoutesHelper.route_name_for_bot(bot),
    format: false,
  }.merge!(options)
  post(path || "telegram/#{bot.token && RoutesHelper.token_hash(bot.token)}", params)
  UpdatesPoller.add(bot, controller) if Telegram.bot_poller_mode?
end