Bugfixes and better admin chat system

This commit is contained in:
Video
2023-04-05 16:13:05 -06:00
parent cb818c0056
commit 3070ff893e
7 changed files with 225 additions and 128 deletions

View File

@ -11,20 +11,27 @@ import me.totalfreedom.discord.TFD4J;
import me.totalfreedom.discord.util.SnowflakeEntry;
import me.totalfreedom.totalfreedommod.TotalFreedomMod;
import me.totalfreedom.totalfreedommod.admin.Admin;
import me.totalfreedom.totalfreedommod.api.event.AdminChatEvent;
import me.totalfreedom.totalfreedommod.rank.Displayable;
import me.totalfreedom.totalfreedommod.rank.GroupProvider;
import me.totalfreedom.totalfreedommod.rank.Title;
import me.totalfreedom.totalfreedommod.util.FLog;
import me.totalfreedom.totalfreedommod.util.FUtil;
import net.kyori.adventure.key.Key;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.TextComponent;
import net.kyori.adventure.text.event.ClickEvent;
import net.kyori.adventure.text.event.HoverEvent;
import net.kyori.adventure.text.format.NamedTextColor;
import net.kyori.adventure.text.format.TextColor;
import net.md_5.bungee.api.chat.ClickEvent;
import net.md_5.bungee.api.chat.ComponentBuilder;
import net.md_5.bungee.api.chat.TextComponent;
import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
public class AdminChatListener
{
private static final Key identifier = Key.key("tfd4j", "discord_admin_chat");
//--
private final Bot bot;
private final TFD4J tfd4j;
@ -34,11 +41,6 @@ public class AdminChatListener
this.bot = tfd4j.getBot();
}
public static TextColor getColor(Displayable display)
{
return display.getColor();
}
public void adminChatBound()
{
tfd4j.getBot()
@ -62,65 +64,22 @@ public class AdminChatListener
public void createMessageSpec(MessageCreateEvent m)
{
Member member = m.getMember().orElseThrow(IllegalAccessError::new);
String tag = tfd4j.getBot().getTFM().getDisplay(member);
Component name = Component.text(member.getDisplayName());
Message msg = m.getMessage();
String mediamessage = ChatColor.YELLOW + "[Media]";
StringBuilder logmessage = new StringBuilder(ChatColor.DARK_GRAY + "[" + ChatColor.DARK_AQUA + "Discord" + ChatColor.DARK_GRAY + "] " + ChatColor.RESET);
String lm = ChatColor.DARK_RED + member.getDisplayName() + " "
+ ChatColor.DARK_GRAY + tag + ChatColor.DARK_GRAY
+ ChatColor.WHITE + ": " + ChatColor.GOLD + FUtil.colorize(msg.getContent());
logmessage.append(lm);
if (!msg.getAttachments().isEmpty())
TextComponent attachments = Component.empty();
for (Attachment attachment : msg.getAttachments())
{
logmessage.append(mediamessage); // Actually for logging...
attachments = attachments.append(
Component.text("[Media] ", NamedTextColor.YELLOW)
.clickEvent(ClickEvent.openUrl(attachment.getUrl()))
.hoverEvent(HoverEvent.showText(Component.text(attachment.getUrl()))));
}
FLog.info(logmessage.toString());
Bukkit.getOnlinePlayers().stream().filter(player -> TotalFreedomMod.getPlugin().al.isAdmin(player)).forEach(player ->
{
StringBuilder message = new StringBuilder(ChatColor.DARK_GRAY + "[" + ChatColor.DARK_AQUA + "Discord" + ChatColor.DARK_GRAY + "] " + ChatColor.RESET);
TextComponent message = Component.text(msg.getContent()).append(msg.getAttachments().isEmpty() ?
Component.empty() : Component.space().append(attachments));
ComponentBuilder builder = new ComponentBuilder(message.toString());
Admin admin = TotalFreedomMod.getPlugin().al.getAdmin(player);
String format = admin.getAcFormat();
if (!Strings.isNullOrEmpty(format))
{
Displayable display = getDisplay(member);
TextColor color = getColor(display);
String m1 = format.replace("%name%", member.getDisplayName())
.replace("%rank%", FUtil.miniMessage(display.getAbbr()))
.replace("%rankcolor%", color.toString())
.replace("%msg%", FUtil.colorize(msg.getContent()));
builder.append(FUtil.colorize(m1));
} else
{
String m1 = ChatColor.DARK_RED + member.getDisplayName() + " "
+ ChatColor.DARK_GRAY + tag + ChatColor.DARK_GRAY
+ ChatColor.WHITE + ": " + ChatColor.GOLD + FUtil.colorize(msg.getContent());
builder.append(m1);
}
if (!msg.getAttachments().isEmpty())
{
for (Attachment attachment : msg.getAttachments())
{
TextComponent text = new TextComponent(mediamessage);
text.setClickEvent(new ClickEvent(ClickEvent.Action.OPEN_URL, attachment.getUrl()));
if (!msg.getContent().isEmpty())
{
builder.append(" ");
}
builder.append(text);
}
}
player.spigot().sendMessage(builder.create());
});
TotalFreedomMod.getPlugin().cm.adminChat(identifier, FUtil.miniMessage("<dark_gray>[<dark_aqua>Discord</dark_aqua>] </dark_gray>"), name, getDisplay(member), message, true);
}
public Displayable getDisplay(Member member)
@ -129,33 +88,40 @@ public class AdminChatListener
// Server Owner
if (server == null) throw new IllegalStateException();
return member.getRoles().map(role ->
{
if (role.getId().equals(SnowflakeEntry.OWNER_ROLE_ID.getSnowflake()))
{
return Title.OWNER;
} else if (role.getId().equals(SnowflakeEntry.DEVELOPER_ROLE_ID.getSnowflake()))
{
return Title.DEVELOPER;
} else if (role.getId().equals(SnowflakeEntry.EXECUTIVE_ROLE_ID.getSnowflake()))
{
return Title.EXECUTIVE;
} else if (role.getId().equals(SnowflakeEntry.ASSISTANT_EXECUTIVE_ROLE_ID.getSnowflake()))
{
return Title.ASST_EXEC;
} else if (role.getId().equals(SnowflakeEntry.SENIOR_ADMIN_ROLE_ID.getSnowflake()))
{
return GroupProvider.SENIOR_ADMIN.getGroup();
} else if (role.getId().equals(SnowflakeEntry.ADMIN_ROLE_ID.getSnowflake()))
{
return GroupProvider.ADMIN.getGroup();
} else if (role.getId().equals(SnowflakeEntry.MASTERBUILDER_ROLE_ID.getSnowflake()))
{
return GroupProvider.MASTER_BUILDER.getGroup();
} else
{
return null;
}
}).blockFirst();
return member.getRoles()
.filter(role -> SnowflakeEntry.acceptableRoleIDs().contains(role.getId()))
.map(role ->
{
if (role.getId().equals(SnowflakeEntry.OWNER_ROLE_ID.getSnowflake()))
{
return Title.OWNER;
} else if (role.getId().equals(SnowflakeEntry.DEVELOPER_ROLE_ID.getSnowflake()))
{
return Title.DEVELOPER;
} else if (role.getId().equals(SnowflakeEntry.EXECUTIVE_ROLE_ID.getSnowflake()))
{
return Title.EXECUTIVE;
} else if (role.getId().equals(SnowflakeEntry.ASSISTANT_EXECUTIVE_ROLE_ID.getSnowflake()))
{
return Title.ASST_EXEC;
} else if (role.getId().equals(SnowflakeEntry.SENIOR_ADMIN_ROLE_ID.getSnowflake()))
{
return GroupProvider.SENIOR_ADMIN.getGroup();
} else if (role.getId().equals(SnowflakeEntry.ADMIN_ROLE_ID.getSnowflake()))
{
return GroupProvider.ADMIN.getGroup();
} else if (role.getId().equals(SnowflakeEntry.MASTERBUILDER_ROLE_ID.getSnowflake()))
{
return GroupProvider.MASTER_BUILDER.getGroup();
} else
{
return GroupProvider.OP.getGroup(); // This should never be reached.
}
}).blockFirst();
}
public static Key getIdentifier()
{
return identifier;
}
}

View File

@ -1,10 +1,14 @@
package me.totalfreedom.discord.listener;
import io.papermc.paper.event.player.AsyncChatEvent;
import me.totalfreedom.discord.Bot;
import me.totalfreedom.discord.TFD4J;
import me.totalfreedom.discord.util.Utilities;
import me.totalfreedom.totalfreedommod.TotalFreedomMod;
import me.totalfreedom.totalfreedommod.api.event.AdminChatEvent;
import me.totalfreedom.totalfreedommod.config.ConfigEntry;
import me.totalfreedom.totalfreedommod.util.FUtil;
import net.kyori.adventure.key.Key;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.serializer.plain.PlainTextComponentSerializer;
import net.md_5.bungee.api.ChatColor;
@ -20,6 +24,8 @@ import org.bukkit.event.player.PlayerQuitEvent;
public class BukkitNative implements Listener
{
//--
private final TotalFreedomMod commons;
private final Bot bot;
private final TFD4J tfd4j;
@ -74,17 +80,26 @@ public class BukkitNative implements Listener
}
@EventHandler(ignoreCancelled = true)
public void onAsyncPlayerChat(AsyncPlayerChatEvent event)
public void onAsyncPlayerChat(AsyncChatEvent event)
{
Player player = event.getPlayer();
String message = event.getMessage();
String message = FUtil.steamroll(event.message());
if (!ConfigEntry.ADMIN_ONLY_MODE.getBoolean() && !tfd4j.getServer().hasWhitelist()
&& !commons.pl.getPlayer(player).isMuted() && bot != null)
&& !commons.pl.getPlayer(player).isMuted() && !commons.pl.getPlayer(player).inAdminChat() && bot != null)
{
tfd4j.getImpl().messageChatChannel(player.getName()
+ " \u00BB "
+ ChatColor.stripColor(message), true);
+ message, true);
}
}
@EventHandler
public void onAdminChat(AdminChatEvent event)
{
if (!event.getIdentifier().equals(AdminChatListener.getIdentifier()))
{
tfd4j.getImpl().messageAdminChatChannel(FUtil.steamroll(event.getName()) + " » " + FUtil.steamroll(event.getMessage()));
}
}
}

View File

@ -3,6 +3,9 @@ package me.totalfreedom.discord.util;
import discord4j.common.util.Snowflake;
import me.totalfreedom.totalfreedommod.config.ConfigEntry;
import java.util.HashSet;
import java.util.Set;
public enum SnowflakeEntry
{
ADMIN_CHAT_CHANNEL_ID(ConfigEntry.DISCORD_ADMINCHAT_CHANNEL_ID),
@ -32,4 +35,17 @@ public enum SnowflakeEntry
{
return Snowflake.of(entry.getString());
}
public static Set<Snowflake> acceptableRoleIDs()
{
Set<Snowflake> acceptableRoleIDs = new HashSet<>();
acceptableRoleIDs.add(SnowflakeEntry.OWNER_ROLE_ID.getSnowflake());
acceptableRoleIDs.add(SnowflakeEntry.DEVELOPER_ROLE_ID.getSnowflake());
acceptableRoleIDs.add(SnowflakeEntry.EXECUTIVE_ROLE_ID.getSnowflake());
acceptableRoleIDs.add(SnowflakeEntry.ASSISTANT_EXECUTIVE_ROLE_ID.getSnowflake());
acceptableRoleIDs.add(SnowflakeEntry.SENIOR_ADMIN_ROLE_ID.getSnowflake());
acceptableRoleIDs.add(SnowflakeEntry.ADMIN_ROLE_ID.getSnowflake());
acceptableRoleIDs.add(SnowflakeEntry.MASTERBUILDER_ROLE_ID.getSnowflake());
return acceptableRoleIDs;
}
}