Можно ли получать периодические ответы от бота telegram? - PullRequest
0 голосов
/ 04 сентября 2018

Я хочу создать простого бота, который будет периодически отправлять мне напоминания, например, раз в час. Я пытался использовать

TimeUnit.MINUTES.sleep(60);

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

Кстати, мой бот прост, я в основном использую org.telegram.telegrambots.bots.TelegramLongPollingBot и пытался связываться с его onUpdateReceived методом.

Ответы [ 2 ]

0 голосов
/ 05 сентября 2018

Вы можете сделать несколько вещей, но одним простым способом может быть добавление таймера в ваш проект с интервалом в 1 секунду, и на каждом таймере вашего таймера, будет ли секунда равна 60 или нет. если это было послано сообщение, мы делаем то, что вам нужно.

Вы можете использовать код как показано ниже:

int seconds = 0;
private void timer1_Tick(object sender, EventArgs e)
{
   seconds++;
   if(seconds == 60)
   {
    await Bot.SendTextMessageAsync(ChatID, "Text");
    seconds == 0;
   }
}

Обратите внимание, что приведенный мной пример кода написан на C #, вам следует преобразовать его в Java, поскольку вы упомянули, что ваш бот - Telegram Java Bot.

0 голосов
/ 04 сентября 2018

Когда вы делаете такие вещи, как TimeUnit.MINUTES.sleep(60);, вы приостанавливаете текущий поток, выполняющий строку кода. Это, вероятно, ваша основная тема. Таким образом, вы приостановите весь свой бот и, таким образом, сделаете его невосприимчивым к любому взаимодействию, пока поток не выйдет из спящего режима.

Вам следует попробовать использовать cron или запланированные задания. Или создайте другой поток в вашем приложении. Но я думаю, что это лучший выбор дизайна, чтобы пойти на что-то вроде работы cron. Это вызовет событие или вызовет конечную точку вашего бота, чтобы отправить вам обновление, запланированное на определенное время.

...