Merge branch 'slash_commands'
# Conflicts: # src/main/java/com/alttd/proxydiscordlink/bot/Bot.java # src/main/java/com/alttd/proxydiscordlink/util/Utilities.java
This commit is contained in:
commit
3b4a4660d0
|
|
@ -7,7 +7,7 @@ plugins {
|
|||
allprojects {
|
||||
val build = System.getenv("BUILD_NUMBER") ?: "SNAPSHOT"
|
||||
group = "com.alttd.proxydiscordlink"
|
||||
version = "1.0.0-BETA-$build"
|
||||
version = "1.0.1-BETA-$build"
|
||||
description = "A velocity plugin to link Discord and Minecraft accounts."
|
||||
|
||||
apply(plugin = "java")
|
||||
|
|
@ -38,8 +38,8 @@ dependencies {
|
|||
compileOnly("com.velocitypowered:velocity-api:3.1.2-SNAPSHOT") // Velocity
|
||||
annotationProcessor("com.velocitypowered:velocity-api:3.1.2-SNAPSHOT")
|
||||
// JDA
|
||||
implementation("net.dv8tion:JDA:5.0.0-alpha.3") {
|
||||
shadow("net.dv8tion:JDA:5.0.0-alpha.3") {
|
||||
implementation("net.dv8tion:JDA:5.0.0-beta.2") {
|
||||
shadow("net.dv8tion:JDA:5.0.0-beta.2") {
|
||||
exclude("opus-java") // exclude audio
|
||||
}
|
||||
compileOnly("com.gitlab.ruany:LitebansAPI:0.3.5")
|
||||
|
|
|
|||
|
|
@ -19,11 +19,11 @@ import com.velocitypowered.api.plugin.Dependency;
|
|||
import com.velocitypowered.api.plugin.Plugin;
|
||||
import com.velocitypowered.api.plugin.annotation.DataDirectory;
|
||||
import com.velocitypowered.api.proxy.ProxyServer;
|
||||
import org.slf4j.Logger;
|
||||
|
||||
import java.io.File;
|
||||
import java.nio.file.Path;
|
||||
import java.sql.SQLException;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
@Plugin(id = "proxydiscordlink", name = "ProxyDiscordLink", version = "1.0.0",
|
||||
description = "A plugin that links Discord accounts with uuid's",
|
||||
|
|
@ -63,8 +63,8 @@ public class DiscordLink {
|
|||
DatabaseConnection.initialize();
|
||||
} catch (SQLException exception) {
|
||||
exception.printStackTrace();
|
||||
getLogger().severe("*** Could not connect to the database. ***");
|
||||
getLogger().severe("*** This plugin will be disabled. ***");
|
||||
ALogger.error("*** Could not connect to the database. ***");
|
||||
ALogger.error("*** This plugin will be disabled. ***");
|
||||
//TODO shutdown plugin
|
||||
}
|
||||
loadCommands();
|
||||
|
|
|
|||
23
src/main/java/com/alttd/proxydiscordlink/JDAListener.java
Normal file
23
src/main/java/com/alttd/proxydiscordlink/JDAListener.java
Normal file
|
|
@ -0,0 +1,23 @@
|
|||
package com.alttd.proxydiscordlink;
|
||||
|
||||
import com.alttd.proxydiscordlink.bot.commandManager.CommandManager;
|
||||
import net.dv8tion.jda.api.JDA;
|
||||
import net.dv8tion.jda.api.events.session.ReadyEvent;
|
||||
import net.dv8tion.jda.api.hooks.ListenerAdapter;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
public class JDAListener extends ListenerAdapter {
|
||||
|
||||
private final JDA jda;
|
||||
|
||||
public JDAListener(JDA jda) {
|
||||
this.jda = jda;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onReady(@NotNull ReadyEvent event) {
|
||||
CommandManager commandManager = new CommandManager(jda);
|
||||
jda.addEventListener(commandManager);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -1,9 +1,12 @@
|
|||
package com.alttd.proxydiscordlink.bot;
|
||||
|
||||
import com.alttd.proxydiscordlink.JDAListener;
|
||||
import com.alttd.proxydiscordlink.bot.commandManager.CommandManager;
|
||||
import com.alttd.proxydiscordlink.DiscordLink;
|
||||
import com.alttd.proxydiscordlink.bot.listeners.DiscordMessageListener;
|
||||
import com.alttd.proxydiscordlink.bot.listeners.DiscordRoleListener;
|
||||
import com.alttd.proxydiscordlink.bot.tasks.CheckLinkSync;
|
||||
import com.alttd.proxydiscordlink.bot.tasks.CheckLinkSync;
|
||||
import com.alttd.proxydiscordlink.config.BotConfig;
|
||||
import com.alttd.proxydiscordlink.util.ALogger;
|
||||
import net.dv8tion.jda.api.EmbedBuilder;
|
||||
|
|
@ -13,9 +16,11 @@ import net.dv8tion.jda.api.Permission;
|
|||
import net.dv8tion.jda.api.entities.Guild;
|
||||
import net.dv8tion.jda.api.entities.Member;
|
||||
import net.dv8tion.jda.api.entities.Role;
|
||||
import net.dv8tion.jda.api.entities.TextChannel;
|
||||
import net.dv8tion.jda.api.entities.channel.concrete.TextChannel;
|
||||
import net.dv8tion.jda.api.exceptions.HierarchyException;
|
||||
import net.dv8tion.jda.api.exceptions.InsufficientPermissionException;
|
||||
import net.dv8tion.jda.api.hooks.ListenerAdapter;
|
||||
import net.dv8tion.jda.api.hooks.ListenerAdapter;
|
||||
import net.dv8tion.jda.api.requests.GatewayIntent;
|
||||
import net.dv8tion.jda.api.utils.MemberCachePolicy;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
|
@ -33,15 +38,16 @@ public class Bot {
|
|||
disconnect();
|
||||
try {
|
||||
jda = JDABuilder
|
||||
.createDefault(BotConfig.BOT_TOKEN)
|
||||
.createDefault(BotConfig.DISCORD.BOT_TOKEN)
|
||||
.setMemberCachePolicy(MemberCachePolicy.ALL)
|
||||
.enableIntents(GatewayIntent.GUILD_MEMBERS)
|
||||
.build();
|
||||
jda.setAutoReconnect(true);
|
||||
jda.awaitReady();
|
||||
jda.addEventListener(new DiscordMessageListener(),
|
||||
new DiscordRoleListener());
|
||||
|
||||
jda.addEventListener(
|
||||
new DiscordMessageListener(),
|
||||
new DiscordRoleListener(),
|
||||
new JDAListener(jda)));
|
||||
DiscordCommand.loadCommands();
|
||||
DiscordLink.getPlugin().getProxy().getScheduler().buildTask(DiscordLink.getPlugin(), new CheckLinkSync())
|
||||
.delay(120, TimeUnit.SECONDS)
|
||||
|
|
@ -236,9 +242,9 @@ public class Bot {
|
|||
private void discordBan(Member member, @Nullable String optionalReason) {
|
||||
try {
|
||||
if (optionalReason == null)
|
||||
member.ban(0).queue();
|
||||
member.ban(0, TimeUnit.DAYS).queue();
|
||||
else
|
||||
member.ban(0, optionalReason).queue();
|
||||
member.ban(0, TimeUnit.DAYS).reason(optionalReason).queue();
|
||||
} catch (InsufficientPermissionException exception) {
|
||||
ALogger.warn("Unable to ban " + member.getAsMention() + " : " + member.getId() + " from Discord they might be above me.");
|
||||
}
|
||||
|
|
@ -259,4 +265,8 @@ public class Bot {
|
|||
|
||||
return guild.getMembers().stream().filter(member -> member.getRoles().contains(role)).toList();
|
||||
}
|
||||
|
||||
public void addListener(ListenerAdapter listenerAdapter) {
|
||||
jda.addEventListener(listenerAdapter);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,40 +0,0 @@
|
|||
package com.alttd.proxydiscordlink.bot;
|
||||
|
||||
import com.alttd.proxydiscordlink.bot.commands.*;
|
||||
import net.dv8tion.jda.api.entities.Message;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
public abstract class DiscordCommand {
|
||||
|
||||
private static List<DiscordCommand> commands;
|
||||
|
||||
public abstract String getCommand();
|
||||
public abstract String getPermission();// TODO discord and LP permissions
|
||||
public abstract String getDescription();
|
||||
public abstract String getSyntax();
|
||||
public abstract long getChannel();
|
||||
|
||||
public abstract void handleCommand(Message message, String sender, String command, String[] args);
|
||||
|
||||
public static void loadCommands() {
|
||||
commands = new ArrayList<>();
|
||||
|
||||
loadCommand(new DiscordLinkCommand(),
|
||||
new DiscordUnlink(),
|
||||
new DiscordNick(),
|
||||
new DiscordStaffList(),
|
||||
new DiscordServerList()
|
||||
);
|
||||
}
|
||||
|
||||
private static void loadCommand(DiscordCommand ... discordCommands) {
|
||||
Collections.addAll(commands, discordCommands);
|
||||
}
|
||||
|
||||
public static List<DiscordCommand> getCommands() {
|
||||
return commands;
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,58 @@
|
|||
package com.alttd.proxydiscordlink.bot.commandManager;
|
||||
|
||||
import com.alttd.proxydiscordlink.bot.commandManager.commands.*;
|
||||
import com.alttd.proxydiscordlink.bot.commandManager.commands.NickCommand.CommandNick;
|
||||
import com.alttd.proxydiscordlink.util.ALogger;
|
||||
import net.dv8tion.jda.api.EmbedBuilder;
|
||||
import net.dv8tion.jda.api.JDA;
|
||||
import net.dv8tion.jda.api.events.interaction.command.CommandAutoCompleteInteractionEvent;
|
||||
import net.dv8tion.jda.api.events.interaction.command.SlashCommandInteractionEvent;
|
||||
import net.dv8tion.jda.api.hooks.ListenerAdapter;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.awt.*;
|
||||
import java.util.List;
|
||||
import java.util.Optional;
|
||||
|
||||
public class CommandManager extends ListenerAdapter {
|
||||
|
||||
private final List<DiscordCommand> commands;
|
||||
|
||||
public CommandManager(JDA jda) {
|
||||
ALogger.info("Loading commands...");
|
||||
commands = List.of(
|
||||
new CommandLink(jda),
|
||||
new CommandUnlink(jda),
|
||||
new CommandNick(jda),
|
||||
new CommandServerList(jda),
|
||||
new CommandStaffList(jda),
|
||||
new CommandBroadcast(jda)
|
||||
);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onSlashCommandInteraction(@NotNull SlashCommandInteractionEvent event) {
|
||||
String commandName = event.getName();
|
||||
Optional<DiscordCommand> first = commands.stream()
|
||||
.filter(discordCommand -> discordCommand.getName().equalsIgnoreCase(commandName))
|
||||
.findFirst();
|
||||
if (first.isEmpty()) {
|
||||
return;
|
||||
}
|
||||
first.get().execute(event);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCommandAutoCompleteInteraction(@NotNull CommandAutoCompleteInteractionEvent event) {
|
||||
Optional<DiscordCommand> first = commands.stream()
|
||||
.filter(discordCommand -> discordCommand.getName().equalsIgnoreCase(event.getName()))
|
||||
.findFirst();
|
||||
if (first.isEmpty())
|
||||
return;
|
||||
first.get().suggest(event);
|
||||
}
|
||||
|
||||
public List<DiscordCommand> getCommands() {
|
||||
return commands;
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,22 @@
|
|||
package com.alttd.proxydiscordlink.bot.commandManager;
|
||||
|
||||
import net.dv8tion.jda.api.events.interaction.command.CommandAutoCompleteInteractionEvent;
|
||||
import net.dv8tion.jda.api.events.interaction.command.SlashCommandInteractionEvent;
|
||||
import net.dv8tion.jda.api.interactions.commands.build.CommandData;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
||||
public abstract class DiscordCommand {
|
||||
|
||||
public abstract String getName();
|
||||
|
||||
public abstract void execute(SlashCommandInteractionEvent event);
|
||||
|
||||
public void suggest(CommandAutoCompleteInteractionEvent event) {
|
||||
event.replyChoices(new ArrayList<>()).queue();
|
||||
}
|
||||
|
||||
public abstract CommandData getCommandData();
|
||||
|
||||
public abstract long getChannelId();
|
||||
}
|
||||
|
|
@ -0,0 +1,29 @@
|
|||
package com.alttd.proxydiscordlink.bot.commandManager;
|
||||
|
||||
import net.dv8tion.jda.api.events.interaction.command.CommandAutoCompleteInteractionEvent;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
||||
public abstract class SubCommand extends SubOption{
|
||||
|
||||
private final SubCommandGroup parentGroup;
|
||||
private final boolean inSubGroup;
|
||||
|
||||
protected SubCommand(SubCommandGroup parentGroup, DiscordCommand parent) {
|
||||
super(parent);
|
||||
this.parentGroup = parentGroup;
|
||||
this.inSubGroup = parentGroup != null;
|
||||
}
|
||||
|
||||
public SubCommandGroup getParentGroup() {
|
||||
return parentGroup;
|
||||
}
|
||||
|
||||
public boolean isInSubGroup() {
|
||||
return inSubGroup;
|
||||
}
|
||||
|
||||
public void suggest(CommandAutoCompleteInteractionEvent event) {
|
||||
event.replyChoices(new ArrayList<>()).queue();
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,7 @@
|
|||
package com.alttd.proxydiscordlink.bot.commandManager;
|
||||
|
||||
public abstract class SubCommandGroup extends SubOption{
|
||||
protected SubCommandGroup(DiscordCommand parent) {
|
||||
super(parent);
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,21 @@
|
|||
package com.alttd.proxydiscordlink.bot.commandManager;
|
||||
|
||||
import net.dv8tion.jda.api.events.interaction.command.SlashCommandInteractionEvent;
|
||||
|
||||
public abstract class SubOption {
|
||||
private final DiscordCommand parent;
|
||||
|
||||
protected SubOption(DiscordCommand parent) {
|
||||
this.parent = parent;
|
||||
}
|
||||
|
||||
public DiscordCommand getParent() {
|
||||
return parent;
|
||||
}
|
||||
|
||||
public abstract String getName();
|
||||
|
||||
public abstract void execute(SlashCommandInteractionEvent event);
|
||||
|
||||
public abstract String getHelpMessage();
|
||||
}
|
||||
|
|
@ -0,0 +1,49 @@
|
|||
package com.alttd.proxydiscordlink.bot.commandManager.commands;
|
||||
|
||||
import com.alttd.proxydiscordlink.bot.commandManager.DiscordCommand;
|
||||
import com.alttd.proxydiscordlink.config.BotConfig;
|
||||
import com.alttd.proxydiscordlink.util.Utilities;
|
||||
import net.dv8tion.jda.api.JDA;
|
||||
import net.dv8tion.jda.api.events.interaction.command.SlashCommandInteractionEvent;
|
||||
import net.dv8tion.jda.api.interactions.commands.DefaultMemberPermissions;
|
||||
import net.dv8tion.jda.api.interactions.commands.OptionMapping;
|
||||
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;
|
||||
|
||||
public class CommandBroadcast extends DiscordCommand {
|
||||
|
||||
CommandData commandData;
|
||||
public CommandBroadcast(JDA jda) {
|
||||
commandData = Commands.slash(getName(), "Broadcast a message to all online players")
|
||||
.addOption(OptionType.STRING, "text", "Text to broadcast", true)
|
||||
.setDefaultPermissions(DefaultMemberPermissions.DISABLED);
|
||||
Utilities.registerCommand(jda, commandData);
|
||||
}
|
||||
@Override
|
||||
public String getName() {
|
||||
return "broadcast";
|
||||
}
|
||||
|
||||
@Override
|
||||
public void execute(SlashCommandInteractionEvent event) {
|
||||
String msg = event.getOption("text", OptionMapping::getAsString);
|
||||
if (msg == null) {
|
||||
Utilities.commandErrAutoRem("Couldn't find text", event);
|
||||
return;
|
||||
}
|
||||
event.replyEmbeds(Utilities.genericSuccessEmbed("Success", "Broadcast the following message:\n" + msg))
|
||||
.setEphemeral(true).queue();
|
||||
Utilities.broadcast(msg);
|
||||
}
|
||||
|
||||
@Override
|
||||
public CommandData getCommandData() {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public long getChannelId() {
|
||||
return BotConfig.DISCORD.STAFF_COMMAND_CHANNEL;
|
||||
}
|
||||
}
|
||||
|
|
@ -1,17 +1,21 @@
|
|||
package com.alttd.proxydiscordlink.bot.commands;
|
||||
package com.alttd.proxydiscordlink.bot.commandManager.commands;
|
||||
|
||||
import com.alttd.proxydiscordlink.DiscordLink;
|
||||
import com.alttd.proxydiscordlink.bot.DiscordCommand;
|
||||
import com.alttd.proxydiscordlink.bot.commandManager.DiscordCommand;
|
||||
import com.alttd.proxydiscordlink.bot.objects.DiscordRole;
|
||||
import com.alttd.proxydiscordlink.config.BotConfig;
|
||||
import com.alttd.proxydiscordlink.config.Config;
|
||||
import com.alttd.proxydiscordlink.objects.DiscordLinkPlayer;
|
||||
import com.alttd.proxydiscordlink.util.Utilities;
|
||||
import com.velocitypowered.api.proxy.Player;
|
||||
import net.dv8tion.jda.api.JDA;
|
||||
import net.dv8tion.jda.api.entities.Guild;
|
||||
import net.dv8tion.jda.api.entities.Member;
|
||||
import net.dv8tion.jda.api.entities.Message;
|
||||
import net.dv8tion.jda.api.entities.TextChannel;
|
||||
import net.dv8tion.jda.api.exceptions.HierarchyException;
|
||||
import net.dv8tion.jda.api.events.interaction.command.SlashCommandInteractionEvent;
|
||||
import net.dv8tion.jda.api.interactions.commands.DefaultMemberPermissions;
|
||||
import net.dv8tion.jda.api.interactions.commands.OptionMapping;
|
||||
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 net.luckperms.api.model.user.User;
|
||||
|
||||
import java.util.List;
|
||||
|
|
@ -20,41 +24,34 @@ import java.util.UUID;
|
|||
import java.util.concurrent.TimeUnit;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
public class DiscordLinkCommand extends DiscordCommand {
|
||||
public class CommandLink extends DiscordCommand {
|
||||
private final CommandData commandData;
|
||||
public CommandLink(JDA jda) {
|
||||
commandData = Commands.slash(getName(), "Link your Discord and Altitude Minecraft accounts")
|
||||
.addOption(OptionType.STRING, "code", "The code you got from doing /discord link on Altitude in Minecraft", true)
|
||||
.setDefaultPermissions(DefaultMemberPermissions.ENABLED);
|
||||
|
||||
Utilities.registerCommand(jda, commandData);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getCommand() {
|
||||
public String getName() {
|
||||
return "link";
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getPermission() {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getDescription() {
|
||||
return "Link your Minecraft and Discord accounts.";
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getSyntax() {
|
||||
return "link <code>";
|
||||
}
|
||||
|
||||
@Override
|
||||
public long getChannel() {
|
||||
return BotConfig.LINK_CHANNEL;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void handleCommand(Message message, String sender, String command, String[] args) {
|
||||
Member member = message.getMember();
|
||||
if (member == null)
|
||||
public void execute(SlashCommandInteractionEvent event) {
|
||||
Member member = event.getMember();
|
||||
if (member == null) {
|
||||
Utilities.commandErrAutoRem("Unable to find you", event);
|
||||
return;
|
||||
}
|
||||
|
||||
UUID uuid;
|
||||
if ((uuid = getUUID(message.getTextChannel(), args.length == 1 ? args[0] : "")) == null)
|
||||
UUID uuid = getUUID(event.getOption("code", OptionMapping::getAsString));
|
||||
if (uuid == null) {
|
||||
Utilities.commandErrAutoRem("This is not a valid link code, please check Minecraft and try again", event);
|
||||
return;
|
||||
}
|
||||
|
||||
List<DiscordRole> discordRoles = Utilities.getDiscordRolesForUser(uuid, member);
|
||||
|
||||
|
|
@ -69,10 +66,10 @@ public class DiscordLinkCommand extends DiscordCommand {
|
|||
.map(DiscordRole::getInternalName)
|
||||
.collect(Collectors.toList()));
|
||||
|
||||
linkAccount(discordLinkPlayer, message);
|
||||
linkAccount(discordLinkPlayer, event);
|
||||
}
|
||||
|
||||
private void linkAccount(DiscordLinkPlayer discordLinkPlayer, Message message) {
|
||||
private void linkAccount(DiscordLinkPlayer discordLinkPlayer, SlashCommandInteractionEvent event) {
|
||||
discordLinkPlayer.updateDiscord(
|
||||
DiscordRole.getDiscordRoles().stream()
|
||||
.filter(role -> discordLinkPlayer.getRoles().contains(role.getInternalName()))
|
||||
|
|
@ -87,23 +84,30 @@ public class DiscordLinkCommand extends DiscordCommand {
|
|||
discordLinkPlayer.linkedRole(true);
|
||||
Player player = DiscordLink.getPlugin().getProxy().getPlayer(discordLinkPlayer.getUuid()).orElse(null);
|
||||
User user = Utilities.getLuckPerms().getUserManager().getUser(discordLinkPlayer.getUuid());
|
||||
Guild guild = event.getGuild();
|
||||
Member member = event.getMember();
|
||||
if (guild == null || member == null) {
|
||||
Utilities.commandErrAutoRem("Unable to find guild", event);
|
||||
return;
|
||||
}
|
||||
if (player != null || user != null)
|
||||
DiscordLink.getPlugin().getBot().changeNick(
|
||||
message.getGuild().getIdLong(),
|
||||
message.getMember().getIdLong(),
|
||||
guild.getIdLong(),
|
||||
member.getIdLong(),
|
||||
player == null ?
|
||||
user.getUsername() :
|
||||
player.getUsername());
|
||||
else
|
||||
DiscordLink.getPlugin().getBot().changeNick(
|
||||
message.getGuild().getIdLong(),
|
||||
message.getMember().getIdLong(),
|
||||
guild.getIdLong(),
|
||||
member.getIdLong(),
|
||||
discordLinkPlayer.getUsername());
|
||||
|
||||
message.getChannel().sendMessage("You have successfully linked " +
|
||||
discordLinkPlayer.getUsername() + " with " +
|
||||
discordLinkPlayer.getDiscordUsername() + "!")
|
||||
.queue(message1 -> message1.delete().queueAfter(5, TimeUnit.SECONDS));
|
||||
event.replyEmbeds(Utilities.genericSuccessEmbed("Success","You have successfully linked " +
|
||||
discordLinkPlayer.getUsername() + " with " +
|
||||
discordLinkPlayer.getDiscordUsername() + "!"))
|
||||
.setEphemeral(true)
|
||||
.queue(result -> result.deleteOriginal().queueAfter(5, TimeUnit.SECONDS));
|
||||
|
||||
DiscordLinkPlayer.addDiscordLinkPlayer(discordLinkPlayer);
|
||||
DiscordLink.getPlugin().getDatabase().syncPlayer(discordLinkPlayer);
|
||||
|
|
@ -123,16 +127,19 @@ public class DiscordLinkCommand extends DiscordCommand {
|
|||
return "No User";
|
||||
}
|
||||
|
||||
private UUID getUUID(TextChannel channel, String code) {
|
||||
UUID uuid;
|
||||
if (code.matches("[0-9]{6}")) {
|
||||
if ((uuid = DiscordLink.getPlugin().getCache().getUUID(code)) != null)
|
||||
return uuid;
|
||||
}
|
||||
private UUID getUUID(String code) {
|
||||
if (code == null || !code.matches("[0-9]{6}"))
|
||||
return null;
|
||||
return DiscordLink.getPlugin().getCache().getUUID(code);
|
||||
}
|
||||
|
||||
channel.sendMessage("Please use `&link ######` where the #'s are the code you received in-game.")
|
||||
.queue(message1 -> message1.delete().queueAfter(15, TimeUnit.SECONDS, null, error -> {
|
||||
}));
|
||||
return null;
|
||||
@Override
|
||||
public CommandData getCommandData() {
|
||||
return commandData;
|
||||
}
|
||||
|
||||
@Override
|
||||
public long getChannelId() {
|
||||
return BotConfig.DISCORD.LINK_CHANNEL;
|
||||
}
|
||||
}
|
||||
|
|
@ -1,68 +1,58 @@
|
|||
package com.alttd.proxydiscordlink.bot.commands;
|
||||
package com.alttd.proxydiscordlink.bot.commandManager.commands;
|
||||
|
||||
import com.alttd.proxydiscordlink.DiscordLink;
|
||||
import com.alttd.proxydiscordlink.bot.Bot;
|
||||
import com.alttd.proxydiscordlink.bot.DiscordCommand;
|
||||
import com.alttd.proxydiscordlink.bot.commandManager.DiscordCommand;
|
||||
import com.alttd.proxydiscordlink.config.BotConfig;
|
||||
import com.alttd.proxydiscordlink.util.Utilities;
|
||||
import com.velocitypowered.api.proxy.Player;
|
||||
import com.velocitypowered.api.proxy.server.RegisteredServer;
|
||||
import com.velocitypowered.api.proxy.server.ServerInfo;
|
||||
import net.dv8tion.jda.api.EmbedBuilder;
|
||||
import net.dv8tion.jda.api.entities.Message;
|
||||
import net.dv8tion.jda.api.JDA;
|
||||
import net.dv8tion.jda.api.events.interaction.command.SlashCommandInteractionEvent;
|
||||
import net.dv8tion.jda.api.interactions.commands.DefaultMemberPermissions;
|
||||
import net.dv8tion.jda.api.interactions.commands.OptionMapping;
|
||||
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 net.luckperms.api.LuckPerms;
|
||||
import net.luckperms.api.model.user.User;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
import java.util.Optional;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
public class DiscordServerList extends DiscordCommand {
|
||||
public class CommandServerList extends DiscordCommand {
|
||||
|
||||
private DiscordLink plugin;
|
||||
CommandData commandData;
|
||||
private final DiscordLink plugin;
|
||||
private final Bot bot;
|
||||
|
||||
public DiscordServerList() {
|
||||
public CommandServerList(JDA jda) {
|
||||
plugin = DiscordLink.getPlugin();
|
||||
bot = plugin.getBot();
|
||||
commandData = Commands.slash(getName(), "Lists all online players on the server or a specific server")
|
||||
.addOption(OptionType.STRING, "server", "Server to check online players on", false)
|
||||
.setDefaultPermissions(DefaultMemberPermissions.DISABLED);
|
||||
Utilities.registerCommand(jda, commandData);
|
||||
}
|
||||
|
||||
@SuppressWarnings("SpellCheckingInspection")
|
||||
@Override
|
||||
public String getCommand() {
|
||||
public String getName() {
|
||||
return "serverlist";
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getPermission() {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getDescription() {
|
||||
return "Lists all online players on the server or a specific server";
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getSyntax() {
|
||||
return "serverlist";
|
||||
}
|
||||
|
||||
@Override
|
||||
public long getChannel() {
|
||||
return BotConfig.STAFF_COMMAND_CHANNEL;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void handleCommand(Message message, String sender, String command, String[] args) {
|
||||
public void execute(SlashCommandInteractionEvent event) {
|
||||
String serverName = "Altitude";
|
||||
String tmp;
|
||||
Collection<Player> onlinePlayer = plugin.getProxy().getAllPlayers();
|
||||
ServerInfo server;
|
||||
if (args.length != 0) {
|
||||
Optional<RegisteredServer> registeredServer = plugin.getProxy().getServer(args[0]);
|
||||
if ((tmp = event.getOption("server", OptionMapping::getAsString)) != null) {
|
||||
Optional<RegisteredServer> registeredServer = plugin.getProxy().getServer(tmp);
|
||||
if (registeredServer.isEmpty()) {
|
||||
Utilities.commandErrAutoRem("This server does not exist " + tmp, event);
|
||||
return;
|
||||
}
|
||||
onlinePlayer = registeredServer.get().getPlayersConnected();
|
||||
|
|
@ -76,7 +66,7 @@ public class DiscordServerList extends DiscordCommand {
|
|||
int i = Integer.compare(luckPerms.getGroupManager().getGroup(o2.getPrimaryGroup()).getWeight().orElse(0), luckPerms.getGroupManager().getGroup(o1.getPrimaryGroup()).getWeight().orElse(0));
|
||||
return i != 0 ? i : o1.getUsername().compareToIgnoreCase(o2.getUsername());
|
||||
})
|
||||
.collect(Collectors.toList());
|
||||
.toList();
|
||||
EmbedBuilder embedBuilder = new EmbedBuilder();
|
||||
String title = "Players online on " + serverName + ": " + players.size();
|
||||
embedBuilder.setTitle(title);
|
||||
|
|
@ -87,16 +77,14 @@ public class DiscordServerList extends DiscordCommand {
|
|||
int totalCharacters = title.length();
|
||||
int fieldCounter = 0;
|
||||
|
||||
Iterator<User> iterator = players.iterator();
|
||||
while (iterator.hasNext()) {
|
||||
User user = iterator.next();
|
||||
if(user != null) {
|
||||
if(!rankname.equalsIgnoreCase(user.getPrimaryGroup())) {
|
||||
for (User user : players) {
|
||||
if (user != null) {
|
||||
if (!rankname.equalsIgnoreCase(user.getPrimaryGroup())) {
|
||||
if (currentFieldText.length() != 0) {
|
||||
totalCharacters += rankname.length() + currentFieldText.length();
|
||||
fieldCounter++;
|
||||
if (totalCharacters > 6000 || fieldCounter > 25) {
|
||||
bot.sendEmbedToDiscord(getChannel(), embedBuilder, 300);
|
||||
bot.sendEmbedToDiscord(getChannelId(), embedBuilder, 300);
|
||||
embedBuilder.clearFields();
|
||||
totalCharacters = title.length() + rankname.length() + currentFieldText.length();
|
||||
fieldCounter = 1;
|
||||
|
|
@ -106,16 +94,16 @@ public class DiscordServerList extends DiscordCommand {
|
|||
currentFieldText = new StringBuilder();
|
||||
}
|
||||
rankname = Utilities.capitalize(user.getPrimaryGroup());
|
||||
} else if(rankname.equalsIgnoreCase(user.getPrimaryGroup())) {
|
||||
} else if (rankname.equalsIgnoreCase(user.getPrimaryGroup())) {
|
||||
currentFieldText.append(separator);
|
||||
}
|
||||
if (entryCounter <= 50) {
|
||||
Optional<Player> optionalPlayer = plugin.getProxy().getPlayer(user.getUniqueId());
|
||||
if(optionalPlayer.isPresent()) {
|
||||
if (optionalPlayer.isPresent()) {
|
||||
Player player = optionalPlayer.get();
|
||||
currentFieldText.append("`").append(player.getUsername()).append("`");
|
||||
}
|
||||
} else if (entryCounter == 51){
|
||||
} else if (entryCounter == 51) {
|
||||
currentFieldText.append("...");
|
||||
}
|
||||
entryCounter++;
|
||||
|
|
@ -126,13 +114,22 @@ public class DiscordServerList extends DiscordCommand {
|
|||
totalCharacters = title.length() + rankname.length() + currentFieldText.length();
|
||||
fieldCounter++;
|
||||
if (totalCharacters > 6000 || fieldCounter > 25) {
|
||||
bot.sendEmbedToDiscord(getChannel(), embedBuilder, 300);
|
||||
bot.sendEmbedToDiscord(getChannelId(), embedBuilder, 300);
|
||||
embedBuilder.clearFields();
|
||||
}
|
||||
embedBuilder.addField(rankname, currentFieldText.toString(), true);
|
||||
}
|
||||
|
||||
message.delete().queueAfter(300, TimeUnit.SECONDS);
|
||||
bot.sendEmbedToDiscord(getChannel(), embedBuilder, 300);
|
||||
bot.sendEmbedToDiscord(getChannelId(), embedBuilder, 300);
|
||||
}
|
||||
|
||||
@Override
|
||||
public CommandData getCommandData() {
|
||||
return commandData;
|
||||
}
|
||||
|
||||
@Override
|
||||
public long getChannelId() {
|
||||
return BotConfig.DISCORD.STAFF_COMMAND_CHANNEL;
|
||||
}
|
||||
}
|
||||
|
|
@ -1,56 +1,48 @@
|
|||
package com.alttd.proxydiscordlink.bot.commands;
|
||||
package com.alttd.proxydiscordlink.bot.commandManager.commands;
|
||||
|
||||
import com.alttd.proxydiscordlink.DiscordLink;
|
||||
import com.alttd.proxydiscordlink.bot.Bot;
|
||||
import com.alttd.proxydiscordlink.bot.DiscordCommand;
|
||||
import com.alttd.proxydiscordlink.bot.commandManager.DiscordCommand;
|
||||
import com.alttd.proxydiscordlink.config.BotConfig;
|
||||
import com.alttd.proxydiscordlink.util.Utilities;
|
||||
import com.velocitypowered.api.proxy.Player;
|
||||
import net.dv8tion.jda.api.EmbedBuilder;
|
||||
import net.dv8tion.jda.api.entities.Message;
|
||||
import net.dv8tion.jda.api.JDA;
|
||||
import net.dv8tion.jda.api.events.interaction.command.SlashCommandInteractionEvent;
|
||||
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 net.luckperms.api.LuckPerms;
|
||||
import net.luckperms.api.model.user.User;
|
||||
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Optional;
|
||||
|
||||
public class DiscordStaffList extends DiscordCommand {
|
||||
public class CommandStaffList extends DiscordCommand {
|
||||
|
||||
private DiscordLink plugin;
|
||||
CommandData commandData;
|
||||
private final DiscordLink plugin;
|
||||
private final Bot bot;
|
||||
|
||||
public DiscordStaffList() {
|
||||
public CommandStaffList(JDA jda) {
|
||||
plugin = DiscordLink.getPlugin();
|
||||
bot = plugin.getBot();
|
||||
commandData = Commands.slash(getName(), "Lists all online players on the server or a specific server")
|
||||
.addOption(OptionType.STRING, "server", "Server to check online players on", false)
|
||||
.setDefaultPermissions(DefaultMemberPermissions.DISABLED);
|
||||
Utilities.registerCommand(jda, commandData);
|
||||
}
|
||||
|
||||
@SuppressWarnings("SpellCheckingInspection")
|
||||
@Override
|
||||
public String getCommand() {
|
||||
public String getName() {
|
||||
return "stafflist";
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getPermission() {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getDescription() {
|
||||
return "Lists all online staff on the server";
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getSyntax() {
|
||||
return "staffList";
|
||||
}
|
||||
|
||||
@Override
|
||||
public long getChannel() {
|
||||
return BotConfig.STAFF_COMMAND_CHANNEL;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void handleCommand(Message message, String sender, String command, String[] args) {
|
||||
public void execute(SlashCommandInteractionEvent event) {
|
||||
LuckPerms luckPerms = Utilities.getLuckPerms();
|
||||
List<User> staff = plugin.getProxy().getAllPlayers()
|
||||
.stream().filter(player-> player.hasPermission("group." + BotConfig.SL_MINIMUMRANK))
|
||||
|
|
@ -59,7 +51,7 @@ public class DiscordStaffList extends DiscordCommand {
|
|||
int i = Integer.compare(luckPerms.getGroupManager().getGroup(o2.getPrimaryGroup()).getWeight().orElse(0), luckPerms.getGroupManager().getGroup(o1.getPrimaryGroup()).getWeight().orElse(0));
|
||||
return i != 0 ? i : o1.getUsername().compareToIgnoreCase(o2.getUsername());
|
||||
})
|
||||
.collect(Collectors.toList());
|
||||
.toList();
|
||||
EmbedBuilder embedBuilder = new EmbedBuilder();
|
||||
String title = "Online Staff: " + staff.size() + " - Online Players: " + plugin.getProxy().getAllPlayers().size();
|
||||
embedBuilder.setTitle(title);
|
||||
|
|
@ -72,16 +64,14 @@ public class DiscordStaffList extends DiscordCommand {
|
|||
int totalCharacters = title.length();
|
||||
int fieldCounter = 0;
|
||||
|
||||
Iterator<User> iterator = staff.iterator();
|
||||
while (iterator.hasNext()) {
|
||||
User user = iterator.next();
|
||||
if(user != null) {
|
||||
if(!rankname.equalsIgnoreCase(user.getPrimaryGroup())) {
|
||||
for (User user : staff) {
|
||||
if (user != null) {
|
||||
if (!rankname.equalsIgnoreCase(user.getPrimaryGroup())) {
|
||||
if (currentFieldText.length() != 0) {
|
||||
totalCharacters += rankname.length() + currentFieldText.length();
|
||||
fieldCounter++;
|
||||
if (totalCharacters > 6000 || fieldCounter > 25) {
|
||||
bot.sendEmbedToDiscord(getChannel(), embedBuilder, -1);
|
||||
bot.sendEmbedToDiscord(getChannelId(), embedBuilder, -1);
|
||||
embedBuilder.clearFields();
|
||||
totalCharacters = title.length() + rankname.length() + currentFieldText.length();
|
||||
fieldCounter = 1;
|
||||
|
|
@ -91,15 +81,15 @@ public class DiscordStaffList extends DiscordCommand {
|
|||
currentFieldText = new StringBuilder();
|
||||
}
|
||||
rankname = Utilities.capitalize(user.getPrimaryGroup());
|
||||
} else if(rankname.equalsIgnoreCase(user.getPrimaryGroup())) {
|
||||
} else if (rankname.equalsIgnoreCase(user.getPrimaryGroup())) {
|
||||
currentFieldText.append(separator);
|
||||
}
|
||||
|
||||
Optional<Player> optionalPlayer = plugin.getProxy().getPlayer(user.getUniqueId());
|
||||
if(optionalPlayer.isPresent()) {
|
||||
if (optionalPlayer.isPresent()) {
|
||||
Player player = optionalPlayer.get();
|
||||
String currentServerName = player.getCurrentServer().isPresent() ? player.getCurrentServer().get().getServerInfo().getName() : "";
|
||||
if (onlineStaff.containsKey(currentServerName)){
|
||||
if (onlineStaff.containsKey(currentServerName)) {
|
||||
onlineStaff.put(currentServerName, onlineStaff.get(currentServerName) + 1);
|
||||
} else {
|
||||
onlineStaff.put(currentServerName, 1);
|
||||
|
|
@ -107,7 +97,7 @@ public class DiscordStaffList extends DiscordCommand {
|
|||
|
||||
if (entryCounter <= 50) {
|
||||
currentFieldText.append("`").append(player.getUsername()).append("`");
|
||||
} else if (entryCounter == 51){
|
||||
} else if (entryCounter == 51) {
|
||||
currentFieldText.append("...");
|
||||
}
|
||||
entryCounter++;
|
||||
|
|
@ -119,7 +109,7 @@ public class DiscordStaffList extends DiscordCommand {
|
|||
totalCharacters = title.length() + rankname.length() + currentFieldText.length();
|
||||
fieldCounter++;
|
||||
if (totalCharacters > 6000 || fieldCounter > 25) {
|
||||
bot.sendEmbedToDiscord(getChannel(), embedBuilder, -1);
|
||||
bot.sendEmbedToDiscord(getChannelId(), embedBuilder, -1);
|
||||
embedBuilder.clearFields();
|
||||
}
|
||||
embedBuilder.addField(rankname, currentFieldText.toString(), true);
|
||||
|
|
@ -141,12 +131,22 @@ public class DiscordStaffList extends DiscordCommand {
|
|||
totalCharacters = title.length() + rankname.length() + currentFieldText.length();
|
||||
fieldCounter++;
|
||||
if (totalCharacters > 6000 || fieldCounter > 25) {
|
||||
bot.sendEmbedToDiscord(getChannel(), embedBuilder, -1);
|
||||
bot.sendEmbedToDiscord(getChannelId(), embedBuilder, -1);
|
||||
embedBuilder.clearFields();
|
||||
}
|
||||
embedBuilder.addField(rankname, currentFieldText.toString(), true);
|
||||
}
|
||||
|
||||
bot.sendEmbedToDiscord(getChannel(), embedBuilder, -1);
|
||||
bot.sendEmbedToDiscord(getChannelId(), embedBuilder, -1);
|
||||
}
|
||||
|
||||
@Override
|
||||
public CommandData getCommandData() {
|
||||
return commandData;
|
||||
}
|
||||
|
||||
@Override
|
||||
public long getChannelId() {
|
||||
return BotConfig.DISCORD.STAFF_COMMAND_CHANNEL;
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,66 @@
|
|||
package com.alttd.proxydiscordlink.bot.commandManager.commands;
|
||||
|
||||
import com.alttd.proxydiscordlink.bot.commandManager.DiscordCommand;
|
||||
import com.alttd.proxydiscordlink.config.BotConfig;
|
||||
import com.alttd.proxydiscordlink.objects.DiscordLinkPlayer;
|
||||
import com.alttd.proxydiscordlink.util.Utilities;
|
||||
import net.dv8tion.jda.api.JDA;
|
||||
import net.dv8tion.jda.api.entities.Member;
|
||||
import net.dv8tion.jda.api.entities.Role;
|
||||
import net.dv8tion.jda.api.events.interaction.command.SlashCommandInteractionEvent;
|
||||
import net.dv8tion.jda.api.interactions.commands.DefaultMemberPermissions;
|
||||
import net.dv8tion.jda.api.interactions.commands.build.CommandData;
|
||||
import net.dv8tion.jda.api.interactions.commands.build.Commands;
|
||||
|
||||
import java.util.Optional;
|
||||
|
||||
public class CommandUnlink extends DiscordCommand {
|
||||
private final CommandData commandData;
|
||||
public CommandUnlink(JDA jda) {
|
||||
commandData = Commands.slash(getName(), "Unlink your Discord and Altitude Minecraft accounts")
|
||||
.setDefaultPermissions(DefaultMemberPermissions.ENABLED);
|
||||
|
||||
Utilities.registerCommand(jda, commandData);
|
||||
}
|
||||
@Override
|
||||
public String getName() {
|
||||
return "unlink";
|
||||
}
|
||||
|
||||
@Override
|
||||
public void execute(SlashCommandInteractionEvent event) {
|
||||
Member member = event.getMember();
|
||||
if (member == null) {
|
||||
Utilities.commandErrAutoRem("Unable to find you", event);
|
||||
return;
|
||||
}
|
||||
|
||||
DiscordLinkPlayer discordLinkPlayer = DiscordLinkPlayer.getDiscordLinkPlayer(member.getIdLong());
|
||||
if (discordLinkPlayer == null) {
|
||||
Optional<Role> linkedRole = member.getRoles().stream().filter(role -> role.getIdLong() == BotConfig.DISCORD.LINKED_ROLE_ID).findAny();
|
||||
if (linkedRole.isPresent()) {
|
||||
member.getGuild().removeRoleFromMember(member, linkedRole.get()).queue();
|
||||
event.replyEmbeds(Utilities.genericSuccessEmbed("Success", "Your Discord and Minecraft accounts have been unlinked."))
|
||||
.setEphemeral(true)
|
||||
.queue();
|
||||
return;
|
||||
}
|
||||
Utilities.commandErrAutoRem("Your accounts aren't linked", event);
|
||||
return;
|
||||
}
|
||||
discordLinkPlayer.unlinkDiscordLinkPlayer();
|
||||
event.replyEmbeds(Utilities.genericSuccessEmbed("Success", "Your Discord and Minecraft accounts have been unlinked."))
|
||||
.setEphemeral(true)
|
||||
.queue();
|
||||
}
|
||||
|
||||
@Override
|
||||
public CommandData getCommandData() {
|
||||
return commandData;
|
||||
}
|
||||
|
||||
@Override
|
||||
public long getChannelId() {
|
||||
return BotConfig.DISCORD.LINK_CHANNEL;
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,27 @@
|
|||
package com.alttd.proxydiscordlink.bot.commandManager.commands;
|
||||
|
||||
import com.alttd.proxydiscordlink.bot.commandManager.DiscordCommand;
|
||||
import net.dv8tion.jda.api.events.interaction.command.SlashCommandInteractionEvent;
|
||||
import net.dv8tion.jda.api.interactions.commands.build.CommandData;
|
||||
|
||||
public class DiscordSync extends DiscordCommand {
|
||||
@Override
|
||||
public String getName() {
|
||||
return "sync";
|
||||
}
|
||||
|
||||
@Override
|
||||
public void execute(SlashCommandInteractionEvent event) { //TODO implement
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public CommandData getCommandData() { //TODO implement
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public long getChannelId() { //TODO implement
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,101 @@
|
|||
package com.alttd.proxydiscordlink.bot.commandManager.commands.NickCommand;
|
||||
|
||||
import com.alttd.proxydiscordlink.DiscordLink;
|
||||
import com.alttd.proxydiscordlink.bot.commandManager.DiscordCommand;
|
||||
import com.alttd.proxydiscordlink.bot.commandManager.SubOption;
|
||||
import com.alttd.proxydiscordlink.objects.DiscordLinkPlayer;
|
||||
import com.alttd.proxydiscordlink.util.ALogger;
|
||||
import com.alttd.proxydiscordlink.util.Utilities;
|
||||
import net.dv8tion.jda.api.JDA;
|
||||
import net.dv8tion.jda.api.entities.Member;
|
||||
import net.dv8tion.jda.api.events.interaction.command.SlashCommandInteractionEvent;
|
||||
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 net.dv8tion.jda.api.interactions.commands.build.SubcommandData;
|
||||
|
||||
import java.util.HashMap;
|
||||
|
||||
public class CommandNick extends DiscordCommand {
|
||||
CommandData commandData;
|
||||
private final HashMap<String, SubOption> subOptionsMap = new HashMap<>();
|
||||
public CommandNick(JDA jda) {
|
||||
commandData = Commands.slash(getName(), "Change your nickname to be your mc name/nickname")
|
||||
.addSubcommands(new SubcommandData("username", "Change your name to your Minecraft username"),
|
||||
new SubcommandData("nickname", "Change your name to your Minecraft nickname")
|
||||
)
|
||||
.setDefaultPermissions(DefaultMemberPermissions.ENABLED);
|
||||
Utilities.registerSubOptions(subOptionsMap,
|
||||
new SubCommandUserName(null,this),
|
||||
new SubCommandNick(null,this)
|
||||
);
|
||||
Utilities.registerCommand(jda, commandData);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getName() {
|
||||
return "nick";
|
||||
}
|
||||
|
||||
@Override
|
||||
public void execute(SlashCommandInteractionEvent event) {
|
||||
if (event.getGuild() == null || event.getMember() == null) {
|
||||
Utilities.commandErrAutoRem("This command can only be used within a guild: " + getName(), event);
|
||||
return;
|
||||
}
|
||||
|
||||
String subcommandName = event.getInteraction().getSubcommandGroup();
|
||||
subcommandName = subcommandName == null ? event.getInteraction().getSubcommandName() : subcommandName;
|
||||
if (subcommandName == null) {
|
||||
ALogger.error("No subcommand found for " + getName());
|
||||
return;
|
||||
}
|
||||
|
||||
SubOption subOption = subOptionsMap.get(subcommandName);
|
||||
if (subOption == null) {
|
||||
event.replyEmbeds(Utilities.invalidSubcommand(subcommandName))
|
||||
.setEphemeral(true)
|
||||
.queue();
|
||||
return;
|
||||
}
|
||||
|
||||
subOption.execute(event);
|
||||
}
|
||||
|
||||
@Override
|
||||
public CommandData getCommandData() {
|
||||
return commandData;
|
||||
}
|
||||
|
||||
@Override
|
||||
public long getChannelId() {
|
||||
return 0;
|
||||
}
|
||||
|
||||
public String setNickname(SlashCommandInteractionEvent event, boolean hasNick) {
|
||||
Member member = event.getMember();
|
||||
if (member == null) {
|
||||
Utilities.commandErrAutoRem("This command can only be run in a guild.", event);
|
||||
return null;
|
||||
}
|
||||
DiscordLinkPlayer discordLinkPlayer = DiscordLinkPlayer.getDiscordLinkPlayer(member.getIdLong());
|
||||
if (discordLinkPlayer == null) {
|
||||
Utilities.commandErrAutoRem("You aren't linked, please link before using this command.", event);
|
||||
return null;
|
||||
}
|
||||
|
||||
String nick;
|
||||
if (hasNick) {
|
||||
nick = DiscordLink.getPlugin().getDatabase().getNick(discordLinkPlayer.getUuid());
|
||||
if (nick == null || nick.isBlank())
|
||||
nick = discordLinkPlayer.getUsername();
|
||||
} else {
|
||||
nick = discordLinkPlayer.getUsername();
|
||||
}
|
||||
member.modifyNickname(nick).queue();
|
||||
discordLinkPlayer.setNick(hasNick);
|
||||
DiscordLink.getPlugin().getDatabase().syncPlayer(discordLinkPlayer);
|
||||
return nick;
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,36 @@
|
|||
package com.alttd.proxydiscordlink.bot.commandManager.commands.NickCommand;
|
||||
|
||||
import com.alttd.proxydiscordlink.bot.commandManager.DiscordCommand;
|
||||
import com.alttd.proxydiscordlink.bot.commandManager.SubCommand;
|
||||
import com.alttd.proxydiscordlink.bot.commandManager.SubCommandGroup;
|
||||
import com.alttd.proxydiscordlink.util.Utilities;
|
||||
import net.dv8tion.jda.api.events.interaction.command.SlashCommandInteractionEvent;
|
||||
|
||||
public class SubCommandNick extends SubCommand {
|
||||
protected SubCommandNick(SubCommandGroup parentGroup, DiscordCommand parent) {
|
||||
super(parentGroup, parent);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getName() {
|
||||
return "nickname";
|
||||
}
|
||||
|
||||
@Override
|
||||
public void execute(SlashCommandInteractionEvent event) {
|
||||
if (!(getParent() instanceof CommandNick commandNick)) {
|
||||
Utilities.commandErrAutoRem("Couldn't find parent command", event);
|
||||
return;
|
||||
}
|
||||
|
||||
String resultingName = commandNick.setNickname(event, true);
|
||||
event.replyEmbeds(Utilities.genericSuccessEmbed("Success",
|
||||
"Your nickname has been set to `" + resultingName + "`."))
|
||||
.setEphemeral(true).queue();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getHelpMessage() {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,36 @@
|
|||
package com.alttd.proxydiscordlink.bot.commandManager.commands.NickCommand;
|
||||
|
||||
import com.alttd.proxydiscordlink.bot.commandManager.DiscordCommand;
|
||||
import com.alttd.proxydiscordlink.bot.commandManager.SubCommand;
|
||||
import com.alttd.proxydiscordlink.bot.commandManager.SubCommandGroup;
|
||||
import com.alttd.proxydiscordlink.util.Utilities;
|
||||
import net.dv8tion.jda.api.events.interaction.command.SlashCommandInteractionEvent;
|
||||
|
||||
public class SubCommandUserName extends SubCommand {
|
||||
protected SubCommandUserName(SubCommandGroup parentGroup, DiscordCommand parent) {
|
||||
super(parentGroup, parent);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getName() {
|
||||
return "username";
|
||||
}
|
||||
|
||||
@Override
|
||||
public void execute(SlashCommandInteractionEvent event) {
|
||||
if (!(getParent() instanceof CommandNick commandNick)) {
|
||||
Utilities.commandErrAutoRem("Couldn't find parent command", event);
|
||||
return;
|
||||
}
|
||||
|
||||
String resultingName = commandNick.setNickname(event, false);
|
||||
event.replyEmbeds(Utilities.genericSuccessEmbed("Success",
|
||||
"Your nickname has been set to `" + resultingName + "`."))
|
||||
.setEphemeral(true).queue();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getHelpMessage() {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
|
@ -1,52 +0,0 @@
|
|||
package com.alttd.proxydiscordlink.bot.commands;
|
||||
|
||||
import com.alttd.proxydiscordlink.DiscordLink;
|
||||
import com.alttd.proxydiscordlink.bot.Bot;
|
||||
import com.alttd.proxydiscordlink.bot.DiscordCommand;
|
||||
import com.alttd.proxydiscordlink.config.BotConfig;
|
||||
import com.alttd.proxydiscordlink.util.Utilities;
|
||||
import net.dv8tion.jda.api.entities.Message;
|
||||
|
||||
public class DiscordBroadCast extends DiscordCommand {
|
||||
|
||||
private DiscordLink plugin;
|
||||
private final Bot bot;
|
||||
|
||||
public DiscordBroadCast() {
|
||||
plugin = DiscordLink.getPlugin();
|
||||
bot = plugin.getBot();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getCommand() {
|
||||
return "broadcast";
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getPermission() {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getDescription() {
|
||||
return "Broadcast a message to all online players";
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getSyntax() {
|
||||
return "broadcast";
|
||||
}
|
||||
|
||||
@Override
|
||||
public long getChannel() {
|
||||
return BotConfig.STAFF_COMMAND_CHANNEL;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void handleCommand(Message message, String sender, String command, String[] args) {
|
||||
//TODO also send this to the bot channel, optional command args for color and decoration?
|
||||
String msg = String.join(" ", args);
|
||||
bot.sendMessageToDiscord(BotConfig.COMMAND_CHANNEL, msg);
|
||||
Utilities.broadcast(msg);
|
||||
}
|
||||
}
|
||||
|
|
@ -1,75 +0,0 @@
|
|||
package com.alttd.proxydiscordlink.bot.commands;
|
||||
|
||||
import com.alttd.proxydiscordlink.DiscordLink;
|
||||
import com.alttd.proxydiscordlink.bot.DiscordCommand;
|
||||
import com.alttd.proxydiscordlink.config.BotConfig;
|
||||
import com.alttd.proxydiscordlink.objects.DiscordLinkPlayer;
|
||||
import net.dv8tion.jda.api.entities.Member;
|
||||
import net.dv8tion.jda.api.entities.Message;
|
||||
import net.dv8tion.jda.api.entities.MessageChannel;
|
||||
|
||||
public class DiscordNick extends DiscordCommand {
|
||||
@Override
|
||||
public String getCommand() {
|
||||
return "nick";
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getPermission() {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getDescription() {
|
||||
return "Change your name between your Minecraft username and Minecraft nickname.";
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getSyntax() {
|
||||
return "nick <username/nickname>";
|
||||
}
|
||||
|
||||
@Override
|
||||
public long getChannel() {
|
||||
return BotConfig.COMMAND_CHANNEL;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void handleCommand(Message message, String sender, String command, String[] args) {
|
||||
MessageChannel channel = message.getChannel();
|
||||
if (args.length != 1) {
|
||||
channel.sendMessage("The correct syntax is: `" +
|
||||
BotConfig.prefixMap.get(message.getGuild().getIdLong()) +
|
||||
getSyntax() + "`.").queue();
|
||||
return;
|
||||
}
|
||||
|
||||
Member member = message.getMember();
|
||||
DiscordLinkPlayer discordLinkPlayer = DiscordLinkPlayer.getDiscordLinkPlayer(member.getIdLong());
|
||||
if (discordLinkPlayer == null) {
|
||||
channel.sendMessage("You aren't linked, please link before using this command.").queue();
|
||||
return;
|
||||
}
|
||||
|
||||
switch (args[0].toLowerCase()) {
|
||||
case "username" -> {
|
||||
member.modifyNickname(discordLinkPlayer.getUsername()).queue();
|
||||
channel.sendMessage("Your nickname has been set to `" + discordLinkPlayer.getUsername() + "`.").queue();
|
||||
discordLinkPlayer.setNick(false);
|
||||
DiscordLink.getPlugin().getDatabase().syncPlayer(discordLinkPlayer);
|
||||
}
|
||||
case "nickname" -> {
|
||||
String nick = DiscordLink.getPlugin().getDatabase().getNick(discordLinkPlayer.getUuid());
|
||||
if (nick == null || nick.isBlank())
|
||||
nick = discordLinkPlayer.getUsername();
|
||||
member.modifyNickname(nick).queue();
|
||||
channel.sendMessage("Your nickname has been set to `" + nick + "`.").queue();
|
||||
discordLinkPlayer.setNick(true);
|
||||
DiscordLink.getPlugin().getDatabase().syncPlayer(discordLinkPlayer);
|
||||
}
|
||||
default -> channel.sendMessage("The correct syntax is: `" +
|
||||
BotConfig.prefixMap.get(message.getGuild().getIdLong()) +
|
||||
getSyntax() + "`.").queue();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -1,49 +0,0 @@
|
|||
package com.alttd.proxydiscordlink.bot.commands;
|
||||
|
||||
import com.alttd.proxydiscordlink.bot.DiscordCommand;
|
||||
import com.alttd.proxydiscordlink.config.BotConfig;
|
||||
import com.alttd.proxydiscordlink.objects.DiscordLinkPlayer;
|
||||
import net.dv8tion.jda.api.entities.Member;
|
||||
import net.dv8tion.jda.api.entities.Message;
|
||||
|
||||
public class DiscordUnlink extends DiscordCommand {
|
||||
@Override
|
||||
public String getCommand() {
|
||||
return "unlink";
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getPermission() {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getDescription() {
|
||||
return "Unlink your Minecraft and Discord accounts.";
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getSyntax() {
|
||||
return "unlink";
|
||||
}
|
||||
|
||||
@Override
|
||||
public long getChannel() {
|
||||
return BotConfig.LINK_CHANNEL;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void handleCommand(Message message, String sender, String command, String[] args) {
|
||||
Member member = message.getMember();
|
||||
if (member == null)
|
||||
return;
|
||||
|
||||
DiscordLinkPlayer discordLinkPlayer = DiscordLinkPlayer.getDiscordLinkPlayer(member.getIdLong());
|
||||
if (discordLinkPlayer == null) {
|
||||
message.getChannel().sendMessage("Your accounts aren't linked.").queue();
|
||||
return;
|
||||
}
|
||||
discordLinkPlayer.unlinkDiscordLinkPlayer();
|
||||
message.getChannel().sendMessage("Your Discord and Minecraft accounts have been unlinked.").queue();
|
||||
}
|
||||
}
|
||||
|
|
@ -1,77 +0,0 @@
|
|||
package com.alttd.proxydiscordlink.bot.listeners;
|
||||
|
||||
import com.alttd.proxydiscordlink.DiscordLink;
|
||||
import com.alttd.proxydiscordlink.bot.Bot;
|
||||
import com.alttd.proxydiscordlink.bot.DiscordCommand;
|
||||
import com.alttd.proxydiscordlink.config.BotConfig;
|
||||
import net.dv8tion.jda.api.events.message.MessageReceivedEvent;
|
||||
import net.dv8tion.jda.api.hooks.ListenerAdapter;
|
||||
|
||||
import java.util.Arrays;
|
||||
|
||||
public class DiscordMessageListener extends ListenerAdapter {
|
||||
|
||||
private final DiscordLink plugin;
|
||||
private final Bot bot;
|
||||
|
||||
public DiscordMessageListener() {
|
||||
plugin = DiscordLink.getPlugin();
|
||||
bot = plugin.getBot();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onMessageReceived(MessageReceivedEvent event) {
|
||||
if (!event.isFromGuild())
|
||||
return;
|
||||
if (event.getAuthor() == event.getJDA().getSelfUser())
|
||||
return;
|
||||
if (event.isWebhookMessage())
|
||||
return;
|
||||
/*
|
||||
if (event.getMessage().getChannel().getIdLong() == BotConfig.COMMAND_CHANNEL) {
|
||||
String content = event.getMessage().getContentRaw();
|
||||
if (content.startsWith(BotConfig.prefixMap.get(event.getGuild().getIdLong())) && content.length() > 1) {
|
||||
String[] split = content.split(" ");
|
||||
String cmd = split[0].substring(1).toLowerCase();
|
||||
String[] args = Arrays.copyOfRange(split, 1, split.length);
|
||||
for(DiscordCommand command : DiscordCommand.getCommands()) {
|
||||
if(!command.getCommand().equalsIgnoreCase(cmd))
|
||||
continue;
|
||||
if(command.getPermission() != null) {
|
||||
// TODO permission check? do we need this?
|
||||
}
|
||||
command.handleCommand(event.getMessage(), event.getAuthor().getName(), cmd, args);
|
||||
}
|
||||
}
|
||||
} else if (event.getMessage().getChannel().getIdLong() == BotConfig.LINK_CHANNEL) {
|
||||
String content = event.getMessage().getContentRaw();
|
||||
String[] split = content.split(" ");
|
||||
String cmd = split[0].substring(1).toLowerCase();
|
||||
String[] args = Arrays.copyOfRange(split, 1, split.length);
|
||||
if (cmd.equalsIgnoreCase("link"))
|
||||
DiscordCommand.getCommands().stream()
|
||||
.filter(discordCommand -> discordCommand.getCommand().equals("link"))
|
||||
.findFirst()
|
||||
.ifPresent(discordCommand -> discordCommand.handleCommand(event.getMessage(), event.getAuthor().getName(), cmd, args));
|
||||
}
|
||||
*/
|
||||
String content = event.getMessage().getContentRaw();
|
||||
if (!BotConfig.prefixMap.containsKey(event.getGuild().getIdLong())) return; // early return
|
||||
if (content.startsWith(BotConfig.prefixMap.get(event.getGuild().getIdLong())) && content.length() > 1) {
|
||||
String[] split = content.split(" ");
|
||||
String cmd = split[0].substring(1).toLowerCase();
|
||||
String[] args = Arrays.copyOfRange(split, 1, split.length);
|
||||
for (DiscordCommand command : DiscordCommand.getCommands()) {
|
||||
if (!command.getCommand().equalsIgnoreCase(cmd))
|
||||
continue;
|
||||
if (!(event.getMessage().getChannel().getIdLong() == command.getChannel()))
|
||||
continue;
|
||||
if (command.getPermission() != null) {
|
||||
// TODO permission check? do we need this?
|
||||
}
|
||||
command.handleCommand(event.getMessage(), event.getAuthor().getName(), cmd, args);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -35,7 +35,7 @@ public class BotConfig {
|
|||
public static File CONFIGPATH;
|
||||
|
||||
public static void init() { // todo setup share for the config
|
||||
CONFIGPATH = new File(System.getProperty("user.home") + File.separator + "share" + File.separator + "configs" + File.separator + "DiscordLink");
|
||||
CONFIGPATH = new File(File.separator + "mnt" + File.separator + "configs" + File.separator + "DiscordLink");
|
||||
CONFIG_FILE = new File(CONFIGPATH, "bot-config.yml");
|
||||
|
||||
configLoader = YAMLConfigurationLoader.builder()
|
||||
|
|
@ -161,27 +161,31 @@ public class BotConfig {
|
|||
return config.getNode(splitPath(path));
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* ONLY EDIT ANYTHING BELOW THIS LINE
|
||||
**/
|
||||
@SuppressWarnings("unused")
|
||||
private static void loadSubclasses() {
|
||||
BotConfig.DISCORD.settings();
|
||||
}
|
||||
public static class DISCORD {
|
||||
public static String BOT_TOKEN = "unconfigured";
|
||||
public static long COMMAND_CHANNEL = -1;
|
||||
public static long STAFF_COMMAND_CHANNEL = -1;
|
||||
public static long LINK_CHANNEL = -1;
|
||||
public static long GUILD_ID = -1;
|
||||
public static long EVIDENCE_CHANNEL_ID = -1;
|
||||
public static long LINKED_ROLE_ID = -1;
|
||||
|
||||
public static String BOT_TOKEN = "unconfigured";
|
||||
public static long COMMAND_CHANNEL = -1;
|
||||
public static long STAFF_COMMAND_CHANNEL = -1;
|
||||
public static long LINK_CHANNEL = -1;
|
||||
public static long GUILD_ID = -1;
|
||||
public static long EVIDENCE_CHANNEL_ID = -1;
|
||||
public static long LINKED_ROLE_ID = -1;
|
||||
|
||||
private static void settings() {
|
||||
BOT_TOKEN = getString("settings.token", BOT_TOKEN);
|
||||
STAFF_COMMAND_CHANNEL = getLong("settings.staff-command-channel", STAFF_COMMAND_CHANNEL);
|
||||
COMMAND_CHANNEL = getLong("settings.command-channel", COMMAND_CHANNEL);
|
||||
LINK_CHANNEL = getLong("settings.link-channel", LINK_CHANNEL);
|
||||
GUILD_ID = getLong("settings.guild-id", GUILD_ID);
|
||||
EVIDENCE_CHANNEL_ID = getLong("settings.evidence-channel-id", EVIDENCE_CHANNEL_ID);
|
||||
LINKED_ROLE_ID = getLong("settings.linked-role-id", LINKED_ROLE_ID);
|
||||
private static void settings() {
|
||||
BOT_TOKEN = getString("settings.token", BOT_TOKEN);
|
||||
STAFF_COMMAND_CHANNEL = getLong("settings.staff-command-channel", STAFF_COMMAND_CHANNEL);
|
||||
COMMAND_CHANNEL = getLong("settings.command-channel", COMMAND_CHANNEL);
|
||||
LINK_CHANNEL = getLong("settings.link-channel", LINK_CHANNEL);
|
||||
GUILD_ID = getLong("settings.guild-id", GUILD_ID);
|
||||
EVIDENCE_CHANNEL_ID = getLong("settings.evidence-channel-id", EVIDENCE_CHANNEL_ID);
|
||||
LINKED_ROLE_ID = getLong("settings.linked-role-id", LINKED_ROLE_ID);
|
||||
}
|
||||
}
|
||||
|
||||
public static String SL_MINIMUMRANK = "trainee";
|
||||
|
|
|
|||
|
|
@ -31,7 +31,7 @@ public final class Config {
|
|||
public static File CONFIGPATH;
|
||||
|
||||
public static void init() { // todo setup share for the config
|
||||
CONFIGPATH = new File(System.getProperty("user.home") + File.separator + "share" + File.separator + "configs" + File.separator + "DiscordLink");
|
||||
CONFIGPATH = new File(File.separator + "mnt" + File.separator + "configs" + File.separator + "DiscordLink");
|
||||
CONFIG_FILE = new File(CONFIGPATH, "config.yml");
|
||||
|
||||
configLoader = YAMLConfigurationLoader.builder()
|
||||
|
|
@ -161,68 +161,83 @@ public final class Config {
|
|||
/**
|
||||
* ONLY EDIT ANYTHING BELOW THIS LINE
|
||||
**/
|
||||
public static String DRIVERS = "mysql";
|
||||
public static String IP = "localhost";
|
||||
public static String PORT = "3306";
|
||||
public static String DATABASE_NAME = "discordlink";
|
||||
public static String USERNAME = "root";
|
||||
public static String PASSWORD = "root";
|
||||
|
||||
private static void database() {
|
||||
DRIVERS = getString("database.drivers", DRIVERS);
|
||||
IP = getString("database.ip", IP);
|
||||
PORT = getString("database.port", PORT);
|
||||
DATABASE_NAME = getString("database.database_name", DATABASE_NAME);
|
||||
USERNAME = getString("database.username", USERNAME);
|
||||
PASSWORD = getString("database.password", PASSWORD);
|
||||
}
|
||||
|
||||
public static List<String> DONOR_GROUPS = new ArrayList<>(List.of("donor"));
|
||||
public static List<String> DISCORD_GROUPS = new ArrayList<>(List.of("nitro"));
|
||||
|
||||
@SuppressWarnings("unused")
|
||||
private static void loadGroups() {
|
||||
DONOR_GROUPS = getList("settings.donor-groups", DONOR_GROUPS);
|
||||
DISCORD_GROUPS = getList("settings.discord-groups", DISCORD_GROUPS);
|
||||
}
|
||||
|
||||
public static List<String> DISCORD_MESSAGE = new ArrayList<>(List.of("Invite code here."));
|
||||
public static String DISCORD_LINK = "<click:run:command:discord link:><yellow>Your Minecraft and Discord accounts aren't linked yet, to link them click this message!</yellow></click>";
|
||||
public static String GIVE_CODE = "<yellow>Your code is <gold><code></gold>, To link your accounts do <gold>&link <code></gold> in the Discord #link channel.</yellow>";
|
||||
public static String ALREADY_LINKED_ACCOUNTS = "<yellow>Your accounts are already linked. You can unlink your accounts by doing <gold>/discord unlink</gold>.</yellow>";
|
||||
public static String ALREADY_GOT_CODE = "<yellow>You have already got your code. Your code is <gold><code><gold></yellow>";
|
||||
public static String ACCOUNTS_NOT_LINKED = "<yellow>Your Minecraft and Discord accounts aren't linked</yellow>";
|
||||
public static String UNLINKED_ACCOUNTS = "<yellow>You have successfully unlinked your accounts.</yellow>";
|
||||
public static String IS_LINKED = "<yellow><player> is <linked_status>.</yellow>";
|
||||
public static String WHITELIST_LINK_MESSAGE = "<green>You aren't linked yet! If you would like to link your account join our discord and use the following command in the link channel: <gold>&link <code></gold>.</green>";
|
||||
public static String INVALID_PLAYER = "<red><player> is not online or is not a valid player.</red>";
|
||||
public static String NO_PERMISSION = "<red>You do not have permission to do that.</red>";
|
||||
public static String NO_CONSOLE = "<red>This command can not be executed from console.</red>";
|
||||
public static String RELOAD_CONFIG = "<green>Reloaded DiscordLink config.</green>";
|
||||
public static String HELP_MESSAGE = "<yellow>DiscordLink commands:\n<commands></yellow>";
|
||||
public static String HELP_LINK = "<yellow><gold>/discord link</gold>: Get a code which can be used to link your Minecraft and Discord accounts.</yellow>";
|
||||
public static String HELP_UNLINK = "<yellow><gold>/discord unlink</gold>: Unlink your Minecraft and Discord accounts.</yellow>";
|
||||
public static String HELP_CHECK_LINKED = "<yellow><gold>/discord checklinked <user></gold>: Check if the specified user has their Minecraft and Discord accounts linked.</yellow>";
|
||||
public static String HELP_RELOAD = "<yellow><gold>/discord reload</gold>: Reload the config.</yellow>";
|
||||
public static String HELP_SYNC = "<yellow><gold>/discord sync</gold>: Manually synchronize your roles across Discord and Minecraft.</yellow>";
|
||||
@SuppressWarnings("unused")
|
||||
private static void loadSubclasses() {
|
||||
DB.database();
|
||||
MESSAGES.loadMessages();
|
||||
}
|
||||
|
||||
private static void loadMessages() {
|
||||
DISCORD_MESSAGE = getList("messages.discord-message", DISCORD_MESSAGE);
|
||||
DISCORD_LINK = getString("messages.discord-link", DISCORD_LINK);
|
||||
GIVE_CODE = getString("messages.give-code", GIVE_CODE);
|
||||
ALREADY_LINKED_ACCOUNTS = getString("messages.already-linked-accounts", ALREADY_LINKED_ACCOUNTS);
|
||||
ALREADY_GOT_CODE = getString("messages.already-got-code", ALREADY_GOT_CODE);
|
||||
ACCOUNTS_NOT_LINKED = getString("messages.accounts-not-linked", ACCOUNTS_NOT_LINKED);
|
||||
UNLINKED_ACCOUNTS = getString("messages.unlinked-accounts", UNLINKED_ACCOUNTS);
|
||||
IS_LINKED = getString("messages.is-linked", IS_LINKED);
|
||||
WHITELIST_LINK_MESSAGE = getString("messages.whitelist-link-message", WHITELIST_LINK_MESSAGE);
|
||||
INVALID_PLAYER = getString("messages.invalid-player", INVALID_PLAYER);
|
||||
NO_PERMISSION = getString("messages.no-permission", NO_PERMISSION);
|
||||
NO_CONSOLE = getString("messages.no-console", NO_CONSOLE);
|
||||
RELOAD_CONFIG = getString("messages.reload-config", RELOAD_CONFIG);
|
||||
HELP_MESSAGE = getString("messages.help-message", HELP_MESSAGE);
|
||||
HELP_LINK = getString("messages.help-link", HELP_LINK);
|
||||
HELP_UNLINK = getString("messages.help-unlink", HELP_UNLINK);
|
||||
HELP_CHECK_LINKED = getString("messages.help-check-linked", HELP_CHECK_LINKED);
|
||||
HELP_RELOAD = getString("messages.help-reload", HELP_RELOAD);
|
||||
public static class DB {
|
||||
public static String DRIVERS = "mysql";
|
||||
public static String IP = "localhost";
|
||||
public static String PORT = "3306";
|
||||
public static String DATABASE_NAME = "discordlink";
|
||||
public static String USERNAME = "root";
|
||||
public static String PASSWORD = "root";
|
||||
|
||||
private static void database() {
|
||||
DRIVERS = getString("database.drivers", DRIVERS);
|
||||
IP = getString("database.ip", IP);
|
||||
PORT = getString("database.port", PORT);
|
||||
DATABASE_NAME = getString("database.database_name", DATABASE_NAME);
|
||||
USERNAME = getString("database.username", USERNAME);
|
||||
PASSWORD = getString("database.password", PASSWORD);
|
||||
}
|
||||
}
|
||||
|
||||
public static class MESSAGES {
|
||||
|
||||
public static String ALREADY_LINKED_ACCOUNTS = "<yellow>Your accounts are already linked. You can unlink your accounts by doing <gold>/discord unlink</gold>.</yellow>";
|
||||
public static String ALREADY_GOT_CODE = "<yellow>You have already got your code. Your code is <gold><code><gold></yellow>";
|
||||
public static String ACCOUNTS_NOT_LINKED = "<yellow>Your Minecraft and Discord accounts aren't linked</yellow>";
|
||||
public static String UNLINKED_ACCOUNTS = "<yellow>You have successfully unlinked your accounts.</yellow>";
|
||||
public static String IS_LINKED = "<yellow><player> is linked with discord user: <discord> (<discord_id>).</yellow>";
|
||||
public static String IS_NOT_LINKED = "<yellow><player> is not linked.</yellow>";
|
||||
public static String WHITELIST_LINK_MESSAGE = "<green>You aren't linked yet! If you would like to link your account join our discord and use the following command in the link channel: <gold>&link <code></gold>.</green>";
|
||||
public static String INVALID_PLAYER = "<red><player> is not online or is not a valid player.</red>";
|
||||
public static String NO_PERMISSION = "<red>You do not have permission to do that.</red>";
|
||||
public static String NO_CONSOLE = "<red>This command can not be executed from console.</red>";
|
||||
public static String RELOAD_CONFIG = "<green>Reloaded DiscordLink config.</green>";
|
||||
public static String HELP_MESSAGE = "<yellow>DiscordLink commands:\n<commands></yellow>";
|
||||
public static String HELP_LINK = "<yellow><gold>/discord link</gold>: Get a code which can be used to link your Minecraft and Discord accounts.</yellow>";
|
||||
public static String HELP_UNLINK = "<yellow><gold>/discord unlink</gold>: Unlink your Minecraft and Discord accounts.</yellow>";
|
||||
public static String HELP_CHECK_LINKED = "<yellow><gold>/discord checklinked <user></gold>: Check if the specified user has their Minecraft and Discord accounts linked.</yellow>";
|
||||
public static String HELP_RELOAD = "<yellow><gold>/discord reload</gold>: Reload the config.</yellow>";
|
||||
public static String HELP_SYNC = "<yellow><gold>/discord sync</gold>: Manually synchronize your roles across Discord and Minecraft.</yellow>";
|
||||
public static List<String> DISCORD_MESSAGE = new ArrayList<>(List.of("Invite code here."));
|
||||
public static String DISCORD_LINK = "<click:run_command:'/discord link'><yellow>Your Minecraft and Discord accounts aren't linked yet, to link them click this message!</yellow></click>";
|
||||
public static String GIVE_CODE = "<yellow>Your code is <gold><code></gold>, To link your accounts do <gold>&link <code></gold> in the Discord #link channel.</yellow>";
|
||||
|
||||
private static void loadMessages() {
|
||||
DISCORD_MESSAGE = getList("messages.discord-message", DISCORD_MESSAGE);
|
||||
DISCORD_LINK = getString("messages.discord-link", DISCORD_LINK);
|
||||
GIVE_CODE = getString("messages.give-code", GIVE_CODE);
|
||||
ALREADY_LINKED_ACCOUNTS = getString("messages.already-linked-accounts", ALREADY_LINKED_ACCOUNTS);
|
||||
ALREADY_GOT_CODE = getString("messages.already-got-code", ALREADY_GOT_CODE);
|
||||
ACCOUNTS_NOT_LINKED = getString("messages.accounts-not-linked", ACCOUNTS_NOT_LINKED);
|
||||
UNLINKED_ACCOUNTS = getString("messages.unlinked-accounts", UNLINKED_ACCOUNTS);
|
||||
IS_LINKED = getString("messages.is-linked", IS_LINKED);
|
||||
IS_NOT_LINKED = getString("messages.is-not-linked", IS_NOT_LINKED);
|
||||
WHITELIST_LINK_MESSAGE = getString("messages.whitelist-link-message", WHITELIST_LINK_MESSAGE);
|
||||
INVALID_PLAYER = getString("messages.invalid-player", INVALID_PLAYER);
|
||||
NO_PERMISSION = getString("messages.no-permission", NO_PERMISSION);
|
||||
NO_CONSOLE = getString("messages.no-console", NO_CONSOLE);
|
||||
RELOAD_CONFIG = getString("messages.reload-config", RELOAD_CONFIG);
|
||||
HELP_MESSAGE = getString("messages.help-message", HELP_MESSAGE);
|
||||
HELP_LINK = getString("messages.help-link", HELP_LINK);
|
||||
HELP_UNLINK = getString("messages.help-unlink", HELP_UNLINK);
|
||||
HELP_CHECK_LINKED = getString("messages.help-check-linked", HELP_CHECK_LINKED);
|
||||
HELP_RELOAD = getString("messages.help-reload", HELP_RELOAD);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -29,11 +29,11 @@ public class DatabaseConnection {
|
|||
e.printStackTrace();
|
||||
}
|
||||
this.connection = DriverManager.getConnection("jdbc:"
|
||||
+ Config.DRIVERS + "://"
|
||||
+ Config.IP + ":"
|
||||
+ Config.PORT + "/"
|
||||
+ Config.DATABASE_NAME
|
||||
+ "?autoReconnect=true&useSSL=false", Config.USERNAME, Config.PASSWORD);
|
||||
+ Config.DB.DRIVERS + "://"
|
||||
+ Config.DB.IP + ":"
|
||||
+ Config.DB.PORT + "/"
|
||||
+ Config.DB.DATABASE_NAME
|
||||
+ "?autoReconnect=true&useSSL=false", Config.DB.USERNAME, Config.DB.PASSWORD);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -34,11 +34,11 @@ public class MinecraftCommand implements SimpleCommand {
|
|||
|
||||
if (args.length < 1) {
|
||||
if (!source.hasPermission("discordlink.link"))
|
||||
source.sendMessage(miniMessage.deserialize(Config.NO_PERMISSION));
|
||||
source.sendMessage(miniMessage.deserialize(Config.MESSAGES.NO_PERMISSION));
|
||||
else if (source instanceof Player)
|
||||
source.sendMessage(miniMessage.deserialize(Config.DISCORD_LINK));
|
||||
source.sendMessage(miniMessage.deserialize(Config.MESSAGES.DISCORD_LINK));
|
||||
else
|
||||
source.sendMessage(miniMessage.deserialize(Config.NO_CONSOLE));
|
||||
source.sendMessage(miniMessage.deserialize(Config.MESSAGES.NO_CONSOLE));
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
@ -98,6 +98,6 @@ public class MinecraftCommand implements SimpleCommand {
|
|||
if (stringBuilder.length() != 0)
|
||||
stringBuilder.replace(stringBuilder.length() - 1, stringBuilder.length(), "");
|
||||
|
||||
return miniMessage.deserialize(Config.HELP_MESSAGE, Placeholder.unparsed("commands", stringBuilder.toString()));
|
||||
return miniMessage.deserialize(Config.MESSAGES.HELP_MESSAGE, Placeholder.unparsed("commands", stringBuilder.toString()));
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -3,6 +3,7 @@ package com.alttd.proxydiscordlink.minecraft.commands.subcommands;
|
|||
import com.alttd.proxydiscordlink.DiscordLink;
|
||||
import com.alttd.proxydiscordlink.config.Config;
|
||||
import com.alttd.proxydiscordlink.minecraft.commands.SubCommand;
|
||||
import com.alttd.proxydiscordlink.objects.DiscordLinkPlayer;
|
||||
import com.velocitypowered.api.command.CommandSource;
|
||||
import com.velocitypowered.api.proxy.Player;
|
||||
import net.kyori.adventure.text.minimessage.MiniMessage;
|
||||
|
|
@ -37,7 +38,7 @@ public class CheckLinked implements SubCommand {
|
|||
@Override
|
||||
public void execute(String[] args, CommandSource source) {
|
||||
if (!source.hasPermission(getPermission())) {
|
||||
source.sendMessage(miniMessage.deserialize(Config.NO_PERMISSION));
|
||||
source.sendMessage(miniMessage.deserialize(Config.MESSAGES.NO_PERMISSION));
|
||||
return;
|
||||
}
|
||||
if (args.length != 2 || !args[1].matches("\\w{3,16}")) {
|
||||
|
|
@ -54,7 +55,7 @@ public class CheckLinked implements SubCommand {
|
|||
.getPlayer(UUID.fromString(uuidFromName));
|
||||
if (optionalPlayer.isEmpty())
|
||||
{
|
||||
source.sendMessage(miniMessage.deserialize(Config.INVALID_PLAYER, Placeholder.unparsed("player", args[1])));
|
||||
source.sendMessage(miniMessage.deserialize(Config.MESSAGES.INVALID_PLAYER, Placeholder.unparsed("player", args[1])));
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
|
@ -63,12 +64,18 @@ public class CheckLinked implements SubCommand {
|
|||
}
|
||||
|
||||
private void isLinked(CommandSource source, Player player) {
|
||||
TagResolver tagResolver = TagResolver.resolver(
|
||||
Placeholder.unparsed("linked_status", DiscordLink.getPlugin().getDatabase()
|
||||
.playerIsLinked(player.getUniqueId()) ? "linked" : "not linked"),
|
||||
Placeholder.unparsed("player", player.getUsername()));
|
||||
|
||||
source.sendMessage(miniMessage.deserialize(Config.IS_LINKED, tagResolver));
|
||||
DiscordLinkPlayer linkPlayer = DiscordLink.getPlugin().getDatabase()
|
||||
.getPlayer(player.getUniqueId());
|
||||
TagResolver tagResolver = TagResolver.resolver(Placeholder.unparsed("player", player.getUsername()));
|
||||
if (!linkPlayer.isActive()) {
|
||||
source.sendMessage(miniMessage.deserialize(Config.MESSAGES.IS_NOT_LINKED, tagResolver));
|
||||
return;
|
||||
}
|
||||
tagResolver = TagResolver.resolver(
|
||||
tagResolver,
|
||||
Placeholder.unparsed("discord", linkPlayer.getDiscordUsername()),
|
||||
Placeholder.unparsed("discord_id", linkPlayer.getUserId() + ""));
|
||||
source.sendMessage(miniMessage.deserialize(Config.MESSAGES.IS_LINKED, tagResolver));
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
@ -78,6 +85,6 @@ public class CheckLinked implements SubCommand {
|
|||
|
||||
@Override
|
||||
public String getHelpMessage() {
|
||||
return Config.HELP_CHECK_LINKED;
|
||||
return Config.MESSAGES.HELP_CHECK_LINKED;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -36,11 +36,11 @@ public class Link implements SubCommand {
|
|||
@Override
|
||||
public void execute(String[] args, CommandSource source) {
|
||||
if (!(source instanceof Player player)) {
|
||||
source.sendMessage(miniMessage.deserialize(Config.NO_CONSOLE));
|
||||
source.sendMessage(miniMessage.deserialize(Config.MESSAGES.NO_CONSOLE));
|
||||
return;
|
||||
}
|
||||
if (!player.hasPermission(getPermission())) {
|
||||
source.sendMessage(miniMessage.deserialize(Config.NO_PERMISSION));
|
||||
source.sendMessage(miniMessage.deserialize(Config.MESSAGES.NO_PERMISSION));
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
@ -51,18 +51,18 @@ public class Link implements SubCommand {
|
|||
Database database = DiscordLink.getPlugin().getDatabase();
|
||||
|
||||
if (database.playerIsLinked(player.getUniqueId())) {
|
||||
player.sendMessage(miniMessage.deserialize(Config.ALREADY_LINKED_ACCOUNTS));
|
||||
player.sendMessage(miniMessage.deserialize(Config.MESSAGES.ALREADY_LINKED_ACCOUNTS));
|
||||
return;
|
||||
}
|
||||
String authCode = DiscordLink.getPlugin().getCache().getCode(player.getUniqueId());
|
||||
if (authCode != null) {
|
||||
player.sendMessage(miniMessage.deserialize(Config.ALREADY_GOT_CODE, Placeholder.unparsed("code", authCode)));
|
||||
player.sendMessage(miniMessage.deserialize(Config.MESSAGES.ALREADY_GOT_CODE, Placeholder.unparsed("code", authCode)));
|
||||
return;
|
||||
}
|
||||
|
||||
authCode = Utilities.getAuthKey();
|
||||
|
||||
player.sendMessage(miniMessage.deserialize(Config.GIVE_CODE, Placeholder.unparsed("code", authCode)));
|
||||
player.sendMessage(miniMessage.deserialize(Config.MESSAGES.GIVE_CODE, Placeholder.unparsed("code", authCode)));
|
||||
DiscordLink.getPlugin().getCache()
|
||||
.cacheCode(player.getUniqueId(), authCode);
|
||||
}
|
||||
|
|
@ -74,6 +74,6 @@ public class Link implements SubCommand {
|
|||
|
||||
@Override
|
||||
public String getHelpMessage() {
|
||||
return Config.HELP_LINK;
|
||||
return Config.MESSAGES.HELP_LINK;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -34,7 +34,7 @@ public class Reload implements SubCommand {
|
|||
@Override
|
||||
public void execute(String[] args, CommandSource source) {
|
||||
DiscordLink.getPlugin().reloadConfig();
|
||||
source.sendMessage(miniMessage.deserialize(Config.RELOAD_CONFIG));
|
||||
source.sendMessage(miniMessage.deserialize(Config.MESSAGES.RELOAD_CONFIG));
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
@ -44,6 +44,6 @@ public class Reload implements SubCommand {
|
|||
|
||||
@Override
|
||||
public String getHelpMessage() {
|
||||
return Config.HELP_RELOAD;
|
||||
return Config.MESSAGES.HELP_RELOAD;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -45,16 +45,16 @@ public class Sync implements SubCommand { //TODO implement
|
|||
@Override
|
||||
public void execute(String[] args, CommandSource source) {
|
||||
if (!(source instanceof Player player)) {
|
||||
source.sendMessage(miniMessage.deserialize(Config.NO_CONSOLE));
|
||||
source.sendMessage(miniMessage.deserialize(Config.MESSAGES.NO_CONSOLE));
|
||||
return;
|
||||
}
|
||||
if (!player.hasPermission(getPermission())) {
|
||||
source.sendMessage(miniMessage.deserialize(Config.NO_PERMISSION));
|
||||
source.sendMessage(miniMessage.deserialize(Config.MESSAGES.NO_PERMISSION));
|
||||
return;
|
||||
}
|
||||
User user = Utilities.getLuckPerms().getUserManager().getUser(player.getUniqueId());
|
||||
if (user == null) {
|
||||
source.sendMessage(miniMessage.deserialize(Config.INVALID_PLAYER));
|
||||
source.sendMessage(miniMessage.deserialize(Config.MESSAGES.INVALID_PLAYER));
|
||||
return;
|
||||
}
|
||||
player.sendMessage(syncAccounts(user));
|
||||
|
|
@ -64,7 +64,7 @@ public class Sync implements SubCommand { //TODO implement
|
|||
Database database = DiscordLink.getPlugin().getDatabase();
|
||||
|
||||
if (!database.playerIsLinked(user.getUniqueId())) {
|
||||
return miniMessage.deserialize(Config.ACCOUNTS_NOT_LINKED);
|
||||
return miniMessage.deserialize(Config.MESSAGES.ACCOUNTS_NOT_LINKED);
|
||||
}
|
||||
|
||||
DiscordLinkPlayer discordLinkPlayer = DiscordLinkPlayer.getDiscordLinkPlayer(user.getUniqueId());
|
||||
|
|
@ -83,6 +83,6 @@ public class Sync implements SubCommand { //TODO implement
|
|||
|
||||
@Override
|
||||
public String getHelpMessage() {
|
||||
return Config.HELP_SYNC;
|
||||
return Config.MESSAGES.HELP_SYNC;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -46,11 +46,11 @@ public class Unlink implements SubCommand {
|
|||
unlinkOther(args, source);
|
||||
}
|
||||
if (!(source instanceof Player player)) {
|
||||
source.sendMessage(miniMessage.deserialize(Config.NO_CONSOLE));
|
||||
source.sendMessage(miniMessage.deserialize(Config.MESSAGES.NO_CONSOLE));
|
||||
return;
|
||||
}
|
||||
if (!player.hasPermission(getPermission())) {
|
||||
source.sendMessage(miniMessage.deserialize(Config.NO_PERMISSION));
|
||||
source.sendMessage(miniMessage.deserialize(Config.MESSAGES.NO_PERMISSION));
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
@ -59,12 +59,12 @@ public class Unlink implements SubCommand {
|
|||
|
||||
private void unlinkOther(String[] args, CommandSource source) {
|
||||
if (!source.hasPermission(getPermission() + ".other")) {
|
||||
source.sendMessage(miniMessage.deserialize(Config.NO_PERMISSION));
|
||||
source.sendMessage(miniMessage.deserialize(Config.MESSAGES.NO_PERMISSION));
|
||||
return;
|
||||
}
|
||||
User user = Utilities.getLuckPerms().getUserManager().getUser(args[1]);
|
||||
if (user == null) {
|
||||
source.sendMessage(miniMessage.deserialize(Config.INVALID_PLAYER));
|
||||
source.sendMessage(miniMessage.deserialize(Config.MESSAGES.INVALID_PLAYER));
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
@ -75,7 +75,7 @@ public class Unlink implements SubCommand {
|
|||
Database database = DiscordLink.getPlugin().getDatabase();
|
||||
|
||||
if (!database.playerIsLinked(uuid)) {
|
||||
return miniMessage.deserialize(Config.ACCOUNTS_NOT_LINKED);
|
||||
return miniMessage.deserialize(Config.MESSAGES.ACCOUNTS_NOT_LINKED);
|
||||
}
|
||||
|
||||
DiscordLinkPlayer discordLinkPlayer = DiscordLinkPlayer.getDiscordLinkPlayer(uuid);
|
||||
|
|
@ -91,7 +91,7 @@ public class Unlink implements SubCommand {
|
|||
.filter(role -> discordLinkPlayer.getRoles().contains(role.getInternalName()))
|
||||
.collect(Collectors.toList()),
|
||||
false);
|
||||
return miniMessage.deserialize(Config.UNLINKED_ACCOUNTS);
|
||||
return miniMessage.deserialize(Config.MESSAGES.UNLINKED_ACCOUNTS);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
@ -101,6 +101,6 @@ public class Unlink implements SubCommand {
|
|||
|
||||
@Override
|
||||
public String getHelpMessage() {
|
||||
return Config.HELP_UNLINK;
|
||||
return Config.MESSAGES.HELP_UNLINK;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -45,14 +45,14 @@ public class LiteBansBanListener {
|
|||
return;
|
||||
discordLinkPlayer.setActive(false);
|
||||
|
||||
DiscordLink.getPlugin().getBot().discordBan(BotConfig.GUILD_ID, discordLinkPlayer.getUserId(), "Auto ban due to Minecraft ban");
|
||||
DiscordLink.getPlugin().getBot().discordBan(BotConfig.DISCORD.GUILD_ID, discordLinkPlayer.getUserId(), "Auto ban due to Minecraft ban");
|
||||
Optional<Player> player = DiscordLink.getPlugin().getProxy().getPlayer(uuid);
|
||||
|
||||
String username = discordLinkPlayer.getUsername();
|
||||
if (player.isPresent())
|
||||
username = player.get().getUsername();
|
||||
|
||||
DiscordLink.getPlugin().getBot().sendEmbedToDiscord(BotConfig.EVIDENCE_CHANNEL_ID,
|
||||
DiscordLink.getPlugin().getBot().sendEmbedToDiscord(BotConfig.DISCORD.EVIDENCE_CHANNEL_ID,
|
||||
new EmbedBuilder()
|
||||
.setColor(Color.RED)
|
||||
.setAuthor(username, null, "https://crafatar.com/avatars/" + stringUuid + "?overlay")
|
||||
|
|
@ -74,7 +74,7 @@ public class LiteBansBanListener {
|
|||
if (uuid == null)
|
||||
return;
|
||||
DiscordLinkPlayer discordLinkPlayer = DiscordLinkPlayer.getDiscordLinkPlayer(UUID.fromString(uuid));
|
||||
DiscordLink.getPlugin().getBot().discordUnban(BotConfig.GUILD_ID, discordLinkPlayer.getUserId());
|
||||
DiscordLink.getPlugin().getBot().discordUnban(BotConfig.DISCORD.GUILD_ID, discordLinkPlayer.getUserId());
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -34,7 +34,7 @@ public class PlayerJoin {
|
|||
sync = true;
|
||||
|
||||
if (!discordLinkPlayer.hasNick())
|
||||
DiscordLink.getPlugin().getBot().changeNick(BotConfig.GUILD_ID, discordLinkPlayer.getUserId(), username);
|
||||
DiscordLink.getPlugin().getBot().changeNick(BotConfig.DISCORD.GUILD_ID, discordLinkPlayer.getUserId(), username);
|
||||
}
|
||||
|
||||
if (discordLinkPlayer.hasNick()) { //If they have a nick update it, if nick is empty set it to false and use username
|
||||
|
|
@ -43,7 +43,7 @@ public class PlayerJoin {
|
|||
discordLinkPlayer.setNick(false);
|
||||
nick = discordLinkPlayer.getUsername();
|
||||
}
|
||||
DiscordLink.getPlugin().getBot().changeNick(BotConfig.GUILD_ID, discordLinkPlayer.getUserId(), nick);
|
||||
DiscordLink.getPlugin().getBot().changeNick(BotConfig.DISCORD.GUILD_ID, discordLinkPlayer.getUserId(), nick);
|
||||
}
|
||||
|
||||
boolean hasMinecraftNitro = Utilities.hasMinecraftNitro(player);
|
||||
|
|
|
|||
|
|
@ -24,6 +24,6 @@ public class WhitelistKick {
|
|||
HashMap<String, String> stringStringHashMap = new HashMap<>();
|
||||
stringStringHashMap.put("code", authCode);
|
||||
event.appendTemplate(stringStringHashMap);
|
||||
event.appendMessage("\n\n" + Config.WHITELIST_LINK_MESSAGE);
|
||||
event.appendMessage("\n\n" + Config.MESSAGES.WHITELIST_LINK_MESSAGE);
|
||||
}
|
||||
}
|
||||
|
|
@ -3,6 +3,7 @@ package com.alttd.proxydiscordlink.objects;
|
|||
import com.alttd.proxydiscordlink.DiscordLink;
|
||||
import com.alttd.proxydiscordlink.bot.objects.DiscordRole;
|
||||
import com.alttd.proxydiscordlink.config.BotConfig;
|
||||
import com.alttd.proxydiscordlink.database.Database;
|
||||
import com.alttd.proxydiscordlink.util.Utilities;
|
||||
import net.luckperms.api.model.user.UserManager;
|
||||
import net.luckperms.api.node.types.InheritanceNode;
|
||||
|
|
@ -89,9 +90,9 @@ public class DiscordLinkPlayer {
|
|||
|
||||
public void updateDiscord(List<DiscordRole> roles, boolean added) {
|
||||
if (added)
|
||||
roles.stream().filter(DiscordRole::isUpdateToDiscord).forEach(role -> DiscordLink.getPlugin().getBot().addRole(userId, role.getId(), BotConfig.GUILD_ID));
|
||||
roles.stream().filter(DiscordRole::isUpdateToDiscord).forEach(role -> DiscordLink.getPlugin().getBot().addRole(userId, role.getId(), BotConfig.DISCORD.GUILD_ID));
|
||||
else
|
||||
roles.stream().filter(DiscordRole::isUpdateToDiscord).forEach(role -> DiscordLink.getPlugin().getBot().removeRole(userId, role.getId(), BotConfig.GUILD_ID));
|
||||
roles.stream().filter(DiscordRole::isUpdateToDiscord).forEach(role -> DiscordLink.getPlugin().getBot().removeRole(userId, role.getId(), BotConfig.DISCORD.GUILD_ID));
|
||||
}
|
||||
|
||||
public void updateMinecraft(List<DiscordRole> roles, boolean added) {
|
||||
|
|
@ -111,9 +112,9 @@ public class DiscordLinkPlayer {
|
|||
|
||||
public void linkedRole(boolean add) {
|
||||
if (add)
|
||||
DiscordLink.getPlugin().getBot().addRole(userId, BotConfig.LINKED_ROLE_ID, BotConfig.GUILD_ID);
|
||||
DiscordLink.getPlugin().getBot().addRole(userId, BotConfig.DISCORD.LINKED_ROLE_ID, BotConfig.DISCORD.GUILD_ID);
|
||||
else
|
||||
DiscordLink.getPlugin().getBot().removeRole(userId, BotConfig.LINKED_ROLE_ID, BotConfig.GUILD_ID);
|
||||
DiscordLink.getPlugin().getBot().removeRole(userId, BotConfig.DISCORD.LINKED_ROLE_ID, BotConfig.DISCORD.GUILD_ID);
|
||||
}
|
||||
|
||||
public void unlinkDiscordLinkPlayer() {
|
||||
|
|
@ -130,6 +131,7 @@ public class DiscordLinkPlayer {
|
|||
.collect(Collectors.toList()),
|
||||
false);
|
||||
linkedRole(false);
|
||||
DiscordLink.getPlugin().getDatabase().removeLinkedAccount(this);
|
||||
}
|
||||
|
||||
//Static stuff
|
||||
|
|
|
|||
|
|
@ -1,7 +1,6 @@
|
|||
package com.alttd.proxydiscordlink.util;
|
||||
|
||||
import java.util.logging.Level;
|
||||
import java.util.logging.Logger;
|
||||
import org.slf4j.Logger;
|
||||
|
||||
public class ALogger {
|
||||
|
||||
|
|
@ -11,12 +10,8 @@ public class ALogger {
|
|||
logger = log;
|
||||
}
|
||||
|
||||
private void log(String message) {
|
||||
logger.info(message);
|
||||
}
|
||||
|
||||
public static void warn(String message) {
|
||||
logger.warning(message);
|
||||
logger.warn(message);
|
||||
}
|
||||
|
||||
public static void info(String message) {
|
||||
|
|
@ -24,6 +19,6 @@ public class ALogger {
|
|||
}
|
||||
|
||||
public static void error(String message) {
|
||||
logger.log(Level.SEVERE, message);
|
||||
logger.error(message);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,13 +1,22 @@
|
|||
package com.alttd.proxydiscordlink.util;
|
||||
|
||||
import com.alttd.proxydiscordlink.DiscordLink;
|
||||
import com.alttd.proxydiscordlink.bot.commandManager.SubOption;
|
||||
import com.alttd.proxydiscordlink.bot.objects.DiscordRole;
|
||||
import com.alttd.proxydiscordlink.config.BotConfig;
|
||||
import com.alttd.proxydiscordlink.config.Config;
|
||||
import com.alttd.proxydiscordlink.objects.DiscordLinkPlayer;
|
||||
import com.velocitypowered.api.proxy.Player;
|
||||
import com.velocitypowered.api.proxy.ProxyServer;
|
||||
import net.dv8tion.jda.api.EmbedBuilder;
|
||||
import net.dv8tion.jda.api.JDA;
|
||||
import net.dv8tion.jda.api.entities.Guild;
|
||||
import net.dv8tion.jda.api.entities.Member;
|
||||
import net.dv8tion.jda.api.entities.MessageEmbed;
|
||||
import net.dv8tion.jda.api.entities.Role;
|
||||
import net.dv8tion.jda.api.events.interaction.command.SlashCommandInteractionEvent;
|
||||
import net.dv8tion.jda.api.interactions.commands.build.CommandData;
|
||||
import net.dv8tion.jda.api.requests.RestAction;
|
||||
import net.kyori.adventure.text.minimessage.MiniMessage;
|
||||
import net.luckperms.api.LuckPerms;
|
||||
import net.luckperms.api.LuckPermsProvider;
|
||||
|
|
@ -15,13 +24,16 @@ import net.luckperms.api.model.user.User;
|
|||
import net.luckperms.api.node.NodeType;
|
||||
import net.luckperms.api.node.types.InheritanceNode;
|
||||
|
||||
import java.awt.*;
|
||||
import java.util.List;
|
||||
import java.util.*;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
public class Utilities {
|
||||
|
||||
private static LuckPerms luckPerms;
|
||||
private static MiniMessage miniMessage = MiniMessage.miniMessage();
|
||||
private static final MiniMessage miniMessage = MiniMessage.miniMessage();
|
||||
|
||||
public static LuckPerms getLuckPerms() {
|
||||
if (luckPerms == null)
|
||||
|
|
@ -142,6 +154,71 @@ public class Utilities {
|
|||
.collect(Collectors.toList());
|
||||
}
|
||||
|
||||
public static void registerCommand(JDA jda, CommandData commandData) {
|
||||
Guild guild = jda.getGuildById(BotConfig.DISCORD.GUILD_ID);
|
||||
if (guild == null) {
|
||||
ALogger.error("Unable to find guild with id: [" + BotConfig.DISCORD.GUILD_ID + "] to register commands");
|
||||
return;
|
||||
}
|
||||
registerCommand(guild, commandData);
|
||||
}
|
||||
|
||||
public static void registerCommand(Guild guild, CommandData commandData) {
|
||||
guild.upsertCommand(commandData).queue(RestAction.getDefaultSuccess(), Utilities::handleFailure);
|
||||
}
|
||||
|
||||
public static void registerSubOptions(HashMap<String, SubOption> subCommandMap, SubOption... subOptions) {
|
||||
for (SubOption subOption : subOptions)
|
||||
subCommandMap.put(subOption.getName(), subOption);
|
||||
}
|
||||
|
||||
public static MessageEmbed invalidSubcommand(String subcommandName) {
|
||||
return new EmbedBuilder()
|
||||
.setTitle("Invalid sub command")
|
||||
.setDescription("This is not a valid sub command: " + subcommandName)
|
||||
.setColor(Color.RED)
|
||||
.build();
|
||||
}
|
||||
|
||||
public static MessageEmbed genericErrorEmbed(String title, String desc) {
|
||||
return new EmbedBuilder()
|
||||
.setTitle(title)
|
||||
.setDescription(desc)
|
||||
.setColor(Color.RED)
|
||||
.build();
|
||||
}
|
||||
|
||||
public static MessageEmbed genericSuccessEmbed(String title, String desc) {
|
||||
return new EmbedBuilder()
|
||||
.setTitle(title)
|
||||
.setDescription(desc)
|
||||
.setColor(Color.GREEN)
|
||||
.build();
|
||||
}
|
||||
|
||||
public static MessageEmbed genericWaitingEmbed(String title, String desc) {
|
||||
return new EmbedBuilder()
|
||||
.setTitle(title)
|
||||
.setDescription(desc)
|
||||
.setColor(Color.BLUE)
|
||||
.build();
|
||||
}
|
||||
|
||||
public static void ignoreSuccess(Object o) {
|
||||
// IDK I thought this looked nicer in the .queue call
|
||||
}
|
||||
|
||||
public static void handleFailure(Throwable failure) {
|
||||
ALogger.error(failure.getMessage());
|
||||
}
|
||||
|
||||
public static void commandErrAutoRem(String text, SlashCommandInteractionEvent event) {
|
||||
event.replyEmbeds(Utilities.genericErrorEmbed("Error", text))
|
||||
.setEphemeral(true)
|
||||
.queue(res -> res.deleteOriginal().queueAfter(5, TimeUnit.SECONDS));
|
||||
}
|
||||
|
||||
|
||||
public static boolean removeRole(UUID uuid, String group) {
|
||||
User user = getLuckPerms().getUserManager().getUser(uuid);
|
||||
if (user == null)
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user