163 lines
8.4 KiB
Java
163 lines
8.4 KiB
Java
package moe.oko.Kiafumi.listener;
|
|
|
|
import moe.oko.Kiafumi.Kiafumi;
|
|
import moe.oko.Kiafumi.util.EmbedUI;
|
|
import net.dv8tion.jda.api.EmbedBuilder;
|
|
import net.dv8tion.jda.api.entities.Activity;
|
|
import net.dv8tion.jda.api.entities.Guild;
|
|
import net.dv8tion.jda.api.events.ReadyEvent;
|
|
import net.dv8tion.jda.api.events.guild.GuildJoinEvent;
|
|
import net.dv8tion.jda.api.events.guild.member.GuildMemberJoinEvent;
|
|
import net.dv8tion.jda.api.events.guild.member.GuildMemberRemoveEvent;
|
|
import net.dv8tion.jda.api.events.message.MessageReceivedEvent;
|
|
import net.dv8tion.jda.api.events.user.update.GenericUserPresenceEvent;
|
|
import net.dv8tion.jda.api.hooks.ListenerAdapter;
|
|
import org.jetbrains.annotations.NotNull;
|
|
|
|
import java.time.OffsetDateTime;
|
|
import java.time.ZonedDateTime;
|
|
import java.time.format.DateTimeFormatter;
|
|
import java.util.Timer;
|
|
import java.util.TimerTask;
|
|
|
|
import static moe.oko.Kiafumi.Kiafumi.info;
|
|
import static moe.oko.Kiafumi.Kiafumi.debug;
|
|
import static moe.oko.Kiafumi.Kiafumi.error;
|
|
|
|
/**
|
|
* Main Listener
|
|
* Used for all utility garbage like guild handling and persistence. (Also LOL prevention).
|
|
* @author Kay, oko, Tiddy
|
|
*/
|
|
public class MainListener extends ListenerAdapter {
|
|
|
|
/**
|
|
* GuildJoin event listener, that ensures that a discord has a profile created for it.
|
|
* @param event - event to be handled...
|
|
*/
|
|
@Override
|
|
public void onGuildJoin(@NotNull GuildJoinEvent event) {
|
|
// Automatically create our default information for the server if we don't have it already.
|
|
info("Joined a new guild, NAME: " + event.getGuild().getName() + " ID: " + event.getGuild().getId());
|
|
Kiafumi.instance.getServerManager().createNewDefaultServer(event.getGuild());
|
|
Kiafumi.instance.registerForGuild(event.getGuild());
|
|
}
|
|
|
|
/**
|
|
* Shoots a message into console when the bot is defined as "Ready" by Discord.
|
|
*/
|
|
@Override
|
|
public void onReady(@NotNull ReadyEvent event) {
|
|
var n = System.lineSeparator();
|
|
info("Received READY signal from Discord, bot is now logged in." +n+
|
|
"--------------------------------" +n+
|
|
"Active Guilds: " + event.getGuildAvailableCount() +n+
|
|
"Guilds Unavailable: " + event.getGuildUnavailableCount() +n+
|
|
"--------------------------------");
|
|
}
|
|
|
|
/**
|
|
* Quick Response for if someone pings me.
|
|
*/
|
|
public void onMessageReceived(MessageReceivedEvent event) {
|
|
if(event.getMessage().getMentionedUsers().contains(Kiafumi.JDA.getSelfUser())) {
|
|
info("Sent about message in " + event.getGuild().getId());
|
|
var eb = new EmbedBuilder()
|
|
.setColor(EmbedUI.INFO)
|
|
.setTitle("Hi, i'm Kiafumi!")
|
|
.setDescription("I was summoned on October 6th 2017! My goal is to explore the metaverse and help people in it!")
|
|
.setThumbnail(Kiafumi.JDA.getSelfUser().getAvatarUrl())
|
|
.setTimestamp(ZonedDateTime.now())
|
|
.setFooter(EmbedUI.BRAND);
|
|
event.getChannel().sendMessageEmbeds(eb.build()).queue();
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Game Prevention, is a global mechanic :^)
|
|
* @param event - GenericUserPresenceEvent event to be used.
|
|
*/
|
|
@Deprecated
|
|
@Override
|
|
public void onGenericUserPresence(@NotNull GenericUserPresenceEvent event) {
|
|
if(Kiafumi.instance.config.isGamePreventionEnabled()) {
|
|
// Proceed.
|
|
if(event.getMember().getActivities().contains(Activity.playing(Kiafumi.instance.config.getGameToPrevent()))) {
|
|
// THEY ARE PLAYING THE BIG BAD GAME!!!! WARN THE MIMMEDIATELYOYUITHTHHT
|
|
event.getMember().getUser().openPrivateChannel().complete().sendMessage("**YOU ARE PLAYING THE BIG BAD GAME STOP STOP STOP** " +
|
|
"(in " + Kiafumi.instance.config.getGameCheckTime() + " minutes i wll EVAPORATE you from every server i am IN.").queue();
|
|
var timer = new Timer();
|
|
int timeInMilisToKill = (Kiafumi.instance.config.getGameCheckTime() * 60) * 1000;
|
|
timer.schedule(new TimerTask() {
|
|
@Override
|
|
public void run() {
|
|
if(event.getMember().getActivities().contains(Activity.playing(Kiafumi.instance.config.getGameToPrevent()))) {
|
|
event.getMember().getUser().openPrivateChannel().complete().sendMessage("**I warned you, NOW SUFFER MY RAGE**").queue();
|
|
for(Guild guild : event.getJDA().getGuilds()) {
|
|
if(guild.isMember(event.getMember().getUser())) {
|
|
guild.ban(guild.getMember(event.getMember().getUser()), 0, "PLAYED A HORRIBLE GAME").queue();
|
|
}
|
|
}
|
|
} else {
|
|
event.getMember().getUser().openPrivateChannel().complete().sendMessage("Thank you for not playing that shitty game anymore.").queue();
|
|
}
|
|
}
|
|
}, timeInMilisToKill);
|
|
}
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public void onGuildMemberJoin(@NotNull GuildMemberJoinEvent event) {
|
|
var server = Kiafumi.instance.getServerManager().getOrCreateServer(event.getGuild());
|
|
if(server.getJoinRole() != null) {
|
|
try {
|
|
event.getGuild().addRoleToMember(event.getMember(), event.getGuild().getRoleById(server.getJoinRole())).queue();
|
|
} catch(Exception ex) {
|
|
error("Failed to apply welcome role to " + event.getMember().getEffectiveName() + ", as the role does not exist.");
|
|
}
|
|
}
|
|
if(server.isWelcomeEnabled()) {
|
|
info("User [" + event.getUser().getName() + ":" + event.getUser().getId() + "] joined guild [" + event.getGuild().getName() + ':' + event.getGuild().getId() + "].");
|
|
// Fetch the welcome channel from settings.
|
|
var textChannel = event.getGuild().getTextChannelById(server.getWelcomeChannel());
|
|
if(textChannel == null) {
|
|
error("Failed to send welcome message to guild " + event.getGuild().getId() + " as the welcome channel was not found.");
|
|
return;
|
|
}
|
|
var dTF = DateTimeFormatter.ofPattern("MM-dd-yyyy");
|
|
// Prepare embed.
|
|
var embedBuilder = new EmbedBuilder()
|
|
.setColor(EmbedUI.SUCCESS)
|
|
.setAuthor(event.getMember().getEffectiveName() + "#" + event.getMember().getUser().getDiscriminator() + " ("
|
|
+ event.getMember().getId() + ")", null, event.getUser().getAvatarUrl()).setFooter("User Joined").setTimestamp(OffsetDateTime.now())
|
|
.setDescription(event.getMember().getAsMention() + " | **Joined Discord**: " + event.getMember().getTimeCreated().format(dTF));
|
|
textChannel.sendMessageEmbeds(embedBuilder.build()).queue();
|
|
debug("Guild join message successfully sent.");
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public void onGuildMemberRemove(@NotNull GuildMemberRemoveEvent event) {
|
|
info("User [" + event.getUser().getName() + ":" + event.getUser().getId() + "] left guild [" + event.getGuild().getName() + ':' + event.getGuild().getId() + "].");
|
|
// Fetch the welcome channel from settings.
|
|
var server = Kiafumi.instance.getServerManager().getOrCreateServer(event.getGuild());
|
|
if(server.isWelcomeEnabled()) {
|
|
var textChannel = event.getGuild().getTextChannelById(server.getWelcomeChannel());
|
|
if(textChannel == null) {
|
|
error("Failed to send leave message to guild " + event.getGuild().getId() + " as the welcome channel was not found.");
|
|
return;
|
|
}
|
|
// Prepare embed.
|
|
var dTF = DateTimeFormatter.ofPattern("MM-dd-yyyy");
|
|
var embedBuilder = new EmbedBuilder()
|
|
.setColor(EmbedUI.FAILURE)
|
|
.setAuthor(event.getMember().getEffectiveName() + "#" + event.getMember().getUser().getDiscriminator() + " ("
|
|
+ event.getMember().getId() + ")", null, event.getUser().getAvatarUrl()).setFooter("User Left").setTimestamp(OffsetDateTime.now())
|
|
.setDescription(event.getMember().getAsMention() + " | **Joined Server**: " + event.getMember().getTimeJoined().format(dTF));
|
|
textChannel.sendMessageEmbeds(embedBuilder.build()).queue();
|
|
debug("Guild leave message successfully sent.");
|
|
}
|
|
}
|
|
}
|