99 lines
3.9 KiB
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());
|
|
}
|
|
}
|
|
|