2022-03-24 04:10:50 +00:00
package moe.oko.Kiafumi.listener ;
import moe.oko.Kiafumi.Kiafumi ;
2022-03-29 11:52:52 +00:00
import moe.oko.Kiafumi.util.EmbedUI ;
2022-03-28 06:13:14 +00:00
import net.dv8tion.jda.api.EmbedBuilder ;
2022-03-28 05:42:03 +00:00
import net.dv8tion.jda.api.entities.Activity ;
import net.dv8tion.jda.api.entities.Guild ;
import net.dv8tion.jda.api.events.ReadyEvent ;
2022-03-24 04:10:50 +00:00
import net.dv8tion.jda.api.events.guild.GuildJoinEvent ;
2022-03-28 06:13:14 +00:00
import net.dv8tion.jda.api.events.guild.member.GuildMemberJoinEvent ;
import net.dv8tion.jda.api.events.guild.member.GuildMemberRemoveEvent ;
2022-03-28 16:54:55 +00:00
import net.dv8tion.jda.api.events.message.MessageReceivedEvent ;
2022-03-28 05:42:03 +00:00
import net.dv8tion.jda.api.events.user.update.GenericUserPresenceEvent ;
2022-03-24 04:10:50 +00:00
import net.dv8tion.jda.api.hooks.ListenerAdapter ;
2022-03-28 05:42:03 +00:00
import org.jetbrains.annotations.NotNull ;
2022-03-28 06:13:14 +00:00
import java.time.OffsetDateTime ;
2022-03-28 16:54:55 +00:00
import java.time.ZonedDateTime ;
2022-03-28 06:13:14 +00:00
import java.time.format.DateTimeFormatter ;
2022-03-28 05:42:03 +00:00
import java.util.Timer ;
import java.util.TimerTask ;
2022-03-24 04:10:50 +00:00
import static moe.oko.Kiafumi.Kiafumi.info ;
2022-03-24 04:28:51 +00:00
/ * *
* Main Listener
* Used for all utility garbage like guild handling and persistence . ( Also LOL prevention ) .
2022-04-01 17:59:40 +00:00
* @author Kay , oko , Tiddy
2022-03-24 04:28:51 +00:00
* /
2022-03-24 04:10:50 +00:00
public class MainListener extends ListenerAdapter {
2022-03-24 04:28:51 +00:00
/ * *
* GuildJoin event listener , that ensures that a discord has a profile created for it .
* @param event - event to be handled . . .
* /
2022-03-24 04:10:50 +00:00
@Override
2022-03-28 05:42:03 +00:00
public void onGuildJoin ( @NotNull GuildJoinEvent event ) {
2022-05-17 01:50:46 +00:00
// Automatically create our default information for the server if we don't have it already.
2022-03-24 04:10:50 +00:00
info ( " Joined a new guild, NAME: " + event . getGuild ( ) . getName ( ) + " ID: " + event . getGuild ( ) . getId ( ) ) ;
2022-03-26 05:04:24 +00:00
Kiafumi . instance . getServerManager ( ) . createNewDefaultServer ( event . getGuild ( ) ) ;
2022-03-27 06:04:24 +00:00
Kiafumi . instance . registerForGuild ( event . getGuild ( ) ) ;
2022-03-24 04:10:50 +00:00
}
2022-03-28 05:42:03 +00:00
/ * *
* Shoots a message into console when the bot is defined as " Ready " by Discord .
* /
@Override
public void onReady ( @NotNull ReadyEvent event ) {
2022-05-17 21:48:47 +00:00
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 +
" -------------------------------- " ) ;
2022-03-28 05:42:03 +00:00
}
2022-03-28 16:54:55 +00:00
/ * *
* Quick Response for if someone pings me .
* /
public void onMessageReceived ( MessageReceivedEvent event ) {
if ( event . getMessage ( ) . getMentionedUsers ( ) . contains ( Kiafumi . JDA . getSelfUser ( ) ) ) {
2022-05-17 01:50:46 +00:00
var eb = new EmbedBuilder ( )
2022-03-29 11:52:52 +00:00
. setColor ( EmbedUI . INFO )
2022-03-28 16:54:55 +00:00
. setTitle ( " Hi, i'm Kiafumi! " )
2022-03-29 11:52:52 +00:00
. setDescription ( " I was summoned on October 6th 2017! My goal is to explore the metaverse and help people in it! " )
2022-03-30 03:52:10 +00:00
. setThumbnail ( Kiafumi . JDA . getSelfUser ( ) . getAvatarUrl ( ) )
2022-03-28 16:54:55 +00:00
. setTimestamp ( ZonedDateTime . now ( ) )
2022-03-29 11:52:52 +00:00
. setFooter ( EmbedUI . BRAND ) ;
2022-03-28 16:54:55 +00:00
event . getChannel ( ) . sendMessageEmbeds ( eb . build ( ) ) . queue ( ) ;
}
}
2022-03-28 05:42:03 +00:00
/ * *
* Game Prevention , is a global mechanic : ^ )
* @param event - GenericUserPresenceEvent event to be used .
* /
2022-05-17 01:50:46 +00:00
@Deprecated
2022-03-28 05:42:03 +00:00
@Override
public void onGenericUserPresence ( @NotNull GenericUserPresenceEvent event ) {
if ( Kiafumi . instance . config . isGamePreventionEnabled ( ) ) {
2022-05-17 01:50:46 +00:00
// Proceed.
2022-03-28 05:42:03 +00:00
if ( event . getMember ( ) . getActivities ( ) . contains ( Activity . playing ( Kiafumi . instance . config . getGameToPrevent ( ) ) ) ) {
2022-05-17 01:50:46 +00:00
// THEY ARE PLAYING THE BIG BAD GAME!!!! WARN THE MIMMEDIATELYOYUITHTHHT
2022-03-28 05:42:03 +00:00
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 ( ) ;
2022-05-17 01:50:46 +00:00
var timer = new Timer ( ) ;
2022-03-28 05:42:03 +00:00
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 ) ;
}
}
}
2022-03-28 06:13:14 +00:00
@Override
public void onGuildMemberJoin ( @NotNull GuildMemberJoinEvent event ) {
2022-05-17 01:50:46 +00:00
var server = Kiafumi . instance . getServerManager ( ) . getOrCreateServer ( event . getGuild ( ) ) ;
2022-03-28 06:13:14 +00:00
if ( server . getJoinRole ( ) ! = null ) {
try {
event . getGuild ( ) . addRoleToMember ( event . getMember ( ) , event . getGuild ( ) . getRoleById ( server . getJoinRole ( ) ) ) . queue ( ) ;
} catch ( Exception ex ) {
2022-03-29 11:52:52 +00:00
event . getGuild ( ) . getTextChannels ( ) . get ( 0 ) . sendMessage ( " **Failed to apply welcome role to " + event . getMember ( ) . getEffectiveName ( ) + " , as the role does not exist.** " ) . queue ( ) ;
2022-03-28 06:13:14 +00:00
}
}
if ( server . isWelcomeEnabled ( ) ) {
2022-05-17 01:50:46 +00:00
var textChannel = event . getGuild ( ) . getTextChannelById ( server . getWelcomeChannel ( ) ) ;
2022-03-28 06:13:14 +00:00
if ( textChannel = = null ) {
2022-03-29 11:52:52 +00:00
event . getGuild ( ) . getTextChannels ( ) . get ( 0 ) . sendMessage ( " **Failed to send welcome message, as the welcome channel does not exist.** " ) . queue ( ) ;
2022-03-28 06:13:14 +00:00
return ;
}
2022-05-17 01:50:46 +00:00
var dTF = DateTimeFormatter . ofPattern ( " MM-dd-yyyy " ) ;
// Prepare embed.
var embedBuilder = new EmbedBuilder ( )
2022-03-29 11:52:52 +00:00
. setColor ( EmbedUI . SUCCESS )
2022-03-28 06:13:14 +00:00
. setAuthor ( event . getMember ( ) . getEffectiveName ( ) + " # " + event . getMember ( ) . getUser ( ) . getDiscriminator ( ) + " ( "
2022-03-29 22:48:17 +00:00
+ event . getMember ( ) . getId ( ) + " ) " , null , event . getUser ( ) . getAvatarUrl ( ) ) . setFooter ( " User Joined " ) . setTimestamp ( OffsetDateTime . now ( ) )
2022-05-17 01:50:46 +00:00
. setDescription ( event . getMember ( ) . getAsMention ( ) + " | **Joined Discord**: " + event . getMember ( ) . getTimeCreated ( ) . format ( dTF ) ) ;
2022-03-28 06:13:14 +00:00
textChannel . sendMessageEmbeds ( embedBuilder . build ( ) ) . queue ( ) ;
}
}
@Override
public void onGuildMemberRemove ( @NotNull GuildMemberRemoveEvent event ) {
2022-05-17 01:50:46 +00:00
var server = Kiafumi . instance . getServerManager ( ) . getOrCreateServer ( event . getGuild ( ) ) ;
2022-03-28 06:13:14 +00:00
if ( server . isWelcomeEnabled ( ) ) {
2022-05-17 01:50:46 +00:00
var textChannel = event . getGuild ( ) . getTextChannelById ( server . getWelcomeChannel ( ) ) ;
2022-03-28 06:13:14 +00:00
if ( textChannel = = null ) {
2022-03-29 11:52:52 +00:00
event . getGuild ( ) . getTextChannels ( ) . get ( 0 ) . sendMessage ( " **Failed to send leave message, as the welcome channel does not exist.** " ) . queue ( ) ;
2022-03-28 06:13:14 +00:00
return ;
}
2022-05-17 01:50:46 +00:00
// Prepare embed.
var dTF = DateTimeFormatter . ofPattern ( " MM-dd-yyyy " ) ;
var embedBuilder = new EmbedBuilder ( )
2022-03-29 11:52:52 +00:00
. setColor ( EmbedUI . FAILURE )
2022-03-28 06:13:14 +00:00
. setAuthor ( event . getMember ( ) . getEffectiveName ( ) + " # " + event . getMember ( ) . getUser ( ) . getDiscriminator ( ) + " ( "
2022-03-29 22:48:17 +00:00
+ event . getMember ( ) . getId ( ) + " ) " , null , event . getUser ( ) . getAvatarUrl ( ) ) . setFooter ( " User Left " ) . setTimestamp ( OffsetDateTime . now ( ) )
2022-05-17 01:50:46 +00:00
. setDescription ( event . getMember ( ) . getAsMention ( ) + " | **Joined Server**: " + event . getMember ( ) . getTimeJoined ( ) . format ( dTF ) ) ;
2022-03-28 06:13:14 +00:00
textChannel . sendMessageEmbeds ( embedBuilder . build ( ) ) . queue ( ) ;
}
}
2022-03-24 04:10:50 +00:00
}