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 ;
import net.Broken.DB.Repository.GuildPreferenceRepository ;
2018-02-15 02:02:35 +01:00
import net.Broken.Tools.AntiSpam ;
2018-02-16 15:02:53 +01:00
import net.Broken.Tools.Command.CommandParser ;
2018-02-26 11:39:13 +01:00
import net.Broken.Tools.EmbedMessageUtils ;
2018-02-15 02:02:35 +01:00
import net.Broken.Tools.Moderateur ;
2018-02-26 11:39:13 +01:00
import net.Broken.Tools.PrivateMessage ;
2018-12-05 20:53:48 +01:00
import net.Broken.Tools.UserManager.UserStatsUtils ;
2018-04-26 11:16:47 +02:00
import net.Broken.audio.AudioM ;
2018-05-03 09:28:59 +02:00
import net.dv8tion.jda.core.EmbedBuilder ;
2018-04-28 22:57:48 +02:00
import net.dv8tion.jda.core.entities.* ;
2017-02-04 19:31:09 +01:00
import net.dv8tion.jda.core.events.ReadyEvent ;
2018-05-03 09:28:59 +02:00
import net.dv8tion.jda.core.events.guild.GuildJoinEvent ;
2017-09-04 18:36:23 +02:00
import net.dv8tion.jda.core.events.guild.member.GuildMemberJoinEvent ;
2017-09-27 12:08:57 +02:00
import net.dv8tion.jda.core.events.guild.member.GuildMemberRoleRemoveEvent ;
2018-12-05 20:53:48 +01:00
import net.dv8tion.jda.core.events.guild.voice.GuildVoiceJoinEvent ;
2017-11-04 18:27:18 +01:00
import net.dv8tion.jda.core.events.guild.voice.GuildVoiceLeaveEvent ;
2016-12-08 20:05:23 +01:00
import net.dv8tion.jda.core.events.message.MessageReceivedEvent ;
import net.dv8tion.jda.core.hooks.ListenerAdapter ;
import net.dv8tion.jda.core.managers.GuildManager ;
2017-02-04 19:31:09 +01:00
import org.apache.logging.log4j.LogManager ;
import org.apache.logging.log4j.Logger ;
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 ;
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 {
2017-12-12 23:29:49 +01:00
private AntiSpam antispam = new AntiSpam ( ) ;
private Moderateur modo = new Moderateur ( ) ;
2018-04-28 22:57:48 +02:00
private GuildPreferenceRepository guildPreferenceRepository ;
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 " ) ;
}
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 ( ) ) ;
if ( guildPref . isDefaultRole ( ) ) {
logger . info ( event . getUser ( ) . getName ( ) + " join the guild, move it! " ) ;
List < Role > roles = new ArrayList < > ( ) ;
roles . add ( event . getGuild ( ) . getRoleById ( guildPref . getDefaultRoleId ( ) ) ) ;
new Move ( ) . exc ( event . getMember ( ) , roles , false , event . getGuild ( ) , event . getGuild ( ) . getManager ( ) ) ;
}
if ( guildPref . isWelcome ( ) ) {
TextChannel chanel = event . getGuild ( ) . getTextChannelById ( guildPref . getWelcomeChanelID ( ) ) ;
if ( chanel ! = null ) {
String message = guildPref . getWelcomeMessage ( ) ;
message = message . replaceAll ( " @name " , event . getMember ( ) . getAsMention ( ) ) ;
logger . debug ( message ) ;
// "Salut "+event.getUser().getAsMention()+"! Ecris ton nom, prénom, ta promotion et ton groupe ici! Un admin te donnera accées a ton groupe!"
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 ( ) ) ;
if ( guildPref . isDefaultRole ( ) ) {
if ( ! MainBot . roleFlag ) {
if ( event . getMember ( ) . getRoles ( ) . size ( ) = = 0 ) {
logger . info ( event . getUser ( ) . getName ( ) + " have no roles, move it! " ) ;
List < Role > roles = new ArrayList < > ( ) ;
roles . add ( event . getGuild ( ) . getRoleById ( guildPref . getDefaultRoleId ( ) ) ) ;
new Move ( ) . exc ( event . getMember ( ) , roles , false , event . getGuild ( ) , event . getGuild ( ) . getManager ( ) ) ;
MainBot . roleFlag = false ;
}
}
else
{
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 ) ;
if ( ! event . getMember ( ) . getUser ( ) . isBot ( ) )
new UserStatsUtils . VoicePresenceCompter ( event . getMember ( ) ) . start ( ) ;
}
2017-11-04 18:27:18 +01:00
@Override
public void onGuildVoiceLeave ( GuildVoiceLeaveEvent event ) {
super . onGuildVoiceLeave ( event ) ;
2017-11-06 16:22:15 +01:00
if ( event . getGuild ( ) . getAudioManager ( ) . isConnected ( ) )
2017-11-04 18:27:18 +01:00
{
logger . debug ( " User disconnected from voice channel. " ) ;
2017-11-06 16:22:15 +01: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. " ) ;
2017-11-06 16:22:15 +01:00
2018-04-26 11:16:47 +02:00
AudioM . getInstance ( event . getGuild ( ) ) . stop ( ) ;
2017-11-04 18:27:18 +01:00
}
}
}
2016-12-08 20:05:23 +01:00
@Override
public void onMessageReceived ( MessageReceivedEvent event ) {
2018-12-05 20:53:48 +01:00
if ( ! event . getAuthor ( ) . isBot ( ) ) {
UserStatsUtils . getINSTANCE ( ) . addMessageCount ( event . getMember ( ) ) ;
}
2018-02-26 11:39:13 +01: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());
2018-04-25 16:40:21 +02:00
MainBot . handleCommand ( new CommandParser ( ) . parse ( event . getMessage ( ) . getContentRaw ( ) , event ) ) ;
2017-09-27 12:08:57 +02:00
2018-02-26 11:39:13 +01:00
}
else if ( ! event . getMessage ( ) . getAuthor ( ) . getId ( ) . equals ( event . getJDA ( ) . getSelfUser ( ) . getId ( ) ) )
{
2017-09-04 18:36:23 +02:00
2018-02-26 11:39:13 +01:00
if ( ! event . isFromType ( ChannelType . PRIVATE ) ) {
2017-09-04 18:36:23 +02:00
2017-09-27 12:08:57 +02:00
2018-02-26 11:39:13 +01:00
2018-04-28 22:57:48 +02:00
Guild serveur = event . getGuild ( ) ;
GuildPreferenceEntity guildPref = getPreference ( serveur ) ;
if ( ! guildPref . isAntiSpam ( ) )
return ;
GuildManager guildManager = serveur . getManager ( ) ;
Member user = event . getMember ( ) ;
// appel de la methode d'analyse de message de "Moderateur"
if ( event . getMessage ( ) . getContentRaw ( ) . length ( ) > 0 ) {
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. " ) ;
2016-12-08 20:05:23 +01:00
}
2017-03-20 21:01:49 +01:00
2018-02-26 11:39:13 +01:00
}
} catch ( Exception e ) {
logger . catching ( e ) ;
2016-12-08 20:05:23 +01:00
2018-02-26 11:39:13 +01:00
if ( event . isFromType ( ChannelType . PRIVATE ) )
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
2018-05-03 09:28:59 +02:00
@Override
public void onGuildJoin ( GuildJoinEvent event ) {
2018-12-03 14:43:39 +01: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 ! " )
. 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 " ) ;
event . getGuild ( ) . getDefaultChannel ( ) . sendMessage ( EmbedMessageUtils . buildStandar ( eb ) ) . complete ( ) ;
}
2018-04-28 22:57:48 +02:00
private GuildPreferenceEntity getPreference ( Guild guild ) {
List < GuildPreferenceEntity > guildPrefList = guildPreferenceRepository . findByGuildId ( guild . getId ( ) ) ;
GuildPreferenceEntity guildPref ;
if ( guildPrefList . isEmpty ( ) ) {
logger . info ( " Generate default pref " ) ;
guildPref = GuildPreferenceEntity . getDefault ( guild ) ;
guildPreferenceRepository . save ( guildPref ) ;
}
else
guildPref = guildPrefList . get ( 0 ) ;
return guildPref ;
}
2016-12-08 20:05:23 +01:00
}