Fixed some minor syncing issues

This commit is contained in:
Teriuihi 2021-09-20 04:03:44 +02:00
parent 1c2eeec78a
commit 9744eddd35
7 changed files with 58 additions and 24 deletions

View File

@ -87,7 +87,7 @@ public class Bot {
if (embedBuilder.isEmpty()) return;
try {
if (secondsTillDelete < 0){
if (secondsTillDelete < 0) {
channel.sendMessage(embedBuilder.build()).queue();
} else {
channel.sendMessage(embedBuilder.build()).queue(message -> message.delete().queueAfter(secondsTillDelete, TimeUnit.SECONDS));
@ -97,32 +97,42 @@ public class Bot {
}
}
public boolean addRole(long userId, long roleId, long guildId) {
public void addRole(long userId, long roleId, long guildId) {
Guild guild = jda.getGuildById(guildId);
if (guild == null)
return false;
return;
Role role = guild.getRoleById(roleId);
if (role == null)
return false;
return;
Member member = guild.getMemberById(userId);
if (member == null)
return false;
guild.addRoleToMember(member, role).queue();
return true;
if (member == null) {
guild.retrieveMemberById(userId).queue(m -> addRole(guild, m, role));
return;
}
addRole(guild, member, role);
}
public boolean removeRole(long userId, long roleId, long guildId) {
private void addRole(Guild guild, Member member, Role role) {
guild.addRoleToMember(member, role).queue();
}
public void removeRole(long userId, long roleId, long guildId) {
Guild guild = jda.getGuildById(guildId);
if (guild == null)
return false;
return;
Role role = guild.getRoleById(roleId);
if (role == null)
return false;
return;
Member member = guild.getMemberById(userId);
if (member == null)
return false;
if (member == null) {
guild.retrieveMemberById(userId).queue(m -> removeRole(guild, m, role));
return;
}
removeRole(guild, member, role);
}
private void removeRole(Guild guild, Member member, Role role) {
guild.removeRoleFromMember(member, role).queue();
return true;
}
public boolean changeNick(long guildId, long userId, String nickname) {
@ -134,7 +144,7 @@ public class Bot {
return false;
try {
guild.modifyNickname(member, nickname).queue();
} catch (HierarchyException ignored){
} catch (HierarchyException ignored) {
ALogger.warn("I can't modify the nickname of those above me.");
return false;
}

View File

@ -21,11 +21,11 @@ public abstract class DiscordCommand {
public static void loadCommands() {
commands = new ArrayList<>();
loadCommand(new DiscordStaffList(),
new DiscordServerList(),
new DiscordLinkCommand(),
loadCommand(new DiscordLinkCommand(),
new DiscordUnlink(),
new DiscordNick()
// new DiscordStaffList(),
// new DiscordServerList(),
);
}

View File

@ -4,8 +4,12 @@ import com.alttd.proxydiscordlink.DiscordLink;
public class DiscordModifyRole {
public static boolean discordAddRole(long userId, long roleId, long guildId) {
return DiscordLink.getPlugin().getBot().addRole(userId, roleId, guildId);
public static void discordAddRole(long userId, long roleId, long guildId) {
DiscordLink.getPlugin().getBot().addRole(userId, roleId, guildId);
}
public static void discordRemoveRole(long userId, long roleId, long guildId) {
DiscordLink.getPlugin().getBot().removeRole(userId, roleId, guildId);
}
}

View File

@ -50,6 +50,7 @@ public class DiscordLinkCommand extends DiscordCommand {
return;
List<DiscordRole> discordRoles = Utilities.getDiscordRolesForUser(uuid, member);
List<DiscordRole> minecraftRanks = Utilities.getMinecraftRolesForUser(uuid);
if (discordRoles == null)
return;

View File

@ -50,6 +50,8 @@ public class DiscordNick extends DiscordCommand {
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());
@ -57,6 +59,8 @@ public class DiscordNick extends DiscordCommand {
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()) +

View File

@ -34,6 +34,7 @@ public class DiscordRoleListener extends ListenerAdapter {
@Override
public void onGuildMemberRoleAdd(@NotNull GuildMemberRoleAddEvent event) {
List<DiscordRole> added_roles = DiscordRole.getDiscordRoles().stream()
.filter(DiscordRole::isUpdateToMinecraft)
.filter(discordRole -> event.getRoles().stream()
.anyMatch(role -> role.getIdLong() == discordRole.getId()))
.collect(Collectors.toList());

View File

@ -14,10 +14,7 @@ import net.luckperms.api.model.user.User;
import net.luckperms.api.node.NodeType;
import net.luckperms.api.node.types.InheritanceNode;
import java.util.List;
import java.util.Random;
import java.util.Set;
import java.util.UUID;
import java.util.*;
import java.util.stream.Collectors;
public class Utilities {
@ -131,4 +128,21 @@ public class Utilities {
})
.collect(Collectors.toList());
}
public static List<DiscordRole> getMinecraftRolesForUser(UUID uuid) {
User user = getLuckPerms().getUserManager().getUser(uuid);
List<DiscordRole> roles = new ArrayList<>();
if (user == null)
return roles;
user.getNodes().stream()
.filter(node -> node instanceof InheritanceNode)
.map(node -> ((InheritanceNode) node).getGroupName())
.collect(Collectors.toList())
.forEach(lpName -> DiscordRole.getDiscordRoles().stream()
.filter(discordRole -> discordRole.getLuckpermsName().equals(lpName))
.findFirst()
.ifPresent(roles::add));
return roles;
}
}