2022-03-24 04:10:50 +00:00
package moe.oko.Kiafumi.listener ;
import moe.oko.Kiafumi.Kiafumi ;
2022-03-28 06:13:14 +00:00
import moe.oko.Kiafumi.model.Server ;
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 ;
2022-03-28 06:13:14 +00:00
import net.dv8tion.jda.api.entities.TextChannel ;
2022-03-28 05:42:03 +00:00
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 20:24:34 +00:00
import java.awt.Color ;
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-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-03-24 04:10:50 +00:00
//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 ( ) ) ;
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 ) {
info ( " Received READY signal from Discord, bot is now logged in. " +
" Guilds Active: " + event . getGuildAvailableCount ( ) + " Guilds Unavailable: " + event . getGuildUnavailableCount ( ) ) ;
}
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 ( ) ) ) {
EmbedBuilder eb = new EmbedBuilder ( )
. setColor ( Color . PINK )
. setImage ( Kiafumi . JDA . getSelfUser ( ) . getAvatarUrl ( ) )
. setTitle ( " Hi, i'm Kiafumi! " )
. setDescription ( " I was born on October 6th 2017! My goal is to explore the metaverse and help people in it! " )
. setTimestamp ( ZonedDateTime . now ( ) )
. setFooter ( " Kiafumi - Maintained by oko.moe " ) ;
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 .
* /
@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 ( ) ;
Timer 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 ) ;
}
}
}
2022-03-28 06:13:14 +00:00
@Override
public void onGuildMemberJoin ( @NotNull GuildMemberJoinEvent event ) {
Server 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 ( ) + " , role did not exist.** " ) . queue ( ) ;
}
}
if ( server . isWelcomeEnabled ( ) ) {
TextChannel textChannel = event . getGuild ( ) . getTextChannelById ( server . getWelcomeChannel ( ) ) ;
if ( textChannel = = null ) {
event . getGuild ( ) . getTextChannels ( ) . get ( 0 ) . sendMessage ( " **Failed to send welcome message, welcome channel doesn't exist.** " ) . queue ( ) ;
return ;
}
//Ok, now we proceed.
EmbedBuilder embedBuilder = new EmbedBuilder ( )
. setAuthor ( event . getMember ( ) . getEffectiveName ( ) + " # " + event . getMember ( ) . getUser ( ) . getDiscriminator ( ) + " ( "
+ event . getMember ( ) . getId ( ) + " ) " , null , event . getMember ( ) . getAvatarUrl ( ) ) . setFooter ( " User Joined " ) . setTimestamp ( OffsetDateTime . now ( ) )
. setDescription ( event . getMember ( ) . getAsMention ( ) + " | **Joined Discord**: " + event . getMember ( ) . getTimeCreated ( ) ) . setColor ( Color . GREEN ) ;
textChannel . sendMessageEmbeds ( embedBuilder . build ( ) ) . queue ( ) ;
}
}
@Override
public void onGuildMemberRemove ( @NotNull GuildMemberRemoveEvent event ) {
Server server = Kiafumi . instance . getServerManager ( ) . getOrCreateServer ( event . getGuild ( ) ) ;
if ( server . isWelcomeEnabled ( ) ) {
TextChannel textChannel = event . getGuild ( ) . getTextChannelById ( server . getWelcomeChannel ( ) ) ;
if ( textChannel = = null ) {
event . getGuild ( ) . getTextChannels ( ) . get ( 0 ) . sendMessage ( " **Failed to send leave message, welcome channel doesn't exist.** " ) . queue ( ) ;
return ;
}
//Ok, now we proceed.
DateTimeFormatter dTF = DateTimeFormatter . ofPattern ( " dd-MM-yyyy " ) ;
EmbedBuilder embedBuilder = new EmbedBuilder ( )
. setAuthor ( event . getMember ( ) . getEffectiveName ( ) + " # " + event . getMember ( ) . getUser ( ) . getDiscriminator ( ) + " ( "
+ event . getMember ( ) . getId ( ) + " ) " , null , event . getMember ( ) . getAvatarUrl ( ) ) . setFooter ( " User Left " ) . setTimestamp ( OffsetDateTime . now ( ) )
. setDescription ( event . getMember ( ) . getAsMention ( ) + " | **Joined Server**: " + event . getMember ( ) . getTimeJoined ( ) . format ( dTF ) ) . setColor ( Color . RED ) ;
textChannel . sendMessageEmbeds ( embedBuilder . build ( ) ) . queue ( ) ;
}
}
2022-03-24 04:10:50 +00:00
}