Module: Telegram::Bot::RoutesHelper

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

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.escape_token(token) ⇒ Object

Replaces colon with underscore so rails don’t treat it as route parameter.



22
23
24
# File 'lib/telegram/bot/routes_helper.rb', line 22

def escape_token(token)
  token && token.tr(':', '_')
end

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



12
13
14
15
16
17
18
# File 'lib/telegram/bot/routes_helper.rb', line 12

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_webhook(controller, bot = :default, **options) ⇒ Object

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


37
38
39
40
41
42
43
44
45
46
# File 'lib/telegram/bot/routes_helper.rb', line 37

def telegram_webhook(controller, bot = :default, **options)
  bot = Client.wrap(bot)
  params = {
    to: Middleware.new(bot, controller),
    as: RoutesHelper.route_name_for_bot(bot),
    format: false,
  }.merge!(options)
  post("telegram/#{RoutesHelper.escape_token bot.token}", params)
  UpdatesPoller.add(bot, controller) if Telegram.bot_poller_mode?
end