如何制作基于时间的公告机器人

时间:2019-10-22 20:35:20

标签: java maven discord-jda

我想制作一个仅在每周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());
    }
}

1 个答案:

答案 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才能从那里获取时间。