TotalFreedomMod/discord/src/main/java/me/totalfreedom/discord/listener/MinecraftListener.java

99 lines
3.9 KiB
Java

package me.totalfreedom.discord.listener;
import discord4j.core.event.domain.message.MessageCreateEvent;
import discord4j.core.object.entity.Attachment;
import discord4j.core.object.entity.Member;
import discord4j.core.object.entity.Message;
import discord4j.core.object.entity.channel.TextChannel;
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.config.ConfigEntry;
import me.totalfreedom.totalfreedommod.util.FLog;
import me.totalfreedom.totalfreedommod.util.FUtil;
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.serializer.legacy.LegacyComponentSerializer;
import org.bukkit.Bukkit;
public class MinecraftListener
{
private final TotalFreedomMod commons;
private final Bot bot;
private final TFD4J tfd4j;
public MinecraftListener(TFD4J tfd4j)
{
this.tfd4j = tfd4j;
this.bot = tfd4j.getBot();
this.commons = bot.getTFM().getCommons();
}
public void minecraftChatBound()
{
tfd4j.getBot().getClient()
.getEventDispatcher()
.on(MessageCreateEvent.class)
.filter(m -> m.getMessage()
.getChannelId()
.equals(SnowflakeEntry.CHAT_CHANNEL_ID.getSnowflake()))
.filter(m -> m.getMember().orElse(null) != null)
.filter(m -> !m.getMessage()
.getAuthor()
.orElseThrow(IllegalAccessError::new)
.getId()
.equals(tfd4j.getBot().getClient().getSelfId()))
.doOnError(FLog::severe)
.subscribe(this::doMessageBodyDetails);
}
private void doMessageBodyDetails(MessageCreateEvent m)
{
Member member = m.getMember().orElseThrow();
Message msg = m.getMessage();
String tag = bot.getTFM().getDisplay(member);
TextComponent.Builder builder = Component.text();
TextComponent prefix = Component.text("[", NamedTextColor.DARK_GRAY)
.append(Component.text("Discord", NamedTextColor.DARK_AQUA)
.hoverEvent(HoverEvent.showText(Component.text("Click to join our Discord server!")))
.clickEvent(ClickEvent.openUrl(ConfigEntry.DISCORD_INVITE_LINK.getString())))
.append(Component.text("] ", NamedTextColor.DARK_GRAY));
TextComponent user = Component.empty();
// Tag (if they have one)
if (tag != null && !tag.isEmpty())
{
user = LegacyComponentSerializer.legacyAmpersand().deserialize(tag).append(Component.space());
}
user = user.append(Component.text(FUtil.stripColors(member.getDisplayName()).trim(), NamedTextColor.RED));
TextComponent message = Component.text(": ", NamedTextColor.DARK_GRAY)
.append(Component.text(FUtil.stripColors(msg.getContent()), NamedTextColor.WHITE));
// Attachments
if (!msg.getAttachments().isEmpty())
{
if (!msg.getContent().isEmpty())
{
message = message.append(Component.space());
}
for (Attachment attachment : msg.getAttachments())
{
message = message.append(Component.text("[Media] ", NamedTextColor.YELLOW)
.hoverEvent(HoverEvent.showText(Component.text(attachment.getUrl())))
.clickEvent(ClickEvent.openUrl(attachment.getUrl())));
}
}
Bukkit.broadcast(builder.append(prefix, user, message).build());
}
}