Java Discord bot每30秒更改一次状态活动jda
我想让机器人每30秒刷新/更改两条不同消息的状态(活动)Java Discord bot每30秒更改一次状态活动jda,java,discord-jda,Java,Discord Jda,我想让机器人每30秒刷新/更改两条不同消息的状态(活动) jda.getPresence().setActivity(Activity.playing("message1")); jda.getPresence().setActivity(Activity.playing("message2")); 基本上,您需要创建一个包含消息和索引的数组,该索引在0和最后一条消息之间交替: String[]messages={“message 1”,“message
jda.getPresence().setActivity(Activity.playing("message1"));
jda.getPresence().setActivity(Activity.playing("message2"));
基本上,您需要创建一个包含消息和索引的数组,该索引在0和最后一条消息之间交替:
String[]messages={“message 1”,“message 2”};
int currentIndex=0;
每30秒,您可以执行以下操作:
jda.getPresence().setActivity(Activity.playing(messages[currentIndex]);
currentIndex=(currentIndex+1)%messages.length;
首先,这个元素(currentIndex数组中的元素)
在此之后,它将1
添加到currentIndex
如果currentIndex
超过数组长度,它将再次将其设置为0
。这是使用
为了每30秒执行一次,您可以使用以下方法之一:
java.util.Timer
执行此操作的旧方法是创建一个计时器
:
//在任何方法之外
私有字符串[]消息={“消息1”,“消息2”};
私有int currentIndex=0;
//运行一次
新建计时器()。计划(新建计时器任务()){
公开募捐{
jda.getPresence().setActivity(Activity.playing(messages[currentIndex]);
currentIndex=(currentIndex+1)%messages.length;
}},0,30_000);
可以在特定延迟后执行TimerTask
(如果希望立即启动,则为0),并在指定时间段后重复执行(延迟和时间段均以毫秒为单位)
java.util.concurrent.ScheduledExecutorService
也可以使用允许更多定制的ScheduledExecutorService
(这种方法被认为比Timer
更好,如Java Concurrency in Practice第6.2.5章所述):
//在任何方法之外
私有字符串[]消息={“消息1”,“消息2”};
私有int currentIndex=0;
private ScheduledExecutorService threadPool=Executors.newSingleThreadScheduledExecutor();
//运行一次
threadPool.schedule with fixedDelay(()->{
jda.getPresence().setActivity(Activity.playing(messages[currentIndex]);
currentIndex=(currentIndex+1)%messages.length;
},0,30,时间单位为秒);
//当您想要停止它时(例如,当机器人停止时)
threadPool.shutdown();
首先,创建一个线程池,允许调度任务
此线程池也可用于其他任务
在本例中,这是使用单个线程完成的。如果要使用多个线程,可以使用Executors.newScheduledThreadPool(numberOfThreads)代码>
在此之后,每隔30秒调用运行提供的Runnable
如果希望在应用程序停止时自动停止而不调用shutdown()
,可以通过指定ThreadFactory
,告诉它使用守护进程线程:
ScheduledExecutorService threadPool=Executors.newSingleThreadScheduledExecutor(r->{
螺纹t=新螺纹(r);
t、 setDaemon(true);
返回t;
});
问题出在哪里?我希望机器人每隔30秒刷新一次状态(活动),每次刷新都会更改为不同的消息。(信息1,信息2)只需使用计时器?你能帮我怎么做吗?我应该在哪里给出信息2?我该怎么办?是否导入了java.util.Timer
?是导入了import java.util.Timer;我忘了TimerTask
。我的编辑工作做得好吗?