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

190 lines
7.9 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-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;
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();
2018-04-28 22:57:48 +02:00
public BotListener() {
ApplicationContext context = SpringContext.getAppContext();
guildPreferenceRepository = (GuildPreferenceRepository) context.getBean("guildPreferenceRepository");
}
@Override
public void onReady(ReadyEvent event) {
2022-05-15 18:39:46 +02:00
logger.info("Connection success");
}
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
}
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
}
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.");
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
}
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
}