Невозможно получить долготу и широту в telegram-bot-ruby - PullRequest
0 голосов
/ 25 августа 2018

У меня проблема. Где я должен добавить message.location.latitude команду, чтобы получить местоположение пользователя после получения сообщения с местоположением. Я должен заменить геокод на местоположение пользователя, запрошенное ранее. Спасибо за совет.

require 'open_weather'
require 'telegram/bot'

options_OpenWeather = { units: "metric", APPID: "some text" }
options_Bot = 'some keys'

Telegram::Bot::Client.run(options_Bot) do |bot|

bot.listen do |message|
  kb = [
        Telegram::Bot::Types::KeyboardButton.new(text: 'Show me your location', request_location: true)           
       ]
       markup = Telegram::Bot::Types::ReplyKeyboardMarkup.new(keyboard: kb)

       pp weather = OpenWeather::Current.geocode(53.11, 23.36, options_OpenWeather)
  case message.text
    when '/start'
      bot.api.send_message(chat_id: message.chat.id, text: "Hello, #{message.from.first_name}!")
    when '/end'
      bot.api.send_message(chat_id: message.chat.id, text: "Bye, #{message.from.first_name}!")     
    when '/help'
      bot.api.send_message(chat_id: message.chat.id, text: "Available commands:
      /start
      /end
      /help
      /hi
      /weather
      /test")
    when '/hi' 
      bot.api.send_message(chat_id: message.chat.id, text: 'Hey!', reply_markup: markup)         
     when '/weather'
      bot.api.send_message(chat_id: message.chat.id, text: "Weather in your location: #{weather["main"]["temp"]} celcius, #{weather["main"]["pressure"]} hPa. Humidity is #{weather["main"]["humidity"]}% ")                    
    when '/test'
      bot.api.send_message(chat_id: message.chat.id, text:"I'm testing command")
    else
      bot.api.send_message(chat_id: message.chat.id, text: "I don't understand you ?")
    end
  end
end

1 Ответ

0 голосов
/ 24 февраля 2019

Я бы добавил это перед вашим case и переместил бы всю эту обработку погоды в какую-то отдельную функцию.Но я упал, я не отвечаю на ваш вопрос и пишу здесь некоторые очевидные вещи.Вы можете посмотреть на интерфейс моего бота .Это довольно старая и грязная реализация, которую я сделал давным-давно, но она работает.Возможно, вы можете также выполнить некоторое кэширование с помощью redis, если вы хотите, чтобы ваши пользователи сохраняли местоположения и просто отправляли команды после того, как они установили свое местоположение в первый раз.

def(lat, lng)
  return OpenWeather::Current.geocode(lat, lng, options_OpenWeather)
  ...
end

if message.location != nil
  weather = handle_weather_from_location(
    message.location.lattitude
    message.location.longitude
  )
  bot.api.send_message(chat_id: message.chat.id, text: "Weather in your location: #{weather["main"]["temp"]} celcius, #{weather["main"]["pressure"]} hPa. Humidity is #{weather["main"]["humidity"]}% ")                    
end
...