Как сделать объявление на основе времени бота - PullRequest
0 голосов
/ 22 октября 2019

Я хотел бы создать бота, который просто говорит что-то на заданном канале в установленное время 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 голосов
/ 23 октября 2019

Отметьте 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, чтобы узнать время оттуда.

...