(wip) migrate commands to components
All checks were successful
continuous-integration/drone/push Build is passing

This commit is contained in:
2025-09-06 22:14:44 +02:00
parent eafa80f1d2
commit 1f2bafa7f8
35 changed files with 359 additions and 174 deletions

View File

@@ -13,19 +13,6 @@ import org.springframework.context.ConfigurableApplicationContext;
import wtf.beatrice.hidekobot.commands.completer.ProfileImageCommandCompleter;
import wtf.beatrice.hidekobot.commands.message.*;
import wtf.beatrice.hidekobot.commands.slash.*;
import wtf.beatrice.hidekobot.commands.slash.SlashBanCommand;
import wtf.beatrice.hidekobot.commands.slash.SlashBannerCommand;
import wtf.beatrice.hidekobot.commands.slash.SlashClearCommand;
import wtf.beatrice.hidekobot.commands.slash.SlashCoinFlipCommand;
import wtf.beatrice.hidekobot.commands.slash.SlashDiceRollCommand;
import wtf.beatrice.hidekobot.commands.slash.SlashInviteCommand;
import wtf.beatrice.hidekobot.commands.slash.SlashKickCommand;
import wtf.beatrice.hidekobot.commands.slash.SlashLoveCalculatorCommand;
import wtf.beatrice.hidekobot.commands.slash.SlashMagicBallCommand;
import wtf.beatrice.hidekobot.commands.slash.SlashSayCommand;
import wtf.beatrice.hidekobot.commands.slash.SlashTimeoutCommand;
import wtf.beatrice.hidekobot.commands.slash.SlashTriviaCommand;
import wtf.beatrice.hidekobot.commands.slash.SlashUrbanDictionaryCommand;
import wtf.beatrice.hidekobot.datasources.ConfigurationSource;
import wtf.beatrice.hidekobot.datasources.PropertiesSource;
import wtf.beatrice.hidekobot.listeners.*;
@@ -163,48 +150,48 @@ public class HidekoBot
MessageCommandListener messageCommandListener = context.getBean(MessageCommandListener.class);
ButtonInteractionListener buttonInteractionListener = context.getBean(ButtonInteractionListener.class);
SelectMenuInteractionListener selectMenuInteractionListener = context.getBean(SelectMenuInteractionListener.class);
SlashAvatarCommand slashAvatarCommand = new SlashAvatarCommand();
SlashAvatarCommand slashAvatarCommand = context.getBean(SlashAvatarCommand.class);
ProfileImageCommandCompleter avatarCommandCompleter = new ProfileImageCommandCompleter(slashAvatarCommand);
slashCommandListener.registerCommand(slashAvatarCommand);
slashCommandCompletionListener.registerCommandCompleter(avatarCommandCompleter);
slashCommandListener.registerCommand(new SlashBanCommand());
SlashBannerCommand slashBannerCommand = new SlashBannerCommand();
slashCommandListener.registerCommand(context.getBean(SlashBanCommand.class));
SlashBannerCommand slashBannerCommand = context.getBean(SlashBannerCommand.class);
ProfileImageCommandCompleter bannerCommandCompleter = new ProfileImageCommandCompleter(slashBannerCommand);
slashCommandListener.registerCommand(slashBannerCommand);
slashCommandCompletionListener.registerCommandCompleter(bannerCommandCompleter);
slashCommandListener.registerCommand(context.getBean(SlashBotInfoCommand.class));
slashCommandListener.registerCommand(new SlashClearCommand());
slashCommandListener.registerCommand(new SlashCoinFlipCommand());
slashCommandListener.registerCommand(new SlashDiceRollCommand());
slashCommandListener.registerCommand(context.getBean(SlashClearCommand.class));
slashCommandListener.registerCommand(context.getBean(SlashCoinFlipCommand.class));
slashCommandListener.registerCommand(context.getBean(SlashDiceRollCommand.class));
slashCommandListener.registerCommand(new SlashDieCommand());
slashCommandListener.registerCommand(new SlashHelpCommand());
slashCommandListener.registerCommand(new SlashInviteCommand());
slashCommandListener.registerCommand(new SlashKickCommand());
slashCommandListener.registerCommand(new SlashLoveCalculatorCommand());
slashCommandListener.registerCommand(new SlashMagicBallCommand());
slashCommandListener.registerCommand(context.getBean(SlashInviteCommand.class));
slashCommandListener.registerCommand(context.getBean(SlashKickCommand.class));
slashCommandListener.registerCommand(context.getBean(SlashLoveCalculatorCommand.class));
slashCommandListener.registerCommand(context.getBean(SlashMagicBallCommand.class));
slashCommandListener.registerCommand(new SlashPingCommand());
slashCommandListener.registerCommand(new SlashSayCommand());
slashCommandListener.registerCommand(new SlashTimeoutCommand());
slashCommandListener.registerCommand(context.getBean(SlashSayCommand.class));
slashCommandListener.registerCommand(context.getBean(SlashTimeoutCommand.class));
slashCommandListener.registerCommand(new SlashTriviaCommand());
slashCommandListener.registerCommand(new SlashUrbanDictionaryCommand());
// register message commands
messageCommandListener.registerCommand(new MessageHelloCommand());
messageCommandListener.registerCommand(context.getBean(MessageAliasCommand.class));
messageCommandListener.registerCommand(new MessageAvatarCommand());
messageCommandListener.registerCommand(new MessageBanCommand());
messageCommandListener.registerCommand(new MessageBannerCommand());
messageCommandListener.registerCommand(context.getBean(MessageAvatarCommand.class));
messageCommandListener.registerCommand(context.getBean(MessageBanCommand.class));
messageCommandListener.registerCommand(context.getBean(MessageBannerCommand.class));
messageCommandListener.registerCommand(context.getBean(MessageBotInfoCommand.class));
messageCommandListener.registerCommand(new MessageCoinFlipCommand());
messageCommandListener.registerCommand(new MessageClearCommand());
messageCommandListener.registerCommand(new MessageDiceRollCommand());
messageCommandListener.registerCommand(context.getBean(MessageCoinFlipCommand.class));
messageCommandListener.registerCommand(context.getBean(MessageClearCommand.class));
messageCommandListener.registerCommand(context.getBean(MessageDiceRollCommand.class));
messageCommandListener.registerCommand(context.getBean(MessageHelpCommand.class));
messageCommandListener.registerCommand(new MessageInviteCommand());
messageCommandListener.registerCommand(new MessageKickCommand());
messageCommandListener.registerCommand(new MessageLoveCalculatorCommand());
messageCommandListener.registerCommand(new MessageMagicBallCommand());
messageCommandListener.registerCommand(new MessageSayCommand());
messageCommandListener.registerCommand(new MessageTimeoutCommand());
messageCommandListener.registerCommand(context.getBean(MessageInviteCommand.class));
messageCommandListener.registerCommand(context.getBean(MessageKickCommand.class));
messageCommandListener.registerCommand(context.getBean(MessageLoveCalculatorCommand.class));
messageCommandListener.registerCommand(context.getBean(MessageMagicBallCommand.class));
messageCommandListener.registerCommand(context.getBean(MessageSayCommand.class));
messageCommandListener.registerCommand(context.getBean(MessageTimeoutCommand.class));
messageCommandListener.registerCommand(new MessageTriviaCommand());
messageCommandListener.registerCommand(new MessageUrbanDictionaryCommand());

View File

@@ -8,33 +8,30 @@ import net.dv8tion.jda.api.entities.channel.concrete.TextChannel;
import net.dv8tion.jda.api.entities.channel.middleman.MessageChannel;
import net.dv8tion.jda.api.entities.emoji.Emoji;
import net.dv8tion.jda.api.interactions.components.buttons.Button;
import org.springframework.stereotype.Component;
import java.util.ArrayList;
import java.util.List;
@Component
public class ClearChat
{
private ClearChat()
{
throw new IllegalStateException("Utility class");
}
public static String getLabel()
public String getLabel()
{
return "clear";
}
public static String getDescription()
public String getDescription()
{
return "Clear the current channel's chat.";
}
public static Permission getPermission()
public Permission getPermission()
{
return Permission.MESSAGE_MANAGE;
}
public static String checkDMs(Channel channel)
public String checkDMs(Channel channel)
{
if (!(channel instanceof TextChannel))
{
@@ -44,7 +41,7 @@ public class ClearChat
return null;
}
public static String checkDeleteAmount(int toDeleteAmount)
public String checkDeleteAmount(int toDeleteAmount)
{
if (toDeleteAmount <= 0)
{
@@ -54,7 +51,7 @@ public class ClearChat
return null;
}
public static int delete(int toDeleteAmount,
public int delete(int toDeleteAmount,
long startingMessageId,
MessageChannel channel)
{
@@ -158,13 +155,13 @@ public class ClearChat
return deleted;
}
public static Button getDismissButton()
public Button getDismissButton()
{
return Button.primary("generic_dismiss", "Dismiss")
.withEmoji(Emoji.fromUnicode(""));
}
public static String parseAmount(int deleted)
public String parseAmount(int deleted)
{
if (deleted < 1)
@@ -180,7 +177,7 @@ public class ClearChat
}
// cap the amount to avoid abuse.
public static int getMaxAmount()
public int getMaxAmount()
{
return 1000;
}

View File

@@ -6,27 +6,23 @@ import net.dv8tion.jda.api.entities.emoji.Emoji;
import net.dv8tion.jda.api.events.interaction.component.ButtonInteractionEvent;
import net.dv8tion.jda.api.interactions.components.ActionRow;
import net.dv8tion.jda.api.interactions.components.buttons.Button;
import org.springframework.stereotype.Component;
import wtf.beatrice.hidekobot.Cache;
import wtf.beatrice.hidekobot.util.RandomUtil;
import java.util.ArrayList;
import java.util.List;
@Component
public class CoinFlip
{
private CoinFlip()
{
throw new IllegalStateException("Utility class");
}
public static Button getReflipButton()
public Button getReflipButton()
{
return Button.primary("coinflip_reflip", "Flip again")
.withEmoji(Emoji.fromUnicode("\uD83E\uDE99"));
}
public static String genRandom()
public String genRandom()
{
int rand = RandomUtil.getRandomNumber(0, 1);
String msg;
@@ -42,7 +38,7 @@ public class CoinFlip
return msg;
}
public static void buttonReFlip(ButtonInteractionEvent event)
public void buttonReFlip(ButtonInteractionEvent event)
{
// Ack ASAP to avoid 3s timeout
event.deferEdit().queue(hook -> {
@@ -86,7 +82,7 @@ public class CoinFlip
});
}
public static void trackAndRestrict(Message replyMessage, User user)
public void trackAndRestrict(Message replyMessage, User user)
{
Cache.getServices().databaseService().queueDisabling(replyMessage);
Cache.getServices().databaseService().trackRanCommandReply(replyMessage, user);

View File

@@ -2,6 +2,7 @@ package wtf.beatrice.hidekobot.commands.base;
import net.dv8tion.jda.api.EmbedBuilder;
import net.dv8tion.jda.api.entities.User;
import org.springframework.stereotype.Component;
import wtf.beatrice.hidekobot.Cache;
import wtf.beatrice.hidekobot.objects.MessageResponse;
import wtf.beatrice.hidekobot.objects.fun.Dice;
@@ -12,15 +13,11 @@ import java.util.LinkedList;
import java.util.Map;
import java.util.UUID;
@Component
public class DiceRoll
{
private DiceRoll()
{
throw new IllegalStateException("Utility class");
}
public static MessageResponse buildResponse(User author, String[] args)
public MessageResponse buildResponse(User author, String[] args)
{
LinkedHashMap<Dice, Integer> dicesToRoll = new LinkedHashMap<>();
String diceRegex = "d\\d+";

View File

@@ -4,18 +4,15 @@ import net.dv8tion.jda.api.EmbedBuilder;
import net.dv8tion.jda.api.entities.MessageEmbed;
import net.dv8tion.jda.api.entities.emoji.Emoji;
import net.dv8tion.jda.api.interactions.components.buttons.Button;
import org.springframework.stereotype.Component;
import wtf.beatrice.hidekobot.Cache;
import wtf.beatrice.hidekobot.HidekoBot;
@Component
public class Invite
{
private Invite()
{
throw new IllegalStateException("Utility class");
}
public static MessageEmbed generateEmbed()
public MessageEmbed generateEmbed()
{
EmbedBuilder embedBuilder = new EmbedBuilder();
@@ -33,7 +30,7 @@ public class Invite
return embedBuilder.build();
}
public static Button getInviteButton()
public Button getInviteButton()
{
String inviteUrl = Cache.getInviteUrl();
return Button.link(inviteUrl, "Invite " + Cache.getBotName())

View File

@@ -3,20 +3,17 @@ package wtf.beatrice.hidekobot.commands.base;
import net.dv8tion.jda.api.EmbedBuilder;
import net.dv8tion.jda.api.entities.MessageEmbed;
import net.dv8tion.jda.api.entities.User;
import org.springframework.stereotype.Component;
import wtf.beatrice.hidekobot.Cache;
import wtf.beatrice.hidekobot.util.RandomUtil;
import java.util.concurrent.TimeUnit;
@Component
public class LoveCalculator
{
private LoveCalculator()
{
throw new IllegalStateException("Utility class");
}
public static MessageEmbed buildEmbedAndCacheResult(User author, User user1, User user2)
public MessageEmbed buildEmbedAndCacheResult(User author, User user1, User user2)
{
String userId1 = user1.getId();
String userId2 = user2.getId();

View File

@@ -3,6 +3,7 @@ package wtf.beatrice.hidekobot.commands.base;
import net.dv8tion.jda.api.EmbedBuilder;
import net.dv8tion.jda.api.entities.MessageEmbed;
import net.dv8tion.jda.api.entities.User;
import org.springframework.stereotype.Component;
import wtf.beatrice.hidekobot.Cache;
import wtf.beatrice.hidekobot.util.RandomUtil;
@@ -11,20 +12,16 @@ import java.util.Arrays;
import java.util.LinkedList;
import java.util.List;
@Component
public class MagicBall
{
private MagicBall()
{
throw new IllegalStateException("Utility class");
}
public static LinkedList<String> getLabels()
public LinkedList<String> getLabels()
{
return new LinkedList<>(Arrays.asList("8ball", "8b", "eightball", "magicball"));
}
private static final List<String> answers = new ArrayList<>(
private final List<String> answers = new ArrayList<>(
Arrays.asList("It is certain.",
"It is decidedly so.",
"Without a doubt.",
@@ -46,13 +43,13 @@ public class MagicBall
"Outlook not so good.",
"Very doubtful."));
public static String getRandomAnswer()
public String getRandomAnswer()
{
int answerPos = RandomUtil.getRandomNumber(0, answers.size() - 1);
return answers.get(answerPos);
}
public static MessageEmbed generateEmbed(String question, User author)
public MessageEmbed generateEmbed(String question, User author)
{
// add a question mark at the end, if missing.
// this might not always apply but it's fun

View File

@@ -3,18 +3,15 @@ package wtf.beatrice.hidekobot.commands.base;
import net.dv8tion.jda.api.EmbedBuilder;
import net.dv8tion.jda.api.entities.User;
import net.dv8tion.jda.api.utils.ImageProxy;
import org.springframework.stereotype.Component;
import wtf.beatrice.hidekobot.Cache;
import wtf.beatrice.hidekobot.objects.MessageResponse;
@Component
public class ProfileImage
{
private ProfileImage()
{
throw new IllegalStateException("Utility class");
}
public static int parseResolution(int resolution)
public int parseResolution(int resolution)
{
int[] acceptedSizes = Cache.getSupportedAvatarResolutions();
@@ -34,7 +31,7 @@ public class ProfileImage
return acceptedSizes[idx];
}
public static MessageResponse buildResponse(int resolution, User user, ImageType imageType)
public MessageResponse buildResponse(int resolution, User user, ImageType imageType)
{
String imageTypeName = imageType.name().toLowerCase();
String resolutionString;

View File

@@ -1,16 +1,12 @@
package wtf.beatrice.hidekobot.commands.base;
import net.dv8tion.jda.api.Permission;
import org.springframework.stereotype.Component;
@Component
public class Say
{
private Say()
{
throw new IllegalStateException("Utility class");
}
public static Permission getPermission()
public Permission getPermission()
{
return Permission.MESSAGE_MANAGE;
}

View File

@@ -12,6 +12,7 @@ import net.dv8tion.jda.api.events.message.MessageReceivedEvent;
import net.dv8tion.jda.api.interactions.commands.OptionMapping;
import net.dv8tion.jda.api.requests.restaction.AuditableRestAction;
import org.apache.commons.lang3.ArrayUtils;
import org.springframework.stereotype.Component;
import wtf.beatrice.hidekobot.Cache;
import wtf.beatrice.hidekobot.HidekoBot;
import wtf.beatrice.hidekobot.objects.MessageResponse;
@@ -24,18 +25,14 @@ import java.util.Collections;
import java.util.List;
import java.util.concurrent.TimeUnit;
@Component
public class UserPunishment
{
private UserPunishment()
{
throw new IllegalStateException("Utility class");
}
private static final Duration maxTimeoutDuration = Duration.of(28, ChronoUnit.DAYS);
private static final Duration minTimeoutDuration = Duration.of(30, ChronoUnit.SECONDS);
public static void handle(SlashCommandInteractionEvent event, PunishmentType punishmentType)
public void handle(SlashCommandInteractionEvent event, PunishmentType punishmentType)
{
// this might take a sec
event.deferReply().queue();
@@ -92,7 +89,7 @@ public class UserPunishment
event.getHook().editOriginal(response.content()).queue();
}
public static void handle(MessageReceivedEvent event, String[] args, PunishmentType punishmentType)
public void handle(MessageReceivedEvent event, String[] args, PunishmentType punishmentType)
{
Mentions msgMentions = event.getMessage().getMentions();
List<IMentionable> mentions = msgMentions.getMentions();
@@ -109,7 +106,7 @@ public class UserPunishment
event.getMessage().reply(response.content()).queue();
}
public static MessageResponse getResponse(User author,
public MessageResponse getResponse(User author,
PunishmentType punishmentType,
MessageChannelUnion channel,
List<IMentionable> mentions,

View File

@@ -6,6 +6,8 @@ import net.dv8tion.jda.api.entities.User;
import net.dv8tion.jda.api.events.message.MessageReceivedEvent;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import wtf.beatrice.hidekobot.HidekoBot;
import wtf.beatrice.hidekobot.commands.base.ProfileImage;
import wtf.beatrice.hidekobot.objects.MessageResponse;
@@ -16,8 +18,15 @@ import java.util.Collections;
import java.util.LinkedList;
import java.util.List;
@Component
public class MessageAvatarCommand implements MessageCommand
{
private final ProfileImage profileImage;
public MessageAvatarCommand(@Autowired ProfileImage profileImage)
{
this.profileImage = profileImage;
}
@Override
public LinkedList<String> getCommandLabels()
@@ -74,7 +83,7 @@ public class MessageAvatarCommand implements MessageCommand
try
{
int givenRes = Integer.parseInt(arg);
resolution = ProfileImage.parseResolution(givenRes);
resolution = profileImage.parseResolution(givenRes);
resFound = true;
break;
} catch (NumberFormatException ignored)
@@ -84,7 +93,7 @@ public class MessageAvatarCommand implements MessageCommand
}
// fallback in case we didn't find any specified resolution
if (!resFound) resolution = ProfileImage.parseResolution(512);
if (!resFound) resolution = profileImage.parseResolution(512);
// check if someone is mentioned
Mentions mentions = event.getMessage().getMentions();
@@ -101,7 +110,7 @@ public class MessageAvatarCommand implements MessageCommand
if (user == null) user = event.getAuthor();
// send a response
MessageResponse response = ProfileImage.buildResponse(resolution, user, ProfileImage.ImageType.AVATAR);
MessageResponse response = profileImage.buildResponse(resolution, user, ProfileImage.ImageType.AVATAR);
if (response.content() != null)
{
event.getMessage().reply(response.content()).queue();

View File

@@ -4,6 +4,8 @@ import net.dv8tion.jda.api.Permission;
import net.dv8tion.jda.api.events.message.MessageReceivedEvent;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import wtf.beatrice.hidekobot.commands.base.UserPunishment;
import wtf.beatrice.hidekobot.objects.commands.CommandCategory;
import wtf.beatrice.hidekobot.objects.commands.MessageCommand;
@@ -13,8 +15,15 @@ import java.util.Collections;
import java.util.LinkedList;
import java.util.List;
@Component
public class MessageBanCommand implements MessageCommand
{
private final UserPunishment userPunishment;
public MessageBanCommand(@Autowired UserPunishment userPunishment)
{
this.userPunishment = userPunishment;
}
@Override
public LinkedList<String> getCommandLabels()
@@ -59,6 +68,6 @@ public class MessageBanCommand implements MessageCommand
@Override
public void runCommand(MessageReceivedEvent event, String label, String[] args)
{
UserPunishment.handle(event, args, UserPunishment.PunishmentType.BAN);
userPunishment.handle(event, args, UserPunishment.PunishmentType.BAN);
}
}

View File

@@ -6,6 +6,8 @@ import net.dv8tion.jda.api.entities.User;
import net.dv8tion.jda.api.events.message.MessageReceivedEvent;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import wtf.beatrice.hidekobot.HidekoBot;
import wtf.beatrice.hidekobot.commands.base.ProfileImage;
import wtf.beatrice.hidekobot.objects.MessageResponse;
@@ -16,8 +18,15 @@ import java.util.Collections;
import java.util.LinkedList;
import java.util.List;
@Component
public class MessageBannerCommand implements MessageCommand
{
private final ProfileImage profileImage;
public MessageBannerCommand(@Autowired ProfileImage profileImage)
{
this.profileImage = profileImage;
}
@Override
public LinkedList<String> getCommandLabels()
@@ -74,7 +83,7 @@ public class MessageBannerCommand implements MessageCommand
try
{
int givenRes = Integer.parseInt(arg);
resolution = ProfileImage.parseResolution(givenRes);
resolution = profileImage.parseResolution(givenRes);
resFound = true;
break;
} catch (NumberFormatException ignored)
@@ -84,7 +93,7 @@ public class MessageBannerCommand implements MessageCommand
}
// fallback in case we didn't find any specified resolution
if (!resFound) resolution = ProfileImage.parseResolution(512);
if (!resFound) resolution = profileImage.parseResolution(512);
// check if someone is mentioned
Mentions mentions = event.getMessage().getMentions();
@@ -101,7 +110,7 @@ public class MessageBannerCommand implements MessageCommand
if (user == null) user = event.getAuthor();
// send a response
MessageResponse response = ProfileImage.buildResponse(resolution, user, ProfileImage.ImageType.BANNER);
MessageResponse response = profileImage.buildResponse(resolution, user, ProfileImage.ImageType.BANNER);
if (response.content() != null)
{
event.getMessage().reply(response.content()).queue();

View File

@@ -6,6 +6,8 @@ import net.dv8tion.jda.api.events.message.MessageReceivedEvent;
import net.dv8tion.jda.api.interactions.components.buttons.Button;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import wtf.beatrice.hidekobot.Cache;
import wtf.beatrice.hidekobot.commands.base.ClearChat;
import wtf.beatrice.hidekobot.objects.commands.CommandCategory;
@@ -15,19 +17,27 @@ import java.util.Collections;
import java.util.LinkedList;
import java.util.List;
@Component
public class MessageClearCommand implements MessageCommand
{
private final ClearChat clearChat;
public MessageClearCommand(@Autowired ClearChat clearChat)
{
this.clearChat = clearChat;
}
@Override
public LinkedList<String> getCommandLabels()
{
return new LinkedList<>(Collections.singletonList(ClearChat.getLabel()));
return new LinkedList<>(Collections.singletonList(clearChat.getLabel()));
}
@Override
public List<Permission> getPermissions()
{
return Collections.singletonList(ClearChat.getPermission());
return Collections.singletonList(clearChat.getPermission());
}
@Override
@@ -61,7 +71,7 @@ public class MessageClearCommand implements MessageCommand
public void runCommand(MessageReceivedEvent event, String label, String[] args)
{
// check if user is trying to run command in dms.
String error = ClearChat.checkDMs(event.getChannel());
String error = clearChat.checkDMs(event.getChannel());
if (error != null)
{
event.getMessage().reply(error).queue();
@@ -83,9 +93,9 @@ public class MessageClearCommand implements MessageCommand
}
// cap the amount to avoid abuse.
if (toDeleteAmount > ClearChat.getMaxAmount()) toDeleteAmount = 0;
if (toDeleteAmount > clearChat.getMaxAmount()) toDeleteAmount = 0;
error = ClearChat.checkDeleteAmount(toDeleteAmount);
error = clearChat.checkDeleteAmount(toDeleteAmount);
if (error != null)
{
event.getMessage().reply(error).queue();
@@ -96,15 +106,15 @@ public class MessageClearCommand implements MessageCommand
String content = "\uD83D\uDEA7 Clearing...";
Message botMessage = event.getMessage().reply(content).complete();
int deleted = ClearChat.delete(toDeleteAmount,
int deleted = clearChat.delete(toDeleteAmount,
event.getMessageIdLong(),
event.getChannel());
// get a nicely formatted message that logs the deletion of messages.
content = ClearChat.parseAmount(deleted);
content = clearChat.parseAmount(deleted);
// edit the message text and attach a button.
Button dismiss = ClearChat.getDismissButton();
Button dismiss = clearChat.getDismissButton();
Message finalMessage = event.getChannel().sendMessage(content).setActionRow(dismiss).complete();
// add the message to database.

View File

@@ -4,6 +4,8 @@ import net.dv8tion.jda.api.Permission;
import net.dv8tion.jda.api.events.message.MessageReceivedEvent;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import wtf.beatrice.hidekobot.commands.base.CoinFlip;
import wtf.beatrice.hidekobot.objects.commands.CommandCategory;
import wtf.beatrice.hidekobot.objects.commands.MessageCommand;
@@ -12,9 +14,17 @@ import java.util.Arrays;
import java.util.LinkedList;
import java.util.List;
@Component
public class MessageCoinFlipCommand implements MessageCommand
{
private final CoinFlip coinFlip;
public MessageCoinFlipCommand(@Autowired CoinFlip coinFlip)
{
this.coinFlip = coinFlip;
}
@Override
public LinkedList<String> getCommandLabels()
{
@@ -60,12 +70,12 @@ public class MessageCoinFlipCommand implements MessageCommand
{
// perform coin flip
event.getMessage().reply(CoinFlip.genRandom())
.addActionRow(CoinFlip.getReflipButton())
event.getMessage().reply(coinFlip.genRandom())
.addActionRow(coinFlip.getReflipButton())
.queue((message) ->
{
// set the command as expiring and restrict it to the user who ran it
CoinFlip.trackAndRestrict(message, event.getAuthor());
coinFlip.trackAndRestrict(message, event.getAuthor());
}, (error) -> {
});
}

View File

@@ -4,6 +4,8 @@ import net.dv8tion.jda.api.Permission;
import net.dv8tion.jda.api.events.message.MessageReceivedEvent;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import wtf.beatrice.hidekobot.commands.base.DiceRoll;
import wtf.beatrice.hidekobot.objects.MessageResponse;
import wtf.beatrice.hidekobot.objects.commands.CommandCategory;
@@ -13,8 +15,16 @@ import java.util.Arrays;
import java.util.LinkedList;
import java.util.List;
@Component
public class MessageDiceRollCommand implements MessageCommand
{
private final DiceRoll diceRoll;
public MessageDiceRollCommand(@Autowired DiceRoll diceRoll)
{
this.diceRoll = diceRoll;
}
@Override
public LinkedList<String> getCommandLabels()
{
@@ -66,7 +76,7 @@ public class MessageDiceRollCommand implements MessageCommand
public void runCommand(MessageReceivedEvent event, String label, String[] args)
{
MessageResponse response = DiceRoll.buildResponse(event.getAuthor(), args);
MessageResponse response = diceRoll.buildResponse(event.getAuthor(), args);
if (response.content() != null)
{

View File

@@ -7,6 +7,8 @@ import net.dv8tion.jda.api.events.message.MessageReceivedEvent;
import net.dv8tion.jda.api.interactions.components.buttons.Button;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import wtf.beatrice.hidekobot.commands.base.Invite;
import wtf.beatrice.hidekobot.objects.commands.CommandCategory;
import wtf.beatrice.hidekobot.objects.commands.MessageCommand;
@@ -15,8 +17,15 @@ import java.util.Collections;
import java.util.LinkedList;
import java.util.List;
@Component
public class MessageInviteCommand implements MessageCommand
{
private final Invite invite;
public MessageInviteCommand(@Autowired Invite invite)
{
this.invite = invite;
}
@Override
public LinkedList<String> getCommandLabels()
@@ -63,8 +72,8 @@ public class MessageInviteCommand implements MessageCommand
{
MessageEmbed inviteEmbed = Invite.generateEmbed();
Button inviteButton = Invite.getInviteButton();
MessageEmbed inviteEmbed = invite.generateEmbed();
Button inviteButton = invite.getInviteButton();
// if this is a guild, don't spam the invite in public but DM it
if (event.getChannelType().isGuild())

View File

@@ -4,6 +4,8 @@ import net.dv8tion.jda.api.Permission;
import net.dv8tion.jda.api.events.message.MessageReceivedEvent;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import wtf.beatrice.hidekobot.commands.base.UserPunishment;
import wtf.beatrice.hidekobot.objects.commands.CommandCategory;
import wtf.beatrice.hidekobot.objects.commands.MessageCommand;
@@ -13,8 +15,15 @@ import java.util.Collections;
import java.util.LinkedList;
import java.util.List;
@Component
public class MessageKickCommand implements MessageCommand
{
private final UserPunishment userPunishment;
public MessageKickCommand(@Autowired UserPunishment userPunishment)
{
this.userPunishment = userPunishment;
}
@Override
public LinkedList<String> getCommandLabels()
@@ -59,6 +68,6 @@ public class MessageKickCommand implements MessageCommand
@Override
public void runCommand(MessageReceivedEvent event, String label, String[] args)
{
UserPunishment.handle(event, args, UserPunishment.PunishmentType.KICK);
userPunishment.handle(event, args, UserPunishment.PunishmentType.KICK);
}
}

View File

@@ -8,6 +8,8 @@ import net.dv8tion.jda.api.entities.User;
import net.dv8tion.jda.api.events.message.MessageReceivedEvent;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import wtf.beatrice.hidekobot.HidekoBot;
import wtf.beatrice.hidekobot.commands.base.LoveCalculator;
import wtf.beatrice.hidekobot.objects.commands.CommandCategory;
@@ -17,8 +19,15 @@ import java.util.Arrays;
import java.util.LinkedList;
import java.util.List;
@Component
public class MessageLoveCalculatorCommand implements MessageCommand
{
private final LoveCalculator loveCalculator;
public MessageLoveCalculatorCommand(@Autowired LoveCalculator loveCalculator)
{
this.loveCalculator = loveCalculator;
}
@Override
@@ -91,7 +100,7 @@ public class MessageLoveCalculatorCommand implements MessageCommand
user2 = HidekoBot.getAPI().retrieveUserById(mentionedUserId).complete();
}
MessageEmbed embed = LoveCalculator.buildEmbedAndCacheResult(event.getAuthor(), user1, user2);
MessageEmbed embed = loveCalculator.buildEmbedAndCacheResult(event.getAuthor(), user1, user2);
event.getChannel().sendMessageEmbeds(embed).queue();
}

View File

@@ -4,6 +4,8 @@ import net.dv8tion.jda.api.Permission;
import net.dv8tion.jda.api.events.message.MessageReceivedEvent;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import wtf.beatrice.hidekobot.commands.base.MagicBall;
import wtf.beatrice.hidekobot.objects.commands.CommandCategory;
import wtf.beatrice.hidekobot.objects.commands.MessageCommand;
@@ -11,13 +13,20 @@ import wtf.beatrice.hidekobot.objects.commands.MessageCommand;
import java.util.LinkedList;
import java.util.List;
@Component
public class MessageMagicBallCommand implements MessageCommand
{
private final MagicBall magicBall;
public MessageMagicBallCommand(@Autowired MagicBall magicBall)
{
this.magicBall = magicBall;
}
@Override
public LinkedList<String> getCommandLabels()
{
return MagicBall.getLabels();
return magicBall.getLabels();
}
@Nullable
@@ -75,6 +84,6 @@ public class MessageMagicBallCommand implements MessageCommand
String question = questionBuilder.toString();
event.getChannel().sendMessageEmbeds(MagicBall.generateEmbed(question, event.getAuthor())).queue();
event.getChannel().sendMessageEmbeds(magicBall.generateEmbed(question, event.getAuthor())).queue();
}
}

View File

@@ -5,6 +5,8 @@ import net.dv8tion.jda.api.entities.channel.concrete.TextChannel;
import net.dv8tion.jda.api.events.message.MessageReceivedEvent;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import wtf.beatrice.hidekobot.commands.base.Say;
import wtf.beatrice.hidekobot.objects.commands.CommandCategory;
import wtf.beatrice.hidekobot.objects.commands.MessageCommand;
@@ -13,9 +15,16 @@ import java.util.Collections;
import java.util.LinkedList;
import java.util.List;
@Component
public class MessageSayCommand implements MessageCommand
{
private final Say say;
public MessageSayCommand(@Autowired Say say)
{
this.say = say;
}
@Override
public LinkedList<String> getCommandLabels()
@@ -27,7 +36,7 @@ public class MessageSayCommand implements MessageCommand
@Override
public List<Permission> getPermissions()
{
return Collections.singletonList(Say.getPermission());
return Collections.singletonList(say.getPermission());
}
@Override

View File

@@ -4,6 +4,8 @@ import net.dv8tion.jda.api.Permission;
import net.dv8tion.jda.api.events.message.MessageReceivedEvent;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import wtf.beatrice.hidekobot.commands.base.UserPunishment;
import wtf.beatrice.hidekobot.objects.commands.CommandCategory;
import wtf.beatrice.hidekobot.objects.commands.MessageCommand;
@@ -13,8 +15,15 @@ import java.util.Collections;
import java.util.LinkedList;
import java.util.List;
@Component
public class MessageTimeoutCommand implements MessageCommand
{
private final UserPunishment userPunishment;
public MessageTimeoutCommand(@Autowired UserPunishment userPunishment)
{
this.userPunishment = userPunishment;
}
@Override
public LinkedList<String> getCommandLabels()
@@ -59,6 +68,6 @@ public class MessageTimeoutCommand implements MessageCommand
@Override
public void runCommand(MessageReceivedEvent event, String label, String[] args)
{
UserPunishment.handle(event, args, UserPunishment.PunishmentType.TIMEOUT);
userPunishment.handle(event, args, UserPunishment.PunishmentType.TIMEOUT);
}
}

View File

@@ -7,12 +7,21 @@ 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 org.jetbrains.annotations.NotNull;
import org.springframework.stereotype.Component;
import wtf.beatrice.hidekobot.commands.base.ProfileImage;
import wtf.beatrice.hidekobot.objects.MessageResponse;
import wtf.beatrice.hidekobot.objects.commands.SlashCommandImpl;
@Component
public class SlashAvatarCommand extends SlashCommandImpl
{
private final ProfileImage profileImage;
public SlashAvatarCommand(@NotNull ProfileImage profileImage)
{
this.profileImage = profileImage;
}
@Override
public CommandData getSlashCommandData()
{
@@ -44,13 +53,13 @@ public class SlashAvatarCommand extends SlashCommandImpl
OptionMapping sizeArg = event.getOption("size");
if (sizeArg != null)
{
resolution = ProfileImage.parseResolution(sizeArg.getAsInt());
resolution = profileImage.parseResolution(sizeArg.getAsInt());
} else
{
resolution = ProfileImage.parseResolution(512);
resolution = profileImage.parseResolution(512);
}
MessageResponse response = ProfileImage.buildResponse(resolution, user, ProfileImage.ImageType.AVATAR);
MessageResponse response = profileImage.buildResponse(resolution, user, ProfileImage.ImageType.AVATAR);
if (response.content() != null)
{
event.getHook().editOriginal(response.content()).queue();

View File

@@ -7,11 +7,21 @@ 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 org.jetbrains.annotations.NotNull;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import wtf.beatrice.hidekobot.commands.base.UserPunishment;
import wtf.beatrice.hidekobot.objects.commands.SlashCommandImpl;
@Component
public class SlashBanCommand extends SlashCommandImpl
{
private final UserPunishment userPunishment;
public SlashBanCommand(@Autowired UserPunishment userPunishment)
{
this.userPunishment = userPunishment;
}
@Override
public CommandData getSlashCommandData()
{
@@ -31,6 +41,6 @@ public class SlashBanCommand extends SlashCommandImpl
@Override
public void runSlashCommand(@NotNull SlashCommandInteractionEvent event)
{
UserPunishment.handle(event, UserPunishment.PunishmentType.BAN);
userPunishment.handle(event, UserPunishment.PunishmentType.BAN);
}
}

View File

@@ -7,12 +7,21 @@ 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 org.jetbrains.annotations.NotNull;
import org.springframework.stereotype.Component;
import wtf.beatrice.hidekobot.commands.base.ProfileImage;
import wtf.beatrice.hidekobot.objects.MessageResponse;
import wtf.beatrice.hidekobot.objects.commands.SlashCommandImpl;
@Component
public class SlashBannerCommand extends SlashCommandImpl
{
private final ProfileImage profileImage;
public SlashBannerCommand(@NotNull ProfileImage profileImage)
{
this.profileImage = profileImage;
}
@Override
public CommandData getSlashCommandData()
{
@@ -44,13 +53,13 @@ public class SlashBannerCommand extends SlashCommandImpl
OptionMapping sizeArg = event.getOption("size");
if (sizeArg != null)
{
resolution = ProfileImage.parseResolution(sizeArg.getAsInt());
resolution = profileImage.parseResolution(sizeArg.getAsInt());
} else
{
resolution = ProfileImage.parseResolution(512);
resolution = profileImage.parseResolution(512);
}
MessageResponse response = ProfileImage.buildResponse(resolution, user, ProfileImage.ImageType.BANNER);
MessageResponse response = profileImage.buildResponse(resolution, user, ProfileImage.ImageType.BANNER);
if (response.content() != null)
{
event.getHook().editOriginal(response.content()).queue();

View File

@@ -9,20 +9,29 @@ import net.dv8tion.jda.api.interactions.commands.build.CommandData;
import net.dv8tion.jda.api.interactions.commands.build.Commands;
import net.dv8tion.jda.api.interactions.components.buttons.Button;
import org.jetbrains.annotations.NotNull;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import wtf.beatrice.hidekobot.Cache;
import wtf.beatrice.hidekobot.commands.base.ClearChat;
import wtf.beatrice.hidekobot.objects.commands.SlashCommandImpl;
@Component
public class SlashClearCommand extends SlashCommandImpl
{
private final ClearChat clearChat;
public SlashClearCommand(@Autowired ClearChat clearChat)
{
this.clearChat = clearChat;
}
@Override
public CommandData getSlashCommandData()
{
return Commands.slash(ClearChat.getLabel(),
ClearChat.getDescription())
return Commands.slash(clearChat.getLabel(),
clearChat.getDescription())
.addOption(OptionType.INTEGER, "amount", "The amount of messages to delete.")
.setDefaultPermissions(DefaultMemberPermissions.enabledFor(ClearChat.getPermission()));
.setDefaultPermissions(DefaultMemberPermissions.enabledFor(clearChat.getPermission()));
}
@Override
@@ -32,7 +41,7 @@ public class SlashClearCommand extends SlashCommandImpl
event.deferReply().queue();
// check if user is trying to run command in dms.
String error = ClearChat.checkDMs(event.getChannel());
String error = clearChat.checkDMs(event.getChannel());
if (error != null)
{
event.getHook().editOriginal(error).queue();
@@ -46,9 +55,9 @@ public class SlashClearCommand extends SlashCommandImpl
int toDeleteAmount = amountOption == null ? 1 : amountOption.getAsInt();
// cap the amount to avoid abuse.
if (toDeleteAmount > ClearChat.getMaxAmount()) toDeleteAmount = 0;
if (toDeleteAmount > clearChat.getMaxAmount()) toDeleteAmount = 0;
error = ClearChat.checkDeleteAmount(toDeleteAmount);
error = clearChat.checkDeleteAmount(toDeleteAmount);
if (error != null)
{
event.getHook().editOriginal(error).queue();
@@ -60,15 +69,15 @@ public class SlashClearCommand extends SlashCommandImpl
Message botMessage = event.getHook().editOriginal(content).complete();
// actually delete the messages.
int deleted = ClearChat.delete(toDeleteAmount,
int deleted = clearChat.delete(toDeleteAmount,
event.getInteraction().getIdLong(),
event.getChannel());
// get a nicely formatted message that logs the deletion of messages.
content = ClearChat.parseAmount(deleted);
content = clearChat.parseAmount(deleted);
// edit the message text and attach a button.
Button dismiss = ClearChat.getDismissButton();
Button dismiss = clearChat.getDismissButton();
botMessage = botMessage.editMessage(content).setActionRow(dismiss).complete();
// add the message to database.

View File

@@ -4,11 +4,20 @@ import net.dv8tion.jda.api.events.interaction.command.SlashCommandInteractionEve
import net.dv8tion.jda.api.interactions.commands.build.CommandData;
import net.dv8tion.jda.api.interactions.commands.build.Commands;
import org.jetbrains.annotations.NotNull;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import wtf.beatrice.hidekobot.commands.base.CoinFlip;
import wtf.beatrice.hidekobot.objects.commands.SlashCommandImpl;
@Component
public class SlashCoinFlipCommand extends SlashCommandImpl
{
private final CoinFlip coinFlip;
public SlashCoinFlipCommand(@Autowired CoinFlip coinFlip)
{
this.coinFlip = coinFlip;
}
@Override
public CommandData getSlashCommandData()
@@ -21,14 +30,14 @@ public class SlashCoinFlipCommand extends SlashCommandImpl
public void runSlashCommand(@NotNull SlashCommandInteractionEvent event)
{
// perform coin flip
event.reply(CoinFlip.genRandom())
.addActionRow(CoinFlip.getReflipButton())
event.reply(coinFlip.genRandom())
.addActionRow(coinFlip.getReflipButton())
.queue((interaction) ->
{
// set the command as expiring and restrict it to the user who ran it
interaction.retrieveOriginal().queue((message) ->
{
CoinFlip.trackAndRestrict(message, event.getUser());
coinFlip.trackAndRestrict(message, event.getUser());
}, (error) -> {
});
}, (error) -> {

View File

@@ -6,12 +6,21 @@ 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 org.jetbrains.annotations.NotNull;
import org.springframework.stereotype.Component;
import wtf.beatrice.hidekobot.commands.base.DiceRoll;
import wtf.beatrice.hidekobot.objects.MessageResponse;
import wtf.beatrice.hidekobot.objects.commands.SlashCommandImpl;
@Component
public class SlashDiceRollCommand extends SlashCommandImpl
{
private final DiceRoll diceRoll;
public SlashDiceRollCommand(@NotNull DiceRoll diceRoll)
{
this.diceRoll = diceRoll;
}
@Override
public CommandData getSlashCommandData()
{
@@ -37,7 +46,7 @@ public class SlashDiceRollCommand extends SlashCommandImpl
String[] args = messageContent.split("\\s");
MessageResponse response = DiceRoll.buildResponse(event.getUser(), args);
MessageResponse response = diceRoll.buildResponse(event.getUser(), args);
if (response.content() != null)
{

View File

@@ -10,11 +10,19 @@ import net.dv8tion.jda.api.interactions.components.buttons.Button;
import net.dv8tion.jda.api.requests.restaction.WebhookMessageEditAction;
import net.dv8tion.jda.api.requests.restaction.interactions.ReplyCallbackAction;
import org.jetbrains.annotations.NotNull;
import org.springframework.stereotype.Component;
import wtf.beatrice.hidekobot.commands.base.Invite;
import wtf.beatrice.hidekobot.objects.commands.SlashCommandImpl;
@Component
public class SlashInviteCommand extends SlashCommandImpl
{
private final Invite invite;
public SlashInviteCommand(@NotNull Invite invite)
{
this.invite = invite;
}
@Override
public CommandData getSlashCommandData()
@@ -36,8 +44,8 @@ public class SlashInviteCommand extends SlashCommandImpl
}
replyCallbackAction.queue();
MessageEmbed inviteEmbed = Invite.generateEmbed();
Button inviteButton = Invite.getInviteButton();
MessageEmbed inviteEmbed = invite.generateEmbed();
Button inviteButton = invite.getInviteButton();
WebhookMessageEditAction<Message> reply =
event.getHook()

View File

@@ -7,11 +7,22 @@ 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 org.jetbrains.annotations.NotNull;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import wtf.beatrice.hidekobot.commands.base.UserPunishment;
import wtf.beatrice.hidekobot.objects.commands.SlashCommandImpl;
@Component
public class SlashKickCommand extends SlashCommandImpl
{
private final UserPunishment userPunishment;
public SlashKickCommand(@Autowired UserPunishment userPunishment)
{
this.userPunishment = userPunishment;
}
@Override
public CommandData getSlashCommandData()
{
@@ -31,6 +42,6 @@ public class SlashKickCommand extends SlashCommandImpl
@Override
public void runSlashCommand(@NotNull SlashCommandInteractionEvent event)
{
UserPunishment.handle(event, UserPunishment.PunishmentType.KICK);
userPunishment.handle(event, UserPunishment.PunishmentType.KICK);
}
}

View File

@@ -8,11 +8,20 @@ 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 org.jetbrains.annotations.NotNull;
import org.springframework.stereotype.Component;
import wtf.beatrice.hidekobot.commands.base.LoveCalculator;
import wtf.beatrice.hidekobot.objects.commands.SlashCommandImpl;
@Component
public class SlashLoveCalculatorCommand extends SlashCommandImpl
{
private final LoveCalculator loveCalculator;
public SlashLoveCalculatorCommand(@NotNull LoveCalculator loveCalculator)
{
this.loveCalculator = loveCalculator;
}
@Override
public CommandData getSlashCommandData()
{
@@ -57,7 +66,7 @@ public class SlashLoveCalculatorCommand extends SlashCommandImpl
secondUser = event.getUser();
}
MessageEmbed embed = LoveCalculator.buildEmbedAndCacheResult(event.getUser(), firstUser, secondUser);
MessageEmbed embed = loveCalculator.buildEmbedAndCacheResult(event.getUser(), firstUser, secondUser);
event.replyEmbeds(embed).queue();
}
}

View File

@@ -7,16 +7,25 @@ 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 org.jetbrains.annotations.NotNull;
import org.springframework.stereotype.Component;
import wtf.beatrice.hidekobot.commands.base.MagicBall;
import wtf.beatrice.hidekobot.objects.commands.SlashCommandImpl;
@Component
public class SlashMagicBallCommand extends SlashCommandImpl
{
private final MagicBall magicBall;
public SlashMagicBallCommand(@NotNull MagicBall magicBall)
{
this.magicBall = magicBall;
}
@Override
public CommandData getSlashCommandData()
{
return Commands.slash(MagicBall.getLabels().get(0),
return Commands.slash(magicBall.getLabels().get(0),
"Ask a question to the magic ball.")
.addOption(OptionType.STRING, "question",
"The question to ask.",
@@ -43,7 +52,7 @@ public class SlashMagicBallCommand extends SlashCommandImpl
return;
}
MessageEmbed response = MagicBall.generateEmbed(question, event.getUser());
MessageEmbed response = magicBall.generateEmbed(question, event.getUser());
event.replyEmbeds(response).queue();
}
}

View File

@@ -8,11 +8,20 @@ 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 org.jetbrains.annotations.NotNull;
import org.springframework.stereotype.Component;
import wtf.beatrice.hidekobot.commands.base.Say;
import wtf.beatrice.hidekobot.objects.commands.SlashCommandImpl;
@Component
public class SlashSayCommand extends SlashCommandImpl
{
private final Say say;
public SlashSayCommand(@NotNull Say say)
{
this.say = say;
}
@Override
public CommandData getSlashCommandData()
{
@@ -22,7 +31,7 @@ public class SlashSayCommand extends SlashCommandImpl
"The message to send.",
true,
false)
.setDefaultPermissions(DefaultMemberPermissions.enabledFor(Say.getPermission()));
.setDefaultPermissions(DefaultMemberPermissions.enabledFor(say.getPermission()));
}
@Override

View File

@@ -7,11 +7,22 @@ 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 org.jetbrains.annotations.NotNull;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import wtf.beatrice.hidekobot.commands.base.UserPunishment;
import wtf.beatrice.hidekobot.objects.commands.SlashCommandImpl;
@Component
public class SlashTimeoutCommand extends SlashCommandImpl
{
private final UserPunishment userPunishment;
public SlashTimeoutCommand(@Autowired UserPunishment userPunishment)
{
this.userPunishment = userPunishment;
}
@Override
public CommandData getSlashCommandData()
{
@@ -35,6 +46,6 @@ public class SlashTimeoutCommand extends SlashCommandImpl
@Override
public void runSlashCommand(@NotNull SlashCommandInteractionEvent event)
{
UserPunishment.handle(event, UserPunishment.PunishmentType.TIMEOUT);
userPunishment.handle(event, UserPunishment.PunishmentType.TIMEOUT);
}
}

View File

@@ -4,6 +4,7 @@ import net.dv8tion.jda.api.events.interaction.component.ButtonInteractionEvent;
import net.dv8tion.jda.api.hooks.ListenerAdapter;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import wtf.beatrice.hidekobot.commands.base.CoinFlip;
import wtf.beatrice.hidekobot.commands.base.Trivia;
@@ -16,10 +17,13 @@ public class ButtonInteractionListener extends ListenerAdapter
private static final Logger LOGGER = LoggerFactory.getLogger(ButtonInteractionListener.class);
private final CommandService commandService;
private final CoinFlip coinFlip;
public ButtonInteractionListener(CommandService commandService)
public ButtonInteractionListener(@Autowired CommandService commandService,
@Autowired CoinFlip coinFlip)
{
this.commandService = commandService;
this.coinFlip = coinFlip;
}
@Override
@@ -30,7 +34,7 @@ public class ButtonInteractionListener extends ListenerAdapter
{
// coinflip
case "coinflip_reflip" -> CoinFlip.buttonReFlip(event);
case "coinflip_reflip" -> coinFlip.buttonReFlip(event);
// generic dismiss button
case "generic_dismiss" -> commandService.deleteUserLinkedMessage(event);