Added DiscordLinkCommand

This commit is contained in:
Teriuihi 2021-09-16 15:32:05 +02:00
parent 4741a8effc
commit 613c179c50

View File

@ -0,0 +1,113 @@
package com.alttd.proxydiscordlink.bot.commands;
import com.alttd.proxydiscordlink.DiscordLink;
import com.alttd.proxydiscordlink.bot.DiscordCommand;
import com.alttd.proxydiscordlink.bot.objects.DiscordRole;
import com.alttd.proxydiscordlink.objects.DiscordLinkPlayer;
import com.alttd.proxydiscordlink.util.Utilities;
import com.velocitypowered.api.proxy.Player;
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.luckperms.api.model.user.User;
import java.util.List;
import java.util.Optional;
import java.util.UUID;
import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors;
public class DiscordLinkCommand extends DiscordCommand {
@Override
public String getCommand() {
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 void handleCommand(Message message, String sender, String command, String[] args) {
Member member = message.getMember();
if (member == null)
return;
UUID uuid;
if ((uuid = getUUID(message.getTextChannel(), args.length == 1 ? args[0] : "")) == null)
return;
List<DiscordRole> discordRoles = Utilities.getDiscordRolesForUser(uuid, member);
if (discordRoles == null)
return;
DiscordLinkPlayer discordLinkPlayer = new DiscordLinkPlayer(
member.getIdLong(),
uuid,
getUsername(uuid),
member.getUser().getName(),
discordRoles.stream()
.map(DiscordRole::getInternalName)
.collect(Collectors.toList()));
linkAccount(discordLinkPlayer, message);
}
private void linkAccount(DiscordLinkPlayer discordLinkPlayer, Message message) {
discordLinkPlayer.updateDiscord(
DiscordRole.getDiscordRoles().stream()
.filter(role -> discordLinkPlayer.getRoles().contains(role.getInternalName()))
.collect(Collectors.toList()),
true);
discordLinkPlayer.updateMinecraft(
DiscordRole.getDiscordRoles().stream()
.filter(role -> discordLinkPlayer.getRoles().contains(role.getInternalName()))
.collect(Collectors.toList()),
true);
discordLinkPlayer.linkedRole(true);
try {
Player player = DiscordLink.getPlugin().getProxy().getPlayer(discordLinkPlayer.getUuid()).orElse(null);
message.getMember().modifyNickname(player == null ? Utilities.getLuckPerms().getUserManager().getUser(discordLinkPlayer.getUuid()).getUsername() : player.getUsername()).queue();
} catch (HierarchyException e){
message.getTextChannel().sendMessage("I can't modify the nickname of those above me.").queue();
}
}
private String getUsername(UUID uuid) {
Optional<Player> player = DiscordLink.getPlugin().getProxy().getPlayer(uuid);
if (player.isPresent())
return player.get().getUsername();
User user = Utilities.getLuckPerms().getUserManager().getUser(uuid);
if (user != null)
return user.getUsername();
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;
}
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;
}
}