namespace :eureka do
namespace :tg do desc 'Telegram long polling' task :listen do token = ENV.fetch('TG_TOKEN') resolver_class = ENV.fetch('RESOLVER').constantize offset = ENV.fetch('OFFSET', nil) limit = ENV.fetch('LIMIT', 100) timeout = ENV.fetch('TIMEOUT', 10) EurekaBot::Tg.client = EurekaBot::Tg::Client.new(token: token) EurekaBot.logger.info "starting getting #getUpdates for #{EurekaBot::Tg.client.make_request('getMe').to_json}" loop do EurekaBot::Tg.client.make_request('getUpdates', payload: {offset: offset, limit: limit, timeout: timeout}.compact.to_json).each do |update| EurekaBot::Job::Input.perform_later(resolver_class.to_s, update) offset = offset ? [offset, update['update_id'] + 1].max : update['update_id'] + 1 end EurekaBot.logger.info '#ping' end end desc 'Get/Set webhook' task :webhook do token = ENV.fetch('TG_TOKEN') url = ENV.fetch('URL', nil) max_connections = ENV.fetch('max_connections', nil) client = EurekaBot::Tg::Client.new(token: token) if url.present? EurekaBot.logger.info( { result: client.make_request( 'setWebhook', payload: { url: url, max_connections: max_connections }.compact.to_json ) }.to_json ) end EurekaBot.logger.info client.make_request('getWebhookInfo').to_json end end
end