Added DiscordLinkCommand
This commit is contained in:
parent
4741a8effc
commit
613c179c50
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
Loading…
Reference in New Issue
Block a user