diff --git a/src/main/java/netneutrality/command/AbstractMusicCommand.java b/src/main/java/netneutrality/command/AbstractMusicCommand.java index 13bfb6a..2c1a991 100644 --- a/src/main/java/netneutrality/command/AbstractMusicCommand.java +++ b/src/main/java/netneutrality/command/AbstractMusicCommand.java @@ -27,7 +27,7 @@ public abstract class AbstractMusicCommand extends AbstractCommand { @Override public boolean canBeExecutedBy(Guild guild, Member member) { - String roleDb = GuildManager.getManager(guild).getSetting(GuildManager.Settings.MUSIC_ROLE); + String roleDb = GuildManager.getManager(guild).getSetting(GuildManager.GSettings.MUSIC_ROLE); if (roleDb != null && !roleDb.isEmpty()) { if (UserFunction.isAdmin(member)) { @@ -37,7 +37,7 @@ public abstract class AbstractMusicCommand extends AbstractCommand { Role neededRole = guild.getRoleById(roleDb); if (neededRole == null) { // Role doesn't exist on guild anymore, remove from db - GuildManager.getManager(guild).setSettingValue(GuildManager.Settings.MUSIC_ROLE, null); + GuildManager.getManager(guild).setSettingValue(GuildManager.GSettings.MUSIC_ROLE, null); return true; } @@ -49,7 +49,7 @@ public abstract class AbstractMusicCommand extends AbstractCommand { @Override public boolean canBeExecutedFrom(Guild guild, TextChannel channel) { - String channelDb = GuildManager.getManager(guild).getSetting(GuildManager.Settings.MUSIC_CHANNEL); + String channelDb = GuildManager.getManager(guild).getSetting(GuildManager.GSettings.MUSIC_CHANNEL); if (channelDb != null && !channelDb.isEmpty()) { return channelDb.equals(channel.getId()); diff --git a/src/main/java/netneutrality/command/bot/ConfigureCommand.java b/src/main/java/netneutrality/command/bot/ConfigureCommand.java index 9a1b550..85dcd45 100644 --- a/src/main/java/netneutrality/command/bot/ConfigureCommand.java +++ b/src/main/java/netneutrality/command/bot/ConfigureCommand.java @@ -15,6 +15,7 @@ import netneutrality.core.GuildManager; import netneutrality.core.context.CommandContext; import netneutrality.music.MusicManager; +import java.util.Arrays; import java.util.List; public class ConfigureCommand extends AbstractCommand { @@ -65,7 +66,7 @@ public class ConfigureCommand extends AbstractCommand { // Role for music commands if (context.getArgument(0).equals("music-role")) { if (args.length == 1) { - String roleDb = guildManager.getSetting(GuildManager.Settings.MUSIC_ROLE); + String roleDb = guildManager.getSetting(GuildManager.GSettings.MUSIC_ROLE); Role role = null; if (!roleDb.isEmpty()) { role = context.getGuild().getRoleById(roleDb); @@ -77,8 +78,8 @@ public class ConfigureCommand extends AbstractCommand { if (args.length == 2) { if (context.getArgument(1).equals("reset")) { - if (!guildManager.getSetting(GuildManager.Settings.MUSIC_ROLE).isEmpty()) { - guildManager.setSettingValue(GuildManager.Settings.MUSIC_ROLE, null); + if (!guildManager.getSetting(GuildManager.GSettings.MUSIC_ROLE).isEmpty()) { + guildManager.setSettingValue(GuildManager.GSettings.MUSIC_ROLE, null); } context.reply("Successful reset of the role"); @@ -88,7 +89,7 @@ public class ConfigureCommand extends AbstractCommand { if (roles.size() == 1) { Role role = roles.get(0); if (role.getGuild().getId().equals(context.getGuild().getId())) { - guildManager.setSettingValue(GuildManager.Settings.MUSIC_ROLE, role.getId()); + guildManager.setSettingValue(GuildManager.GSettings.MUSIC_ROLE, role.getId()); context.reply("Successfully set %s as the role needed for music command", role.getAsMention()); } } @@ -98,7 +99,7 @@ public class ConfigureCommand extends AbstractCommand { // Role for music commands if (context.getArgument(0).equals("music-channel")) { if (args.length == 1) { - String channelDb = guildManager.getSetting(GuildManager.Settings.MUSIC_CHANNEL); + String channelDb = guildManager.getSetting(GuildManager.GSettings.MUSIC_CHANNEL); TextChannel channel = null; if (!channelDb.isEmpty()) { channel = context.getGuild().getTextChannelById(channelDb); @@ -110,8 +111,8 @@ public class ConfigureCommand extends AbstractCommand { if (args.length == 2) { if (context.getArgument(1).equals("reset")) { - if (!guildManager.getSetting(GuildManager.Settings.MUSIC_CHANNEL).isEmpty()) { - guildManager.setSettingValue(GuildManager.Settings.MUSIC_CHANNEL, null); + if (!guildManager.getSetting(GuildManager.GSettings.MUSIC_CHANNEL).isEmpty()) { + guildManager.setSettingValue(GuildManager.GSettings.MUSIC_CHANNEL, null); } context.reply("Successful reset of the channel"); @@ -121,7 +122,7 @@ public class ConfigureCommand extends AbstractCommand { if (channels.size() == 1) { TextChannel channel = channels.get(0); if (channel.getGuild().getId().equals(context.getGuild().getId())) { - guildManager.setSettingValue(GuildManager.Settings.MUSIC_CHANNEL, channel.getId()); + guildManager.setSettingValue(GuildManager.GSettings.MUSIC_CHANNEL, channel.getId()); context.reply("Successfully set %s as the channel required to execute music command", channel.getAsMention()); } } @@ -131,7 +132,7 @@ public class ConfigureCommand extends AbstractCommand { // Default volume for music player if (context.getArgument(0).equals("music-volume")) { if (args.length == 1) { - int volume = Integer.parseInt(guildManager.getSetting(GuildManager.Settings.MUSIC_VOLUME)); + int volume = Integer.parseInt(guildManager.getSetting(GuildManager.GSettings.MUSIC_VOLUME)); context.reply("Default volume for music player: %d", volume); context.reply("Set using 'conf music-volume '"); @@ -142,7 +143,7 @@ public class ConfigureCommand extends AbstractCommand { int volume = Integer.parseInt(args[1]); if (volume > 0 && volume <= 100) { - guildManager.setSettingValue(GuildManager.Settings.MUSIC_VOLUME, String.valueOf(volume)); + guildManager.setSettingValue(GuildManager.GSettings.MUSIC_VOLUME, String.valueOf(volume)); MusicManager.get(context.getGuild()).setVolume(volume); context.reply("Default volume for music player is now %d", volume); @@ -158,7 +159,7 @@ public class ConfigureCommand extends AbstractCommand { // Music topic change if (context.getArgument(0).equals("music-topic")) { if (args.length == 1) { - boolean enabled = "1".equals(guildManager.getSetting(GuildManager.Settings.MUSIC_TOPIC)); + boolean enabled = "1".equals(guildManager.getSetting(GuildManager.GSettings.MUSIC_TOPIC)); context.reply("Set currently playing track in text channel topic: %s", (enabled ? "enabled" : "disabled")); context.reply("Use 'conf music-topic 0/1' to toggle between states (0 = disabled, 1 = enabled)."); @@ -166,9 +167,9 @@ public class ConfigureCommand extends AbstractCommand { if (args.length == 2) { String str = args[1]; - boolean enabled = "1".equals(guildManager.getSetting(GuildManager.Settings.MUSIC_TOPIC)); + boolean enabled = "1".equals(guildManager.getSetting(GuildManager.GSettings.MUSIC_TOPIC)); if (str.equals("0") || str.equals("1")) { - guildManager.setSettingValue(GuildManager.Settings.MUSIC_TOPIC, str); + guildManager.setSettingValue(GuildManager.GSettings.MUSIC_TOPIC, str); enabled = "1".equals(str); } @@ -202,6 +203,32 @@ public class ConfigureCommand extends AbstractCommand { } } + + // Prefix + if (context.getArgument(0).equals("prefix")) { + String allowedPrefixes = "!$%?&*"; + + if (args.length == 1) { + String prefix = guildManager.getSetting(GuildManager.GSettings.PREFIX); + + context.reply("Current prefix for commands: '%s'", prefix); + context.reply("Allowed prefixes: %s", Arrays.toString(allowedPrefixes.toCharArray())); + + } + + if (args.length == 2) { + String prefix = args[1].trim(); + + if (prefix.length() == 1 && allowedPrefixes.contains(prefix)) { + guildManager.setSettingValue(GuildManager.GSettings.PREFIX, prefix); + + context.reply("Prefix for commands is now '%s'", prefix); + } else { + context.reply("Allowed prefixes: %s", Arrays.toString(allowedPrefixes.toCharArray())); + } + + } + } } else { context.reply(getUsage()); } diff --git a/src/main/java/netneutrality/core/CommandManager.java b/src/main/java/netneutrality/core/CommandManager.java index 049becc..c6ee03b 100644 --- a/src/main/java/netneutrality/core/CommandManager.java +++ b/src/main/java/netneutrality/core/CommandManager.java @@ -28,6 +28,14 @@ public class CommandManager { initAlias(); } + public static boolean isValidCommand(String commandString) { + return commands.containsKey(commandString) || commandsAlias.containsKey(commandString); + } + + public static AbstractCommand getCommand(String commandString) { + return commands.containsKey(commandString) ? commands.get(commandString) : commandsAlias.get(commandString); + } + private static void initCommands() { logger.info("Loading commands.."); diff --git a/src/main/java/netneutrality/core/GuildManager.java b/src/main/java/netneutrality/core/GuildManager.java index e0a5558..877debf 100644 --- a/src/main/java/netneutrality/core/GuildManager.java +++ b/src/main/java/netneutrality/core/GuildManager.java @@ -21,6 +21,7 @@ import netneutrality.handler.ratelimiter.MessageRateLimiterImpl; import netneutrality.thread.ThreadManager; import netneutrality.utils.JpaUtils; import netneutrality.utils.MessageFunction; +import netneutrality.utils.Settings; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.slf4j.Logger; @@ -34,7 +35,8 @@ import java.util.concurrent.ConcurrentHashMap; public class GuildManager { - public enum Settings { + public enum GSettings { + PREFIX("PREFIX", Settings.getInstance().get("BOT_PREFIX", "$")), MUSIC_ROLE("MUSIC_ROLE", ""), MUSIC_CHANNEL("MUSIC_CHANNEL", ""), MUSIC_VOLUME("MUSIC_VOLUME", "30"), @@ -44,7 +46,7 @@ public class GuildManager { private final String name; private final String defaultValue; - Settings(String name, String defaultValue) { + GSettings(String name, String defaultValue) { this.name = name; this.defaultValue = defaultValue; } @@ -140,7 +142,7 @@ public class GuildManager { return settingsCache; } - public String getSetting(Settings setting) { + public String getSetting(GSettings setting) { String value = settingsCache.get(setting.getName()); if (value == null) { @@ -150,7 +152,7 @@ public class GuildManager { return value; } - public void setSettingValue(Settings setting, String value) { + public void setSettingValue(GSettings setting, String value) { Session session = sessionFactory.openSession(); JpaUtils.tryLoad(session, guildEntity, guildEntity.getGuildId()); diff --git a/src/main/java/netneutrality/handler/hooks/message/MessageReceivedHandler.java b/src/main/java/netneutrality/handler/hooks/message/MessageReceivedHandler.java index 52ab9ce..4816ff6 100644 --- a/src/main/java/netneutrality/handler/hooks/message/MessageReceivedHandler.java +++ b/src/main/java/netneutrality/handler/hooks/message/MessageReceivedHandler.java @@ -22,15 +22,14 @@ public class MessageReceivedHandler extends ListenerAdapter { @Override public void onGuildMessageReceived(@NotNull GuildMessageReceivedEvent event) { + if (event.getAuthor().isBot()) return; + if (event.isWebhookMessage()) return; + Message message = event.getMessage(); Member member = event.getMember(); - User user = event.getAuthor(); Guild guild = event.getGuild(); TextChannel channel = event.getChannel(); - if (user.isBot()) return; - if (event.isWebhookMessage()) return; - Sentry.addBreadcrumb(Breadcrumb.info("New message from " + member.getEffectiveName())); CommandContext context = CommandContext.createContext(event); @@ -38,17 +37,20 @@ public class MessageReceivedHandler extends ListenerAdapter { GuildManager.getManager(guild).getRateLimiter().check(member, message, channel); GuildManager.getManager(guild).checkAndLogMessage(message, member, channel); - String msg = message.getContentDisplay().trim(); + String rawMessage = message.getContentDisplay().trim(); + //String prefix = Settings.getInstance().get("BOT_PREFIX", "$"); + String prefix = GuildManager.getManager(guild).getSetting(GuildManager.GSettings.PREFIX); - if (msg.startsWith(Settings.getInstance().get("BOT_PREFIX", "$"))) { - msg = msg.substring(Settings.getInstance().get("BOT_PREFIX", "$").length()).trim(); - String cmd = msg.split(" ", 2)[0]; + if (rawMessage.startsWith(prefix)) { + rawMessage = rawMessage.replaceFirst(String.format("^[%s\\s]{1,}", prefix), "").trim(); + // rawMessage = rawMessage.substring(prefix.length()).trim(); + String commandString = rawMessage.split(" ", 2)[0]; - if (CommandManager.commands.containsKey(cmd) || CommandManager.commandsAlias.containsKey(cmd)) { - AbstractCommand c = CommandManager.commands.containsKey(cmd) ? CommandManager.commands.get(cmd) : CommandManager.commandsAlias.get(cmd); + if (CommandManager.isValidCommand(commandString)) { + AbstractCommand command = CommandManager.getCommand(commandString); - context.dispatch(c); + context.dispatch(command); } } else { diff --git a/src/main/java/netneutrality/music/MusicManager.java b/src/main/java/netneutrality/music/MusicManager.java index 225d276..b145c38 100644 --- a/src/main/java/netneutrality/music/MusicManager.java +++ b/src/main/java/netneutrality/music/MusicManager.java @@ -55,7 +55,7 @@ public class MusicManager { this.guild = guild; this.player = playerManager.createPlayer(); this.scheduler = new TrackScheduler(this); - this.baseVolume = Integer.parseInt(GuildManager.getManager(guild).getSetting(GuildManager.Settings.MUSIC_VOLUME)); + this.baseVolume = Integer.parseInt(GuildManager.getManager(guild).getSetting(GuildManager.GSettings.MUSIC_VOLUME)); guild.getAudioManager().setSendingHandler(new AudioPlayerSendHandler(player)); player.addListener(scheduler); diff --git a/src/main/java/netneutrality/utils/MessageFunction.java b/src/main/java/netneutrality/utils/MessageFunction.java index 1214cd7..4c214b0 100644 --- a/src/main/java/netneutrality/utils/MessageFunction.java +++ b/src/main/java/netneutrality/utils/MessageFunction.java @@ -30,20 +30,12 @@ public class MessageFunction { private final static Logger logger = LoggerFactory.getLogger(MessageFunction.class); - public static void logMessageIfNeeded(Guild guild, TextChannel channel, User author, Message message) { - - - } - - public static Member getStartingMention(Message message) { if (isStartingWithMention(message)) { return message.getMentionedMembers().get(0); } return null; - - } public static boolean isStartingWithMention(Message message) { @@ -188,7 +180,7 @@ public class MessageFunction { message.setColor(Color.BLUE); } - message.addField(String.format("%s%s %s", Settings.getInstance().get("BOT_PREFIX"), command.getCommandName(), availAlias), description, false); + message.addField(String.format("%s %s", command.getCommandName(), availAlias), description, false); } }