Remove redundant API command fetcher
All checks were successful
continuous-integration/drone/push Build is passing
All checks were successful
continuous-integration/drone/push Build is passing
We have our own command listener now, so we don't need to rely on Discord's slow API.
This commit is contained in:
parent
526880e1f1
commit
244e8ace76
@ -1,18 +1,15 @@
|
||||
package wtf.beatrice.hidekobot;
|
||||
|
||||
import net.dv8tion.jda.api.interactions.commands.Command;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import wtf.beatrice.hidekobot.datasource.ConfigurationSource;
|
||||
import wtf.beatrice.hidekobot.datasource.DatabaseSource;
|
||||
import wtf.beatrice.hidekobot.listeners.MessageLogger;
|
||||
import wtf.beatrice.hidekobot.listeners.SlashCommandListener;
|
||||
import wtf.beatrice.hidekobot.util.Logger;
|
||||
|
||||
import java.awt.*;
|
||||
import java.lang.reflect.Field;
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Comparator;
|
||||
import java.util.List;
|
||||
|
||||
public class Cache
|
||||
{
|
||||
@ -36,7 +33,8 @@ public class Cache
|
||||
|
||||
private static final String botVersion = "0.2.0-slash"; // we should probably find a way to make this consistent with Maven
|
||||
private static final String botName = "HidekoBot";
|
||||
private static List<Command> registeredCommands = new ArrayList<>();
|
||||
|
||||
private static SlashCommandListener slashCommandListener = null;
|
||||
|
||||
private final static String defaultInviteLink =
|
||||
"https://discord.com/api/oauth2/authorize?client_id=%userid%&scope=bot+applications.commands&permissions=8";
|
||||
@ -202,32 +200,14 @@ public class Cache
|
||||
return color == null ? defaultColor : color;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the list of registered commands. They will be sorted alphabetically.
|
||||
*
|
||||
* @param commands a list of registered commands.
|
||||
*/
|
||||
public static void setRegisteredCommands(List<Command> commands)
|
||||
|
||||
public static void setSlashCommandListener(SlashCommandListener commandListener)
|
||||
{
|
||||
|
||||
// sort alphabetically by field getName()
|
||||
List<Command> tempList = commands
|
||||
.stream()
|
||||
.sorted(Comparator.comparing(Command::getName))
|
||||
.toList();
|
||||
|
||||
registeredCommands = new ArrayList<>(tempList);
|
||||
slashCommandListener = commandListener;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get a list of all bot registered commands, sorted alphabetically.
|
||||
*
|
||||
* @return a copy of the List.
|
||||
*/
|
||||
public static List<Command> getRegisteredCommands()
|
||||
{
|
||||
return new ArrayList<>(registeredCommands);
|
||||
}
|
||||
public static SlashCommandListener getSlashCommandListener() { return slashCommandListener; }
|
||||
|
||||
/**
|
||||
* Set the bot's startup time. Generally only used at boot time.
|
||||
|
@ -13,7 +13,6 @@ import wtf.beatrice.hidekobot.listeners.ButtonInteractionListener;
|
||||
import wtf.beatrice.hidekobot.listeners.MessageListener;
|
||||
import wtf.beatrice.hidekobot.listeners.SlashCommandCompleter;
|
||||
import wtf.beatrice.hidekobot.listeners.SlashCommandListener;
|
||||
import wtf.beatrice.hidekobot.runnables.CommandsUpdateTask;
|
||||
import wtf.beatrice.hidekobot.runnables.ExpiredMessageTask;
|
||||
import wtf.beatrice.hidekobot.runnables.HeartBeatTask;
|
||||
import wtf.beatrice.hidekobot.util.Logger;
|
||||
@ -109,6 +108,7 @@ public class HidekoBot
|
||||
slashCommandListener.registerCommand(new InviteCommand());
|
||||
slashCommandListener.registerCommand(new PingCommand());
|
||||
slashCommandListener.registerCommand(new SayCommand());
|
||||
Cache.setSlashCommandListener(slashCommandListener);
|
||||
|
||||
// register listeners
|
||||
jda.addEventListener(new MessageListener());
|
||||
@ -145,8 +145,6 @@ public class HidekoBot
|
||||
ScheduledExecutorService scheduler = Executors.newSingleThreadScheduledExecutor(); // todo: try-with-resources
|
||||
ExpiredMessageTask expiredMessageTask = new ExpiredMessageTask();
|
||||
scheduler.scheduleAtFixedRate(expiredMessageTask, 5, 5, TimeUnit.SECONDS); //every 5 seconds
|
||||
CommandsUpdateTask commandsUpdateTask = new CommandsUpdateTask();
|
||||
scheduler.scheduleAtFixedRate(commandsUpdateTask, 10, 300, TimeUnit.SECONDS); //every 5 minutes
|
||||
HeartBeatTask heartBeatTask = new HeartBeatTask();
|
||||
scheduler.scheduleAtFixedRate(heartBeatTask, 10, 30, TimeUnit.SECONDS); //every 30 seconds
|
||||
|
||||
|
@ -2,7 +2,6 @@ package wtf.beatrice.hidekobot.commands.slash;
|
||||
|
||||
import net.dv8tion.jda.api.EmbedBuilder;
|
||||
import net.dv8tion.jda.api.events.interaction.command.SlashCommandInteractionEvent;
|
||||
import net.dv8tion.jda.api.interactions.commands.Command;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import wtf.beatrice.hidekobot.Cache;
|
||||
import wtf.beatrice.hidekobot.HidekoBot;
|
||||
@ -27,7 +26,7 @@ public class BotInfoCommand implements SlashCommand
|
||||
// defer reply because this might take a moment
|
||||
event.deferReply().queue();
|
||||
|
||||
List<Command> registeredCommands = Cache.getRegisteredCommands();
|
||||
List<SlashCommand> registeredCommands = Cache.getSlashCommandListener().getRegisteredCommands();
|
||||
|
||||
EmbedBuilder embedBuilder = new EmbedBuilder();
|
||||
|
||||
@ -51,8 +50,8 @@ public class BotInfoCommand implements SlashCommand
|
||||
commandsListBuilder.append(registeredCommands.size()).append( " total - ");
|
||||
for(int i = 0; i < registeredCommands.size(); i++)
|
||||
{
|
||||
Command cmd = registeredCommands.get(i);
|
||||
commandsListBuilder.append("`" + cmd.getName() + "`");
|
||||
SlashCommand cmd = registeredCommands.get(i);
|
||||
commandsListBuilder.append("`").append(cmd.getCommandName()).append("`");
|
||||
|
||||
if(i + 1 != registeredCommands.size()) // don't add comma in last iteration
|
||||
{
|
||||
|
@ -5,12 +5,13 @@ import net.dv8tion.jda.api.hooks.ListenerAdapter;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import wtf.beatrice.hidekobot.objects.SlashCommand;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.LinkedList;
|
||||
import java.util.TreeMap;
|
||||
|
||||
public class SlashCommandListener extends ListenerAdapter
|
||||
{
|
||||
|
||||
HashMap<String, SlashCommand> registeredCommands = new HashMap<>();
|
||||
TreeMap<String, SlashCommand> registeredCommands = new TreeMap<>();
|
||||
|
||||
public void registerCommand(SlashCommand command)
|
||||
{
|
||||
@ -18,6 +19,14 @@ public class SlashCommandListener extends ListenerAdapter
|
||||
registeredCommands.put(command.getCommandName(), command);
|
||||
}
|
||||
|
||||
public SlashCommand getRegisteredCommand(String label)
|
||||
{
|
||||
return registeredCommands.get(label);
|
||||
}
|
||||
|
||||
public LinkedList<SlashCommand> getRegisteredCommands()
|
||||
{ return new LinkedList<>(registeredCommands.values()); }
|
||||
|
||||
@Override
|
||||
public void onSlashCommandInteraction(@NotNull SlashCommandInteractionEvent event)
|
||||
{
|
||||
|
@ -1,25 +0,0 @@
|
||||
package wtf.beatrice.hidekobot.runnables;
|
||||
|
||||
import net.dv8tion.jda.api.JDA;
|
||||
import wtf.beatrice.hidekobot.Cache;
|
||||
import wtf.beatrice.hidekobot.HidekoBot;
|
||||
import wtf.beatrice.hidekobot.util.Logger;
|
||||
|
||||
public class CommandsUpdateTask implements Runnable {
|
||||
|
||||
private final Logger logger;
|
||||
|
||||
public CommandsUpdateTask()
|
||||
{
|
||||
logger = new Logger(getClass());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
if(Cache.isVerbose()) logger.log("Refreshing commands cache...");
|
||||
JDA instance = HidekoBot.getAPI();
|
||||
if(instance == null) return;
|
||||
Cache.setRegisteredCommands(instance.retrieveCommands().complete());
|
||||
if(Cache.isVerbose()) logger.log("Commands cache refreshed!");
|
||||
}
|
||||
}
|
@ -7,7 +7,6 @@ import net.dv8tion.jda.api.interactions.commands.DefaultMemberPermissions;
|
||||
import net.dv8tion.jda.api.interactions.commands.OptionType;
|
||||
import net.dv8tion.jda.api.interactions.commands.build.CommandData;
|
||||
import net.dv8tion.jda.api.interactions.commands.build.Commands;
|
||||
import wtf.beatrice.hidekobot.Cache;
|
||||
import wtf.beatrice.hidekobot.HidekoBot;
|
||||
import wtf.beatrice.hidekobot.listeners.MessageListener;
|
||||
|
||||
@ -123,11 +122,5 @@ public class SlashCommandUtil
|
||||
jdaInstance.updateCommands().addCommands(allCommands).queue();
|
||||
logger.log("Commands updated. New total: " + allCommands.size() + ".");
|
||||
}
|
||||
|
||||
// cache the registered commands.
|
||||
// note that if this is the first time the bot runs after updating commands,
|
||||
// this will probably still return the previous configuration because the discord api
|
||||
// needs to propagate. this is why we also set up a command updater task (ExpiredMessageTask).
|
||||
Cache.setRegisteredCommands(jdaInstance.retrieveCommands().complete());
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user