[FEAT] Channel/Webhook configuration command
This commit is contained in:
@@ -7,6 +7,7 @@ package com.hypherionmc.sdlink.core.discord.commands;
|
|||||||
import com.hypherionmc.sdlink.core.discord.commands.slash.general.HelpSlashCommand;
|
import com.hypherionmc.sdlink.core.discord.commands.slash.general.HelpSlashCommand;
|
||||||
import com.hypherionmc.sdlink.core.discord.commands.slash.general.PlayerListSlashCommand;
|
import com.hypherionmc.sdlink.core.discord.commands.slash.general.PlayerListSlashCommand;
|
||||||
import com.hypherionmc.sdlink.core.discord.commands.slash.general.ServerStatusSlashCommand;
|
import com.hypherionmc.sdlink.core.discord.commands.slash.general.ServerStatusSlashCommand;
|
||||||
|
import com.hypherionmc.sdlink.core.discord.commands.slash.setup.SetChannelCommand;
|
||||||
import com.hypherionmc.sdlink.core.discord.commands.slash.verification.*;
|
import com.hypherionmc.sdlink.core.discord.commands.slash.verification.*;
|
||||||
import com.jagrosh.jdautilities.command.CommandClient;
|
import com.jagrosh.jdautilities.command.CommandClient;
|
||||||
import com.jagrosh.jdautilities.command.SlashCommand;
|
import com.jagrosh.jdautilities.command.SlashCommand;
|
||||||
@@ -29,6 +30,7 @@ public class CommandManager {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void addCommands() {
|
private void addCommands() {
|
||||||
|
// Access Control Commands
|
||||||
commands.add(new VerifyAccountCommand());
|
commands.add(new VerifyAccountCommand());
|
||||||
commands.add(new UnverifyAccountSlashCommand());
|
commands.add(new UnverifyAccountSlashCommand());
|
||||||
commands.add(new StaffUnverifyCommand());
|
commands.add(new StaffUnverifyCommand());
|
||||||
@@ -43,6 +45,9 @@ public class CommandManager {
|
|||||||
|
|
||||||
// Enable the Help command
|
// Enable the Help command
|
||||||
commands.add(new HelpSlashCommand());
|
commands.add(new HelpSlashCommand());
|
||||||
|
|
||||||
|
// SetChannel config Command
|
||||||
|
commands.add(new SetChannelCommand());
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@@ -0,0 +1,114 @@
|
|||||||
|
package com.hypherionmc.sdlink.core.discord.commands.slash.setup;
|
||||||
|
|
||||||
|
import com.hypherionmc.sdlink.core.config.SDLinkConfig;
|
||||||
|
import com.hypherionmc.sdlink.core.discord.commands.slash.SDLinkSlashCommand;
|
||||||
|
import com.hypherionmc.sdlink.core.messaging.Result;
|
||||||
|
import com.hypherionmc.sdlink.core.util.EncryptionUtil;
|
||||||
|
import com.jagrosh.jdautilities.command.SlashCommandEvent;
|
||||||
|
import net.dv8tion.jda.api.entities.channel.ChannelType;
|
||||||
|
import net.dv8tion.jda.api.entities.channel.middleman.StandardGuildMessageChannel;
|
||||||
|
import net.dv8tion.jda.api.interactions.commands.Command;
|
||||||
|
import net.dv8tion.jda.api.interactions.commands.OptionType;
|
||||||
|
import net.dv8tion.jda.api.interactions.commands.build.OptionData;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class SetChannelCommand extends SDLinkSlashCommand {
|
||||||
|
|
||||||
|
public SetChannelCommand() {
|
||||||
|
super(true);
|
||||||
|
this.name = "setchannel";
|
||||||
|
this.help = "Configure a channel for the mod to use";
|
||||||
|
this.guildOnly = true;
|
||||||
|
|
||||||
|
List<Command.Choice> choices = new ArrayList<>();
|
||||||
|
choices.add(new Command.Choice("Chat", "chat"));
|
||||||
|
choices.add(new Command.Choice("Events", "events"));
|
||||||
|
choices.add(new Command.Choice("Console", "console"));
|
||||||
|
|
||||||
|
List<OptionData> optionData = new ArrayList<>();
|
||||||
|
optionData.add(new OptionData(OptionType.CHANNEL, "channel", "The channel to set").setChannelTypes(ChannelType.TEXT).setRequired(true));
|
||||||
|
optionData.add(new OptionData(OptionType.STRING, "type", "The type of channel to assign this channel to").addChoices(choices).setRequired(true));
|
||||||
|
optionData.add(new OptionData(OptionType.BOOLEAN, "webhook", "Create a webhook instead of using the channel").setRequired(true));
|
||||||
|
|
||||||
|
this.options = optionData;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void execute(SlashCommandEvent event) {
|
||||||
|
StandardGuildMessageChannel channel = event.getOption("channel").getAsChannel().asStandardGuildMessageChannel();
|
||||||
|
String type = event.getOption("type").getAsString();
|
||||||
|
boolean webhook = event.getOption("webhook").getAsBoolean();
|
||||||
|
|
||||||
|
if (!channel.canTalk()) {
|
||||||
|
event.reply("I do not have permission to send messages in " + channel.getAsMention()).setEphemeral(true).queue();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
Result result;
|
||||||
|
|
||||||
|
if (webhook) {
|
||||||
|
result = setWebhook(channel, type);
|
||||||
|
} else {
|
||||||
|
result = setChannel(channel, type);
|
||||||
|
}
|
||||||
|
|
||||||
|
event.reply(result.getMessage()).setEphemeral(true).queue();
|
||||||
|
}
|
||||||
|
|
||||||
|
private Result setChannel(StandardGuildMessageChannel channel, String type) {
|
||||||
|
try {
|
||||||
|
switch (type.toLowerCase()) {
|
||||||
|
case "chat": {
|
||||||
|
SDLinkConfig.INSTANCE.channelsAndWebhooks.channels.chatChannelID = channel.getId();
|
||||||
|
SDLinkConfig.INSTANCE.saveConfig(SDLinkConfig.INSTANCE);
|
||||||
|
}
|
||||||
|
case "event": {
|
||||||
|
SDLinkConfig.INSTANCE.channelsAndWebhooks.channels.eventsChannelID = channel.getId();
|
||||||
|
SDLinkConfig.INSTANCE.saveConfig(SDLinkConfig.INSTANCE);
|
||||||
|
}
|
||||||
|
case "console": {
|
||||||
|
SDLinkConfig.INSTANCE.channelsAndWebhooks.channels.consoleChannelID = channel.getId();
|
||||||
|
SDLinkConfig.INSTANCE.saveConfig(SDLinkConfig.INSTANCE);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return Result.success("Saved Channel to Config. Restart your server for the channel to become active");
|
||||||
|
} catch (Exception e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
return Result.error("Failed to save config: " + e.getMessage());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private Result setWebhook(StandardGuildMessageChannel channel, String type) {
|
||||||
|
try {
|
||||||
|
switch (type.toLowerCase()) {
|
||||||
|
case "chat": {
|
||||||
|
channel.createWebhook("SDLink " + type).queue(s -> {
|
||||||
|
SDLinkConfig.INSTANCE.channelsAndWebhooks.webhooks.chatWebhook = EncryptionUtil.INSTANCE.encrypt(s.getUrl());
|
||||||
|
SDLinkConfig.INSTANCE.saveConfig(SDLinkConfig.INSTANCE);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
case "event": {
|
||||||
|
channel.createWebhook("SDLink " + type).queue(s -> {
|
||||||
|
SDLinkConfig.INSTANCE.channelsAndWebhooks.webhooks.eventsWebhook = EncryptionUtil.INSTANCE.encrypt(s.getUrl());
|
||||||
|
SDLinkConfig.INSTANCE.saveConfig(SDLinkConfig.INSTANCE);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
case "console": {
|
||||||
|
channel.createWebhook("SDLink " + type).queue(s -> {
|
||||||
|
SDLinkConfig.INSTANCE.channelsAndWebhooks.webhooks.consoleWebhook = EncryptionUtil.INSTANCE.encrypt(s.getUrl());
|
||||||
|
SDLinkConfig.INSTANCE.saveConfig(SDLinkConfig.INSTANCE);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return Result.success("Saved Webhook to Config. Restart your server for the webhook to become active");
|
||||||
|
} catch (Exception e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
return Result.error("Failed to save config: " + e.getMessage());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
Reference in New Issue
Block a user