Бот Telegram отправляет сообщение в определенный час в ruby

Я бы создал бота телеграммы на рубине, который отправляет сообщение в определенный час, который я решу. Например. Сейчас 8 утра и бот отправляет сообщение "Доброе утро". Конечно, каждое утро в одно и то же время. Это может быть своего рода напоминанием. Я могу получить время таким образом:

time = Time.now.strftime("%H:%M")

И я знаю, что для отправки сообщения я могу использовать Telegram API, например:

bot.api.send_message(chat_id: message.chat.id, text: "Hi")

Я использую этот код, когда взаимодействую между ботом и пользователем. Например:

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

  bot.listen do |message|
    case message.text
    when "hi", 'hi@myBot'
      bot.api.send_message(chat_id: message.chat.id, text: "Hi, #{message.from.first_name}")
    end
....
....

но я не знаю, как сделать то, что мне нужно, потому что, если я хочу отправить сообщение, мне нужно chat.id, и в этом случае я получаю его только тогда, когда взаимодействую с пользователем. Итак, возможно ли отправить сообщение, например, в 8 утра без какого-либо взаимодействия с пользователем?


person Atlas91    schedule 20.07.2018    source источник
comment
Единственный способ отправить сообщение без взаимодействия — это жестко запрограммировать идентификатор чата. Вы хотите отправить сообщение в определенный чат?   -  person yzalavin    schedule 20.07.2018
comment
Бот может быть во многих группах. Возможно, я могу каким-то образом сохранить идентификатор чата, а затем использовать его, но я не знаю, правильно ли это. У вас есть идеи, как решить мою проблему?   -  person Atlas91    schedule 20.07.2018
comment
У вас есть два варианта: сохранить идентификаторы и отправить сообщение с помощью задачи cron или создать работника после каждого полученного сообщения. Оба они требуют взаимодействия с пользователем.   -  person yzalavin    schedule 20.07.2018
comment
Значит, в ближайшее время я не могу делать то, что хочу?   -  person Atlas91    schedule 20.07.2018


Ответы (1)


Используйте гем crono для выполнения асинхронных задач.

Crono.perform(YourJob).every 1.day, at: {hour: 8, min: 00}

person jedi    schedule 20.07.2018
comment
Я никогда не использовал crono, и это мой первый эксперимент с рубином. Не могли бы вы объяснить, как я могу его использовать? Большое спасибо - person Atlas91; 20.07.2018
comment
Просто зайдите в репозиторий gem git, на который я ссылался выше. Использование драгоценного камня подробно описано там. - person jedi; 20.07.2018
comment
Я помог тебе с твоей проблемой? Вы можете принять мой ответ? @End.Game - person jedi; 25.07.2018