是否有可能从电报机器人获得定期回复?

问题描述 投票:2回答:2

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

TimeUnit.MINUTES.sleep(60);

但它使我的简单机器人在此期间对任何传入消息都没有响应。我找不到任何这样的功能的例子,但我相信这是可能的,而不是那么难。

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

java telegram-bot
2个回答
3
投票

当您执行TimeUnit.MINUTES.sleep(60);之类的操作时,您将暂停运行代码行的当前线程。这可能是你的主线。因此,您将暂停整个机器人,从而使其对任何交互都没有响应,直到线程被唤醒。

您应该尝试使用cron或预定作业。或者在应用程序中创建另一个线程。但我认为这是一个更好的设计选择,可以选择像cron这样的工作。这将触发事件或调用机器人的端点,以便在特定时间向您发送更新。


0
投票

你可以做几件事,但一个简单的方法就是可以在你的项目中以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。

© www.soinside.com 2019 - 2024. All rights reserved.