我想制作一个仅在每周2天的固定时间在固定频道中说一些话的机器人,但是我不确定该怎么做,我对此很陌生,所以请保持谦虚
我试图设置一个while循环来不断检查时间,如果它与某个时间匹配,它可以说是公告,但是API似乎坚持认为,无论是否存在其他可能的变量(例如我的时间变量),都存在不一致的地方事件来做任何事情。
请帮助!
这是我放弃的“ mondayevent.java”类。
package events;
import java.awt.*;
import java.util.*;
import java.time.*;
import java.time.format.DateTimeFormatter;
import net.dv8tion.jda.api.entities.TextChannel;
import net.dv8tion.jda.api.events.ReadyEvent;
import net.dv8tion.jda.api.events.message.guild.GuildMessageReceivedEvent;
import net.dv8tion.jda.api.hooks.ListenerAdapter;
public class mondayevent extends ListenerAdapter {
public void onReadyEvent(ReadyEvent event) {
while(true) {
DayOfWeek dow = LocalDate.now().getDayOfWeek();
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("HH:mm:ss");
LocalDateTime now = LocalDateTime.now();
if(dow.equals("sunday") || dow.equals("Sunday")){
onGuildReady();
}
}
}
}
//Announce "Hey! Just a reminder that there's a Business team meeting today directly following school in the STEM Lab! @Business Team "
//TC:meeting-announcements(50905546**rest of ID**)
这是我尝试在星期一事件类中实现的“ time.java”类
import java.time.DayOfWeek;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
public class time {
public DayOfWeek dow = LocalDate.now().getDayOfWeek();
public DateTimeFormatter dtf = DateTimeFormatter.ofPattern("HH:mm:ss");
public LocalDateTime now = LocalDateTime.now();
}
这是我的机器人主类:
import events.mondayevent;
import net.dv8tion.jda.api.JDA;
import net.dv8tion.jda.api.JDABuilder;
public class botmain {
public static void main(String args[]) throws Exception {
JDA jda = new JDABuilder("***token here***").build();
jda.addEventListener(new mondayevent());
}
}
答案 0 :(得分:0)
检查docu
。根据您的事件是否需要取消,您应该使用submitAfter。至于调度的起点:机器人连接时,您应该收到一个JDA事件。
要发送不带事件的邮件,请选中this answer
或此link
(下面复制的示例):
给出了一个JDA实例..
JDA jda = ...
jda.getTextChannelById(...)
jda.getPrivateChannelById(...)
jda.getUserById(...).openPrivateChannel().queue(channel -> ...)
jda.getGuildById(...).getTextChannelById(...)
jda.getGuildById(...).getTextChannels()
jda.getGuildById(...).getMemberById(...).getUser().openPrivateChannel().queue(channel -> ...)
//For Clients
jda.asClient().getGroupById(...)
jda.asClient().getFriendById(...).getUser().openPrivateChannel().queue(channel -> ...)
我看到的问题是我希望在每周的某个特定时间重复一次,比如说在周日的下午6点,然后每周重复一次,而不仅仅是一次,我想知道如何通过时间设置在其中实现时间我有。
如果您不想使用jda
进行计划,则始终可以使用ScheduledExecutorService
自己进行。您可能需要阅读此tutorial
。
此外,我该如何检查时间是否正确
您的机器人正在某个地方运行,因此您要么必须信任当地时间,要么访问某种ntp server
才能从那里获取时间。