2017-03-20 18:44:53 +01:00
package net.Broken ;
2016-12-08 20:05:23 +01:00
2018-01-12 12:50:12 +01:00
import net.Broken.Commands.Move ;
2018-04-28 22:57:48 +02:00
import net.Broken.DB.Entity.GuildPreferenceEntity ;
2019-06-16 19:27:16 +02:00
import net.Broken.DB.Entity.UserEntity ;
2018-04-28 22:57:48 +02:00
import net.Broken.DB.Repository.GuildPreferenceRepository ;
2019-06-16 19:27:16 +02:00
import net.Broken.DB.Repository.UserRepository ;
2021-02-18 14:48:58 +01:00
import net.Broken.Tools.* ;
2018-02-16 15:02:53 +01:00
import net.Broken.Tools.Command.CommandParser ;
2018-12-14 16:57:02 +01:00
import net.Broken.Tools.UserManager.Stats.UserStatsUtils ;
2018-04-26 11:16:47 +02:00
import net.Broken.audio.AudioM ;
2019-09-10 09:03:16 +02:00
import net.dv8tion.jda.api.EmbedBuilder ;
import net.dv8tion.jda.api.entities.* ;
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.GuildMemberRoleRemoveEvent ;
import net.dv8tion.jda.api.events.guild.voice.GuildVoiceJoinEvent ;
import net.dv8tion.jda.api.events.guild.voice.GuildVoiceLeaveEvent ;
2021-02-18 17:07:35 +01:00
import net.dv8tion.jda.api.events.guild.voice.GuildVoiceMoveEvent ;
2022-05-13 17:54:56 +02:00
import net.dv8tion.jda.api.events.interaction.SlashCommandEvent ;
2019-09-10 09:03:16 +02:00
import net.dv8tion.jda.api.events.message.MessageReceivedEvent ;
2019-09-27 09:17:31 +02:00
import net.dv8tion.jda.api.exceptions.InsufficientPermissionException ;
2019-09-10 09:03:16 +02:00
import net.dv8tion.jda.api.hooks.ListenerAdapter ;
import net.dv8tion.jda.api.managers.GuildManager ;
2017-02-04 19:31:09 +01:00
import org.apache.logging.log4j.LogManager ;
import org.apache.logging.log4j.Logger ;
2021-02-18 17:07:35 +01:00
import org.jetbrains.annotations.NotNull ;
2018-04-28 22:57:48 +02:00
import org.springframework.context.ApplicationContext ;
2018-05-03 09:28:59 +02:00
import java.awt.* ;
2018-04-28 22:57:48 +02:00
import java.util.ArrayList ;
2022-05-13 17:54:56 +02:00
import java.util.HashMap ;
2018-04-28 22:57:48 +02:00
import java.util.List ;
2017-12-01 15:02:35 +01:00
2016-12-08 20:05:23 +01:00
/ * *
2018-02-28 17:59:09 +01:00
* Bot Listener
2016-12-08 20:05:23 +01:00
* /
public class BotListener extends ListenerAdapter {
2019-09-27 09:17:31 +02:00
private AntiSpam antispam = new AntiSpam ( ) ;
2017-12-12 23:29:49 +01:00
private Moderateur modo = new Moderateur ( ) ;
2018-04-28 22:57:48 +02:00
private GuildPreferenceRepository guildPreferenceRepository ;
2019-06-16 19:27:16 +02:00
private UserRepository userRepository ;
2018-04-28 22:57:48 +02:00
2017-12-12 23:29:49 +01:00
private Logger logger = LogManager . getLogger ( ) ;
2017-02-04 19:31:09 +01:00
2018-04-28 22:57:48 +02:00
public BotListener ( ) {
ApplicationContext context = SpringContext . getAppContext ( ) ;
guildPreferenceRepository = ( GuildPreferenceRepository ) context . getBean ( " guildPreferenceRepository " ) ;
2019-06-16 19:27:16 +02:00
userRepository = ( UserRepository ) context . getBean ( " userRepository " ) ;
2018-04-28 22:57:48 +02:00
}
2017-02-04 19:31:09 +01:00
@Override
public void onReady ( ReadyEvent event ) {
logger . info ( " Connection succees " ) ;
}
2017-09-27 12:08:57 +02:00
@Override
public void onGuildMemberJoin ( GuildMemberJoinEvent event ) {
2018-04-28 22:57:48 +02:00
GuildPreferenceEntity guildPref = getPreference ( event . getGuild ( ) ) ;
2019-09-27 09:17:31 +02:00
if ( guildPref . isDefaultRole ( ) ) {
2018-04-28 22:57:48 +02:00
2019-09-27 09:17:31 +02:00
logger . info ( event . getUser ( ) . getName ( ) + " join the guild, move it! " ) ;
2018-04-28 22:57:48 +02:00
List < Role > roles = new ArrayList < > ( ) ;
roles . add ( event . getGuild ( ) . getRoleById ( guildPref . getDefaultRoleId ( ) ) ) ;
2019-09-27 09:17:31 +02:00
new Move ( ) . exc ( event . getMember ( ) , roles , false , event . getGuild ( ) , event . getGuild ( ) . getManager ( ) ) ;
2018-04-28 22:57:48 +02:00
}
2019-09-27 09:17:31 +02:00
if ( guildPref . isWelcome ( ) ) {
2018-04-28 22:57:48 +02:00
TextChannel chanel = event . getGuild ( ) . getTextChannelById ( guildPref . getWelcomeChanelID ( ) ) ;
2019-09-27 09:17:31 +02:00
if ( chanel ! = null ) {
2018-04-28 22:57:48 +02:00
String message = guildPref . getWelcomeMessage ( ) ;
message = message . replaceAll ( " @name " , event . getMember ( ) . getAsMention ( ) ) ;
logger . debug ( message ) ;
chanel . sendMessage ( message ) . complete ( ) ;
}
MainBot . roleFlag = false ;
}
2017-09-27 12:08:57 +02:00
}
@Override
public void onGuildMemberRoleRemove ( GuildMemberRoleRemoveEvent event ) {
2018-04-28 22:57:48 +02:00
GuildPreferenceEntity guildPref = getPreference ( event . getGuild ( ) ) ;
2019-09-27 09:17:31 +02:00
if ( guildPref . isDefaultRole ( ) ) {
2018-04-28 22:57:48 +02:00
2019-09-27 09:17:31 +02:00
if ( ! MainBot . roleFlag ) {
2018-04-28 22:57:48 +02:00
2019-09-27 09:17:31 +02:00
if ( event . getMember ( ) . getRoles ( ) . size ( ) = = 0 ) {
2018-04-28 22:57:48 +02:00
2019-09-27 09:17:31 +02:00
logger . info ( event . getUser ( ) . getName ( ) + " have no roles, move it! " ) ;
2018-04-28 22:57:48 +02:00
List < Role > roles = new ArrayList < > ( ) ;
roles . add ( event . getGuild ( ) . getRoleById ( guildPref . getDefaultRoleId ( ) ) ) ;
2019-09-27 09:17:31 +02:00
new Move ( ) . exc ( event . getMember ( ) , roles , false , event . getGuild ( ) , event . getGuild ( ) . getManager ( ) ) ;
2018-04-28 22:57:48 +02:00
MainBot . roleFlag = false ;
}
2019-09-27 09:17:31 +02:00
} else {
2018-04-28 22:57:48 +02:00
logger . debug ( " ignore it " ) ;
2017-09-27 12:08:57 +02:00
MainBot . roleFlag = false ;
}
2018-04-28 22:57:48 +02:00
2017-09-27 12:08:57 +02:00
}
2018-04-28 22:57:48 +02:00
2017-09-27 12:08:57 +02:00
}
2017-02-04 19:31:09 +01:00
2017-11-06 16:22:15 +01:00
2018-12-05 20:53:48 +01:00
@Override
public void onGuildVoiceJoin ( GuildVoiceJoinEvent event ) {
super . onGuildVoiceJoin ( event ) ;
2019-09-27 09:17:31 +02:00
if ( ! event . getMember ( ) . getUser ( ) . isBot ( ) ) {
2018-12-28 16:48:13 +01:00
UserStatsUtils userStatsUtils = UserStatsUtils . getINSTANCE ( ) ;
2019-09-27 09:16:16 +02:00
if ( ! userStatsUtils . runningCounters . containsKey ( event . getMember ( ) . getId ( ) ) ) {
2018-12-28 16:48:13 +01:00
UserStatsUtils . VoicePresenceCounter temp = new UserStatsUtils . VoicePresenceCounter ( event . getMember ( ) ) ;
temp . start ( ) ;
2019-09-27 09:16:16 +02:00
userStatsUtils . runningCounters . put ( event . getMember ( ) . getId ( ) , temp ) ;
2018-12-28 16:48:13 +01:00
}
2021-02-18 14:48:58 +01:00
AutoVoiceChannel autoVoiceChannel = AutoVoiceChannel . getInstance ( event . getGuild ( ) ) ;
autoVoiceChannel . join ( event . getChannelJoined ( ) ) ;
2018-12-28 16:48:13 +01:00
}
2018-12-05 20:53:48 +01:00
}
2017-11-04 18:27:18 +01:00
@Override
public void onGuildVoiceLeave ( GuildVoiceLeaveEvent event ) {
super . onGuildVoiceLeave ( event ) ;
2019-09-27 09:17:31 +02:00
if ( event . getGuild ( ) . getAudioManager ( ) . isConnected ( ) ) {
2018-12-28 16:48:13 +01:00
logger . trace ( " User disconnected from voice channel. " ) ;
2017-11-06 16:22:15 +01:00
2019-09-27 09:17:31 +02:00
if ( event . getGuild ( ) . getAudioManager ( ) . getConnectedChannel ( ) . getMembers ( ) . size ( ) = = 1 ) {
2017-11-04 18:27:18 +01:00
logger . debug ( " I'm alone, close audio connection. " ) ;
2018-04-26 11:16:47 +02:00
AudioM . getInstance ( event . getGuild ( ) ) . stop ( ) ;
2017-11-04 18:27:18 +01:00
}
}
2021-02-18 14:48:58 +01:00
AutoVoiceChannel autoVoiceChannel = AutoVoiceChannel . getInstance ( event . getGuild ( ) ) ;
autoVoiceChannel . leave ( event . getChannelLeft ( ) ) ;
2017-11-04 18:27:18 +01:00
}
2021-02-18 17:07:35 +01:00
@Override
public void onGuildVoiceMove ( @NotNull GuildVoiceMoveEvent event ) {
super . onGuildVoiceMove ( event ) ;
AutoVoiceChannel autoVoiceChannel = AutoVoiceChannel . getInstance ( event . getGuild ( ) ) ;
autoVoiceChannel . leave ( event . getChannelLeft ( ) ) ;
2021-02-18 18:09:42 +01:00
autoVoiceChannel . join ( event . getChannelJoined ( ) ) ;
2021-02-18 17:07:35 +01:00
}
2016-12-08 20:05:23 +01:00
@Override
public void onMessageReceived ( MessageReceivedEvent event ) {
2020-11-18 19:25:07 +01:00
2019-09-27 09:17:31 +02:00
if ( ! event . getAuthor ( ) . isBot ( ) ) {
2018-12-05 20:53:48 +01:00
UserStatsUtils . getINSTANCE ( ) . addMessageCount ( event . getMember ( ) ) ;
}
2019-09-27 09:17:31 +02:00
try {
2018-04-25 16:40:21 +02:00
if ( event . getMessage ( ) . getContentRaw ( ) . startsWith ( " // " ) & & ! event . getMessage ( ) . getAuthor ( ) . getId ( ) . equals ( event . getJDA ( ) . getSelfUser ( ) . getId ( ) ) ) {
2018-02-26 11:39:13 +01:00
//On a detecter que c'etait une commande
//System.out.println(event.getMessage().getContent());
2019-06-16 19:27:16 +02:00
List < UserEntity > users = userRepository . findByJdaId ( event . getAuthor ( ) . getId ( ) ) ;
UserEntity user = users . size ( ) = = 0 ? null : users . get ( 0 ) ;
MainBot . handleCommand ( new CommandParser ( ) . parse ( event . getMessage ( ) . getContentRaw ( ) , event ) , user ) ;
2017-09-27 12:08:57 +02:00
2019-09-27 09:17:31 +02:00
} else if ( ! event . getMessage ( ) . getAuthor ( ) . getId ( ) . equals ( event . getJDA ( ) . getSelfUser ( ) . getId ( ) ) ) {
2018-04-28 22:57:48 +02:00
2019-09-27 09:17:31 +02:00
if ( ! event . isFromType ( ChannelType . PRIVATE ) ) {
2018-04-28 22:57:48 +02:00
Guild serveur = event . getGuild ( ) ;
GuildPreferenceEntity guildPref = getPreference ( serveur ) ;
2019-09-27 09:17:31 +02:00
if ( ! guildPref . isAntiSpam ( ) )
2018-04-28 22:57:48 +02:00
return ;
2019-09-27 09:17:31 +02:00
try {
GuildManager guildManager = serveur . getManager ( ) ;
Member user = event . getMember ( ) ;
// appel de la methode d'analyse de message de "Moderateur"
if ( event . getMessage ( ) . getContentRaw ( ) . length ( ) > 0 ) {
2018-04-28 22:57:48 +02:00
2019-09-27 09:17:31 +02:00
if ( modo . analyse ( user , serveur , guildManager , event ) = = 1 ) {
antispam . extermine ( user , serveur , guildManager , true , event ) ;
}
} else if ( event . getMessage ( ) . getContentRaw ( ) . length ( ) = = 0 )
logger . error ( " Image detected, ignoring it. " ) ;
2018-04-28 22:57:48 +02:00
2019-09-27 09:17:31 +02:00
} catch ( InsufficientPermissionException e ) {
logger . warn ( " Insufficient permission for guild " + e . getGuild ( MainBot . jda ) . getName ( ) + " Missing " + e . getPermission ( ) + " permission. " ) ;
}
2018-04-28 22:57:48 +02:00
2016-12-08 20:05:23 +01:00
}
2017-03-20 21:01:49 +01:00
2018-02-26 11:39:13 +01:00
}
2019-09-27 09:17:31 +02:00
} catch ( Exception e ) {
2018-02-26 11:39:13 +01:00
logger . catching ( e ) ;
2016-12-08 20:05:23 +01:00
2019-09-27 09:17:31 +02:00
if ( event . isFromType ( ChannelType . PRIVATE ) )
2018-02-26 11:39:13 +01:00
PrivateMessage . send ( event . getAuthor ( ) , EmbedMessageUtils . getInternalError ( ) , logger ) ;
else
event . getTextChannel ( ) . sendMessage ( EmbedMessageUtils . getInternalError ( ) ) . queue ( ) ;
}
2016-12-08 20:05:23 +01:00
2017-09-04 18:36:23 +02:00
2016-12-08 20:05:23 +01:00
}
2018-02-26 11:39:13 +01:00
2022-05-13 17:54:56 +02:00
@Override
public void onSlashCommand ( @NotNull SlashCommandEvent event ) {
HashMap < String , SlashCommand > commands = MainBot . slashCommands ;
super . onSlashCommand ( event ) ;
if ( commands . containsKey ( event . getName ( ) ) ) {
commands . get ( event . getName ( ) ) . action ( event ) ;
}
}
2021-02-18 17:07:35 +01:00
2018-05-03 09:28:59 +02:00
@Override
public void onGuildJoin ( GuildJoinEvent event ) {
2019-09-27 09:17:31 +02:00
logger . info ( " Join new guild! ( " + event . getGuild ( ) . getName ( ) + " " + event . getGuild ( ) . getMembers ( ) . size ( ) + " Members) " ) ;
2018-05-03 09:28:59 +02:00
super . onGuildJoin ( event ) ;
getPreference ( event . getGuild ( ) ) ;
EmbedBuilder eb = new EmbedBuilder ( ) . setColor ( Color . GREEN )
. setTitle ( " Hello there ! " )
2019-09-27 09:17:31 +02:00
. setDescription ( " Allow me to introduce myself -- I am a CL4P-TP the discord bot, but my friends call me Claptrap ! Or they would, if any of them were real... \ n " +
2018-12-03 16:31:55 +01:00
" \ nYou can access to my web UI with: " + MainBot . url )
2018-05-03 09:28:59 +02:00
. setImage ( " https://i.imgur.com/Anf1Srg.gif " ) ;
2019-09-27 09:17:31 +02:00
TextChannel defaultChan = event . getGuild ( ) . getDefaultChannel ( ) ;
if ( defaultChan ! = null & & defaultChan . canTalk ( ) )
defaultChan . sendMessage ( EmbedMessageUtils . buildStandar ( eb ) ) . queue ( ) ;
else {
for ( TextChannel chan : event . getGuild ( ) . getTextChannels ( ) ) {
if ( chan . canTalk ( ) ) {
chan . sendMessage ( EmbedMessageUtils . buildStandar ( eb ) ) . queue ( ) ;
}
}
}
2018-05-03 09:28:59 +02:00
}
2018-04-28 22:57:48 +02:00
2019-09-27 09:17:31 +02:00
private GuildPreferenceEntity getPreference ( Guild guild ) {
2018-04-28 22:57:48 +02:00
List < GuildPreferenceEntity > guildPrefList = guildPreferenceRepository . findByGuildId ( guild . getId ( ) ) ;
GuildPreferenceEntity guildPref ;
2019-09-27 09:17:31 +02:00
if ( guildPrefList . isEmpty ( ) ) {
2018-04-28 22:57:48 +02:00
logger . info ( " Generate default pref " ) ;
guildPref = GuildPreferenceEntity . getDefault ( guild ) ;
guildPreferenceRepository . save ( guildPref ) ;
2019-09-27 09:17:31 +02:00
} else
2018-04-28 22:57:48 +02:00
guildPref = guildPrefList . get ( 0 ) ;
return guildPref ;
}
2016-12-08 20:05:23 +01:00
}