如何在JDA中的不同游戏状态消息之间循环?

时间:2019-08-06 20:22:28

标签: java discord discord-jda

我正在尝试让机器人显示它的服务器数量,每20秒更新一次!

我试图在等待事件发生后将其放入循环:

public void onReady(ReadyEvent event) {

while (true) {

TimeUnit.SECONDS.sleep(20)
event.JDA().getPresence().setGame(Game.watching(event.getJDA().getGuilds().size() + "servers"));
}
}

这成功显示了它加入的服务器数量,但是这阻止了其他任何代码的运行。

那么如何在不忽略程序其余部分的情况下做到这一点呢?

1 个答案:

答案 0 :(得分:0)

您应该尝试设置时间间隔并对其进行更新

ScheduledExecutorService executor = Executors.newScheduledThreadPool(1);
Runnable task = () -> {
event.JDA().getPresence().setGame(Game.watching(event.getJDA().getGuilds().size() + "servers"));
};

executor.scheduleWithFixedDelay(task, 0, 20,TimeUnit.SECONDS);

或使用计时器

Timer timer = new Timer();
timer.schedule(new TimerTask() {

@Override
public void run() {   
event.JDA().getPresence().setGame(Game.watching(event.getJDA().getGuilds().size() + "servers"));
}
}, 0, 20000 );

将其设置在while(true)内会使它停在那里,因为它会在主线程中断时创建一个新线程。