126 lines
5.2 KiB
Java
126 lines
5.2 KiB
Java
package me.totalfreedom.discord.listener;
|
|
|
|
import com.google.common.base.Strings;
|
|
import discord4j.core.event.domain.message.MessageCreateEvent;
|
|
import discord4j.core.object.entity.Attachment;
|
|
import discord4j.core.object.entity.Guild;
|
|
import discord4j.core.object.entity.Member;
|
|
import discord4j.core.object.entity.Message;
|
|
import me.totalfreedom.discord.Bot;
|
|
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.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;
|
|
|
|
public AdminChatListener(TFD4J tfd4j)
|
|
{
|
|
this.tfd4j = tfd4j;
|
|
this.bot = tfd4j.getBot();
|
|
}
|
|
|
|
public void adminChatBound()
|
|
{
|
|
tfd4j.getBot()
|
|
.getClient()
|
|
.getEventDispatcher()
|
|
.on(MessageCreateEvent.class)
|
|
.filter(m -> m.getMessage()
|
|
.getChannelId()
|
|
.equals(SnowflakeEntry.ADMIN_CHAT_CHANNEL_ID.getSnowflake()))
|
|
.filter(m -> !m.getMessage()
|
|
.getAuthor()
|
|
.orElseThrow()
|
|
.getId()
|
|
.equals(tfd4j.getBot().getClient().getSelfId()))
|
|
.doOnError(FLog::severe)
|
|
.subscribe(this::createMessageSpec);
|
|
}
|
|
|
|
public void createMessageSpec(MessageCreateEvent m)
|
|
{
|
|
Member member = m.getMember().orElseThrow(IllegalAccessError::new);
|
|
Component name = Component.text(member.getDisplayName());
|
|
Message msg = m.getMessage();
|
|
|
|
TextComponent attachments = Component.empty();
|
|
for (Attachment attachment : msg.getAttachments())
|
|
{
|
|
attachments = attachments.append(
|
|
Component.text("[Media] ", NamedTextColor.YELLOW)
|
|
.clickEvent(ClickEvent.openUrl(attachment.getUrl()))
|
|
.hoverEvent(HoverEvent.showText(Component.text(attachment.getUrl()))));
|
|
}
|
|
|
|
TextComponent message = Component.text(msg.getContent()).append(msg.getAttachments().isEmpty() ?
|
|
Component.empty() : Component.space().append(attachments));
|
|
|
|
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)
|
|
{
|
|
Guild server = tfd4j.getBot().getGuildById().block();
|
|
// Server Owner
|
|
if (server == null) throw new IllegalStateException();
|
|
|
|
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;
|
|
}
|
|
}
|