Skip to content

Commit c036f2e

Browse files
Add a reset option to /greetings command
1 parent 150d3d8 commit c036f2e

4 files changed

Lines changed: 72 additions & 16 deletions

File tree

src/main/java/technobot/commands/greetings/GreetingsCommand.java

Lines changed: 36 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,19 +2,30 @@
22

33
import net.dv8tion.jda.api.Permission;
44
import net.dv8tion.jda.api.entities.ChannelType;
5+
import net.dv8tion.jda.api.entities.Emoji;
56
import net.dv8tion.jda.api.events.interaction.command.SlashCommandInteractionEvent;
7+
import net.dv8tion.jda.api.exceptions.ErrorHandler;
68
import net.dv8tion.jda.api.interactions.commands.OptionMapping;
79
import net.dv8tion.jda.api.interactions.commands.OptionType;
810
import net.dv8tion.jda.api.interactions.commands.build.OptionData;
911
import net.dv8tion.jda.api.interactions.commands.build.SubcommandData;
12+
import net.dv8tion.jda.api.interactions.components.ActionRow;
13+
import net.dv8tion.jda.api.interactions.components.buttons.Button;
14+
import net.dv8tion.jda.api.requests.ErrorResponse;
1015
import technobot.TechnoBot;
1116
import technobot.commands.Category;
1217
import technobot.commands.Command;
1318
import technobot.data.GuildData;
1419
import technobot.data.cache.Greetings;
1520
import technobot.handlers.GreetingHandler;
21+
import technobot.listeners.ButtonListener;
1622
import technobot.util.embeds.EmbedUtils;
1723

24+
import java.util.ArrayList;
25+
import java.util.List;
26+
import java.util.UUID;
27+
import java.util.concurrent.TimeUnit;
28+
1829
/**
1930
* Command that displays and modifies greetings config.
2031
*
@@ -28,10 +39,11 @@ public GreetingsCommand(TechnoBot bot) {
2839
this.description = "Modify this server's greetings config.";
2940
this.category = Category.GREETINGS;
3041
this.permission = Permission.MANAGE_SERVER;
31-
this.subCommands.add(new SubcommandData("channel", "Sets a channel to send welcome messages to.")
42+
this.subCommands.add(new SubcommandData("channel", "Set a channel to send welcome messages to.")
3243
.addOptions(new OptionData(OptionType.CHANNEL, "channel", "The channel to send welcome messages to")
3344
.setChannelTypes(ChannelType.TEXT, ChannelType.NEWS)));
34-
this.subCommands.add(new SubcommandData("config", "Displays the greetings config for this server."));
45+
this.subCommands.add(new SubcommandData("config", "Display the greetings config for this server."));
46+
this.subCommands.add(new SubcommandData("reset", "Reset all greetings data and settings."));
3547
}
3648

3749
@Override
@@ -59,6 +71,28 @@ public void execute(SlashCommandInteractionEvent event) {
5971
event.getHook().sendMessage(text).queue();
6072
return;
6173
}
74+
case "reset" -> {
75+
long userID = event.getUser().getIdLong();
76+
String uuid = userID + ":" + UUID.randomUUID();
77+
text = "Would you like to reset the greeting system?\nThis will delete **ALL** data!";
78+
List<Button> components = new ArrayList<>();
79+
components.add(Button.success("greetings:yes:"+uuid, Emoji.fromMarkdown("\u2714")));
80+
components.add(Button.danger("greetings:no:"+uuid, Emoji.fromUnicode("\u2716")));
81+
ButtonListener.buttons.put(uuid, components);
82+
event.getHook().sendMessageEmbeds(EmbedUtils.createDefault(text)).addActionRow(components).queue(interactionHook -> {
83+
// Timer task to disable buttons and clear cache after 3 minutes
84+
Runnable task = () -> {
85+
List<Button> actionRow = ButtonListener.buttons.get(uuid);
86+
for (int i = 0; i < actionRow.size(); i++) {
87+
actionRow.set(i, actionRow.get(i).asDisabled());
88+
}
89+
interactionHook.editMessageComponents(ActionRow.of(actionRow)).queue(null, new ErrorHandler().ignore(ErrorResponse.UNKNOWN_MESSAGE));
90+
ButtonListener.buttons.remove(uuid);
91+
};
92+
ButtonListener.executor.schedule(task, 3, TimeUnit.MINUTES);
93+
});
94+
return;
95+
}
6296
}
6397
event.getHook().sendMessageEmbeds(EmbedUtils.createDefault(text)).queue();
6498
}

src/main/java/technobot/handlers/GreetingHandler.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@
55
import net.dv8tion.jda.api.entities.Guild;
66
import org.bson.conversions.Bson;
77
import technobot.TechnoBot;
8+
import technobot.data.GuildData;
9+
import technobot.data.cache.Config;
810
import technobot.data.cache.Greetings;
911

1012
/**
@@ -148,4 +150,12 @@ public Long getChannel() {
148150
public Greetings getConfig() {
149151
return greetings;
150152
}
153+
154+
/**
155+
* Resets all config data for greeting system.
156+
*/
157+
public void reset() {
158+
greetings = new Greetings(guild.getIdLong());
159+
bot.database.greetings.replaceOne(filter, greetings);
160+
}
151161
}

src/main/java/technobot/handlers/LevelingHandler.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@ public void resetProfile(long userID) {
7575
*/
7676
public void resetAll() {
7777
leaderboard.clear();
78-
Bson query = Filters.and(Filters.eq("guild", guild.getIdLong()));
78+
Bson query = Filters.eq("guild", guild.getIdLong());
7979
bot.database.leveling.deleteMany(query);
8080
Config config = new Config(guild.getIdLong());
8181
bot.database.config.replaceOne(query, config);

src/main/java/technobot/listeners/ButtonListener.java

Lines changed: 25 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -36,19 +36,7 @@ public void onButtonInteraction(ButtonInteractionEvent event) {
3636
if (components == null) return;
3737
String[] storedArgs = components.get(0).getId().split(":");
3838

39-
if (pressedArgs[0].equals("suggestions") && storedArgs[0].equals("suggestions")) {
40-
if (pressedArgs[1].equals("yes")) {
41-
event.deferEdit().queue();
42-
GuildData.get(event.getGuild()).suggestionHandler.reset();
43-
MessageEmbed embed = EmbedUtils.createSuccess("Suggestion system was successfully reset!");
44-
event.getHook().editOriginalComponents(new ArrayList<>()).setEmbeds(embed).queue();
45-
} else if (pressedArgs[1].equals("no")) {
46-
event.deferEdit().queue();
47-
MessageEmbed embed = EmbedUtils.createError("Suggestion system was **NOT** reset!");
48-
event.getHook().editOriginalComponents(new ArrayList<>()).setEmbeds(embed).queue();
49-
}
50-
}
51-
else if (pressedArgs[0].equals("help") && storedArgs[0].equals("help")) {
39+
if (pressedArgs[0].equals("help") && storedArgs[0].equals("help")) {
5240
if (pressedArgs[1].equals("next")) {
5341
// Move to next embed
5442
int page = Integer.parseInt(components.get(1).getId().split(":")[2]) + 1;
@@ -79,5 +67,29 @@ else if (pressedArgs[0].equals("help") && storedArgs[0].equals("help")) {
7967
}
8068
}
8169
}
70+
else if (pressedArgs[0].equals("suggestions") && storedArgs[0].equals("suggestions")) {
71+
if (pressedArgs[1].equals("yes")) {
72+
event.deferEdit().queue();
73+
GuildData.get(event.getGuild()).suggestionHandler.reset();
74+
MessageEmbed embed = EmbedUtils.createSuccess("Suggestion system was successfully reset!");
75+
event.getHook().editOriginalComponents(new ArrayList<>()).setEmbeds(embed).queue();
76+
} else if (pressedArgs[1].equals("no")) {
77+
event.deferEdit().queue();
78+
MessageEmbed embed = EmbedUtils.createError("Suggestion system was **NOT** reset!");
79+
event.getHook().editOriginalComponents(new ArrayList<>()).setEmbeds(embed).queue();
80+
}
81+
}
82+
else if (pressedArgs[0].equals("greetings") && storedArgs[0].equals("greetings")) {
83+
if (pressedArgs[1].equals("yes")) {
84+
event.deferEdit().queue();
85+
GuildData.get(event.getGuild()).greetingHandler.reset();
86+
MessageEmbed embed = EmbedUtils.createSuccess("Greeting system was successfully reset!");
87+
event.getHook().editOriginalComponents(new ArrayList<>()).setEmbeds(embed).queue();
88+
} else if (pressedArgs[1].equals("no")) {
89+
event.deferEdit().queue();
90+
MessageEmbed embed = EmbedUtils.createError("Greeting system was **NOT** reset!");
91+
event.getHook().editOriginalComponents(new ArrayList<>()).setEmbeds(embed).queue();
92+
}
93+
}
8294
}
8395
}

0 commit comments

Comments
 (0)