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; /** * 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())) { 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) { event.getGuild().getTextChannels().get(0).sendMessage("**Failed to apply welcome role to " + event.getMember().getEffectiveName() + ", as the role does not exist.**").queue(); } } if(server.isWelcomeEnabled()) { var textChannel = event.getGuild().getTextChannelById(server.getWelcomeChannel()); if(textChannel == null) { event.getGuild().getTextChannels().get(0).sendMessage("**Failed to send welcome message, as the welcome channel does not exist.**").queue(); 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(); } } @Override public void onGuildMemberRemove(@NotNull GuildMemberRemoveEvent event) { var server = Kiafumi.instance.getServerManager().getOrCreateServer(event.getGuild()); if(server.isWelcomeEnabled()) { var textChannel = event.getGuild().getTextChannelById(server.getWelcomeChannel()); if(textChannel == null) { event.getGuild().getTextChannels().get(0).sendMessage("**Failed to send leave message, as the welcome channel does not exist.**").queue(); 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(); } } }