Add auto create voice channels
This commit is contained in:
parent
dbf4f43019
commit
2ddf973299
@ -5,11 +5,8 @@ import net.Broken.DB.Entity.GuildPreferenceEntity;
|
|||||||
import net.Broken.DB.Entity.UserEntity;
|
import net.Broken.DB.Entity.UserEntity;
|
||||||
import net.Broken.DB.Repository.GuildPreferenceRepository;
|
import net.Broken.DB.Repository.GuildPreferenceRepository;
|
||||||
import net.Broken.DB.Repository.UserRepository;
|
import net.Broken.DB.Repository.UserRepository;
|
||||||
import net.Broken.Tools.AntiSpam;
|
import net.Broken.Tools.*;
|
||||||
import net.Broken.Tools.Command.CommandParser;
|
import net.Broken.Tools.Command.CommandParser;
|
||||||
import net.Broken.Tools.EmbedMessageUtils;
|
|
||||||
import net.Broken.Tools.Moderateur;
|
|
||||||
import net.Broken.Tools.PrivateMessage;
|
|
||||||
import net.Broken.Tools.UserManager.Stats.UserStatsUtils;
|
import net.Broken.Tools.UserManager.Stats.UserStatsUtils;
|
||||||
import net.Broken.audio.AudioM;
|
import net.Broken.audio.AudioM;
|
||||||
import net.dv8tion.jda.api.EmbedBuilder;
|
import net.dv8tion.jda.api.EmbedBuilder;
|
||||||
@ -132,6 +129,8 @@ public class BotListener extends ListenerAdapter {
|
|||||||
userStatsUtils.runningCounters.put(event.getMember().getId(), temp);
|
userStatsUtils.runningCounters.put(event.getMember().getId(), temp);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
AutoVoiceChannel autoVoiceChannel = AutoVoiceChannel.getInstance(event.getGuild());
|
||||||
|
autoVoiceChannel.join(event.getChannelJoined());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -143,10 +142,11 @@ public class BotListener extends ListenerAdapter {
|
|||||||
|
|
||||||
if (event.getGuild().getAudioManager().getConnectedChannel().getMembers().size() == 1) {
|
if (event.getGuild().getAudioManager().getConnectedChannel().getMembers().size() == 1) {
|
||||||
logger.debug("I'm alone, close audio connection.");
|
logger.debug("I'm alone, close audio connection.");
|
||||||
|
|
||||||
AudioM.getInstance(event.getGuild()).stop();
|
AudioM.getInstance(event.getGuild()).stop();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
AutoVoiceChannel autoVoiceChannel = AutoVoiceChannel.getInstance(event.getGuild());
|
||||||
|
autoVoiceChannel.leave(event.getChannelLeft());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -32,9 +32,23 @@ public class GuildPreferenceEntity {
|
|||||||
@ElementCollection
|
@ElementCollection
|
||||||
private List<String> visibleVoiceChanel;
|
private List<String> visibleVoiceChanel;
|
||||||
|
|
||||||
|
private boolean autoVoice;
|
||||||
|
private String autoVoiceChannelID;
|
||||||
|
private String autoVoiceChannelTitle;
|
||||||
|
|
||||||
|
|
||||||
public GuildPreferenceEntity(String guildId, boolean antiSpam, boolean welcome, String welcomeMessage, String welcomeChanelID, boolean defaultRole, String defaultRoleId, boolean dailyMadame, ArrayList<String> visibleVoiceChanel) {
|
public GuildPreferenceEntity(String guildId,
|
||||||
|
boolean antiSpam,
|
||||||
|
boolean welcome,
|
||||||
|
String welcomeMessage,
|
||||||
|
String welcomeChanelID,
|
||||||
|
boolean defaultRole,
|
||||||
|
String defaultRoleId,
|
||||||
|
boolean dailyMadame,
|
||||||
|
ArrayList<String> visibleVoiceChanel,
|
||||||
|
boolean autoVoice,
|
||||||
|
String autoVoiceChannelID,
|
||||||
|
String autoVoiceChannelTitle) {
|
||||||
this.guildId = guildId;
|
this.guildId = guildId;
|
||||||
this.antiSpam = antiSpam;
|
this.antiSpam = antiSpam;
|
||||||
this.welcome = welcome;
|
this.welcome = welcome;
|
||||||
@ -44,9 +58,13 @@ public class GuildPreferenceEntity {
|
|||||||
this.defaultRoleId = defaultRoleId;
|
this.defaultRoleId = defaultRoleId;
|
||||||
this.dailyMadame = dailyMadame;
|
this.dailyMadame = dailyMadame;
|
||||||
this.visibleVoiceChanel = visibleVoiceChanel;
|
this.visibleVoiceChanel = visibleVoiceChanel;
|
||||||
|
this.autoVoice = autoVoice;
|
||||||
|
this.autoVoiceChannelID = autoVoiceChannelID;
|
||||||
|
this.autoVoiceChannelTitle = autoVoiceChannelTitle;
|
||||||
}
|
}
|
||||||
|
|
||||||
public GuildPreferenceEntity(){}
|
public GuildPreferenceEntity() {
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
public static GuildPreferenceEntity getDefault(Guild guild) {
|
public static GuildPreferenceEntity getDefault(Guild guild) {
|
||||||
@ -55,7 +73,7 @@ public class GuildPreferenceEntity {
|
|||||||
voice.add(voiceChannel.getId());
|
voice.add(voiceChannel.getId());
|
||||||
}
|
}
|
||||||
|
|
||||||
return new GuildPreferenceEntity(guild.getId(), false, false, "Welcome to this awesome server @name! ", " ", false, " ", true, voice);
|
return new GuildPreferenceEntity(guild.getId(), false, false, "Welcome to this awesome server @name! ", " ", false, " ", true, voice, false, " ", " ");
|
||||||
}
|
}
|
||||||
|
|
||||||
public Integer getId() {
|
public Integer getId() {
|
||||||
@ -137,4 +155,28 @@ public class GuildPreferenceEntity {
|
|||||||
public void setVisibleVoiceChanel(List<String> visibleVoiceChanel) {
|
public void setVisibleVoiceChanel(List<String> visibleVoiceChanel) {
|
||||||
this.visibleVoiceChanel = visibleVoiceChanel;
|
this.visibleVoiceChanel = visibleVoiceChanel;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean isAutoVoice() {
|
||||||
|
return autoVoice;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setAutoVoice(boolean autoVoice) {
|
||||||
|
this.autoVoice = autoVoice;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getAutoVoiceChannelID() {
|
||||||
|
return autoVoiceChannelID;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setAutoVoiceChannelID(String autoVoiceChannelID) {
|
||||||
|
this.autoVoiceChannelID = autoVoiceChannelID;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getAutoVoiceChannelTitle() {
|
||||||
|
return autoVoiceChannelTitle;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setAutoVoiceChannelTitle(String autoVoiceChannelTitle) {
|
||||||
|
this.autoVoiceChannelTitle = autoVoiceChannelTitle;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -6,6 +6,7 @@ import java.util.List;
|
|||||||
|
|
||||||
@JsonInclude(JsonInclude.Include.NON_NULL)
|
@JsonInclude(JsonInclude.Include.NON_NULL)
|
||||||
public class GetSettingsData {
|
public class GetSettingsData {
|
||||||
|
public String description;
|
||||||
public String name;
|
public String name;
|
||||||
public String id;
|
public String id;
|
||||||
public TYPE type;
|
public TYPE type;
|
||||||
@ -15,8 +16,9 @@ public class GetSettingsData {
|
|||||||
public GetSettingsData() {
|
public GetSettingsData() {
|
||||||
}
|
}
|
||||||
|
|
||||||
public GetSettingsData(String name, String id, TYPE type, List<Value> values, String current) {
|
public GetSettingsData(String name, String description, String id, TYPE type, List<Value> values, String current) {
|
||||||
this.name = name;
|
this.name = name;
|
||||||
|
this.description = description;
|
||||||
this.id = id;
|
this.id = id;
|
||||||
this.type = type;
|
this.type = type;
|
||||||
this.values = values;
|
this.values = values;
|
||||||
|
87
src/main/java/net/Broken/Tools/AutoVoiceChannel.java
Normal file
87
src/main/java/net/Broken/Tools/AutoVoiceChannel.java
Normal file
@ -0,0 +1,87 @@
|
|||||||
|
package net.Broken.Tools;
|
||||||
|
|
||||||
|
|
||||||
|
import net.Broken.DB.Entity.GuildPreferenceEntity;
|
||||||
|
import net.dv8tion.jda.api.entities.Guild;
|
||||||
|
import net.dv8tion.jda.api.entities.Member;
|
||||||
|
import net.dv8tion.jda.api.entities.VoiceChannel;
|
||||||
|
import net.dv8tion.jda.api.requests.RestAction;
|
||||||
|
import org.apache.logging.log4j.LogManager;
|
||||||
|
import org.apache.logging.log4j.Logger;
|
||||||
|
|
||||||
|
import java.util.*;
|
||||||
|
|
||||||
|
import static net.Broken.MainBot.jda;
|
||||||
|
|
||||||
|
public class AutoVoiceChannel {
|
||||||
|
private static final HashMap<String, AutoVoiceChannel> INSTANCE_MAP = new HashMap<>();
|
||||||
|
private final Logger logger = LogManager.getLogger();
|
||||||
|
|
||||||
|
private final String guildID;
|
||||||
|
private final HashMap<Integer, String> createdChannels = new HashMap<>();
|
||||||
|
|
||||||
|
public static AutoVoiceChannel getInstance(Guild guild) {
|
||||||
|
if (INSTANCE_MAP.get(guild.getId()) == null) {
|
||||||
|
INSTANCE_MAP.put(guild.getId(), new AutoVoiceChannel(guild));
|
||||||
|
}
|
||||||
|
return INSTANCE_MAP.get(guild.getId());
|
||||||
|
}
|
||||||
|
|
||||||
|
public AutoVoiceChannel(Guild guild) {
|
||||||
|
this.guildID = guild.getId();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void join(VoiceChannel voiceChannel) {
|
||||||
|
Guild guild = jda.getGuildById(guildID);
|
||||||
|
if (guild == null)
|
||||||
|
return;
|
||||||
|
GuildPreferenceEntity pref = SettingsUtils.getInstance().getPreference(guild);
|
||||||
|
if ( pref.isAutoVoice() && voiceChannel.getId().equals(pref.getAutoVoiceChannelID())) {
|
||||||
|
logger.info("Creating new voice channel for Guild : " + guild.getName());
|
||||||
|
VoiceChannel newChannel = voiceChannel.createCopy().complete();
|
||||||
|
int next = getNextNumber();
|
||||||
|
String title = pref.getAutoVoiceChannelTitle();
|
||||||
|
title = title.replace("@count", Integer.toString(next));
|
||||||
|
newChannel.getManager().setName(title).queue();
|
||||||
|
createdChannels.put(next, newChannel.getId());
|
||||||
|
moveMembers(voiceChannel.getMembers(), newChannel);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public void leave(VoiceChannel voiceChannel) {
|
||||||
|
if (voiceChannel.getMembers().isEmpty()){
|
||||||
|
String id = voiceChannel.getId();
|
||||||
|
for(Map.Entry<Integer, String> entry : createdChannels.entrySet()) {
|
||||||
|
if (entry.getValue().equals(id)){
|
||||||
|
logger.info("Auto created channel is empty, deleting it ...");
|
||||||
|
voiceChannel.delete().reason("Auto-remove empty voice channel").queue();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private int getNextNumber() {
|
||||||
|
Set<Integer> keys = createdChannels.keySet();
|
||||||
|
for (int next = 1; next < 999; next++) {
|
||||||
|
if (!keys.contains(next))
|
||||||
|
return next;
|
||||||
|
}
|
||||||
|
return 999;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void moveMembers(List<Member> members, VoiceChannel destination){
|
||||||
|
logger.debug("Moving Members to new voice channel...");
|
||||||
|
RestAction<Void> restAction = null;
|
||||||
|
for(Member member : members){
|
||||||
|
if (restAction == null)
|
||||||
|
restAction = destination.getGuild().moveVoiceMember(member, destination);
|
||||||
|
restAction = restAction.and(destination.getGuild().moveVoiceMember(member, destination));
|
||||||
|
}
|
||||||
|
if(restAction != null){
|
||||||
|
restAction.queue();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -12,8 +12,6 @@ import java.net.URLConnection;
|
|||||||
public class Redirection {
|
public class Redirection {
|
||||||
|
|
||||||
public Redirection(){
|
public Redirection(){
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -3,38 +3,34 @@ package net.Broken.Tools;
|
|||||||
import net.Broken.DB.Entity.GuildPreferenceEntity;
|
import net.Broken.DB.Entity.GuildPreferenceEntity;
|
||||||
import net.Broken.DB.Entity.UserEntity;
|
import net.Broken.DB.Entity.UserEntity;
|
||||||
import net.Broken.DB.Repository.GuildPreferenceRepository;
|
import net.Broken.DB.Repository.GuildPreferenceRepository;
|
||||||
import net.Broken.DB.Repository.PendingPwdResetRepository;
|
|
||||||
import net.Broken.DB.Repository.UserRepository;
|
import net.Broken.DB.Repository.UserRepository;
|
||||||
import net.Broken.MainBot;
|
import net.Broken.MainBot;
|
||||||
import net.Broken.RestApi.Data.Settings.GetSettingsData;
|
import net.Broken.RestApi.Data.Settings.GetSettingsData;
|
||||||
import net.Broken.RestApi.Data.Settings.PostSetSettings;
|
import net.Broken.RestApi.Data.Settings.PostSetSettings;
|
||||||
import net.Broken.RestApi.Data.Settings.Value;
|
import net.Broken.RestApi.Data.Settings.Value;
|
||||||
import net.Broken.SpringContext;
|
import net.Broken.SpringContext;
|
||||||
import net.Broken.Tools.UserManager.Exceptions.UnknownTokenException;
|
|
||||||
import net.Broken.Tools.UserManager.UserUtils;
|
import net.Broken.Tools.UserManager.UserUtils;
|
||||||
import net.dv8tion.jda.api.Permission;
|
import net.dv8tion.jda.api.Permission;
|
||||||
import net.dv8tion.jda.api.entities.*;
|
import net.dv8tion.jda.api.entities.*;
|
||||||
import org.apache.logging.log4j.LogManager;
|
import org.apache.logging.log4j.LogManager;
|
||||||
import org.apache.logging.log4j.Logger;
|
import org.apache.logging.log4j.Logger;
|
||||||
import org.springframework.context.ApplicationContext;
|
import org.springframework.context.ApplicationContext;
|
||||||
import org.springframework.http.HttpStatus;
|
|
||||||
import org.springframework.http.ResponseEntity;
|
|
||||||
import org.springframework.security.crypto.password.PasswordEncoder;
|
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.Collections;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
public class SettingsUtils {
|
public class SettingsUtils {
|
||||||
|
|
||||||
private static SettingsUtils INSTANCE;
|
private static SettingsUtils INSTANCE;
|
||||||
private Logger logger = LogManager.getLogger();
|
private final Logger logger = LogManager.getLogger();
|
||||||
|
|
||||||
public static SettingsUtils getInstance() {
|
public static SettingsUtils getInstance() {
|
||||||
return (INSTANCE == null) ? new SettingsUtils() : INSTANCE;
|
return (INSTANCE == null) ? new SettingsUtils() : INSTANCE;
|
||||||
}
|
}
|
||||||
|
|
||||||
private GuildPreferenceRepository guildPreferenceRepository;
|
private final GuildPreferenceRepository guildPreferenceRepository;
|
||||||
private UserRepository userRepository;
|
private final UserRepository userRepository;
|
||||||
|
|
||||||
|
|
||||||
private SettingsUtils() {
|
private SettingsUtils() {
|
||||||
@ -45,28 +41,39 @@ public class SettingsUtils {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Extract all settings for displaying on webpage
|
||||||
|
*
|
||||||
|
* @param guild The guild
|
||||||
|
* @return All formatted settings
|
||||||
|
*/
|
||||||
public ArrayList<GetSettingsData> extractSettings(Guild guild) {
|
public ArrayList<GetSettingsData> extractSettings(Guild guild) {
|
||||||
ArrayList<GetSettingsData> list = new ArrayList<>();
|
|
||||||
|
|
||||||
|
ArrayList<GetSettingsData> list = new ArrayList<>();
|
||||||
List<GuildPreferenceEntity> guildPrefList = guildPreferenceRepository.findByGuildId(guild.getId());
|
List<GuildPreferenceEntity> guildPrefList = guildPreferenceRepository.findByGuildId(guild.getId());
|
||||||
GuildPreferenceEntity guildPref;
|
GuildPreferenceEntity guildPref;
|
||||||
if (guildPrefList.isEmpty()) {
|
if (guildPrefList.isEmpty()) {
|
||||||
guildPref = GuildPreferenceEntity.getDefault(guild);
|
guildPref = GuildPreferenceEntity.getDefault(guild);
|
||||||
guildPreferenceRepository.save(guildPref);
|
guildPreferenceRepository.save(guildPref);
|
||||||
}
|
} else
|
||||||
else
|
|
||||||
guildPref = guildPrefList.get(0);
|
guildPref = guildPrefList.get(0);
|
||||||
|
|
||||||
|
List<String> visibleVoice = new ArrayList<>(guildPref.getVisibleVoiceChanel());
|
||||||
|
if (visibleVoice.size() == 0) {
|
||||||
|
guildPref = setDefaultVoiceChannels(guild, guildPref);
|
||||||
|
}
|
||||||
list.add(new GetSettingsData(
|
list.add(new GetSettingsData(
|
||||||
"Visible Voices Channels",
|
"Visible Voices Channels",
|
||||||
|
null,
|
||||||
"voices_channels",
|
"voices_channels",
|
||||||
GetSettingsData.TYPE.SELECT_LIST,
|
GetSettingsData.TYPE.SELECT_LIST,
|
||||||
getVoiceChanels(guild, guildPref),
|
getVoiceChannels(guild, visibleVoice),
|
||||||
null
|
null
|
||||||
));
|
));
|
||||||
|
|
||||||
list.add(new GetSettingsData(
|
list.add(new GetSettingsData(
|
||||||
"Enable Welcome Message",
|
"Enable Welcome Message",
|
||||||
|
null,
|
||||||
"welcome",
|
"welcome",
|
||||||
GetSettingsData.TYPE.BOOL,
|
GetSettingsData.TYPE.BOOL,
|
||||||
null,
|
null,
|
||||||
@ -74,6 +81,7 @@ public class SettingsUtils {
|
|||||||
));
|
));
|
||||||
list.add(new GetSettingsData(
|
list.add(new GetSettingsData(
|
||||||
"Welcome Message chanel",
|
"Welcome Message chanel",
|
||||||
|
null,
|
||||||
"welcome_chanel_id",
|
"welcome_chanel_id",
|
||||||
GetSettingsData.TYPE.LIST,
|
GetSettingsData.TYPE.LIST,
|
||||||
getTextChannels(guild),
|
getTextChannels(guild),
|
||||||
@ -81,6 +89,7 @@ public class SettingsUtils {
|
|||||||
));
|
));
|
||||||
list.add(new GetSettingsData(
|
list.add(new GetSettingsData(
|
||||||
"Welcome Message",
|
"Welcome Message",
|
||||||
|
null,
|
||||||
"welcome_message",
|
"welcome_message",
|
||||||
GetSettingsData.TYPE.STRING,
|
GetSettingsData.TYPE.STRING,
|
||||||
null,
|
null,
|
||||||
@ -90,6 +99,7 @@ public class SettingsUtils {
|
|||||||
|
|
||||||
list.add(new GetSettingsData(
|
list.add(new GetSettingsData(
|
||||||
"Enable Default Role",
|
"Enable Default Role",
|
||||||
|
null,
|
||||||
"default_role",
|
"default_role",
|
||||||
GetSettingsData.TYPE.BOOL,
|
GetSettingsData.TYPE.BOOL,
|
||||||
null,
|
null,
|
||||||
@ -97,15 +107,16 @@ public class SettingsUtils {
|
|||||||
));
|
));
|
||||||
list.add(new GetSettingsData(
|
list.add(new GetSettingsData(
|
||||||
"Default Role",
|
"Default Role",
|
||||||
|
null,
|
||||||
"default_role_id",
|
"default_role_id",
|
||||||
GetSettingsData.TYPE.LIST,
|
GetSettingsData.TYPE.LIST,
|
||||||
getRoles(guild),
|
getRoles(guild),
|
||||||
guildPref.getDefaultRoleId()
|
guildPref.getDefaultRoleId()
|
||||||
));
|
));
|
||||||
|
|
||||||
|
|
||||||
list.add(new GetSettingsData(
|
list.add(new GetSettingsData(
|
||||||
"Enable Anti Spam",
|
"Enable Anti Spam",
|
||||||
|
null,
|
||||||
"anti_spam",
|
"anti_spam",
|
||||||
GetSettingsData.TYPE.BOOL,
|
GetSettingsData.TYPE.BOOL,
|
||||||
null,
|
null,
|
||||||
@ -114,38 +125,64 @@ public class SettingsUtils {
|
|||||||
|
|
||||||
list.add(new GetSettingsData(
|
list.add(new GetSettingsData(
|
||||||
"Enable Daily Madame Message",
|
"Enable Daily Madame Message",
|
||||||
|
null,
|
||||||
"daily_madame",
|
"daily_madame",
|
||||||
GetSettingsData.TYPE.BOOL,
|
GetSettingsData.TYPE.BOOL,
|
||||||
null,
|
null,
|
||||||
Boolean.toString(guildPref.isDailyMadame())
|
Boolean.toString(guildPref.isDailyMadame())
|
||||||
));
|
));
|
||||||
|
|
||||||
|
list.add(new GetSettingsData(
|
||||||
|
"Enable Auto Create Voice Chanel",
|
||||||
|
null,
|
||||||
|
"auto_voice",
|
||||||
|
GetSettingsData.TYPE.BOOL,
|
||||||
|
null,
|
||||||
|
Boolean.toString(guildPref.isAutoVoice())
|
||||||
|
));
|
||||||
|
list.add(new GetSettingsData(
|
||||||
|
"Base Voice Channel For Auto Create",
|
||||||
|
"If someone joint this channel, a new voice channel will be created with the same settings.",
|
||||||
|
"auto_voice_base_channel",
|
||||||
|
GetSettingsData.TYPE.LIST,
|
||||||
|
getVoiceChannels(guild, null),
|
||||||
|
guildPref.getAutoVoiceChannelID()
|
||||||
|
));
|
||||||
|
list.add(new GetSettingsData(
|
||||||
|
"Auto Created Voice Channel title",
|
||||||
|
"Auto created voice channel will use this title, @count will be replaced by the channel count.",
|
||||||
|
"auto_voice_channel_title",
|
||||||
|
GetSettingsData.TYPE.STRING,
|
||||||
|
null,
|
||||||
|
guildPref.getAutoVoiceChannelTitle()
|
||||||
|
));
|
||||||
|
|
||||||
return list;
|
return list;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check if the user have the permission to set settings
|
||||||
|
*
|
||||||
|
* @param token User token
|
||||||
|
* @param guild Guild
|
||||||
|
* @return True if user have ADMINISTRATOR permission
|
||||||
|
*/
|
||||||
public boolean checkPermission(String token, String guild) {
|
public boolean checkPermission(String token, String guild) {
|
||||||
if (token == null || guild == null) {
|
if (token == null || guild == null) {
|
||||||
return false;
|
return false;
|
||||||
}
|
} else {
|
||||||
else{
|
|
||||||
try {
|
try {
|
||||||
UserEntity user = UserUtils.getInstance().getUserWithApiToken(userRepository, token);
|
UserEntity user = UserUtils.getInstance().getUserWithApiToken(userRepository, token);
|
||||||
User jdaUser = MainBot.jda.getUserById(user.getJdaId());
|
User jdaUser = MainBot.jda.getUserById(user.getJdaId());
|
||||||
Guild jdaGuild = MainBot.jda.getGuildById(guild);
|
Guild jdaGuild = MainBot.jda.getGuildById(guild);
|
||||||
if(jdaGuild == null){
|
if (jdaGuild == null || jdaUser == null)
|
||||||
return false;
|
return false;
|
||||||
}
|
|
||||||
if(!jdaGuild.getMember(jdaUser).hasPermission(Permission.ADMINISTRATOR)){
|
Member guildUser = jdaGuild.getMember(jdaUser);
|
||||||
|
if (guildUser == null)
|
||||||
return false;
|
return false;
|
||||||
}
|
return guildUser.hasPermission(Permission.ADMINISTRATOR);
|
||||||
|
|
||||||
return true;
|
|
||||||
|
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
logger.debug("Unknown Token or user :" + token);
|
logger.debug("Unknown Token or user :" + token);
|
||||||
return false;
|
return false;
|
||||||
@ -160,109 +197,87 @@ public class SettingsUtils {
|
|||||||
String value = setting.val;
|
String value = setting.val;
|
||||||
logger.debug(setting.id + " : " + value);
|
logger.debug(setting.id + " : " + value);
|
||||||
switch (setting.id) {
|
switch (setting.id) {
|
||||||
|
|
||||||
case "voices_channels":
|
case "voices_channels":
|
||||||
|
|
||||||
List<String> list = checkVoiceChanel(guild, setting.vals);
|
List<String> list = checkVoiceChanel(guild, setting.vals);
|
||||||
if (list == null) {
|
if (list == null) {
|
||||||
logger.error("voices_channels error, bad ID.");
|
logger.error("voices_channels error, bad ID.");
|
||||||
return false;
|
return false;
|
||||||
}
|
} else
|
||||||
else{
|
|
||||||
pref.setVisibleVoiceChanel(list);
|
pref.setVisibleVoiceChanel(list);
|
||||||
}
|
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
case "anti_spam":
|
case "anti_spam":
|
||||||
if (value.toLowerCase().equals("true") || value.toLowerCase().equals("false")) {
|
boolean result_as = Boolean.parseBoolean(value);
|
||||||
boolean result = Boolean.parseBoolean(value);
|
pref.setAntiSpam(result_as);
|
||||||
pref.setAntiSpam(result);
|
|
||||||
} else {
|
|
||||||
logger.error("anti_spam error. Key: " + setting.id + " Val: " + setting.val);
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
|
||||||
case "default_role":
|
case "default_role":
|
||||||
if (value.toLowerCase().equals("true") || value.toLowerCase().equals("false")) {
|
boolean result_df = Boolean.parseBoolean(value);
|
||||||
boolean result = Boolean.parseBoolean(value);
|
pref.setDefaultRole(result_df);
|
||||||
pref.setDefaultRole(result);
|
|
||||||
pref = guildPreferenceRepository.save(pref);
|
pref = guildPreferenceRepository.save(pref);
|
||||||
} else {
|
|
||||||
logger.error("default_role error. Key: " + setting.id + " Val: " + setting.val);
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case "default_role_id":
|
case "default_role_id":
|
||||||
try {
|
try {
|
||||||
Role role = guild.getRoleById(value);
|
Role role = guild.getRoleById(value);
|
||||||
if (role != null) {
|
if (role != null) {
|
||||||
pref.setDefaultRoleId(role.getId());
|
pref.setDefaultRoleId(role.getId());
|
||||||
|
|
||||||
pref = guildPreferenceRepository.save(pref);
|
pref = guildPreferenceRepository.save(pref);
|
||||||
|
} else
|
||||||
} else {
|
|
||||||
throw new NumberFormatException();
|
throw new NumberFormatException();
|
||||||
}
|
|
||||||
} catch (NumberFormatException e) {
|
} catch (NumberFormatException e) {
|
||||||
logger.error("default_role_id error. Key: " + setting.id + " Val: " + setting.val);
|
logger.error("default_role_id error. Key: " + setting.id + " Val: " + setting.val);
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case "welcome":
|
case "welcome":
|
||||||
if (value.toLowerCase().equals("true") || value.toLowerCase().equals("false")) {
|
boolean result_w = Boolean.parseBoolean(value);
|
||||||
boolean result = Boolean.parseBoolean(value);
|
pref.setWelcome(result_w);
|
||||||
pref.setWelcome(result);
|
|
||||||
} else {
|
|
||||||
logger.error("welcome error. Key: " + setting.id + " Val: " + setting.val);
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
case "welcome_chanel_id":
|
case "welcome_chanel_id":
|
||||||
try {
|
try {
|
||||||
TextChannel chanel = guild.getTextChannelById(value);
|
TextChannel channel = guild.getTextChannelById(value);
|
||||||
if (chanel != null) {
|
if (channel != null) {
|
||||||
pref.setWelcomeChanelID(chanel.getId());
|
pref.setWelcomeChanelID(channel.getId());
|
||||||
|
} else
|
||||||
} else {
|
|
||||||
throw new NumberFormatException();
|
throw new NumberFormatException();
|
||||||
}
|
|
||||||
} catch (NumberFormatException e) {
|
} catch (NumberFormatException e) {
|
||||||
logger.error("welcome_chanel_id error. Key: " + setting.id + " Val: " + setting.val);
|
logger.error("welcome_chanel_id error. Key: " + setting.id + " Val: " + setting.val);
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case "welcome_message":
|
case "welcome_message":
|
||||||
pref.setWelcomeMessage(value);
|
pref.setWelcomeMessage(value);
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case "daily_madame":
|
case "daily_madame":
|
||||||
if (value.toLowerCase().equals("true") || value.toLowerCase().equals("false")) {
|
boolean result_dm = Boolean.parseBoolean(value);
|
||||||
boolean result = Boolean.parseBoolean(value);
|
pref.setDailyMadame(result_dm);
|
||||||
pref.setDailyMadame(result);
|
break;
|
||||||
|
|
||||||
} else {
|
case "auto_voice":
|
||||||
logger.error("daily_madame error. Key: " + setting.id + " Val: " + setting.val);
|
boolean result_av = Boolean.parseBoolean(value);
|
||||||
|
pref.setAutoVoice(result_av);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case "auto_voice_base_channel":
|
||||||
|
VoiceChannel channel = guild.getVoiceChannelById(value);
|
||||||
|
if (channel == null) {
|
||||||
|
logger.error("voices_channels error, bad ID.");
|
||||||
return false;
|
return false;
|
||||||
}
|
} else
|
||||||
|
pref.setAutoVoiceChannelID(channel.getId());
|
||||||
|
break;
|
||||||
|
|
||||||
|
case "auto_voice_channel_title":
|
||||||
|
pref.setAutoVoiceChannelTitle(value);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
guildPreferenceRepository.save(pref);
|
guildPreferenceRepository.save(pref);
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -283,41 +298,24 @@ public class SettingsUtils {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
private List<Value> getVoiceChanels(Guild guild, GuildPreferenceEntity guildPref){
|
private List<Value> getVoiceChannels(Guild guild, List<String> selected) {
|
||||||
|
List<Value> channels = new ArrayList<>();
|
||||||
|
|
||||||
List<String> prefVoice = new ArrayList<>(guildPref.getVisibleVoiceChanel());
|
|
||||||
if(prefVoice.size() == 0){
|
|
||||||
guildPref = setDefaultVoiceChanels(guild, guildPref);
|
|
||||||
}
|
|
||||||
|
|
||||||
List<Value> chanels = new ArrayList<>();
|
|
||||||
for (VoiceChannel voiceChannel : guild.getVoiceChannels()) {
|
for (VoiceChannel voiceChannel : guild.getVoiceChannels()) {
|
||||||
chanels.add(new Value(voiceChannel.getName(), voiceChannel.getId(), prefVoice.contains(voiceChannel.getId())));
|
if (selected == null)
|
||||||
prefVoice.remove(voiceChannel.getId());
|
channels.add(new Value(voiceChannel.getName(), voiceChannel.getId()));
|
||||||
|
else
|
||||||
|
channels.add(new Value(voiceChannel.getName(), voiceChannel.getId(), selected.contains(voiceChannel.getId())));
|
||||||
}
|
}
|
||||||
|
return channels;
|
||||||
if(prefVoice.size() != 0){
|
|
||||||
List<String> edit = guildPref.getVisibleVoiceChanel();
|
|
||||||
for(String prefVoiceItem : prefVoice){
|
|
||||||
edit.remove(prefVoiceItem);
|
|
||||||
}
|
|
||||||
guildPref.setVisibleVoiceChanel(edit);
|
|
||||||
guildPreferenceRepository.save(guildPref);
|
|
||||||
}
|
|
||||||
|
|
||||||
return chanels;
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private List<String> checkVoiceChanel(Guild guild, List<String> values) {
|
private List<String> checkVoiceChanel(Guild guild, List<String> values) {
|
||||||
List<String> list = new ArrayList<>();
|
List<String> list = new ArrayList<>();
|
||||||
for (String value : values) {
|
for (String value : values) {
|
||||||
|
|
||||||
if (guild.getVoiceChannelById(value) != null) {
|
if (guild.getVoiceChannelById(value) != null) {
|
||||||
list.add(value);
|
list.add(value);
|
||||||
} else {
|
} else {
|
||||||
logger.error("Unknown voice chanel id: " + value);
|
logger.error("Unknown voice channel id: " + value);
|
||||||
list = null;
|
list = null;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -325,7 +323,7 @@ public class SettingsUtils {
|
|||||||
return list;
|
return list;
|
||||||
}
|
}
|
||||||
|
|
||||||
public GuildPreferenceEntity cleanVoicePref(Guild guild, GuildPreferenceEntity guildPref){
|
public GuildPreferenceEntity cleanVisibleVoicePref(Guild guild, GuildPreferenceEntity guildPref) {
|
||||||
List<String> voice = guildPref.getVisibleVoiceChanel();
|
List<String> voice = guildPref.getVisibleVoiceChanel();
|
||||||
for (String prefVoice : guildPref.getVisibleVoiceChanel()) {
|
for (String prefVoice : guildPref.getVisibleVoiceChanel()) {
|
||||||
if (guild.getVoiceChannelById(prefVoice) == null)
|
if (guild.getVoiceChannelById(prefVoice) == null)
|
||||||
@ -336,7 +334,7 @@ public class SettingsUtils {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public GuildPreferenceEntity setDefaultVoiceChanels(Guild guild, GuildPreferenceEntity guildPref){
|
public GuildPreferenceEntity setDefaultVoiceChannels(Guild guild, GuildPreferenceEntity guildPref) {
|
||||||
List<String> prefVoice = guildPref.getVisibleVoiceChanel();
|
List<String> prefVoice = guildPref.getVisibleVoiceChanel();
|
||||||
if (prefVoice == null)
|
if (prefVoice == null)
|
||||||
prefVoice = new ArrayList<>();
|
prefVoice = new ArrayList<>();
|
||||||
@ -355,8 +353,7 @@ public class SettingsUtils {
|
|||||||
logger.info("Generate default pref for " + guild.getName());
|
logger.info("Generate default pref for " + guild.getName());
|
||||||
guildPref = GuildPreferenceEntity.getDefault(guild);
|
guildPref = GuildPreferenceEntity.getDefault(guild);
|
||||||
guildPreferenceRepository.save(guildPref);
|
guildPreferenceRepository.save(guildPref);
|
||||||
}
|
} else
|
||||||
else
|
|
||||||
guildPref = guildPrefList.get(0);
|
guildPref = guildPrefList.get(0);
|
||||||
return guildPref;
|
return guildPref;
|
||||||
}
|
}
|
||||||
|
@ -31,7 +31,7 @@ public class GetVoiceChanels {
|
|||||||
List<String> chanels = pref.getVisibleVoiceChanel();
|
List<String> chanels = pref.getVisibleVoiceChanel();
|
||||||
|
|
||||||
if(chanels == null || chanels.size() == 0){
|
if(chanels == null || chanels.size() == 0){
|
||||||
pref = settingsUtils.setDefaultVoiceChanels(guild, pref);
|
pref = settingsUtils.setDefaultVoiceChannels(guild, pref);
|
||||||
chanels = pref.getVisibleVoiceChanel();
|
chanels = pref.getVisibleVoiceChanel();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -46,7 +46,7 @@ public class GetVoiceChanels {
|
|||||||
|
|
||||||
if(needClean){
|
if(needClean){
|
||||||
logger.debug("Need Clean.");
|
logger.debug("Need Clean.");
|
||||||
settingsUtils.cleanVoicePref(guild, pref);
|
settingsUtils.cleanVisibleVoicePref(guild, pref);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user