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

77 lines
2.7 KiB
Java

package me.totalfreedom.discord.listener;
import discord4j.core.event.domain.message.ReactionAddEvent;
import discord4j.core.object.Embed;
import discord4j.core.object.entity.Member;
import discord4j.core.object.entity.Message;
import discord4j.core.object.entity.channel.TextChannel;
import discord4j.discordjson.json.MessageCreateRequest;
import me.totalfreedom.discord.TFD4J;
import me.totalfreedom.discord.util.SnowflakeEntry;
import me.totalfreedom.totalfreedommod.util.FLog;
public class ReactionListener
{
private final TFD4J tfd4j;
public ReactionListener(TFD4J tfd4J)
{
this.tfd4j = tfd4J;
}
public void onReactionAdd()
{
tfd4j.getBot()
.getClient()
.getEventDispatcher()
.on(ReactionAddEvent.class)
.filter(r -> r.getGuild().block() != null)
.filter(r -> r.getMember().orElse(null) != null)
.filter(r -> !r.getMember()
.orElseThrow()
.getId()
.equals(tfd4j.getBot().getClient().getSelfId()))
.filter(r -> !r.getChannelId()
.equals(SnowflakeEntry.REPORT_CHANNEL_ID.getSnowflake()))
.filter(r -> r.getEmoji()
.asUnicodeEmoji()
.orElseThrow(UnsupportedOperationException::new)
.getRaw()
.equals("\uD83D\uDCCB"))
.doOnError(FLog::severe)
.subscribe(this::reactionWork);
}
private void reactionWork(ReactionAddEvent event)
{
final TextChannel archiveChannel = tfd4j.getBot()
.getClient()
.getChannelById(SnowflakeEntry.ARCHIVE_REPORT_CHANNEL_ID.getSnowflake())
.ofType(TextChannel.class)
.blockOptional()
.orElseThrow();
final Message message = event.getMessage().blockOptional().orElseThrow();
final Member completer = event.getMember().orElseThrow();
if (!message.getAuthor().orElseThrow().getId().equals(tfd4j.getBot().getClient().getSelfId()))
{
return;
}
// We don't need other embeds... yet?
final Embed embed = message.getEmbeds().get(0);
final MessageCreateRequest request = MessageCreateRequest.builder()
.content("Report completed by " + completer.getUsername()
+ " (" + completer.getDiscriminator()
+ ")")
.addEmbed(embed.getData())
.build();
archiveChannel.getRestChannel().createMessage(request);
message.delete().block();
}
}