是否可以从电报Bot获得定期响应?

时间:2018-09-04 10:01:17

标签: java telegram-bot

我想制作一个简单的机器人,该机器人会定期向我发送一些提醒,例如每小时一次。 我尝试使用

TimeUnit.MINUTES.sleep(60);

但是它使我的简单漫游器在此期间对任何传入消息不响应。 我找不到此类功能的任何示例,但我相信这是可能的,而且并非难事。

顺便说一句,我的机器人很简单,我基本上使用 org.telegram.telegrambots.bots.TelegramLongPollingBot 并尝试弄乱其 onUpdateReceived 方法。

2 个答案:

答案 0 :(得分:3)

当您执行诸如TimeUnit.MINUTES.sleep(60);之类的操作时,您将挂起当前运行代码行的线程。这可能是您的主线程。因此,您将暂停整个bot,从而使其对任何交互都无响应,直到线程从睡眠中唤醒为止。

您应该尝试使用cron或计划的作业。或在您的应用程序中创建另一个线程。但是我认为,进行像cron这样的工作是一个更好的设计选择。这将触发一个事件或调用您的漫游器的终结点,以向您发送在特定时间安排的更新。

答案 1 :(得分:0)

您可以做几件事,但是一种简单的方法可以是在项目中添加一个计时器,间隔为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,因为您提到的是bot是Telegram Java Bot。