2017-03-20 18:44:53 +01:00
package net.Broken ;
2016-12-08 20:05:23 +01:00
2018-04-28 22:57:48 +02:00
import net.Broken.DB.Entity.GuildPreferenceEntity ;
import net.Broken.DB.Repository.GuildPreferenceRepository ;
2022-05-15 18:39:46 +02:00
import net.Broken.Tools.AutoVoiceChannel ;
import net.Broken.Tools.EmbedMessageUtils ;
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 ;
2022-05-15 18:39:46 +02:00
import net.dv8tion.jda.api.MessageBuilder ;
import net.dv8tion.jda.api.entities.Guild ;
import net.dv8tion.jda.api.entities.Message ;
import net.dv8tion.jda.api.entities.Role ;
import net.dv8tion.jda.api.entities.TextChannel ;
2019-09-10 09:03:16 +02:00
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 ;
import net.dv8tion.jda.api.hooks.ListenerAdapter ;
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.* ;
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 {
2022-05-15 18:39:46 +02:00
private final GuildPreferenceRepository guildPreferenceRepository ;
2018-04-28 22:57:48 +02:00
2022-05-15 18:39:46 +02:00
private final 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 ) {
2022-05-15 18:39:46 +02:00
logger . info ( " Connection success " ) ;
2017-02-04 19:31:09 +01:00
}
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 ( ) ) {
2022-05-15 18:39:46 +02:00
logger . info ( " [ " + event . getGuild ( ) . getName ( ) + " ] : " + event . getUser ( ) . getName ( ) + " join the guild, adding default role ! " ) ;
Role default_role = event . getGuild ( ) . getRoleById ( guildPref . getDefaultRoleId ( ) ) ;
if ( default_role ! = null ) {
event . getGuild ( ) . addRoleToMember ( event . getMember ( ) , default_role ) . queue ( ) ;
} else {
logger . fatal ( " [ " + event . getGuild ( ) . getName ( ) + " ] : Default role is null ! " ) ;
}
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 ) {
2022-05-15 18:39:46 +02:00
String message = guildPref . getWelcomeMessage ( ) . replaceAll ( " @name " , event . getMember ( ) . getAsMention ( ) ) ;
2018-04-28 22:57:48 +02:00
logger . debug ( message ) ;
2022-05-15 18:39:46 +02:00
chanel . sendMessage ( message ) . queue ( ) ;
} else {
logger . fatal ( " [ " + event . getGuild ( ) . getName ( ) + " ] : Welcome chanel is null ! " ) ;
2018-04-28 22:57:48 +02:00
}
}
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 ( ) ) {
2022-05-15 18:39:46 +02:00
if ( event . getMember ( ) . getRoles ( ) . size ( ) = = 0 ) {
logger . info ( " [ " + event . getGuild ( ) . getName ( ) + " ] : " + event . getUser ( ) . getName ( ) + " have no roles, reset to default ! " ) ;
Role default_role = event . getGuild ( ) . getRoleById ( guildPref . getDefaultRoleId ( ) ) ;
if ( default_role = = null ) {
logger . fatal ( " [ " + event . getGuild ( ) . getName ( ) + " ] : Default role is null ! " ) ;
return ;
2018-04-28 22:57:48 +02:00
}
2022-05-15 18:39:46 +02:00
event . getGuild ( ) . addRoleToMember ( event . getMember ( ) , default_role ) . queue ( ) ;
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 ) {
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 ( ) ) ;
}
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 ) ;
2022-05-15 18:39:46 +02:00
if ( commands . containsKey ( event . getName ( ) ) ) {
2022-05-13 17:54:56 +02:00
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 " ) ;
2022-05-15 18:39:46 +02:00
Message message = new MessageBuilder ( ) . setEmbeds ( EmbedMessageUtils . buildStandar ( eb ) ) . build ( ) ;
2018-05-03 09:28:59 +02:00
2019-09-27 09:17:31 +02:00
TextChannel defaultChan = event . getGuild ( ) . getDefaultChannel ( ) ;
2022-05-15 18:39:46 +02:00
if ( defaultChan ! = null & & defaultChan . canTalk ( ) ) {
defaultChan . sendMessage ( message ) . queue ( ) ;
} else {
for ( TextChannel chan : event . getGuild ( ) . getTextChannels ( ) ) {
if ( chan . canTalk ( ) ) {
chan . sendMessage ( message ) . queue ( ) ;
2019-09-27 09:17:31 +02:00
}
}
}
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 ( ) ) {
2022-05-15 18:39:46 +02:00
logger . info ( " [ " + guild . getName ( ) + " ] : Generate default pref " ) ;
2018-04-28 22:57:48 +02:00
guildPref = GuildPreferenceEntity . getDefault ( guild ) ;
2022-05-15 18:39:46 +02:00
guildPref = 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
}