我想制作一个简单的机器人,它会定期向我发送一些提醒,比如每小时一次。我试过用
TimeUnit.MINUTES.sleep(60);
但它使我的简单机器人在此期间对任何传入消息都没有响应。我找不到任何这样的功能的例子,但我相信这是可能的,而不是那么难。
顺便说一句,我的机器人很简单,我基本上使用org.telegram.telegrambots.bots.TelegramLongPollingBot并试图弄乱它的onUpdateReceived方法。
当您执行TimeUnit.MINUTES.sleep(60);
之类的操作时,您将暂停运行代码行的当前线程。这可能是你的主线。因此,您将暂停整个机器人,从而使其对任何交互都没有响应,直到线程被唤醒。
您应该尝试使用cron或预定作业。或者在应用程序中创建另一个线程。但我认为这是一个更好的设计选择,可以选择像cron这样的工作。这将触发事件或调用机器人的端点,以便在特定时间向您发送更新。
你可以做几件事,但一个简单的方法就是可以在你的项目中以1秒的间隔添加一个Timer,并在你的计时器的每个勾选检查中,第二个等于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。