ClaptrapBot/src/main/java/net/Broken/BotListener.java

245 lines
9.2 KiB
Java
Raw Normal View History

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;
import net.Broken.Tools.AntiSpam;
2018-02-16 15:02:53 +01:00
import net.Broken.Tools.Command.CommandParser;
import net.Broken.Tools.EmbedMessageUtils;
import net.Broken.Tools.Moderateur;
import net.Broken.Tools.PrivateMessage;
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;
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;
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 {
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();
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
}
@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
}
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();
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();
userStatsUtils.runningCounters.put(event.getMember().getId(), temp);
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.");
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
}
}
}
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());
}
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())) {
//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
}
2019-09-27 09:17:31 +02:00
} catch (Exception e) {
logger.catching(e);
2016-12-08 20:05:23 +01:00
2019-09-27 09:17:31 +02: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-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
}