2019-11-10 01:04:56 +01:00
package uk.co.angrybee.joe ;
import net.dv8tion.jda.api.EmbedBuilder ;
import net.dv8tion.jda.api.JDA ;
import net.dv8tion.jda.api.JDABuilder ;
import net.dv8tion.jda.api.entities.* ;
2020-10-29 01:08:22 +01:00
import net.dv8tion.jda.api.events.guild.member.GuildMemberRemoveEvent ;
2019-11-10 01:04:56 +01:00
import net.dv8tion.jda.api.events.message.MessageReceivedEvent ;
import net.dv8tion.jda.api.hooks.ListenerAdapter ;
2020-10-28 00:14:54 +01:00
import net.dv8tion.jda.api.requests.GatewayIntent ;
2020-10-29 01:08:22 +01:00
import net.dv8tion.jda.api.utils.MemberCachePolicy ;
import net.dv8tion.jda.api.utils.cache.CacheFlag ;
2019-11-10 01:04:56 +01:00
import org.json.simple.JSONObject ;
import org.json.simple.JSONValue ;
import org.json.simple.parser.ParseException ;
2020-10-29 01:08:22 +01:00
import org.yaml.snakeyaml.Yaml ;
import uk.co.angrybee.joe.Configs.* ;
import uk.co.angrybee.joe.Events.ShutdownEvents ;
import uk.co.angrybee.joe.Stores.InGameRemovedList ;
import uk.co.angrybee.joe.Stores.RemovedList ;
import uk.co.angrybee.joe.Stores.UserList ;
import uk.co.angrybee.joe.Stores.WhitelistedPlayers ;
2019-11-10 01:04:56 +01:00
2020-04-14 17:45:34 +02:00
import javax.annotation.Nonnull ;
2019-11-10 01:04:56 +01:00
import javax.security.auth.login.LoginException ;
import java.awt.Color ;
import java.io.* ;
import java.net.URL ;
2020-07-08 21:01:49 +02:00
import java.util.* ;
2020-10-29 01:08:22 +01:00
import java.util.concurrent.TimeUnit ;
import java.util.concurrent.atomic.AtomicBoolean ;
2019-11-10 01:04:56 +01:00
// handles Discord interaction
2020-06-04 13:07:47 +02:00
public class DiscordClient extends ListenerAdapter
{
public static String [ ] allowedToAddRemoveRoles ;
public static String [ ] allowedToAddRoles ;
public static String [ ] allowedToAddLimitedRoles ;
2020-10-29 01:08:22 +01:00
public static String [ ] allowedToClearNamesRoles ;
2019-11-10 01:04:56 +01:00
private static String [ ] targetTextChannels ;
2020-07-10 01:41:37 +02:00
public static String whitelistAddPrefix ;
public static String whitelistRemovePrefix ;
2020-10-29 01:08:22 +01:00
public static String clearNamePrefix ;
public static String clearBanPrefix ;
2020-07-10 01:41:37 +02:00
2019-11-10 01:04:56 +01:00
private static MessageEmbed botInfo ;
private static MessageEmbed addCommandInfo ;
private static MessageEmbed removeCommandInfo ;
private static int maxWhitelistAmount ;
private static boolean limitedWhitelistEnabled ;
private static boolean usernameValidation ;
2020-04-24 23:40:36 +02:00
private static boolean whitelistedRoleAutoAdd ;
private static boolean whitelistedRoleAutoRemove ;
2020-10-29 01:08:22 +01:00
public static String [ ] whitelistedRoleNames ;
2020-04-24 23:40:36 +02:00
2019-11-10 01:04:56 +01:00
private final char [ ] validCharacters = { 'q' , 'w' , 'e' , 'r' , 't' , 'y' , 'u' , 'i' , 'o' , 'p' , 'a' , 's' , 'd' , 'f' , 'g' , 'h' ,
2020-04-14 17:45:34 +02:00
'j' , 'k' , 'l' , 'z' , 'x' , 'c' , 'v' , 'b' , 'n' , 'm' , '1' , '2' , '3' , '4' , '5' , '6' , '7' , '8' , '9' , '0' , '_' } ;
2019-11-10 01:04:56 +01:00
2020-10-29 01:08:22 +01:00
public static JDA javaDiscordAPI ;
2020-04-14 17:45:34 +02:00
2020-06-04 13:07:47 +02:00
public static int InitializeClient ( String clientToken )
{
2019-11-10 01:04:56 +01:00
AssignVars ( ) ;
BuildStrings ( ) ;
2020-06-04 13:07:47 +02:00
try
{
2020-10-29 01:08:22 +01:00
javaDiscordAPI = JDABuilder . createDefault ( clientToken )
. setMemberCachePolicy ( MemberCachePolicy . ALL )
. setBulkDeleteSplittingEnabled ( false )
. disableCache ( CacheFlag . VOICE_STATE , CacheFlag . EMOTE )
. setContextEnabled ( true )
2020-10-28 00:14:54 +01:00
. enableIntents ( GatewayIntent . GUILD_MEMBERS )
2020-10-29 01:08:22 +01:00
. addEventListeners ( new DiscordClient ( ) )
. addEventListeners ( new ShutdownEvents ( ) )
2020-10-28 00:14:54 +01:00
. build ( ) ;
2019-11-10 01:04:56 +01:00
javaDiscordAPI . awaitReady ( ) ;
2020-06-04 13:07:47 +02:00
2019-11-10 01:04:56 +01:00
return 0 ;
2020-06-04 13:07:47 +02:00
}
catch ( LoginException | InterruptedException e )
{
2019-11-10 01:04:56 +01:00
e . printStackTrace ( ) ;
return 1 ;
}
2020-10-29 01:08:22 +01:00
catch ( IllegalStateException e )
{
// Don't print exception related to disallowed intents, already handled
if ( ! e . getMessage ( ) . startsWith ( " Was shutdown trying to await status " ) )
e . printStackTrace ( ) ;
return 1 ;
}
2019-11-10 01:04:56 +01:00
}
2020-06-04 13:07:47 +02:00
public static boolean ShutdownClient ( )
{
javaDiscordAPI . shutdownNow ( ) ;
return javaDiscordAPI . getStatus ( ) = = JDA . Status . SHUTTING_DOWN | | javaDiscordAPI . getStatus ( ) = = JDA . Status . SHUTDOWN ;
}
2020-06-02 19:29:57 +02:00
private static void AssignVars ( )
{
2019-11-10 01:04:56 +01:00
// assign vars here instead of every time a message is received, as they do not change
2020-10-29 01:08:22 +01:00
targetTextChannels = new String [ MainConfig . getMainConfig ( ) . getList ( " target-text-channels " ) . size ( ) ] ;
2020-04-14 17:45:34 +02:00
for ( int i = 0 ; i < targetTextChannels . length ; + + i ) {
2020-10-29 01:08:22 +01:00
targetTextChannels [ i ] = MainConfig . getMainConfig ( ) . getList ( " target-text-channels " ) . get ( i ) . toString ( ) ;
2019-11-10 01:04:56 +01:00
}
2020-10-29 01:08:22 +01:00
maxWhitelistAmount = MainConfig . getMainConfig ( ) . getInt ( " max-whitelist-amount " ) ;
limitedWhitelistEnabled = MainConfig . getMainConfig ( ) . getBoolean ( " limited-whitelist-enabled " ) ;
usernameValidation = MainConfig . getMainConfig ( ) . getBoolean ( " username-validation " ) ;
2020-04-24 23:40:36 +02:00
// Set the name of the role to add/remove to/from the user after they have been added/removed to/from the whitelist and if this feature is enabled
2020-10-29 01:08:22 +01:00
whitelistedRoleAutoAdd = MainConfig . getMainConfig ( ) . getBoolean ( " whitelisted-role-auto-add " ) ;
whitelistedRoleAutoRemove = MainConfig . getMainConfig ( ) . getBoolean ( " whitelisted-role-auto-remove " ) ;
2020-07-08 21:01:49 +02:00
2020-10-29 01:08:22 +01:00
whitelistedRoleNames = new String [ MainConfig . getMainConfig ( ) . getList ( " whitelisted-roles " ) . size ( ) ] ;
2020-07-08 21:01:49 +02:00
for ( int i = 0 ; i < whitelistedRoleNames . length ; i + + )
{
2020-10-29 01:08:22 +01:00
whitelistedRoleNames [ i ] = MainConfig . getMainConfig ( ) . getList ( " whitelisted-roles " ) . get ( i ) . toString ( ) ;
2020-07-08 21:01:49 +02:00
}
2019-11-10 01:04:56 +01:00
}
2020-06-02 19:29:57 +02:00
private static void BuildStrings ( )
{
2019-11-10 01:04:56 +01:00
// build here instead of every time a message is received, as they do not change
EmbedBuilder embedBuilderBotInfo = new EmbedBuilder ( ) ;
2020-10-29 01:08:22 +01:00
embedBuilderBotInfo . setTitle ( " Discord Whitelister for Spigot " ) ;
2020-04-14 17:45:34 +02:00
embedBuilderBotInfo . addField ( " Version " , VersionInfo . getVersion ( ) , false ) ;
2019-11-10 01:04:56 +01:00
embedBuilderBotInfo . addField ( " Links " , ( " https://www.spigotmc.org/resources/discord-whitelister.69929/ " + System . lineSeparator ( ) + " https://github.com/JoeShimell/DiscordWhitelisterSpigot " ) , false ) ;
embedBuilderBotInfo . addField ( " Commands " , ( " **Add:** !whitelist add minecraftUsername " + System . lineSeparator ( ) + " **Remove:** !whitelist remove minecraftUsername " ) , false ) ;
embedBuilderBotInfo . addField ( " Experiencing issues? " , " If you encounter an issue, please report it here: https://github.com/JoeShimell/DiscordWhitelisterSpigot/issues " , false ) ;
embedBuilderBotInfo . setColor ( new Color ( 104 , 109 , 224 ) ) ;
botInfo = embedBuilderBotInfo . build ( ) ;
EmbedBuilder embedBuilderAddCommandInfo = new EmbedBuilder ( ) ;
embedBuilderAddCommandInfo . addField ( " Whitelist Add Command " , ( " !whitelist add minecraftUsername " + System . lineSeparator ( ) + System . lineSeparator ( ) +
" If you encounter any issues, please report them here: https://github.com/JoeShimell/DiscordWhitelisterSpigot/issues " ) , false ) ;
embedBuilderAddCommandInfo . setColor ( new Color ( 104 , 109 , 224 ) ) ;
addCommandInfo = embedBuilderAddCommandInfo . build ( ) ;
EmbedBuilder embedBuilderInfo = new EmbedBuilder ( ) ;
embedBuilderInfo . addField ( " Whitelist Remove Command " , ( " !whitelist remove minecraftUsername " + System . lineSeparator ( ) + System . lineSeparator ( ) +
" If you encounter any issues, please report them here: https://github.com/JoeShimell/DiscordWhitelisterSpigot/issues " ) , false ) ;
embedBuilderInfo . setColor ( new Color ( 104 , 109 , 224 ) ) ;
removeCommandInfo = embedBuilderInfo . build ( ) ;
}
2020-04-20 14:45:11 +02:00
public static String getOnlineStatus ( )
{
try
{
2020-04-14 17:45:34 +02:00
return javaDiscordAPI . getStatus ( ) . name ( ) ;
2020-04-20 14:45:11 +02:00
}
catch ( NullPointerException ex )
{
2020-04-14 17:45:34 +02:00
return " OFFLINE " ;
}
}
2020-04-20 14:45:11 +02:00
public static void SetPlayerCountStatus ( int playerCount )
{
2020-04-19 09:44:10 +02:00
javaDiscordAPI . getPresence ( ) . setActivity ( Activity . watching ( playerCount + " / " + DiscordWhitelister . getMaximumAllowedPlayers ( ) + " players. " ) ) ;
}
2019-11-10 01:04:56 +01:00
@Override
2020-06-02 19:29:57 +02:00
public void onMessageReceived ( MessageReceivedEvent messageReceivedEvent )
{
if ( messageReceivedEvent . isFromType ( ChannelType . TEXT ) )
{
2020-04-14 17:45:34 +02:00
// Check if message should be handled
2020-06-02 19:29:57 +02:00
if ( ! Arrays . asList ( targetTextChannels ) . contains ( messageReceivedEvent . getTextChannel ( ) . getId ( ) ) )
{
2020-04-14 17:45:34 +02:00
return ;
2019-11-10 01:04:56 +01:00
}
2020-06-02 19:29:57 +02:00
if ( messageReceivedEvent . getAuthor ( ) . isBot ( ) )
{
2019-11-10 01:04:56 +01:00
return ;
}
2020-04-14 17:45:34 +02:00
AuthorPermissions authorPermissions = new AuthorPermissions ( messageReceivedEvent ) ;
User author = messageReceivedEvent . getAuthor ( ) ;
String messageContents = messageReceivedEvent . getMessage ( ) . getContentDisplay ( ) ;
TextChannel channel = messageReceivedEvent . getTextChannel ( ) ;
// select different whitelist commands
2020-05-01 21:21:06 +02:00
if ( messageContents . toLowerCase ( ) . equals ( " !whitelist " ) )
{
2020-04-14 17:45:34 +02:00
// info command
2020-05-01 21:21:06 +02:00
if ( authorPermissions . isUserCanUseCommand ( ) )
{
2020-04-14 17:45:34 +02:00
channel . sendMessage ( botInfo ) . queue ( ) ;
2020-05-01 21:21:06 +02:00
}
else
{
2020-04-14 17:45:34 +02:00
EmbedBuilder insufficientPermission = new EmbedBuilder ( ) ;
insufficientPermission . setColor ( new Color ( 231 , 76 , 60 ) ) ;
2020-05-01 21:21:06 +02:00
if ( ! DiscordWhitelister . useCustomMessages )
{
insufficientPermission . addField ( " Insufficient Permissions " , ( author . getAsMention ( ) + " , you do not have permission to use this command. " ) , false ) ;
}
else
{
String customTitle = DiscordWhitelister . getCustomMessagesConfig ( ) . getString ( " insufficient-permissions-title " ) ;
String customMessage = DiscordWhitelister . getCustomMessagesConfig ( ) . getString ( " insufficient-permissions " ) ;
customMessage = customMessage . replaceAll ( " \\ {Sender} " , author . getAsMention ( ) ) ; // Only checking for {Sender}
insufficientPermission . addField ( customTitle , customMessage , false ) ;
}
2020-04-14 17:45:34 +02:00
channel . sendMessage ( insufficientPermission . build ( ) ) . queue ( ) ;
2019-11-10 01:04:56 +01:00
}
2020-04-14 17:45:34 +02:00
}
2019-11-10 01:04:56 +01:00
2020-05-01 21:21:06 +02:00
// Add Command
2020-07-08 02:50:24 +02:00
if ( messageContents . toLowerCase ( ) . startsWith ( " !whitelist add " ) & & ! DiscordWhitelister . getUseCustomPrefixes ( )
2020-07-10 01:41:37 +02:00
| | DiscordWhitelister . getUseCustomPrefixes ( ) & & messageContents . toLowerCase ( ) . startsWith ( whitelistAddPrefix ) )
2020-05-01 21:21:06 +02:00
{
2020-10-29 01:08:22 +01:00
if ( DiscordWhitelister . useOnBanEvents & & authorPermissions . isUserIsBanned ( ) )
{
EmbedBuilder bannedMessage = new EmbedBuilder ( ) ;
bannedMessage . setColor ( new Color ( 231 , 76 , 60 ) ) ;
if ( ! DiscordWhitelister . useCustomMessages )
{
bannedMessage . addField ( " You have been banned! " , author . getAsMention ( ) + " , you cannot use this bot as you have been banned! " , false ) ;
}
else
{
String customTitle = DiscordWhitelister . getCustomMessagesConfig ( ) . getString ( " banned-title " ) ;
String customMessage = DiscordWhitelister . getCustomMessagesConfig ( ) . getString ( " banned-message " ) ;
customMessage = customMessage . replaceAll ( " \\ {Sender} " , author . getAsMention ( ) ) ; // Only checking for {Sender}
bannedMessage . addField ( customTitle , customMessage , false ) ;
}
channel . sendMessage ( bannedMessage . build ( ) ) . queue ( ) ;
return ;
}
2020-05-01 21:21:06 +02:00
// Permission check
if ( ! ( authorPermissions . isUserCanAddRemove ( ) | | authorPermissions . isUserCanAdd ( ) | | limitedWhitelistEnabled & & authorPermissions . isUserHasLimitedAdd ( ) ) )
{
EmbedBuilder insufficientPermission = new EmbedBuilder ( ) ;
insufficientPermission . setColor ( new Color ( 231 , 76 , 60 ) ) ;
2020-04-14 17:45:34 +02:00
2020-05-01 21:21:06 +02:00
if ( ! DiscordWhitelister . useCustomMessages )
{
insufficientPermission . addField ( " Insufficient Permissions " , ( author . getAsMention ( ) + " , you do not have permission to use this command. " ) , false ) ;
}
else
{
String customTitle = DiscordWhitelister . getCustomMessagesConfig ( ) . getString ( " insufficient-permissions-title " ) ;
String customMessage = DiscordWhitelister . getCustomMessagesConfig ( ) . getString ( " insufficient-permissions " ) ;
customMessage = customMessage . replaceAll ( " \\ {Sender} " , author . getAsMention ( ) ) ; // Only checking for {Sender}
insufficientPermission . addField ( customTitle , customMessage , false ) ;
}
channel . sendMessage ( insufficientPermission . build ( ) ) . queue ( ) ;
2020-04-14 17:45:34 +02:00
return ;
2019-11-10 01:04:56 +01:00
}
/ * if limited whitelist is enabled , check if the user is in the limited whitelister group and add the user to the list
which records how many times the user has successfully used the whitelist command * /
2020-05-01 21:21:06 +02:00
if ( limitedWhitelistEnabled & & authorPermissions . isUserHasLimitedAdd ( ) )
{
2020-10-29 01:08:22 +01:00
if ( UserList . getUserList ( ) . getString ( author . getId ( ) ) = = null )
2020-05-01 21:21:06 +02:00
{
2020-10-29 01:08:22 +01:00
UserList . getUserList ( ) . set ( author . getId ( ) , new ArrayList < String > ( ) ) ;
UserList . SaveStore ( ) ;
2019-11-10 01:04:56 +01:00
}
}
2020-04-14 17:45:34 +02:00
boolean usedAllWhitelists = false ;
2020-05-01 21:21:06 +02:00
try
{
2020-10-29 01:08:22 +01:00
usedAllWhitelists = UserList . getRegisteredUsersCount ( author . getId ( ) ) > = maxWhitelistAmount & &
2020-04-14 17:45:34 +02:00
! authorPermissions . isUserCanAddRemove ( ) & & ! authorPermissions . isUserCanAdd ( ) ;
2020-05-01 21:21:06 +02:00
}
catch ( NullPointerException exception )
{
2020-04-14 17:45:34 +02:00
exception . printStackTrace ( ) ;
2019-11-10 01:04:56 +01:00
}
2020-05-01 21:21:06 +02:00
if ( authorPermissions . isUserCanAddRemove ( ) | | authorPermissions . isUserCanAdd ( ) | | limitedWhitelistEnabled & & authorPermissions . isUserHasLimitedAdd ( ) )
{
2020-04-25 02:53:18 +02:00
messageContents = messageContents . toLowerCase ( ) ;
2020-07-08 02:50:24 +02:00
String messageContentsAfterCommand = " " ;
if ( ! DiscordWhitelister . getUseCustomPrefixes ( ) )
{
2020-10-29 01:08:22 +01:00
if ( messageContents . length ( ) > ( " !whitelist add " . length ( ) + 1 ) )
{
messageContentsAfterCommand = messageContents . substring ( " !whitelist add " . length ( ) + 1 ) ; // get everything after !whitelist add[space]
}
2020-07-08 02:50:24 +02:00
}
else
{
2020-10-29 01:08:22 +01:00
if ( messageContents . length ( ) > ( whitelistAddPrefix . length ( ) + 1 ) )
{
messageContentsAfterCommand = messageContents . substring ( whitelistAddPrefix . length ( ) + 1 ) ; // get everything after whitelistAddPrefix[space]
}
2020-07-08 02:50:24 +02:00
}
2020-04-25 02:53:18 +02:00
final String finalNameToAdd = messageContentsAfterCommand . replaceAll ( " .* " , " " ) ; // The name is everything up to the first space
2019-11-10 01:04:56 +01:00
2020-04-14 17:45:34 +02:00
final char [ ] finalNameToWhitelistChar = finalNameToAdd . toCharArray ( ) ;
2019-11-10 01:04:56 +01:00
2020-04-14 17:45:34 +02:00
int timesWhitelisted = 0 ;
boolean onlyHasLimitedAdd = limitedWhitelistEnabled & & authorPermissions . isUserHasLimitedAdd ( ) & &
! authorPermissions . isUserCanAddRemove ( ) & & ! authorPermissions . isUserCanAdd ( ) ;
2020-05-01 21:21:06 +02:00
if ( onlyHasLimitedAdd )
{
2020-10-29 01:08:22 +01:00
timesWhitelisted = UserList . getRegisteredUsersCount ( author . getId ( ) ) ;
2020-04-14 17:45:34 +02:00
// set to current max in case the max whitelist amount was changed
2020-05-01 21:21:06 +02:00
if ( timesWhitelisted > maxWhitelistAmount )
{
2020-04-14 17:45:34 +02:00
timesWhitelisted = maxWhitelistAmount ;
2019-11-10 01:04:56 +01:00
}
}
2020-05-01 21:21:06 +02:00
if ( onlyHasLimitedAdd & & usedAllWhitelists )
{
2020-04-14 17:45:34 +02:00
EmbedBuilder embedBuilderInfo = new EmbedBuilder ( ) ;
embedBuilderInfo . setColor ( new Color ( 104 , 109 , 224 ) ) ;
2020-05-01 21:21:06 +02:00
if ( ! DiscordWhitelister . useCustomMessages )
{
embedBuilderInfo . addField ( " No Whitelists Remaining " , ( author . getAsMention ( ) + " , unable to whitelist. You have ** " + ( maxWhitelistAmount - timesWhitelisted )
+ " out of " + maxWhitelistAmount + " ** whitelists remaining. " ) , false ) ;
}
else
{
String customTitle = DiscordWhitelister . getCustomMessagesConfig ( ) . getString ( " no-whitelists-remaining-title " ) ;
String customMessage = DiscordWhitelister . getCustomMessagesConfig ( ) . getString ( " no-whitelists-remaining " ) ;
customMessage = customMessage . replaceAll ( " \\ {Sender} " , author . getAsMention ( ) ) ;
customMessage = customMessage . replaceAll ( " \\ {RemainingWhitelists} " , String . valueOf ( ( maxWhitelistAmount - timesWhitelisted ) ) ) ;
customMessage = customMessage . replaceAll ( " \\ {MaxWhitelistAmount} " , String . valueOf ( maxWhitelistAmount ) ) ;
embedBuilderInfo . addField ( customTitle , customMessage , false ) ;
}
2020-04-14 17:45:34 +02:00
channel . sendMessage ( embedBuilderInfo . build ( ) ) . queue ( ) ;
return ;
}
2019-11-10 01:04:56 +01:00
2020-05-01 21:21:06 +02:00
if ( finalNameToAdd . isEmpty ( ) )
{
2020-04-14 17:45:34 +02:00
channel . sendMessage ( addCommandInfo ) . queue ( ) ;
2020-05-01 21:21:06 +02:00
}
else
{
if ( usernameValidation )
{
2020-04-14 17:45:34 +02:00
// Invalid char check
2020-05-01 21:21:06 +02:00
for ( int a = 0 ; a < finalNameToWhitelistChar . length ; + + a )
{
if ( new String ( validCharacters ) . indexOf ( finalNameToWhitelistChar [ a ] ) = = - 1 )
{
2020-04-14 17:45:34 +02:00
EmbedBuilder embedBuilderInvalidChar = new EmbedBuilder ( ) ;
embedBuilderInvalidChar . setColor ( new Color ( 231 , 76 , 60 ) ) ;
2020-05-01 21:21:06 +02:00
if ( ! DiscordWhitelister . useCustomMessages )
{
embedBuilderInvalidChar . addField ( " Invalid Username " , ( author . getAsMention ( ) + " , the username you have specified contains invalid characters. **Only letters, numbers and underscores are allowed**. " ) , false ) ;
}
else
{
String customTitle = DiscordWhitelister . getCustomMessagesConfig ( ) . getString ( " invalid-characters-warning-title " ) ;
String customMessage = DiscordWhitelister . getCustomMessagesConfig ( ) . getString ( " invalid-characters-warning " ) ;
customMessage = customMessage . replaceAll ( " \\ {Sender} " , author . getAsMention ( ) ) ;
embedBuilderInvalidChar . addField ( customTitle , customMessage , false ) ;
}
if ( onlyHasLimitedAdd )
{
if ( ! DiscordWhitelister . useCustomMessages )
{
embedBuilderInvalidChar . addField ( " Whitelists Remaining " , ( " You have ** " + ( maxWhitelistAmount - timesWhitelisted ) + " out of " + maxWhitelistAmount + " ** whitelists remaining. " ) , false ) ;
}
else
{
String customTitle = DiscordWhitelister . getCustomMessagesConfig ( ) . getString ( " whitelists-remaining-title " ) ;
String customMessage = DiscordWhitelister . getCustomMessagesConfig ( ) . getString ( " whitelists-remaining " ) ;
customMessage = customMessage . replaceAll ( " \\ {RemainingWhitelists} " , String . valueOf ( ( maxWhitelistAmount - timesWhitelisted ) ) ) ;
customMessage = customMessage . replaceAll ( " \\ {MaxWhitelistAmount} " , String . valueOf ( maxWhitelistAmount ) ) ;
embedBuilderInvalidChar . addField ( customTitle , customMessage , false ) ;
}
2020-04-14 17:45:34 +02:00
}
2020-05-01 21:21:06 +02:00
2020-04-14 17:45:34 +02:00
channel . sendMessage ( embedBuilderInvalidChar . build ( ) ) . queue ( ) ;
return ;
}
}
2019-11-10 01:04:56 +01:00
2020-04-14 17:45:34 +02:00
// Length check
2020-05-01 21:21:06 +02:00
if ( finalNameToAdd . length ( ) < 3 | | finalNameToAdd . length ( ) > 16 )
{
2020-04-14 17:45:34 +02:00
EmbedBuilder embedBuilderLengthInvalid = new EmbedBuilder ( ) ;
embedBuilderLengthInvalid . setColor ( new Color ( 231 , 76 , 60 ) ) ;
2020-05-01 21:21:06 +02:00
if ( ! DiscordWhitelister . useCustomMessages )
{
embedBuilderLengthInvalid . addField ( " Invalid Username " , ( author . getAsMention ( ) + " , the username you have specified either contains too few or too many characters. **Usernames can only consist of 3-16 characters**. " ) , false ) ;
}
else
{
String customTitle = DiscordWhitelister . getCustomMessagesConfig ( ) . getString ( " invalid-length-warning-title " ) ;
String customMessage = DiscordWhitelister . getCustomMessagesConfig ( ) . getString ( " invalid-length-warning " ) ;
customMessage = customMessage . replaceAll ( " \\ {Sender} " , author . getAsMention ( ) ) ;
embedBuilderLengthInvalid . addField ( customTitle , customMessage , false ) ;
}
if ( onlyHasLimitedAdd )
{
if ( ! DiscordWhitelister . useCustomMessages )
{
embedBuilderLengthInvalid . addField ( " Whitelists Remaining " , ( " You have ** " + ( maxWhitelistAmount - timesWhitelisted ) + " out of " + maxWhitelistAmount + " ** whitelists remaining. " ) , false ) ;
}
else
{
String customTitle = DiscordWhitelister . getCustomMessagesConfig ( ) . getString ( " whitelists-remaining-title " ) ;
String customMessage = DiscordWhitelister . getCustomMessagesConfig ( ) . getString ( " whitelists-remaining " ) ;
customMessage = customMessage . replaceAll ( " \\ {RemainingWhitelists} " , String . valueOf ( ( maxWhitelistAmount - timesWhitelisted ) ) ) ;
customMessage = customMessage . replaceAll ( " \\ {MaxWhitelistAmount} " , String . valueOf ( maxWhitelistAmount ) ) ;
embedBuilderLengthInvalid . addField ( customTitle , customMessage , false ) ;
}
2020-04-14 17:45:34 +02:00
}
2020-05-01 21:21:06 +02:00
2020-04-14 17:45:34 +02:00
channel . sendMessage ( embedBuilderLengthInvalid . build ( ) ) . queue ( ) ;
return ;
}
}
2019-11-10 01:04:56 +01:00
2020-04-14 17:45:34 +02:00
if ( onlyHasLimitedAdd ) {
DiscordWhitelister . getPlugin ( ) . getLogger ( ) . info ( author . getName ( ) + " ( " + author . getId ( ) + " ) attempted to whitelist: " + finalNameToAdd + " , " + ( maxWhitelistAmount - timesWhitelisted ) + " whitelists remaining " ) ;
} else {
DiscordWhitelister . getPlugin ( ) . getLogger ( ) . info ( author . getName ( ) + " ( " + author . getId ( ) + " ) attempted to whitelist: " + finalNameToAdd ) ;
2019-11-10 01:04:56 +01:00
}
2020-05-01 22:07:06 +02:00
boolean alreadyOnWhitelist = false ;
2020-10-29 01:08:22 +01:00
if ( WhitelistedPlayers . usingEasyWhitelist )
2020-05-01 21:21:06 +02:00
{
2020-10-29 01:08:22 +01:00
if ( WhitelistedPlayers . CheckForPlayerEasyWhitelist ( finalNameToAdd ) )
2020-05-01 21:21:06 +02:00
{
2020-05-01 22:07:06 +02:00
alreadyOnWhitelist = true ;
}
}
2020-10-29 01:08:22 +01:00
else if ( WhitelistedPlayers . CheckForPlayer ( finalNameToAdd ) )
2020-05-01 22:07:06 +02:00
{
alreadyOnWhitelist = true ;
}
2020-05-01 21:21:06 +02:00
2020-05-01 22:07:06 +02:00
if ( alreadyOnWhitelist )
{
EmbedBuilder embedBuilderAlreadyWhitelisted = new EmbedBuilder ( ) ;
embedBuilderAlreadyWhitelisted . setColor ( new Color ( 104 , 109 , 224 ) ) ;
2020-05-01 21:21:06 +02:00
2020-05-01 22:07:06 +02:00
if ( ! DiscordWhitelister . useCustomMessages )
{
embedBuilderAlreadyWhitelisted . addField ( " User already on the whitelist " , ( author . getAsMention ( ) + " , cannot add user as ` " + finalNameToAdd + " ` is already on the whitelist! " ) , false ) ;
}
else
{
String customTitle = DiscordWhitelister . getCustomMessagesConfig ( ) . getString ( " already-on-whitelist-title " ) ;
String customMessage = DiscordWhitelister . getCustomMessagesConfig ( ) . getString ( " already-on-whitelist " ) ;
customMessage = customMessage . replaceAll ( " \\ {Sender} " , author . getAsMention ( ) ) ;
customMessage = customMessage . replaceAll ( " \\ {MinecraftUsername} " , finalNameToAdd ) ;
2020-05-01 21:21:06 +02:00
2020-05-01 22:07:06 +02:00
embedBuilderAlreadyWhitelisted . addField ( customTitle , customMessage , false ) ;
2020-04-14 17:45:34 +02:00
}
2020-05-01 22:07:06 +02:00
channel . sendMessage ( embedBuilderAlreadyWhitelisted . build ( ) ) . queue ( ) ;
return ;
2019-11-10 01:04:56 +01:00
}
2020-04-14 17:45:34 +02:00
2020-10-29 01:08:22 +01:00
if ( RemovedList . CheckStoreForPlayer ( finalNameToAdd ) ) // If the user has been removed before
2019-11-10 01:04:56 +01:00
{
2020-05-01 21:21:06 +02:00
if ( onlyHasLimitedAdd )
{
2020-04-14 17:45:34 +02:00
EmbedBuilder embedBuilderRemovedByStaff = new EmbedBuilder ( ) ;
embedBuilderRemovedByStaff . setColor ( new Color ( 231 , 76 , 60 ) ) ;
2020-05-01 21:21:06 +02:00
if ( ! DiscordWhitelister . useCustomMessages )
{
2020-10-29 01:08:22 +01:00
embedBuilderRemovedByStaff . addField ( " This user was previously removed by a staff member " , ( author . getAsMention ( ) + " , this user was previously removed by a staff member (<@ " + RemovedList . getRemovedPlayers ( ) . get ( finalNameToAdd ) + " >). "
2020-05-01 21:21:06 +02:00
+ System . lineSeparator ( ) + " Please ask a user with higher permissions to add this user. " + System . lineSeparator ( ) ) , false ) ;
embedBuilderRemovedByStaff . addField ( " Whitelists Remaining " , ( " You have ** " + ( maxWhitelistAmount - timesWhitelisted )
2020-10-29 01:08:22 +01:00
+ " out of " + MainConfig . getMainConfig ( ) . getString ( " max-whitelist-amount " ) + " ** whitelists remaining. " ) , false ) ;
2020-05-01 21:21:06 +02:00
}
else
{
String customTitle = DiscordWhitelister . getCustomMessagesConfig ( ) . getString ( " user-was-removed-title " ) ;
String customMessage = DiscordWhitelister . getCustomMessagesConfig ( ) . getString ( " user-was-removed " ) ;
String customWhitelistsRemaining = DiscordWhitelister . getCustomMessagesConfig ( ) . getString ( " whitelists-remaining " ) ;
2020-10-29 01:08:22 +01:00
String staffMemberMention = " <@ " + RemovedList . getRemovedPlayers ( ) . get ( finalNameToAdd ) + " > " ;
2020-05-01 21:21:06 +02:00
customMessage = customMessage . replaceAll ( " \\ {Sender} " , author . getAsMention ( ) ) ;
customMessage = customMessage . replaceAll ( " \\ {StaffMember} " , staffMemberMention ) ;
customWhitelistsRemaining = customWhitelistsRemaining . replaceAll ( " \\ {RemainingWhitelists} " , String . valueOf ( ( maxWhitelistAmount - timesWhitelisted ) ) ) ;
customWhitelistsRemaining = customWhitelistsRemaining . replaceAll ( " \\ {MaxWhitelistAmount} " , String . valueOf ( maxWhitelistAmount ) ) ;
embedBuilderRemovedByStaff . addField ( customTitle , customMessage + " " + customWhitelistsRemaining , false ) ;
}
2020-04-14 17:45:34 +02:00
channel . sendMessage ( embedBuilderRemovedByStaff . build ( ) ) . queue ( ) ;
return ;
2020-05-01 21:21:06 +02:00
}
else // Remove from removed list
2019-11-10 01:04:56 +01:00
{
2020-10-29 01:08:22 +01:00
RemovedList . getRemovedPlayers ( ) . set ( finalNameToAdd , null ) ;
RemovedList . SaveStore ( ) ;
2019-11-10 01:04:56 +01:00
2020-10-29 01:08:22 +01:00
DiscordWhitelister . getPlugin ( ) . getLogger ( ) . info ( finalNameToAdd + " has been removed from the removed list by " + author . getName ( )
+ " ( " + author . getId ( ) + " ) " ) ;
}
}
// In-game list check
if ( DiscordWhitelister . useInGameAddRemoves )
{
if ( InGameRemovedList . CheckStoreForPlayer ( finalNameToAdd ) )
{
if ( onlyHasLimitedAdd )
2020-05-01 21:21:06 +02:00
{
2020-10-29 01:08:22 +01:00
EmbedBuilder embedBuilderRemovedByStaff = new EmbedBuilder ( ) ;
embedBuilderRemovedByStaff . setColor ( new Color ( 231 , 76 , 60 ) ) ;
if ( ! DiscordWhitelister . useCustomMessages )
{
embedBuilderRemovedByStaff . addField ( " This user was previously removed by a staff member " , ( author . getAsMention ( ) + " , this user was previously removed by a staff member in-game ( " + InGameRemovedList . getRemovedPlayers ( ) . get ( finalNameToAdd ) + " ). "
+ System . lineSeparator ( ) + " Please ask a user with higher permissions to add this user. " + System . lineSeparator ( ) ) , false ) ;
embedBuilderRemovedByStaff . addField ( " Whitelists Remaining " , ( " You have ** " + ( maxWhitelistAmount - timesWhitelisted )
+ " out of " + MainConfig . getMainConfig ( ) . getString ( " max-whitelist-amount " ) + " ** whitelists remaining. " ) , false ) ;
}
else
{
String customTitle = DiscordWhitelister . getCustomMessagesConfig ( ) . getString ( " user-was-removed-in-game-title " ) ;
String customMessage = DiscordWhitelister . getCustomMessagesConfig ( ) . getString ( " user-was-removed-in-game " ) ;
String customWhitelistsRemaining = DiscordWhitelister . getCustomMessagesConfig ( ) . getString ( " whitelists-remaining " ) ;
String inGameStaffMember = InGameRemovedList . getRemovedPlayers ( ) . getString ( finalNameToAdd ) ;
customMessage = customMessage . replaceAll ( " \\ {Sender} " , author . getAsMention ( ) ) ;
customMessage = customMessage . replaceAll ( " \\ {StaffMember} " , inGameStaffMember ) ;
customWhitelistsRemaining = customWhitelistsRemaining . replaceAll ( " \\ {RemainingWhitelists} " , String . valueOf ( ( maxWhitelistAmount - timesWhitelisted ) ) ) ;
customWhitelistsRemaining = customWhitelistsRemaining . replaceAll ( " \\ {MaxWhitelistAmount} " , String . valueOf ( maxWhitelistAmount ) ) ;
embedBuilderRemovedByStaff . addField ( customTitle , customMessage + " " + customWhitelistsRemaining , false ) ;
}
channel . sendMessage ( embedBuilderRemovedByStaff . build ( ) ) . queue ( ) ;
return ;
2019-11-10 01:04:56 +01:00
}
2020-10-29 01:08:22 +01:00
else // Remove from in-game removed list
{
InGameRemovedList . RemoveUserFromStore ( finalNameToAdd ) ;
2020-04-14 17:45:34 +02:00
2020-10-29 01:08:22 +01:00
DiscordWhitelister . getPlugin ( ) . getLogger ( ) . info ( finalNameToAdd + " has been removed from in-game-removed-list.yml by " + author . getName ( )
+ " ( " + author . getId ( ) + " ) " ) ;
}
2019-11-10 01:04:56 +01:00
}
2020-04-14 17:45:34 +02:00
}
/ * Do as much as possible off the main server thread .
convert username into UUID to avoid depreciation and rate limits ( according to https : //minotar.net/) */
String playerUUID = minecraftUsernameToUUID ( finalNameToAdd ) ;
final boolean invalidMinecraftName = playerUUID = = null ;
/ * Configure success & failure messages here instead of on the main server thread -
this will run even if the message is never sent , but is a good trade off * /
EmbedBuilder embedBuilderWhitelistSuccess = new EmbedBuilder ( ) ;
embedBuilderWhitelistSuccess . setColor ( new Color ( 46 , 204 , 113 ) ) ;
2020-07-08 02:50:24 +02:00
if ( DiscordWhitelister . showPlayerSkin )
{
2020-07-08 15:26:07 +02:00
embedBuilderWhitelistSuccess . setThumbnail ( " https://minotar.net/armor/bust/ " + playerUUID + " /100.png " ) ;
2020-07-08 02:50:24 +02:00
}
2020-04-14 17:45:34 +02:00
2020-05-01 21:21:06 +02:00
if ( ! DiscordWhitelister . useCustomMessages )
{
embedBuilderWhitelistSuccess . addField ( ( finalNameToAdd + " is now whitelisted! " ) , ( author . getAsMention ( ) + " has added ` " + finalNameToAdd + " ` to the whitelist. " ) , false ) ;
}
else
{
String customTitle = DiscordWhitelister . getCustomMessagesConfig ( ) . getString ( " whitelist-success-title " ) ;
customTitle = customTitle . replaceAll ( " \\ {MinecraftUsername} " , finalNameToAdd ) ;
String customMessage = DiscordWhitelister . getCustomMessagesConfig ( ) . getString ( " whitelist-success " ) ;
customMessage = customMessage . replaceAll ( " \\ {Sender} " , author . getAsMention ( ) ) ;
customMessage = customMessage . replaceAll ( " \\ {MinecraftUsername} " , finalNameToAdd ) ;
embedBuilderWhitelistSuccess . addField ( customTitle , customMessage , false ) ;
}
if ( onlyHasLimitedAdd )
{
if ( ! DiscordWhitelister . useCustomMessages )
{
embedBuilderWhitelistSuccess . addField ( " Whitelists Remaining " , ( " You have ** " + ( maxWhitelistAmount - ( timesWhitelisted + 1 ) ) + " out of " + maxWhitelistAmount + " ** whitelists remaining. " ) , false ) ;
}
else
{
String customTitle = DiscordWhitelister . getCustomMessagesConfig ( ) . getString ( " whitelists-remaining-title " ) ;
String customMessage = DiscordWhitelister . getCustomMessagesConfig ( ) . getString ( " whitelists-remaining " ) ;
customMessage = customMessage . replaceAll ( " \\ {RemainingWhitelists} " , String . valueOf ( ( maxWhitelistAmount - ( timesWhitelisted + 1 ) ) ) ) ;
customMessage = customMessage . replaceAll ( " \\ {MaxWhitelistAmount} " , String . valueOf ( maxWhitelistAmount ) ) ;
embedBuilderWhitelistSuccess . addField ( customTitle , customMessage , false ) ;
}
}
2020-04-14 17:45:34 +02:00
EmbedBuilder embedBuilderWhitelistFailure = new EmbedBuilder ( ) ;
embedBuilderWhitelistFailure . setColor ( new Color ( 231 , 76 , 60 ) ) ;
2020-05-01 21:21:06 +02:00
if ( ! DiscordWhitelister . useCustomMessages )
{
embedBuilderWhitelistFailure . addField ( " Failed to whitelist " , ( author . getAsMention ( ) + " , failed to add ` " + finalNameToAdd + " ` to the whitelist. This is most likely due to an invalid Minecraft username. " ) , false ) ;
}
else
{
String customTitle = DiscordWhitelister . getCustomMessagesConfig ( ) . getString ( " whitelist-failure-title " ) ;
String customMessage = DiscordWhitelister . getCustomMessagesConfig ( ) . getString ( " whitelist-failure " ) ;
customMessage = customMessage . replaceAll ( " \\ {Sender} " , author . getAsMention ( ) ) ;
customMessage = customMessage . replaceAll ( " \\ {MinecraftUsername} " , finalNameToAdd ) ;
embedBuilderWhitelistFailure . addField ( customTitle , customMessage , false ) ;
}
if ( onlyHasLimitedAdd )
{
if ( ! DiscordWhitelister . useCustomMessages )
{
embedBuilderWhitelistFailure . addField ( " Whitelists Remaining " , ( " You have ** " + ( maxWhitelistAmount - timesWhitelisted ) + " out of " + maxWhitelistAmount + " ** whitelists remaining. " ) , false ) ;
}
else
{
String customTitle = DiscordWhitelister . getCustomMessagesConfig ( ) . getString ( " whitelists-remaining-title " ) ;
String customMessage = DiscordWhitelister . getCustomMessagesConfig ( ) . getString ( " whitelists-remaining " ) ;
customMessage = customMessage . replaceAll ( " \\ {RemainingWhitelists} " , String . valueOf ( ( maxWhitelistAmount - ( timesWhitelisted + 1 ) ) ) ) ;
customMessage = customMessage . replaceAll ( " \\ {MaxWhitelistAmount} " , String . valueOf ( maxWhitelistAmount ) ) ;
embedBuilderWhitelistFailure . addField ( customTitle , customMessage , false ) ;
}
2020-04-14 17:45:34 +02:00
}
2019-11-10 01:04:56 +01:00
2020-04-14 17:45:34 +02:00
int tempTimesWhitelisted = timesWhitelisted ;
2019-11-10 01:04:56 +01:00
2020-10-29 01:08:22 +01:00
if ( onlyHasLimitedAdd )
{
if ( tempTimesWhitelisted < maxWhitelistAmount )
{
2020-04-14 17:45:34 +02:00
tempTimesWhitelisted = timesWhitelisted + 1 ;
2019-11-10 01:04:56 +01:00
}
2020-04-14 17:45:34 +02:00
}
2019-11-10 01:04:56 +01:00
2020-04-14 17:45:34 +02:00
final int finalTimesWhitelisted = tempTimesWhitelisted ;
2020-10-29 01:08:22 +01:00
// final int successfulTimesWhitelisted = maxWhitelistAmount - finalTimesWhitelisted;
// final int failedTimesWhitelisted = maxWhitelistAmount - timesWhitelisted;
2020-04-14 17:45:34 +02:00
2020-10-29 01:08:22 +01:00
AtomicBoolean successfulWhitelist = new AtomicBoolean ( false ) ;
if ( ! WhitelistedPlayers . usingEasyWhitelist )
{
if ( authorPermissions . isUserCanUseCommand ( ) )
ExecuteServerCommand ( " whitelist add " + finalNameToAdd ) ;
2020-04-14 17:45:34 +02:00
}
2019-11-10 01:04:56 +01:00
2020-10-29 01:08:22 +01:00
if ( WhitelistedPlayers . usingEasyWhitelist )
{
2020-04-14 17:45:34 +02:00
if ( ! invalidMinecraftName ) // have to do this else the easy whitelist plugin will add the name regardless of whether it is valid on not
2019-11-10 01:04:56 +01:00
{
2020-10-29 01:08:22 +01:00
if ( authorPermissions . isUserCanUseCommand ( ) )
ExecuteServerCommand ( " easywl add " + finalNameToAdd ) ;
2019-11-10 01:04:56 +01:00
}
2020-04-14 17:45:34 +02:00
// run through the server so that the check doesn't execute before the server has had a chance to run the whitelist command -- unsure if this is the best way of doing this, but it works
DiscordWhitelister . getPlugin ( ) . getServer ( ) . getScheduler ( ) . callSyncMethod ( DiscordWhitelister . getPlugin ( ) , ( ) - >
2019-11-10 01:04:56 +01:00
{
2020-10-29 01:08:22 +01:00
if ( ! invalidMinecraftName & & WhitelistedPlayers . CheckForPlayerEasyWhitelist ( finalNameToAdd ) )
{
2020-04-14 17:45:34 +02:00
channel . sendMessage ( embedBuilderWhitelistSuccess . build ( ) ) . queue ( ) ;
2019-11-10 01:04:56 +01:00
2020-10-29 01:08:22 +01:00
// For instructional message
successfulWhitelist . set ( true ) ;
// If the user is whitelisted assign perms if enabled
if ( DiscordWhitelister . useUltraPerms )
{
AssignPermsToUser ( finalNameToAdd , PermissionsConfig . getPermissionsConfig ( ) . getStringList ( " perms-on-whitelist " ) ) ;
}
if ( DiscordWhitelister . useOnWhitelistCommands )
{
List < String > commandsToExecute = OnWhitelistCommandsConfig . getPermissionsConfig ( ) . getStringList ( " on-whitelist-commands " ) ;
for ( int i = 0 ; i < commandsToExecute . size ( ) ; i + + )
{
CheckAndExecuteCommand ( commandsToExecute . get ( i ) , finalNameToAdd ) ;
}
}
2020-04-24 23:40:36 +02:00
// Add role to user when they have been added to the whitelist if need be
2020-06-30 20:54:39 +02:00
if ( whitelistedRoleAutoAdd )
{
2020-07-08 21:01:49 +02:00
List < Role > whitelistRoles = new LinkedList < > ( ) ;
2020-06-30 20:54:39 +02:00
try
{
2020-07-08 21:01:49 +02:00
if ( ! DiscordWhitelister . useIdForRoles )
{
for ( int i = 0 ; i < whitelistedRoleNames . length ; i + + )
{
// Use channel, get guild instead of JDA so that it is server specific
List < Role > rolesFoundWithName = channel . getGuild ( ) . getRolesByName ( whitelistedRoleNames [ i ] , false ) ;
whitelistRoles . addAll ( rolesFoundWithName ) ;
}
}
else
{
for ( int i = 0 ; i < whitelistedRoleNames . length ; i + + )
{
if ( channel . getGuild ( ) . getRoleById ( whitelistedRoleNames [ i ] ) ! = null )
whitelistRoles . add ( channel . getGuild ( ) . getRoleById ( whitelistedRoleNames [ i ] ) ) ;
}
}
2020-04-24 23:40:36 +02:00
Member member = messageReceivedEvent . getMember ( ) ;
2020-07-08 21:01:49 +02:00
if ( whitelistRoles ! = null )
{
whitelistRoles . forEach ( role - >
{
messageReceivedEvent . getGuild ( ) . addRoleToMember ( member , role ) . queue ( ) ;
} ) ;
}
2020-06-30 20:54:39 +02:00
}
catch ( Exception e )
{
2020-07-08 21:01:49 +02:00
DiscordWhitelister . getPlugin ( ) . getLogger ( ) . severe ( " Could not add role with name/id to " + author . getName ( ) + " , check the config and that the bot has the Manage Roles permission " ) ;
e . printStackTrace ( ) ;
2020-04-24 23:40:36 +02:00
}
}
2020-10-29 01:08:22 +01:00
// Instructional message -- TODO: DON'T HAVE 2 INSTANCES OF THIS
if ( successfulWhitelist . get ( ) )
{
if ( MainConfig . getMainConfig ( ) . getBoolean ( " send-instructional-message-on-whitelist " ) )
{
EmbedBuilder embedBuilderInstructionalMessage = new EmbedBuilder ( ) ;
embedBuilderInstructionalMessage . setColor ( new Color ( 104 , 109 , 224 ) ) ;
if ( ! DiscordWhitelister . useCustomMessages )
{
String addCommandExample = " !whitelist add " ;
if ( DiscordWhitelister . useCustomPrefixes )
addCommandExample = CustomPrefixConfig . getCustomPrefixesConfig ( ) . getString ( " whitelist-add-prefix " ) . trim ( ) ;
embedBuilderInstructionalMessage . addField ( " How to Whitelist " , ( " Use ` " + addCommandExample + " <minecraftUsername>` to whitelist yourself. \ n " +
" In the case of whitelisting an incorrect name, please contact a staff member to clear it from the whitelist. " ) , false ) ;
}
else
{
String customTitle = CustomMessagesConfig . getCustomMessagesConfig ( ) . getString ( " instructional-message-title " ) ;
String customMessage = CustomMessagesConfig . getCustomMessagesConfig ( ) . getString ( " instructional-message " ) ;
embedBuilderInstructionalMessage . addField ( customTitle , customMessage , false ) ;
}
if ( ! MainConfig . getMainConfig ( ) . getBoolean ( " use-timer-for-instructional-message " ) )
{
channel . sendMessage ( embedBuilderInstructionalMessage . build ( ) ) . queue ( ) ;
}
else
{
int waitTime = MainConfig . getMainConfig ( ) . getInt ( " timer-wait-time-in-seconds " ) ;
try
{
TimeUnit . SECONDS . sleep ( waitTime ) ;
channel . sendMessage ( embedBuilderInstructionalMessage . build ( ) ) . queue ( ) ;
}
catch ( InterruptedException e )
{
e . printStackTrace ( ) ;
}
}
}
}
if ( onlyHasLimitedAdd )
{
2019-11-10 01:04:56 +01:00
2020-10-29 01:08:22 +01:00
UserList . addRegisteredUser ( author . getId ( ) , finalNameToAdd ) ;
2020-04-14 17:45:34 +02:00
DiscordWhitelister . getPlugin ( ) . getLogger ( ) . info ( author . getName ( ) + " ( " + author . getId ( ) + " ) successfully added " + finalNameToAdd
2020-10-29 01:08:22 +01:00
+ " to the whitelist, " + ( maxWhitelistAmount - finalTimesWhitelisted ) + " whitelists remaining. " ) ;
2020-04-14 17:45:34 +02:00
}
2020-10-29 01:08:22 +01:00
}
else
{
2020-04-14 17:45:34 +02:00
channel . sendMessage ( embedBuilderWhitelistFailure . build ( ) ) . queue ( ) ;
2019-11-10 01:04:56 +01:00
}
2020-04-14 17:45:34 +02:00
return null ;
} ) ;
2020-10-29 01:08:22 +01:00
}
else
{
2020-04-14 17:45:34 +02:00
DiscordWhitelister . getPlugin ( ) . getServer ( ) . getScheduler ( ) . callSyncMethod ( DiscordWhitelister . getPlugin ( ) , ( ) - >
{
2020-10-29 01:08:22 +01:00
if ( WhitelistedPlayers . CheckForPlayer ( finalNameToAdd ) )
{
2020-04-14 17:45:34 +02:00
channel . sendMessage ( embedBuilderWhitelistSuccess . build ( ) ) . queue ( ) ;
2019-11-10 01:04:56 +01:00
2020-10-29 01:08:22 +01:00
// For instructional message
successfulWhitelist . set ( true ) ;
// If the user is whitelisted assign perms if enabled
if ( DiscordWhitelister . useUltraPerms )
{
AssignPermsToUser ( finalNameToAdd , PermissionsConfig . getPermissionsConfig ( ) . getStringList ( " perms-on-whitelist " ) ) ;
}
if ( DiscordWhitelister . useOnWhitelistCommands )
{
List < String > commandsToExecute = OnWhitelistCommandsConfig . getPermissionsConfig ( ) . getStringList ( " on-whitelist-commands " ) ;
for ( int i = 0 ; i < commandsToExecute . size ( ) ; i + + )
{
CheckAndExecuteCommand ( commandsToExecute . get ( i ) , finalNameToAdd ) ;
}
}
2020-04-24 23:40:36 +02:00
// Add role to user when they have been added to the whitelist if need be
2020-06-30 20:54:39 +02:00
if ( whitelistedRoleAutoAdd )
{
2020-07-08 21:01:49 +02:00
List < Role > whitelistRoles = new LinkedList < > ( ) ;
2020-06-30 20:54:39 +02:00
try
{
2020-07-08 21:01:49 +02:00
if ( ! DiscordWhitelister . useIdForRoles )
{
for ( int i = 0 ; i < whitelistedRoleNames . length ; i + + )
{
// Use channel, get guild instead of JDA so that it is server specific
List < Role > rolesFoundWithName = channel . getGuild ( ) . getRolesByName ( whitelistedRoleNames [ i ] , false ) ;
whitelistRoles . addAll ( rolesFoundWithName ) ;
}
}
else
{
for ( int i = 0 ; i < whitelistedRoleNames . length ; i + + )
{
if ( channel . getGuild ( ) . getRoleById ( whitelistedRoleNames [ i ] ) ! = null )
whitelistRoles . add ( channel . getGuild ( ) . getRoleById ( whitelistedRoleNames [ i ] ) ) ;
}
}
2020-04-24 23:40:36 +02:00
Member member = messageReceivedEvent . getMember ( ) ;
2020-07-08 21:01:49 +02:00
if ( whitelistRoles ! = null )
{
whitelistRoles . forEach ( role - >
{
messageReceivedEvent . getGuild ( ) . addRoleToMember ( member , role ) . queue ( ) ;
} ) ;
}
2020-06-30 20:54:39 +02:00
}
catch ( Exception e )
{
2020-07-08 21:01:49 +02:00
DiscordWhitelister . getPlugin ( ) . getLogger ( ) . severe ( " Could not add role with name/id to " + author . getName ( ) + " , check the config and that the bot has the Manage Roles permission " ) ;
e . printStackTrace ( ) ;
2020-04-24 23:40:36 +02:00
}
2020-10-29 01:08:22 +01:00
// Instructional message
if ( successfulWhitelist . get ( ) )
{
if ( MainConfig . getMainConfig ( ) . getBoolean ( " send-instructional-message-on-whitelist " ) )
{
EmbedBuilder embedBuilderInstructionalMessage = new EmbedBuilder ( ) ;
embedBuilderInstructionalMessage . setColor ( new Color ( 104 , 109 , 224 ) ) ;
if ( ! DiscordWhitelister . useCustomMessages )
{
String addCommandExample = " !whitelist add " ;
if ( DiscordWhitelister . useCustomPrefixes )
addCommandExample = CustomPrefixConfig . getCustomPrefixesConfig ( ) . getString ( " whitelist-add-prefix " ) . trim ( ) ;
embedBuilderInstructionalMessage . addField ( " How to Whitelist " , ( " Use ` " + addCommandExample + " <minecraftUsername>` to whitelist yourself. \ n " +
" In the case of whitelisting an incorrect name, please contact a staff member to clear it from the whitelist. " ) , false ) ;
}
else
{
String customTitle = CustomMessagesConfig . getCustomMessagesConfig ( ) . getString ( " instructional-message-title " ) ;
String customMessage = CustomMessagesConfig . getCustomMessagesConfig ( ) . getString ( " instructional-message " ) ;
embedBuilderInstructionalMessage . addField ( customTitle , customMessage , false ) ;
}
if ( ! MainConfig . getMainConfig ( ) . getBoolean ( " use-timer-for-instructional-message " ) )
{
channel . sendMessage ( embedBuilderInstructionalMessage . build ( ) ) . queue ( ) ;
}
else
{
int waitTime = MainConfig . getMainConfig ( ) . getInt ( " timer-wait-time-in-seconds " ) ;
// Run on a new thread to not block main thread
Thread whitelisterTimerThread = new Thread ( ( ) - >
{
try
{
TimeUnit . SECONDS . sleep ( waitTime ) ;
channel . sendMessage ( embedBuilderInstructionalMessage . build ( ) ) . queue ( ) ;
}
catch ( InterruptedException e )
{
e . printStackTrace ( ) ;
}
} ) ;
whitelisterTimerThread . start ( ) ;
}
}
}
2020-04-24 23:40:36 +02:00
}
2020-10-29 01:08:22 +01:00
if ( onlyHasLimitedAdd )
{
2019-11-10 01:04:56 +01:00
2020-10-29 01:08:22 +01:00
UserList . addRegisteredUser ( author . getId ( ) , finalNameToAdd ) ;
2019-11-10 01:04:56 +01:00
2020-04-14 17:45:34 +02:00
DiscordWhitelister . getPlugin ( ) . getLogger ( ) . info ( author . getName ( ) + " ( " + author . getId ( ) + " ) successfully added " + finalNameToAdd
2020-10-29 01:08:22 +01:00
+ " to the whitelist, " + ( maxWhitelistAmount - finalTimesWhitelisted ) + " whitelists remaining. " ) ;
2019-11-10 01:04:56 +01:00
}
2020-10-29 01:08:22 +01:00
}
else
{
2020-04-14 17:45:34 +02:00
channel . sendMessage ( embedBuilderWhitelistFailure . build ( ) ) . queue ( ) ;
2019-11-10 01:04:56 +01:00
}
2020-04-14 17:45:34 +02:00
return null ;
} ) ;
}
}
}
}
2019-11-10 01:04:56 +01:00
2020-10-29 01:08:22 +01:00
// Remove Command
2020-07-08 02:50:24 +02:00
if ( messageContents . toLowerCase ( ) . startsWith ( " !whitelist remove " ) & & ! DiscordWhitelister . getUseCustomPrefixes ( )
2020-07-10 01:41:37 +02:00
| | DiscordWhitelister . getUseCustomPrefixes ( ) & & messageContents . toLowerCase ( ) . startsWith ( whitelistRemovePrefix ) )
2020-07-08 02:50:24 +02:00
{
2020-10-29 01:08:22 +01:00
if ( authorPermissions . isUserCanAddRemove ( ) )
{
2020-04-25 02:53:18 +02:00
messageContents = messageContents . toLowerCase ( ) ;
2020-07-08 02:50:24 +02:00
String messageContentsAfterCommand = " " ;
if ( ! DiscordWhitelister . useCustomPrefixes )
{
2020-10-29 01:08:22 +01:00
if ( messageContents . length ( ) > ( " !whitelist remove " . length ( ) + 1 ) )
{
messageContentsAfterCommand = messageContents . substring ( " !whitelist remove " . length ( ) + 1 ) ; // get everything after !whitelist remove[space]
}
2020-07-08 02:50:24 +02:00
}
else
{
2020-10-29 01:08:22 +01:00
if ( messageContents . length ( ) > ( whitelistRemovePrefix . length ( ) + 1 ) )
{
messageContentsAfterCommand = messageContents . substring ( whitelistRemovePrefix . length ( ) + 1 ) ; // get everything after whitelistRemovePrefix[space]
}
2020-07-08 02:50:24 +02:00
}
2020-04-25 02:53:18 +02:00
final String finalNameToRemove = messageContentsAfterCommand . replaceAll ( " .* " , " " ) ; // The name is everything up to the first space
2020-04-14 17:45:34 +02:00
2020-10-29 01:08:22 +01:00
if ( finalNameToRemove . isEmpty ( ) )
{
2020-04-14 17:45:34 +02:00
channel . sendMessage ( removeCommandInfo ) . queue ( ) ;
return ;
2020-10-29 01:08:22 +01:00
}
else
{
2020-04-14 17:45:34 +02:00
DiscordWhitelister . getPlugin ( ) . getLogger ( ) . info ( author . getName ( ) + " ( " + author . getId ( ) + " ) attempted to remove " + finalNameToRemove + " from the whitelist " ) ;
boolean notOnWhitelist = false ;
2019-11-10 01:04:56 +01:00
2020-10-29 01:08:22 +01:00
if ( WhitelistedPlayers . usingEasyWhitelist )
2020-05-01 21:21:06 +02:00
{
2020-10-29 01:08:22 +01:00
if ( ! WhitelistedPlayers . CheckForPlayerEasyWhitelist ( finalNameToRemove ) )
2020-05-01 21:21:06 +02:00
{
2020-04-14 17:45:34 +02:00
notOnWhitelist = true ;
2019-11-10 01:04:56 +01:00
2020-04-14 17:45:34 +02:00
EmbedBuilder embedBuilderInfo = new EmbedBuilder ( ) ;
embedBuilderInfo . setColor ( new Color ( 104 , 109 , 224 ) ) ;
2020-05-01 21:21:06 +02:00
if ( ! DiscordWhitelister . useCustomMessages )
{
embedBuilderInfo . addField ( " This user is not on the whitelist " , ( author . getAsMention ( ) + " , cannot remove user as ` " + finalNameToRemove + " ` is not on the whitelist! " ) , false ) ;
}
else
{
String customTitle = DiscordWhitelister . getCustomMessagesConfig ( ) . getString ( " user-not-on-whitelist-title " ) ;
String customMessage = DiscordWhitelister . getCustomMessagesConfig ( ) . getString ( " user-not-on-whitelist " ) ;
customMessage = customMessage . replaceAll ( " \\ {Sender} " , author . getAsMention ( ) ) ;
customMessage = customMessage . replaceAll ( " \\ {MinecraftUsername} " , finalNameToRemove ) ;
embedBuilderInfo . addField ( customTitle , customMessage , false ) ;
}
2020-04-14 17:45:34 +02:00
channel . sendMessage ( embedBuilderInfo . build ( ) ) . queue ( ) ;
}
2019-11-10 01:04:56 +01:00
}
2020-10-29 01:08:22 +01:00
if ( ! WhitelistedPlayers . usingEasyWhitelist & & ! WhitelistedPlayers . CheckForPlayer ( finalNameToRemove ) )
2020-05-01 21:21:06 +02:00
{
2020-04-14 17:45:34 +02:00
notOnWhitelist = true ;
2019-11-10 01:04:56 +01:00
2020-04-14 17:45:34 +02:00
EmbedBuilder embedBuilderInfo = new EmbedBuilder ( ) ;
embedBuilderInfo . setColor ( new Color ( 104 , 109 , 224 ) ) ;
2020-05-01 21:21:06 +02:00
if ( ! DiscordWhitelister . useCustomMessages )
{
embedBuilderInfo . addField ( " This user is not on the whitelist " , ( author . getAsMention ( ) + " , cannot remove user as ` " + finalNameToRemove + " ` is not on the whitelist! " ) , false ) ;
}
else
{
String customTitle = DiscordWhitelister . getCustomMessagesConfig ( ) . getString ( " user-not-on-whitelist-title " ) ;
String customMessage = DiscordWhitelister . getCustomMessagesConfig ( ) . getString ( " user-not-on-whitelist " ) ;
customMessage = customMessage . replaceAll ( " \\ {Sender} " , author . getAsMention ( ) ) ;
customMessage = customMessage . replaceAll ( " \\ {MinecraftUsername} " , finalNameToRemove ) ;
embedBuilderInfo . addField ( customTitle , customMessage , false ) ;
}
2020-04-14 17:45:34 +02:00
channel . sendMessage ( embedBuilderInfo . build ( ) ) . queue ( ) ;
2019-11-10 01:04:56 +01:00
}
2020-10-29 01:08:22 +01:00
// not not on whitelist, nice
2020-05-01 21:21:06 +02:00
if ( ! notOnWhitelist )
{
2020-10-29 01:08:22 +01:00
if ( WhitelistedPlayers . usingEasyWhitelist )
ExecuteServerCommand ( " easywl remove " + finalNameToRemove ) ;
2020-05-01 21:21:06 +02:00
else
2020-10-29 01:08:22 +01:00
ExecuteServerCommand ( " whitelist remove " + finalNameToRemove ) ;
2019-11-10 01:04:56 +01:00
2020-04-14 17:45:34 +02:00
// Configure message here instead of on the main thread - this means this will run even if the message is never sent, but is a good trade off (I think)
EmbedBuilder embedBuilderSuccess = new EmbedBuilder ( ) ;
embedBuilderSuccess . setColor ( new Color ( 46 , 204 , 113 ) ) ;
2019-11-10 01:04:56 +01:00
2020-05-01 21:21:06 +02:00
if ( ! DiscordWhitelister . useCustomMessages )
{
embedBuilderSuccess . addField ( ( finalNameToRemove + " has been removed " ) , ( author . getAsMention ( ) + " has removed ` " + finalNameToRemove + " ` from the whitelist. " ) , false ) ;
}
else
{
String customTitle = DiscordWhitelister . getCustomMessagesConfig ( ) . getString ( " remove-success-title " ) ;
customTitle = customTitle . replaceAll ( " \\ {MinecraftUsername} " , finalNameToRemove ) ;
String customMessage = DiscordWhitelister . getCustomMessagesConfig ( ) . getString ( " remove-success " ) ;
customMessage = customMessage . replaceAll ( " \\ {Sender} " , author . getAsMention ( ) ) ;
customMessage = customMessage . replaceAll ( " \\ {MinecraftUsername} " , finalNameToRemove ) ;
embedBuilderSuccess . addField ( customTitle , customMessage , false ) ;
}
2020-04-14 17:45:34 +02:00
EmbedBuilder embedBuilderFailure = new EmbedBuilder ( ) ;
2020-05-01 21:21:06 +02:00
embedBuilderFailure . setColor ( new Color ( 231 , 76 , 60 ) ) ;
// No custom message needed
2020-04-14 17:45:34 +02:00
embedBuilderFailure . addField ( ( " Failed to remove " + finalNameToRemove + " from the whitelist " ) , ( author . getAsMention ( ) + " , failed to remove ` " + finalNameToRemove + " ` from the whitelist. " +
" This should never happen, you may have to remove the player manually and report the issue. " ) , false ) ;
2020-05-01 21:21:06 +02:00
2019-11-10 01:04:56 +01:00
2020-10-29 01:08:22 +01:00
if ( WhitelistedPlayers . usingEasyWhitelist )
{
2020-04-14 17:45:34 +02:00
DiscordWhitelister . getPlugin ( ) . getServer ( ) . getScheduler ( ) . callSyncMethod ( DiscordWhitelister . getPlugin ( ) , ( ) - >
2019-11-10 01:04:56 +01:00
{
2020-10-29 01:08:22 +01:00
if ( ! WhitelistedPlayers . CheckForPlayerEasyWhitelist ( finalNameToRemove ) )
{
2020-04-14 17:45:34 +02:00
channel . sendMessage ( embedBuilderSuccess . build ( ) ) . queue ( ) ;
2019-11-10 01:04:56 +01:00
2020-10-29 01:08:22 +01:00
// Remove Perms if enabled
if ( DiscordWhitelister . useUltraPerms )
{
RemovePermsFromUser ( finalNameToRemove , PermissionsConfig . getPermissionsConfig ( ) . getStringList ( " perms-on-whitelist " ) ) ;
}
ClearPlayerFromUserList ( finalNameToRemove ) ;
2020-04-24 23:40:36 +02:00
// Remove role from user when they have been removed from the whitelist if need be
2020-07-08 21:01:49 +02:00
if ( whitelistedRoleAutoRemove )
{
//Role[] whitelistRole = new Role[whitelistedRoleNames.length];
// Use list as getRolesByName may return multiple roles
List < Role > whitelistRoles = new LinkedList < > ( ) ;
try
{
if ( ! DiscordWhitelister . useIdForRoles )
{
for ( int i = 0 ; i < whitelistedRoleNames . length ; i + + )
{
List < Role > rolesFoundWithName = channel . getGuild ( ) . getRolesByName ( whitelistedRoleNames [ i ] , false ) ;
whitelistRoles . addAll ( rolesFoundWithName ) ;
}
}
else
{
for ( int i = 0 ; i < whitelistedRoleNames . length ; i + + )
{
if ( channel . getGuild ( ) . getRoleById ( whitelistedRoleNames [ i ] ) ! = null )
whitelistRoles . add ( channel . getGuild ( ) . getRoleById ( whitelistedRoleNames [ i ] ) ) ;
}
}
2020-04-24 23:40:36 +02:00
Member member = messageReceivedEvent . getMember ( ) ;
2020-07-08 21:01:49 +02:00
if ( whitelistRoles ! = null )
{
whitelistRoles . forEach ( role - >
{
messageReceivedEvent . getGuild ( ) . removeRoleFromMember ( member , role ) . queue ( ) ;
} ) ;
}
}
catch ( Exception e )
{
DiscordWhitelister . getPlugin ( ) . getLogger ( ) . severe ( " Could not remove role with name/id from " + author . getName ( ) + " , please check the config and that the bot has the Manage Roles permission " ) ;
2020-04-24 23:40:36 +02:00
}
}
2020-04-14 17:45:34 +02:00
// if the name is not on the list
2020-10-29 01:08:22 +01:00
if ( RemovedList . getRemovedPlayers ( ) . get ( finalNameToRemove ) = = null )
2020-06-02 19:29:57 +02:00
{
2020-10-29 01:08:22 +01:00
RemovedList . getRemovedPlayers ( ) . set ( finalNameToRemove , author . getId ( ) ) ;
RemovedList . SaveStore ( ) ;
2019-11-10 01:04:56 +01:00
}
2020-10-29 01:08:22 +01:00
}
else
{
2020-04-14 17:45:34 +02:00
channel . sendMessage ( embedBuilderFailure . build ( ) ) . queue ( ) ;
}
return null ;
} ) ;
2020-10-29 01:08:22 +01:00
}
else
{
2020-04-14 17:45:34 +02:00
DiscordWhitelister . getPlugin ( ) . getServer ( ) . getScheduler ( ) . callSyncMethod ( DiscordWhitelister . getPlugin ( ) , ( ) - >
2019-11-10 01:04:56 +01:00
{
2020-10-29 01:08:22 +01:00
if ( ! WhitelistedPlayers . CheckForPlayer ( finalNameToRemove ) ) {
2020-04-14 17:45:34 +02:00
channel . sendMessage ( embedBuilderSuccess . build ( ) ) . queue ( ) ;
2019-11-10 01:04:56 +01:00
2020-10-29 01:08:22 +01:00
// Remove Perms if enabled
if ( DiscordWhitelister . useUltraPerms )
{
RemovePermsFromUser ( finalNameToRemove , PermissionsConfig . getPermissionsConfig ( ) . getStringList ( " perms-on-whitelist " ) ) ;
}
ClearPlayerFromUserList ( finalNameToRemove ) ;
2020-04-24 23:40:36 +02:00
// Remove role from user when they have been removed from the whitelist if need be
2020-07-08 21:01:49 +02:00
if ( whitelistedRoleAutoRemove )
{
List < Role > whitelistRoles = new LinkedList < > ( ) ;
try
{
if ( ! DiscordWhitelister . useIdForRoles )
{
for ( int i = 0 ; i < whitelistedRoleNames . length ; i + + )
{
List < Role > rolesFoundWithName = channel . getGuild ( ) . getRolesByName ( whitelistedRoleNames [ i ] , false ) ;
whitelistRoles . addAll ( rolesFoundWithName ) ;
}
}
else
{
for ( int i = 0 ; i < whitelistedRoleNames . length ; i + + )
{
if ( channel . getGuild ( ) . getRoleById ( whitelistedRoleNames [ i ] ) ! = null )
whitelistRoles . add ( channel . getGuild ( ) . getRoleById ( whitelistedRoleNames [ i ] ) ) ;
}
}
2020-04-24 23:40:36 +02:00
Member member = messageReceivedEvent . getMember ( ) ;
2020-07-08 21:01:49 +02:00
if ( whitelistRoles ! = null )
{
whitelistRoles . forEach ( role - >
{
messageReceivedEvent . getGuild ( ) . removeRoleFromMember ( member , role ) . queue ( ) ;
} ) ;
}
}
catch ( Exception e )
{
DiscordWhitelister . getPlugin ( ) . getLogger ( ) . severe ( " Could not remove role with name/id from " + author . getName ( ) + " , please check the config and that the bot has the Manage Roles permission " ) ;
2020-04-24 23:40:36 +02:00
}
}
2020-04-14 17:45:34 +02:00
// if the name is not on the list
2020-10-29 01:08:22 +01:00
if ( ! RemovedList . CheckStoreForPlayer ( finalNameToRemove ) )
{
RemovedList . getRemovedPlayers ( ) . set ( finalNameToRemove , author . getId ( ) ) ;
RemovedList . SaveStore ( ) ;
2020-04-14 17:45:34 +02:00
}
2020-10-29 01:08:22 +01:00
}
else
{
2020-04-14 17:45:34 +02:00
channel . sendMessage ( embedBuilderFailure . build ( ) ) . queue ( ) ;
}
return null ;
} ) ;
2019-11-10 01:04:56 +01:00
}
2020-04-14 17:45:34 +02:00
return ;
2019-11-10 01:04:56 +01:00
}
2020-04-14 17:45:34 +02:00
return ;
2019-11-10 01:04:56 +01:00
}
2020-04-14 17:45:34 +02:00
}
2019-11-10 01:04:56 +01:00
2020-05-01 21:21:06 +02:00
if ( authorPermissions . isUserCanAdd ( ) & & ! authorPermissions . isUserCanAddRemove ( ) )
{
2020-10-29 01:08:22 +01:00
String higherPermRoles = MainConfig . getMainConfig ( ) . getList ( " add-remove-roles " ) . toString ( ) ;
2020-04-14 17:45:34 +02:00
higherPermRoles = higherPermRoles . replaceAll ( " \\ [ " , " " ) ;
higherPermRoles = higherPermRoles . replaceAll ( " ] " , " " ) ;
EmbedBuilder embedBuilderInfo = new EmbedBuilder ( ) ;
embedBuilderInfo . setColor ( new Color ( 104 , 109 , 224 ) ) ;
2020-05-01 21:21:06 +02:00
if ( ! DiscordWhitelister . useCustomMessages )
{
embedBuilderInfo . addField ( " Insufficient Permissions " , ( author . getAsMention ( ) + " , you only have permission to add people to the whitelist. To remove people from the whitelist you must be moved to the following roles: "
+ higherPermRoles + " ; or get the owner to move your role to 'add-remove-roles' in the config. " ) , false ) ;
}
else
{
String customTitle = DiscordWhitelister . getCustomMessagesConfig ( ) . getString ( " insufficient-permissions-remove-title " ) ;
String customMessage = DiscordWhitelister . getCustomMessagesConfig ( ) . getString ( " insufficient-permissions-remove " ) ;
customMessage = customMessage . replaceAll ( " \\ {Sender} " , author . getAsMention ( ) ) ;
customMessage = customMessage . replaceAll ( " \\ {AddRemoveRoles} " , higherPermRoles ) ;
embedBuilderInfo . addField ( customTitle , customMessage , false ) ;
}
2020-04-14 17:45:34 +02:00
channel . sendMessage ( embedBuilderInfo . build ( ) ) . queue ( ) ;
return ;
2019-11-10 01:04:56 +01:00
}
2020-05-01 21:21:06 +02:00
2020-04-14 17:45:34 +02:00
// if the user doesn't have any allowed roles
EmbedBuilder embedBuilderFailure = new EmbedBuilder ( ) ;
embedBuilderFailure . setColor ( new Color ( 231 , 76 , 60 ) ) ;
2020-05-01 21:21:06 +02:00
if ( ! DiscordWhitelister . useCustomMessages )
{
embedBuilderFailure . addField ( " Insufficient Permissions " , ( author . getAsMention ( ) + " , you do not have permission to use this command. " ) , false ) ;
}
else
{
String customTitle = DiscordWhitelister . getCustomMessagesConfig ( ) . getString ( " insufficient-permissions-title " ) ;
String customMessage = DiscordWhitelister . getCustomMessagesConfig ( ) . getString ( " insufficient-permissions " ) ;
customMessage = customMessage . replaceAll ( " \\ {Sender} " , author . getAsMention ( ) ) ; // Only checking for {Sender}
embedBuilderFailure . addField ( customTitle , customMessage , false ) ;
}
2020-04-14 17:45:34 +02:00
channel . sendMessage ( embedBuilderFailure . build ( ) ) . queue ( ) ;
2019-11-10 01:04:56 +01:00
}
2020-10-29 01:08:22 +01:00
// Clear Whitelists command
if ( messageContents . toLowerCase ( ) . startsWith ( " !clearname " ) & & ! DiscordWhitelister . getUseCustomPrefixes ( )
| | DiscordWhitelister . getUseCustomPrefixes ( ) & & messageContents . toLowerCase ( ) . startsWith ( clearNamePrefix ) )
{
// !clearname <targetName>
// TODO: !clearnames <@DiscordID>
2020-04-25 02:53:18 +02:00
2020-10-29 01:08:22 +01:00
// Check permissions
if ( authorPermissions . isUserCanUseClear ( ) )
{
// Check if empty command
if ( messageContents . toLowerCase ( ) . trim ( ) . equals ( " !clearname " ) & & ! DiscordWhitelister . getUseCustomPrefixes ( )
| | messageContents . toLowerCase ( ) . trim ( ) . equals ( clearNamePrefix ) & & DiscordWhitelister . getUseCustomPrefixes ( ) )
{
// Send info message
EmbedBuilder embedBuilderClearInfo = new EmbedBuilder ( ) ;
embedBuilderClearInfo . setColor ( new Color ( 104 , 109 , 224 ) ) ;
2020-04-25 02:53:18 +02:00
2020-10-29 01:08:22 +01:00
if ( ! DiscordWhitelister . getUseCustomPrefixes ( ) )
embedBuilderClearInfo . addField ( " Clear Name Command " , " Usage: `!clearname <minecraftUsername>` \ n " , false ) ;
else
embedBuilderClearInfo . addField ( " Clear Name Command " , " Usage: ` " + clearNamePrefix + " <minecraftUsername>` \ n " , false ) ;
2020-04-25 02:53:18 +02:00
2020-04-14 17:45:34 +02:00
2020-10-29 01:08:22 +01:00
channel . sendMessage ( embedBuilderClearInfo . build ( ) ) . queue ( ) ;
2019-11-10 01:04:56 +01:00
2020-10-29 01:08:22 +01:00
return ;
}
2019-11-10 01:04:56 +01:00
2020-10-29 01:08:22 +01:00
// If command is not empty check for args
String [ ] splitMessage = messageContents . toLowerCase ( ) . trim ( ) . split ( " " ) ;
2019-11-10 01:04:56 +01:00
2020-10-29 01:08:22 +01:00
int userNameIndex = 1 ;
2019-11-10 01:04:56 +01:00
2020-10-29 01:08:22 +01:00
if ( DiscordWhitelister . getUseCustomPrefixes ( ) )
{
String [ ] customPrefixCount = clearNamePrefix . trim ( ) . split ( " " ) ;
userNameIndex = customPrefixCount . length ; // Don't + 1 as index starts at 0, length doesn't
}
2019-11-10 01:04:56 +01:00
2020-10-29 01:08:22 +01:00
// Search for target name & linked ID
Boolean nameFound = false ;
String targetDiscordId = " " ;
List < String > targetWhitelistedPlayers = Collections . emptyList ( ) ;
int nameToClearIndex = 0 ;
2019-11-10 01:04:56 +01:00
2020-10-29 01:08:22 +01:00
Yaml userYaml = new Yaml ( ) ;
2019-11-10 01:04:56 +01:00
2020-10-29 01:08:22 +01:00
try
{
InputStream inputStream = new FileInputStream ( UserList . getUserListFile ( ) ) ;
2019-11-10 01:04:56 +01:00
2020-10-29 01:08:22 +01:00
// Check if input stream is empty
PushbackInputStream pushbackInputStream = new PushbackInputStream ( inputStream ) ;
int b = pushbackInputStream . read ( ) ;
2019-11-10 01:04:56 +01:00
2020-10-29 01:08:22 +01:00
// Make sure the user list is not empty
if ( b ! = - 1 )
{
pushbackInputStream . unread ( b ) ;
Map < String , List < String > > userListObject = userYaml . load ( pushbackInputStream ) ;
2019-11-10 01:04:56 +01:00
2020-10-29 01:08:22 +01:00
// Search for name and Id linked to it
for ( Map . Entry < String , List < String > > entry : userListObject . entrySet ( ) )
{
for ( int i = 0 ; i < entry . getValue ( ) . size ( ) ; i + + )
{
if ( entry . getValue ( ) . get ( i ) . equals ( splitMessage [ userNameIndex ] ) ) // Target name
{
// Found the target name
targetDiscordId = entry . getKey ( ) ;
targetWhitelistedPlayers = entry . getValue ( ) ;
nameToClearIndex = i ;
nameFound = true ;
}
}
}
}
}
catch ( IOException e )
{
e . printStackTrace ( ) ;
}
if ( nameFound )
{
List < String > updatedTargetWhitelistedPlayers = targetWhitelistedPlayers ;
// Check count - clear id entirely if only 1 entry
if ( updatedTargetWhitelistedPlayers . size ( ) > 1 )
{
updatedTargetWhitelistedPlayers . remove ( nameToClearIndex ) ; // Clear name
// Set the updated list in the config
UserList . getUserList ( ) . set ( targetDiscordId , updatedTargetWhitelistedPlayers ) ;
}
else // Remove entirely
{
UserList . getUserList ( ) . set ( targetDiscordId , null ) ;
}
UserList . SaveStore ( ) ;
// Un-whitelist and remove perms if enabled
if ( MainConfig . getMainConfig ( ) . getBoolean ( " unwhitelist-and-clear-perms-on-name-clear " ) )
{
// Remove name from the whitelist
if ( ! WhitelistedPlayers . usingEasyWhitelist )
{
DiscordClient . ExecuteServerCommand ( " whitelist remove " + splitMessage [ userNameIndex ] ) ;
}
else
{
DiscordClient . ExecuteServerCommand ( " easywl remove " + splitMessage [ userNameIndex ] ) ;
}
// Clear permissions
if ( DiscordWhitelister . useUltraPerms )
DiscordClient . RemovePermsFromUser ( splitMessage [ userNameIndex ] , PermissionsConfig . getPermissionsConfig ( ) . getStringList ( " perms-on-whitelist " ) ) ;
}
// Success message
EmbedBuilder embedBuilderClearSuccess = new EmbedBuilder ( ) ;
embedBuilderClearSuccess . setColor ( new Color ( 46 , 204 , 113 ) ) ;
if ( DiscordWhitelister . useCustomMessages )
{
String clearNameTitle = CustomMessagesConfig . getCustomMessagesConfig ( ) . getString ( " clear-name-success-title " ) ;
String clearNameMessage = CustomMessagesConfig . getCustomMessagesConfig ( ) . getString ( " clear-name-success-message " ) ;
clearNameMessage = clearNameMessage . replaceAll ( " \\ {Sender} " , author . getAsMention ( ) ) ;
clearNameMessage = clearNameMessage . replaceAll ( " \\ {MinecraftUsername} " , splitMessage [ userNameIndex ] ) ;
clearNameMessage = clearNameMessage . replaceAll ( " \\ {DiscordID} " , " <@ " + targetDiscordId + " > " ) ;
clearNameTitle = clearNameTitle . replaceAll ( " \\ {MinecraftUsername} " , splitMessage [ userNameIndex ] ) ;
embedBuilderClearSuccess . addField ( clearNameTitle , clearNameMessage , false ) ;
}
else
{
embedBuilderClearSuccess . addField ( " Successfully Cleared Name " , author . getAsMention ( ) +
" successfully cleared username ` " + splitMessage [ userNameIndex ] +
" ` from <@ " + targetDiscordId + " >'s whitelisted users. " , false ) ;
}
channel . sendMessage ( embedBuilderClearSuccess . build ( ) ) . queue ( ) ;
}
else
{
EmbedBuilder embedBuilderNameNotFound = new EmbedBuilder ( ) ;
embedBuilderNameNotFound . setColor ( new Color ( 231 , 76 , 60 ) ) ;
if ( ! DiscordWhitelister . useCustomMessages )
{
embedBuilderNameNotFound . addField ( splitMessage [ userNameIndex ] + " not Found " , ( author . getAsMention ( ) + " , could not find name " + splitMessage [ userNameIndex ] + " to clear in user list. " ) , false ) ;
}
else
{
String customTitle = CustomMessagesConfig . getCustomMessagesConfig ( ) . getString ( " clear-name-failure-title " ) ;
String customMessage = CustomMessagesConfig . getCustomMessagesConfig ( ) . getString ( " clear-name-failure-message " ) ;
customMessage = customMessage . replaceAll ( " \\ {Sender} " , author . getAsMention ( ) ) ;
customMessage = customMessage . replaceAll ( " \\ {MinecraftUsername} " , splitMessage [ userNameIndex ] ) ;
customTitle = customTitle . replaceAll ( " \\ {MinecraftUsername} " , splitMessage [ userNameIndex ] ) ;
embedBuilderNameNotFound . addField ( customTitle , customMessage , false ) ;
}
channel . sendMessage ( embedBuilderNameNotFound . build ( ) ) . queue ( ) ;
}
}
else // Don't have permission
{
EmbedBuilder insufficientPermission = new EmbedBuilder ( ) ;
insufficientPermission . setColor ( new Color ( 231 , 76 , 60 ) ) ;
if ( ! DiscordWhitelister . useCustomMessages )
{
insufficientPermission . addField ( " Insufficient Permissions " , ( author . getAsMention ( ) + " , you do not have permission to use this command. " ) , false ) ;
}
else
{
String customTitle = DiscordWhitelister . getCustomMessagesConfig ( ) . getString ( " insufficient-permissions-title " ) ;
String customMessage = DiscordWhitelister . getCustomMessagesConfig ( ) . getString ( " insufficient-permissions " ) ;
customMessage = customMessage . replaceAll ( " \\ {Sender} " , author . getAsMention ( ) ) ; // Only checking for {Sender}
insufficientPermission . addField ( customTitle , customMessage , false ) ;
}
channel . sendMessage ( insufficientPermission . build ( ) ) . queue ( ) ;
return ;
}
}
if ( messageContents . toLowerCase ( ) . startsWith ( " !clearban " ) & & ! DiscordWhitelister . getUseCustomPrefixes ( )
| | DiscordWhitelister . getUseCustomPrefixes ( ) & & messageContents . toLowerCase ( ) . startsWith ( clearBanPrefix ) )
{
if ( authorPermissions . isUserCanUseClear ( ) )
{
// Check if empty command
if ( messageContents . toLowerCase ( ) . trim ( ) . equals ( " !clearban " ) & & ! DiscordWhitelister . getUseCustomPrefixes ( )
| | messageContents . toLowerCase ( ) . trim ( ) . equals ( clearBanPrefix ) & & DiscordWhitelister . getUseCustomPrefixes ( ) )
{
// Send info message
EmbedBuilder embedBuilderClearInfo = new EmbedBuilder ( ) ;
embedBuilderClearInfo . setColor ( new Color ( 104 , 109 , 224 ) ) ;
if ( ! DiscordWhitelister . getUseCustomPrefixes ( ) )
embedBuilderClearInfo . addField ( " Clear Ban Command " , " Usage: `!clearban <minecraftUsername>` \ n " , false ) ;
else
embedBuilderClearInfo . addField ( " Clear Ban Command " , " Usage: ` " + clearBanPrefix + " <minecraftUsername>` \ n " , false ) ;
channel . sendMessage ( embedBuilderClearInfo . build ( ) ) . queue ( ) ;
return ;
}
// If command is not empty check for args
String [ ] splitMessage = messageContents . toLowerCase ( ) . trim ( ) . split ( " " ) ;
int userNameIndex = 1 ;
if ( DiscordWhitelister . getUseCustomPrefixes ( ) )
{
String [ ] customPrefixCount = clearBanPrefix . trim ( ) . split ( " " ) ;
userNameIndex = customPrefixCount . length ; // Don't + 1 as index starts at 0, length doesn't
}
String targetName = splitMessage [ userNameIndex ] ;
// Check both removed lists for target name
boolean nameFoundInLists = false ;
// Remove name from removed list if found
if ( RemovedList . CheckStoreForPlayer ( targetName ) )
{
RemovedList . getRemovedPlayers ( ) . set ( targetName , null ) ;
RemovedList . SaveStore ( ) ;
nameFoundInLists = true ;
}
if ( InGameRemovedList . CheckStoreForPlayer ( targetName ) )
{
InGameRemovedList . RemoveUserFromStore ( targetName ) ;
nameFoundInLists = true ;
}
if ( nameFoundInLists )
{
EmbedBuilder clearBanSuccessEmbed = new EmbedBuilder ( ) ;
clearBanSuccessEmbed . setColor ( new Color ( 46 , 204 , 113 ) ) ;
if ( ! DiscordWhitelister . useCustomMessages )
{
clearBanSuccessEmbed . addField ( " Successfully Cleared ` " + targetName + " ` " ,
author . getAsMention ( ) + " has successfully cleared ` " + targetName + " ` from the removed list(s). " , false ) ;
}
else
{
String customTitle = CustomMessagesConfig . getCustomMessagesConfig ( ) . getString ( " clear-ban-success-title " ) ;
String customMessage = CustomMessagesConfig . getCustomMessagesConfig ( ) . getString ( " clear-ban-success-message " ) ;
customMessage = customMessage . replaceAll ( " \\ {Sender} " , author . getAsMention ( ) ) ;
customMessage = customMessage . replaceAll ( " \\ {MinecraftUsername} " , targetName ) ;
customTitle = customTitle . replaceAll ( " \\ {MinecraftUsername} " , targetName ) ;
clearBanSuccessEmbed . addField ( customTitle , customMessage , false ) ;
}
channel . sendMessage ( clearBanSuccessEmbed . build ( ) ) . queue ( ) ;
return ;
}
else
{
EmbedBuilder clearBanFailureEmbed = new EmbedBuilder ( ) ;
clearBanFailureEmbed . setColor ( new Color ( 231 , 76 , 60 ) ) ;
if ( ! DiscordWhitelister . useCustomMessages )
{
clearBanFailureEmbed . addField ( " Failed to Clear ` " + targetName + " ` " ,
author . getAsMention ( ) + " , ` " + targetName + " ` cannot be found in any of the removed lists! " , false ) ;
}
else
{
String customTitle = CustomMessagesConfig . getCustomMessagesConfig ( ) . getString ( " clear-ban-failure-title " ) ;
String customMessage = CustomMessagesConfig . getCustomMessagesConfig ( ) . getString ( " clear-ban-failure-message " ) ;
customMessage = customMessage . replaceAll ( " \\ {Sender} " , author . getAsMention ( ) ) ;
customMessage = customMessage . replaceAll ( " \\ {MinecraftUsername} " , targetName ) ;
customTitle = customTitle . replaceAll ( " \\ {MinecraftUsername} " , targetName ) ;
clearBanFailureEmbed . addField ( customTitle , customMessage , false ) ;
}
channel . sendMessage ( clearBanFailureEmbed . build ( ) ) . queue ( ) ;
return ;
}
}
else
{
EmbedBuilder insufficientPermission = new EmbedBuilder ( ) ;
insufficientPermission . setColor ( new Color ( 231 , 76 , 60 ) ) ;
if ( ! DiscordWhitelister . useCustomMessages )
{
insufficientPermission . addField ( " Insufficient Permissions " , ( author . getAsMention ( ) + " , you do not have permission to use this command. " ) , false ) ;
}
else
{
String customTitle = DiscordWhitelister . getCustomMessagesConfig ( ) . getString ( " insufficient-permissions-title " ) ;
String customMessage = DiscordWhitelister . getCustomMessagesConfig ( ) . getString ( " insufficient-permissions " ) ;
customMessage = customMessage . replaceAll ( " \\ {Sender} " , author . getAsMention ( ) ) ; // Only checking for {Sender}
insufficientPermission . addField ( customTitle , customMessage , false ) ;
}
channel . sendMessage ( insufficientPermission . build ( ) ) . queue ( ) ;
return ;
}
}
}
2019-11-10 01:04:56 +01:00
}
2020-04-14 17:45:34 +02:00
2020-10-29 01:08:22 +01:00
@Override
public void onGuildMemberRemove ( @Nonnull GuildMemberRemoveEvent event )
{
if ( ! MainConfig . getMainConfig ( ) . getBoolean ( " un-whitelist-on-server-leave " ) )
return ;
String discordUserToRemove = event . getMember ( ) . getId ( ) ;
DiscordWhitelister . getPlugin ( ) . getLogger ( ) . info ( discordUserToRemove + " left. Removing their whitelisted entries... " ) ;
List < ? > ls = UserList . getRegisteredUsers ( discordUserToRemove ) ;
if ( ls ! = null )
{
for ( Object minecraftNameToRemove : ls )
{
DiscordWhitelister . getPlugin ( ) . getLogger ( ) . info ( minecraftNameToRemove . toString ( ) + " left. Removing their whitelisted entries. " ) ;
if ( WhitelistedPlayers . usingEasyWhitelist )
{
ExecuteServerCommand ( " easywl remove " + minecraftNameToRemove . toString ( ) ) ;
} else {
ExecuteServerCommand ( " whitelist remove " + minecraftNameToRemove . toString ( ) ) ;
}
}
try
{
UserList . resetRegisteredUsers ( discordUserToRemove ) ;
}
catch ( IOException e )
{
e . printStackTrace ( ) ;
return ;
}
DiscordWhitelister . getPlugin ( ) . getLogger ( ) . info ( discordUserToRemove + " left. Successfully removed their whitelisted entries from the user list. " ) ;
}
else
{
DiscordWhitelister . getPlugin ( ) . getLogger ( ) . warning ( discordUserToRemove + " left. Could not removed their whitelisted entries as they did not whitelist through this plugin. " ) ;
}
}
public static void StartUpMemberCheck ( ) throws IOException
{
if ( ! MainConfig . getMainConfig ( ) . getBoolean ( " un-whitelist-on-server-leave " ) )
return ;
// Don't attempt to remove members if not connected
if ( javaDiscordAPI . getStatus ( ) ! = JDA . Status . CONNECTED )
return ;
DiscordWhitelister . getPluginLogger ( ) . info ( " Checking Discord IDs for leavers... " ) ;
Yaml idYaml = new Yaml ( ) ;
InputStream inputStream = new FileInputStream ( UserList . getUserListFile ( ) ) ;
PushbackInputStream pushbackInputStream = new PushbackInputStream ( inputStream ) ;
int b = pushbackInputStream . read ( ) ;
if ( b = = - 1 )
return ;
else
pushbackInputStream . unread ( b ) ;
Map < String , List < String > > userObject = idYaml . load ( pushbackInputStream ) ;
for ( Map . Entry < String , List < String > > entry : userObject . entrySet ( ) )
{
// Check if the ID is in any guilds
boolean inGuild = false ;
// Check all guilds
for ( int i = 0 ; i < javaDiscordAPI . getGuilds ( ) . size ( ) ; i + + )
{
if ( javaDiscordAPI . getGuilds ( ) . get ( i ) . getMemberById ( entry . getKey ( ) ) ! = null )
inGuild = true ;
}
// un-whitelist associated minecraft usernames if not in any guilds
if ( ! inGuild )
{
for ( int i = 0 ; i < entry . getValue ( ) . size ( ) ; i + + )
{
// un-whitelist
if ( ! WhitelistedPlayers . usingEasyWhitelist )
{
DiscordClient . ExecuteServerCommand ( " whitelist remove " + entry . getValue ( ) . get ( i ) ) ;
}
else
{
DiscordClient . ExecuteServerCommand ( " easywl remove " + entry . getValue ( ) . get ( i ) ) ;
}
DiscordWhitelister . getPluginLogger ( ) . info ( " Removed " + entry . getValue ( ) . get ( i )
+ " from the whitelist as Discord ID: " + entry . getKey ( ) + " has left the server. " ) ;
}
// Clear entries in user-list
if ( userObject . get ( entry . getKey ( ) ) ! = null )
{
UserList . getUserList ( ) . set ( entry . getKey ( ) , null ) ;
UserList . SaveStore ( ) ;
DiscordWhitelister . getPlugin ( ) . getLogger ( ) . info ( " Discord ID: " + entry . getKey ( )
+ " left. Successfully removed their whitelisted entries from the user list. " ) ;
}
}
}
}
// Find all occurrences of the target player and remove them
private static void ClearPlayerFromUserList ( String targetName )
{
// Just in-case
targetName = targetName . toLowerCase ( ) ;
// Get a list of all IDs that contain targetName - shouldn't ever really happen
List < String > idsContainingTargetName = new LinkedList < > ( ) ;
Yaml userYaml = new Yaml ( ) ;
try
{
InputStream inputStream = new FileInputStream ( UserList . getUserListFile ( ) ) ;
// Check if input stream is empty
PushbackInputStream pushbackInputStream = new PushbackInputStream ( inputStream ) ;
int b = pushbackInputStream . read ( ) ;
// Make sure the user list is not empty
if ( b ! = - 1 )
{
pushbackInputStream . unread ( b ) ;
Map < String , List < String > > userListObject = userYaml . load ( pushbackInputStream ) ;
// Search for name and Id linked to it
for ( Map . Entry < String , List < String > > entry : userListObject . entrySet ( ) )
{
for ( int i = 0 ; i < entry . getValue ( ) . size ( ) ; i + + )
{
if ( entry . getValue ( ) . get ( i ) . equals ( targetName ) )
{
// Found the target name, add ID to list
idsContainingTargetName . add ( entry . getKey ( ) ) ;
}
}
}
// Check if we found any IDs
if ( idsContainingTargetName . size ( ) > 0 )
{
DiscordWhitelister . getPluginLogger ( ) . info ( " Found " + idsContainingTargetName . size ( ) + " occurrence(s) of " + targetName + " in the user list, removing... " ) ;
for ( int i = 0 ; i < idsContainingTargetName . size ( ) ; i + + )
{
// Get the IDs whitelisted users
List < String > newWhitelistedUsers = UserList . getUserList ( ) . getStringList ( idsContainingTargetName . get ( i ) ) ;
if ( newWhitelistedUsers . size ( ) > 1 )
{
newWhitelistedUsers . remove ( targetName ) ;
UserList . getUserList ( ) . set ( idsContainingTargetName . get ( i ) , newWhitelistedUsers ) ;
}
else
{
// Double check the 1 whitelisted user == targetName
if ( newWhitelistedUsers . get ( 0 ) . equals ( targetName ) )
UserList . getUserList ( ) . set ( idsContainingTargetName . get ( i ) , null ) ;
}
UserList . SaveStore ( ) ;
}
}
}
}
catch ( IOException e )
{
e . printStackTrace ( ) ;
}
}
private String minecraftUsernameToUUID ( String minecraftUsername )
{
URL playerURL ;
String inputStream ;
BufferedReader bufferedReader ;
String playerUUID = null ;
try {
playerURL = new URL ( " https://api.mojang.com/users/profiles/minecraft/ " + minecraftUsername ) ;
bufferedReader = new BufferedReader ( new InputStreamReader ( playerURL . openStream ( ) ) ) ;
inputStream = bufferedReader . readLine ( ) ;
if ( inputStream ! = null ) {
JSONObject inputStreamObject = ( JSONObject ) JSONValue . parseWithException ( inputStream ) ;
playerUUID = inputStreamObject . get ( " id " ) . toString ( ) ;
}
} catch ( IOException | ParseException e ) {
e . printStackTrace ( ) ;
}
return playerUUID ;
}
public static void ExecuteServerCommand ( String command )
2020-07-08 21:01:49 +02:00
{
2020-04-14 17:45:34 +02:00
DiscordWhitelister . getPlugin ( ) . getServer ( ) . getScheduler ( ) . callSyncMethod ( DiscordWhitelister . getPlugin ( ) , ( )
- > DiscordWhitelister . getPlugin ( ) . getServer ( ) . dispatchCommand (
DiscordWhitelister . getPlugin ( ) . getServer ( ) . getConsoleSender ( ) , command ) ) ;
}
2020-10-29 01:08:22 +01:00
private enum SenderType { CONSOLE , PLAYER , UNKNOWN }
public static void CheckAndExecuteCommand ( String configInput , String playerTargetName )
{
SenderType senderType ;
// Check command sender type
if ( configInput . startsWith ( " CONSOLE " ) )
senderType = SenderType . CONSOLE ;
else if ( configInput . startsWith ( " PLAYER " ) )
senderType = SenderType . PLAYER ;
else
senderType = SenderType . UNKNOWN ;
if ( senderType . equals ( SenderType . UNKNOWN ) )
{
DiscordWhitelister . getPluginLogger ( ) . warning ( " Unknown command sender type (should be one of the following: CONSOLE, PLAYER), offending line: " + configInput ) ;
return ;
}
// Get command which is after the first :
String commandToSend = configInput . substring ( configInput . indexOf ( " : " ) + 1 ) ;
// Set player name if %PLAYER% is used
final String commandToSendFinal = commandToSend . replaceAll ( " %PLAYER% " , playerTargetName ) ;
if ( senderType . equals ( SenderType . CONSOLE ) )
{
DiscordWhitelister . getPlugin ( ) . getServer ( ) . getScheduler ( ) . callSyncMethod ( DiscordWhitelister . getPlugin ( ) ,
( ) - > DiscordWhitelister . getPlugin ( ) . getServer ( ) . dispatchCommand ( DiscordWhitelister . getPlugin ( ) . getServer ( ) . getConsoleSender ( ) , commandToSendFinal ) ) ;
}
else
{
DiscordWhitelister . getPlugin ( ) . getServer ( ) . getPlayer ( playerTargetName ) . performCommand ( commandToSendFinal ) ;
}
}
// use this multiple times when checking all guilds
// Accepts a single role in the form of a singleton list
public static void AssignRolesToUser ( Guild targetGuild , String targetUserId , List < String > targetRole )
{
// Check if the user is in the targetGuild
if ( targetGuild . getMemberById ( targetUserId ) = = null )
{
DiscordWhitelister . getPluginLogger ( ) . warning ( " User cannot be found in Guild " + targetGuild . getName ( )
+ " ( " + targetGuild . getId ( ) + " ) " + " . Will not attempt to assign role(s) " ) ;
return ;
}
// Locate target role(s)
LinkedList < Role > rolesFound = new LinkedList < > ( ) ;
for ( int i = 0 ; i < targetRole . size ( ) ; i + + )
{
List < Role > tempFoundRoles ;
if ( ! DiscordWhitelister . useIdForRoles )
tempFoundRoles = targetGuild . getRolesByName ( targetRole . get ( i ) , false ) ;
else
tempFoundRoles = Collections . singletonList ( targetGuild . getRoleById ( targetRole . get ( i ) ) ) ;
if ( tempFoundRoles . size ( ) > 0 )
{
rolesFound . addAll ( tempFoundRoles ) ;
}
else
{
String discordUserName = targetGuild . getMemberById ( targetUserId ) . getEffectiveName ( ) ;
DiscordWhitelister . getPluginLogger ( ) . warning ( " Failed to assign role " + targetRole . get ( i )
+ " to user " + discordUserName + " ( " + targetUserId + " ) " + " as it could not be found in "
+ targetGuild . getName ( ) + " ( " + targetGuild . getId ( ) + " ) " ) ;
}
}
// Check if any roles were found
if ( rolesFound . size ( ) > 0 )
{
// Assign the roles
for ( int i = 0 ; i < rolesFound . size ( ) ; i + + )
{
targetGuild . addRoleToMember ( targetGuild . getMemberById ( targetUserId ) , rolesFound . get ( i ) ) . queue ( ) ;
}
}
}
public static void RemoveRolesFromUser ( Guild targetGuild , String targetUserId , List < String > targetRole )
{
// Check if the user is in the targetGuild
if ( targetGuild . getMemberById ( targetUserId ) = = null )
{
DiscordWhitelister . getPluginLogger ( ) . warning ( " User cannot be found in Guild " + targetGuild . getName ( )
+ " ( " + targetGuild . getId ( ) + " ) " + " . Will not attempt to remove role(s) " ) ;
return ;
}
// Locate target role(s)
LinkedList < Role > rolesFound = new LinkedList < > ( ) ;
for ( int i = 0 ; i < targetRole . size ( ) ; i + + )
{
List < Role > tempFoundRoles ;
if ( ! DiscordWhitelister . useIdForRoles )
tempFoundRoles = targetGuild . getRolesByName ( targetRole . get ( i ) , false ) ;
else
tempFoundRoles = Collections . singletonList ( targetGuild . getRoleById ( targetRole . get ( i ) ) ) ;
if ( tempFoundRoles . size ( ) > 0 )
{
rolesFound . addAll ( tempFoundRoles ) ;
}
else
{
String discordUserName = targetGuild . getMemberById ( targetUserId ) . getEffectiveName ( ) ;
DiscordWhitelister . getPluginLogger ( ) . warning ( " Failed to remove role " + targetRole . get ( i )
+ " from user " + discordUserName + " ( " + targetUserId + " ) " + " as it could not be found in "
+ targetGuild . getName ( ) + " ( " + targetGuild . getId ( ) + " ) " ) ;
}
}
// Check if any roles were found
if ( rolesFound . size ( ) > 0 )
{
// Assign the roles
for ( int i = 0 ; i < rolesFound . size ( ) ; i + + )
{
targetGuild . removeRoleFromMember ( targetGuild . getMemberById ( targetUserId ) , rolesFound . get ( i ) ) . queue ( ) ;
}
}
}
// TODO: improve, not go through console commands
// For ultra perms
public static void AssignPermsToUser ( String targetPlayerName , List < String > permsToAssign )
{
for ( int i = 0 ; i < permsToAssign . size ( ) ; i + + )
{
DiscordClient . ExecuteServerCommand ( " upc addPlayerPermission " + targetPlayerName + " " + permsToAssign . get ( i ) ) ;
}
}
public static void RemovePermsFromUser ( String targetPlayerName , List < String > permsToRemove )
{
for ( int i = 0 ; i < permsToRemove . size ( ) ; i + + )
{
DiscordClient . ExecuteServerCommand ( " upc removePlayerPermission " + targetPlayerName + " " + permsToRemove . get ( i ) ) ;
}
}
2019-11-10 01:04:56 +01:00
}