1
0
зеркало из https://github.com/glebtv/telegram-bot.git synced 2026-09-03 17:55:52 +03:00

Update to Bot API 5.0, add rake tasks for deleteWebhook, close & logOut

Этот коммит содержится в:
Max Melentiev
2020-11-27 09:33:39 +00:00
родитель d173443c56
Коммит e178f808b6
9 изменённых файлов: 163 добавлений и 11 удалений

Просмотреть файл

@@ -14,15 +14,22 @@ namespace :telegram do
desc 'Set webhook urls for all bots'
task set_webhook: :environment do
routes = Rails.application.routes.url_helpers
cert_file = ENV['CERT']
cert = File.open(cert_file) if cert_file
Telegram.bots.each do |key, bot|
route_name = Telegram::Bot::RoutesHelper.route_name_for_bot(bot)
url = routes.send("#{route_name}_url")
puts "Setting webhook for #{key}..."
bot.async(false) { bot.set_webhook(url: url, certificate: cert) }
end
Telegram::Bot::Tasks.set_webhook
end
desc 'Delete webhooks for all or specific BOT'
task :delete_webhook do
Telegram::Bot::Tasks.delete_webhook
end
desc 'Perform logOut command for all or specific BOT'
task :log_out do
Telegram::Bot::Tasks.log_out
end
desc 'Perform `close` command for all or specific BOT'
task :close do
Telegram::Bot::Tasks.close
end
end
end

Просмотреть файл

@@ -28,6 +28,7 @@ module Telegram
autoload :Initializers, 'telegram/bot/initializers'
autoload :Middleware, 'telegram/bot/middleware'
autoload :RSpec, 'telegram/bot/rspec'
autoload :Tasks, 'telegram/bot/tasks'
autoload :UpdatesController, 'telegram/bot/updates_controller'
autoload :UpdatesPoller, 'telegram/bot/updates_poller'
end

Просмотреть файл

@@ -1,5 +1,5 @@
# Generated with bin/fetch-telegram-methods
# Bot API 4.7
# Bot API 5.0
getUpdates
setWebhook
@@ -7,8 +7,11 @@ deleteWebhook
getWebhookInfo
getMe
logOut
close
sendMessage
forwardMessage
copyMessage
sendPhoto
sendAudio
sendDocument
@@ -40,6 +43,7 @@ setChatTitle
setChatDescription
pinChatMessage
unpinChatMessage
unpinAllChatMessages
leaveChat
getChat
getChatAdministrators

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

@@ -0,0 +1,63 @@
# frozen_string_literal: true
module Telegram
module Bot
module Tasks
extend self
def set_webhook
routes = Rails.application.routes.url_helpers
cert_file = ENV['CERT']
cert = File.open(cert_file) if cert_file
each_bot do |key, bot|
route_name = RoutesHelper.route_name_for_bot(bot)
url = routes.send("#{route_name}_url")
say("Setting webhook for #{key}...")
bot.set_webhook(
url: url,
certificate: cert,
ip_address: ENV['IP_ADDRESS'],
drop_pending_updates: drop_pending_updates,
)
end
end
def delete_webhook
each_bot do |key, bot|
say("Deleting webhook for #{key}...")
bot.delete_webhook(drop_pending_updates: drop_pending_updates)
end
end
def log_out
each_bot do |key, bot|
say("Logging out #{key}...")
bot.log_out
end
end
def close
each_bot do |key, bot|
say("Closing #{key}...")
bot.close
end
end
private
def say(text)
puts(text) unless Rails.env.test? # rubocop:disable Rails/Output
end
def each_bot(&block)
id = ENV['BOT'].try!(:to_sym)
bots = id ? {id => Client.by_id(id)} : Telegram.bots
bots.each { |key, bot| bot.async(false) { block[key, bot] } }
end
def drop_pending_updates
ENV['DROP_PENDING_UPDATES'].try!(:downcase) == 'true'
end
end
end
end