Implemented COmmandType and ReactionManager

This commit is contained in:
Savvy 2018-02-25 00:45:05 -05:00
parent b24462e55c
commit e0d66b816d
31 changed files with 509 additions and 224 deletions

View File

@ -4,12 +4,27 @@ import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.dataformat.yaml.YAMLFactory; import com.fasterxml.jackson.dataformat.yaml.YAMLFactory;
import io.rixa.bot.commands.cmds.admin.ConfigCommand; import io.rixa.bot.commands.cmds.admin.ConfigCommand;
import io.rixa.bot.commands.cmds.admin.PMCommand; import io.rixa.bot.commands.cmds.admin.PMCommand;
import io.rixa.bot.commands.cmds.general.*; import io.rixa.bot.commands.cmds.general.AdviceCommand;
import io.rixa.bot.commands.cmds.general.FeaturesCommand;
import io.rixa.bot.commands.cmds.general.HelpCommand;
import io.rixa.bot.commands.cmds.general.InfoCommand;
import io.rixa.bot.commands.cmds.general.LeaderboardsCommand;
import io.rixa.bot.commands.cmds.general.MinecraftCommand;
import io.rixa.bot.commands.cmds.general.ModulesCommand;
import io.rixa.bot.commands.cmds.general.MusicCommand;
import io.rixa.bot.commands.cmds.general.PingCommand;
import io.rixa.bot.commands.cmds.general.QuoteCommand;
import io.rixa.bot.commands.cmds.general.RankCommand;
import io.rixa.bot.commands.cmds.general.RoleMemberList;
import io.rixa.bot.commands.cmds.general.ServerInfoCommand;
import io.rixa.bot.commands.cmds.general.UrbanDictionaryCommand;
import io.rixa.bot.commands.cmds.general.YoutubeCommand;
import io.rixa.bot.commands.cmds.moderator.BanCommand; import io.rixa.bot.commands.cmds.moderator.BanCommand;
import io.rixa.bot.commands.cmds.moderator.ClearCommand; import io.rixa.bot.commands.cmds.moderator.ClearCommand;
import io.rixa.bot.commands.cmds.moderator.MuteCommand; import io.rixa.bot.commands.cmds.moderator.MuteCommand;
import io.rixa.bot.commands.cmds.other.ShutdownCommand; import io.rixa.bot.commands.cmds.other.ShutdownCommand;
import io.rixa.bot.commands.handler.CommandHandler; import io.rixa.bot.commands.handler.CommandHandler;
import io.rixa.bot.commands.handler.CommandType;
import io.rixa.bot.commands.perms.RixaPermission; import io.rixa.bot.commands.perms.RixaPermission;
import io.rixa.bot.data.config.Configuration; import io.rixa.bot.data.config.Configuration;
import io.rixa.bot.data.storage.DatabaseAdapter; import io.rixa.bot.data.storage.DatabaseAdapter;
@ -23,6 +38,14 @@ import io.rixa.bot.guild.manager.GuildManager;
import io.rixa.bot.user.RixaUser; import io.rixa.bot.user.RixaUser;
import io.rixa.bot.user.manager.UserManager; import io.rixa.bot.user.manager.UserManager;
import io.rixa.bot.utils.FileUtils; import io.rixa.bot.utils.FileUtils;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.logging.Logger;
import javax.security.auth.login.LoginException;
import lombok.Getter; import lombok.Getter;
import net.dv8tion.jda.core.AccountType; import net.dv8tion.jda.core.AccountType;
import net.dv8tion.jda.core.JDA; import net.dv8tion.jda.core.JDA;
@ -31,148 +54,162 @@ import net.dv8tion.jda.core.OnlineStatus;
import net.dv8tion.jda.core.entities.Game; import net.dv8tion.jda.core.entities.Game;
import net.dv8tion.jda.core.entities.Game.GameType; import net.dv8tion.jda.core.entities.Game.GameType;
import net.dv8tion.jda.core.entities.Guild; import net.dv8tion.jda.core.entities.Guild;
import net.dv8tion.jda.core.exceptions.RateLimitedException;
import net.dv8tion.jda.core.hooks.AnnotatedEventManager; import net.dv8tion.jda.core.hooks.AnnotatedEventManager;
import javax.security.auth.login.LoginException;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.logging.Logger;
public class Rixa { public class Rixa {
private static Rixa instance; private static Rixa instance;
@Getter private static long timeUp;
private CommandHandler commandHandler; @Getter
@Getter private CommandHandler commandHandler;
private Configuration configuration; @Getter
@Getter private Configuration configuration;
private ObjectMapper objectMapper; @Getter
@Getter private ObjectMapper objectMapper;
private List<JDA> shardList; @Getter
@Getter private List<JDA> shardList;
private File defaultPath; @Getter
@Getter private File defaultPath;
private Logger logger; @Getter
private static long timeUp; private Logger logger;
private Rixa() { private Rixa() {
instance = this; instance = this;
logger = Logger.getLogger(Rixa.class.getCanonicalName()); logger = Logger.getLogger(Rixa.class.getCanonicalName());
objectMapper = new ObjectMapper(new YAMLFactory()); objectMapper = new ObjectMapper(new YAMLFactory());
defaultPath = new File("Rixa/"); defaultPath = new File("Rixa/");
commandHandler = new CommandHandler(); commandHandler = new CommandHandler();
shardList = new ArrayList<>(); shardList = new ArrayList<>();
defaultPath.mkdirs(); defaultPath.mkdirs();
loadConfiguration(); loadConfiguration();
registerCommands(); registerCommands();
loadJDA(); loadJDA();
} }
public long getTimeUp() { public static Rixa getInstance() {
return timeUp; return (instance == null) ? new Rixa() : instance;
} }
private void loadJDA() { public long getTimeUp() {
JDABuilder jda = new JDABuilder(AccountType.BOT) return timeUp;
.setToken(configuration.getToken()) }
.setGame(Game.of(GameType.WATCHING, configuration.getBotGame()))
.setEventManager(new AnnotatedEventManager())
.addEventListener(new ReadyListener(), new BotJoinListener(), new MessageListener(),
new UserListener())
.setAutoReconnect(true)
.setAudioEnabled(true)
.setEnableShutdownHook(false)
.setStatus(OnlineStatus.ONLINE);
for (int i = 0; i < configuration.getShards(); i++) {
try {
getLogger().info("Loading Shard #" + (i + 1) + "!");
getShardList().add(jda.useSharding(i, configuration.getShards()).buildBlocking());
getLogger().info("Shard #" + (i + 1) + " has been loaded");
Thread.sleep(5000);
} catch (InterruptedException | LoginException e) {
e.printStackTrace();
}
}
Runtime.getRuntime().addShutdownHook(new Thread(() ->
getShardList().forEach(jdaInstance -> {
UserManager.getInstance().getUserMap().values().forEach(RixaUser::save);
jdaInstance.getGuilds().forEach((Guild guild) -> {
System.out.println("Saving " + guild.getName() + ": " + guild.getId());
RixaGuild rixaGuild = GuildManager.getInstance().getGuild(guild);
rixaGuild.save();
});
jdaInstance.shutdown();
})));
timeUp = System.currentTimeMillis();
}
private void registerCommands() { private void loadJDA() {
this.commandHandler.registerCommands( JDABuilder jda = new JDABuilder(AccountType.BOT)
new AdviceCommand("advice", RixaPermission.NONE, "Receive advice from the great beyond..."), .setToken(configuration.getToken())
new BanCommand("ban", RixaPermission.BAN_MEMBER, "Ban a player from your server."), .setGame(Game.of(GameType.WATCHING, configuration.getBotGame()))
new ClearCommand("clear", RixaPermission.CLEAR_CHAT, "Clear Chat!", Arrays.asList("deleemessages", "cmessages")), .setEventManager(new AnnotatedEventManager())
new ConfigCommand("config", RixaPermission.ACCESS_CONFIG, "Access the config menu"), .addEventListener(new ReadyListener(), new BotJoinListener(), new MessageListener(),
new FeaturesCommand("features", RixaPermission.NONE, "List Rixa's official features!"), new UserListener())
new HelpCommand("help", RixaPermission.NONE, "Review commands and its usages!"), .setAutoReconnect(true)
new InfoCommand("info", RixaPermission.NONE, "Review information about a user or Rixa!"), .setAudioEnabled(true)
new MinecraftCommand("minecraft", RixaPermission.NONE, "See minecraft server info", Collections.singletonList("mc")), .setEnableShutdownHook(false)
new ModulesCommand("modules", RixaPermission.NONE, "List both enabled & disabled features of Rixa for this server!"), .setStatus(OnlineStatus.ONLINE);
new MusicCommand("music", RixaPermission.NONE, "Listen to music right from discord!"), for (int i = 0; i < configuration.getShards(); i++) {
new MuteCommand("mute", RixaPermission.MUTE, "Mute those pesky children!"), try {
new PingCommand("ping", RixaPermission.NONE, "Check Rixa's ping!"), getLogger().info("Loading Shard #" + (i + 1) + "!");
new PMCommand("pm", RixaPermission.PM_MESSAGE, "Private Message all users with a specific role!"), getShardList().add(jda.useSharding(i, configuration.getShards()).buildBlocking());
new QuoteCommand("quote", RixaPermission.NONE, "Receive a quote from some of the greatest authors!"), getLogger().info("Shard #" + (i + 1) + " has been loaded");
new RoleMemberList("listmembers", RixaPermission.NONE, "List all users with a specific role!"), Thread.sleep(5000);
new ServerInfoCommand("serverinfo", RixaPermission.NONE, "Review information about the server!"), } catch (InterruptedException | LoginException e) {
new ShutdownCommand("shutdown", RixaPermission.NONE, "Shutdown Rixa!"), e.printStackTrace();
new UrbanDictionaryCommand("ud", RixaPermission.NONE, "Look up urban definitions!"), }
new YoutubeCommand("youtube", RixaPermission.NONE, "Search for music on youtube!"),
new LeaderboardsCommand("leaderboards", RixaPermission.NONE, "Look at the levels leaderboards!"),
new RankCommand("rank", RixaPermission.NONE, "Check your rank!"));
} }
Runtime.getRuntime().addShutdownHook(new Thread(() ->
getShardList().forEach(jdaInstance -> {
UserManager.getInstance().getUserMap().values().forEach(RixaUser::save);
jdaInstance.getGuilds().forEach((Guild guild) -> {
System.out.println("Saving " + guild.getName() + ": " + guild.getId());
RixaGuild rixaGuild = GuildManager.getInstance().getGuild(guild);
rixaGuild.save();
});
jdaInstance.shutdown();
})));
timeUp = System.currentTimeMillis();
}
private void loadConfiguration() { private void registerCommands() {
try { this.commandHandler.registerCommands(
if (FileUtils.saveResource("config.yml", false)) { new AdviceCommand("advice", RixaPermission.NONE, "Receive advice from the great beyond...",
logger.info("Shutting down Rixa. Please edit configuration"); CommandType.USER),
System.exit(0); new FeaturesCommand("features", RixaPermission.NONE, "List Rixa's official features!",
} CommandType.USER),
File file = new File(defaultPath.getPath() + "/config.yml"); new HelpCommand("help", RixaPermission.NONE, "Review commands and its usages!",
configuration = objectMapper.readValue(file, Configuration.class); CommandType.USER),
logger.info("Configuration successfully loaded."); new InfoCommand("info", RixaPermission.NONE, "Review information about a user or Rixa!",
DatabaseAdapter.getInstance().check(); CommandType.USER),
Arrays.stream(DatabaseTables.values()).forEach(databaseTables -> { new MinecraftCommand("minecraft", RixaPermission.NONE, "See minecraft server info",
System.out.println("Checking database table (creating if needed): " + databaseTables.toString()); CommandType.USER, Collections.singletonList("mc")),
DatabaseAdapter.getInstance().get().update(databaseTables.getQuery()); new ModulesCommand("modules", RixaPermission.NONE,
System.out.println("Done checking " + databaseTables.toString()); "List both enabled & disabled features of Rixa for this server!", CommandType.USER),
}); new MusicCommand("music", RixaPermission.NONE, "Listen to music right from discord!",
} catch (IOException e) { CommandType.USER),
logger.severe("Could not properly load configuration file!."); new PingCommand("ping", RixaPermission.NONE, "Check Rixa's ping!", CommandType.USER),
e.printStackTrace(); new ServerInfoCommand("serverinfo", RixaPermission.NONE,
} "Review information about the server!", CommandType.USER),
} new QuoteCommand("quote", RixaPermission.NONE,
"Receive a quote from some of the greatest authors!", CommandType.USER),
new RankCommand("rank", RixaPermission.NONE, "Check your rank!", CommandType.USER),
new LeaderboardsCommand("leaderboards", RixaPermission.NONE,
"Look at the levels leaderboards!", CommandType.USER),
new YoutubeCommand("youtube", RixaPermission.NONE, "Search for music on youtube!",
CommandType.USER),
new UrbanDictionaryCommand("ud", RixaPermission.NONE, "Look up urban definitions!",
CommandType.USER),
public Guild getGuildById(String id) { new BanCommand("ban", RixaPermission.BAN_MEMBER, "Ban a player from your server.",
Guild guild = null; CommandType.STAFF),
for (JDA jda : Rixa.getInstance().getShardList()) { new ClearCommand("clear", RixaPermission.CLEAR_CHAT, "Clear Chat!", CommandType.STAFF,
if (jda.getGuilds().size() == 0 || jda.getGuildById(id) == null) continue; Arrays.asList("deleemessages", "cmessages")),
guild = jda.getGuildById(id); new ConfigCommand("config", RixaPermission.ACCESS_CONFIG, "Access the config menu",
break; CommandType.STAFF),
} new MuteCommand("mute", RixaPermission.MUTE, "Mute those pesky children!",
if (guild != null) return guild; CommandType.STAFF),
throw new NullPointerException("Guild not found."); new PMCommand("pm", RixaPermission.PM_MESSAGE,
} "Private Message all users with a specific role!", CommandType.STAFF),
new RoleMemberList("listmembers", RixaPermission.NONE,
"List all users with a specific role!", CommandType.STAFF),
new ShutdownCommand("shutdown", RixaPermission.NONE, "Shutdown Rixa!", CommandType.OWNER));
}
public static Rixa getInstance() { private void loadConfiguration() {
return (instance == null) ? new Rixa() : instance; try {
if (FileUtils.saveResource("config.yml", false)) {
logger.info("Shutting down Rixa. Please edit configuration");
System.exit(0);
}
File file = new File(defaultPath.getPath() + "/config.yml");
configuration = objectMapper.readValue(file, Configuration.class);
logger.info("Configuration successfully loaded.");
DatabaseAdapter.getInstance().check();
Arrays.stream(DatabaseTables.values()).forEach(databaseTables -> {
System.out
.println("Checking database table (creating if needed): " + databaseTables.toString());
DatabaseAdapter.getInstance().get().update(databaseTables.getQuery());
System.out.println("Done checking " + databaseTables.toString());
});
} catch (IOException e) {
logger.severe("Could not properly load configuration file!.");
e.printStackTrace();
} }
}
public void close() { public Guild getGuildById(String id) {
shardList.forEach(JDA::shutdown); Guild guild = null;
for (JDA jda : Rixa.getInstance().getShardList()) {
if (jda.getGuilds().size() == 0 || jda.getGuildById(id) == null) {
continue;
}
guild = jda.getGuildById(id);
break;
} }
if (guild != null) {
return guild;
}
throw new NullPointerException("Guild not found.");
}
public void close() {
shardList.forEach(JDA::shutdown);
}
} }

View File

@ -1,42 +1,59 @@
package io.rixa.bot.commands; package io.rixa.bot.commands;
import io.rixa.bot.commands.handler.CommandType;
import io.rixa.bot.commands.perms.RixaPermission; import io.rixa.bot.commands.perms.RixaPermission;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import lombok.Getter; import lombok.Getter;
import lombok.Setter; import lombok.Setter;
import net.dv8tion.jda.core.entities.Guild; import net.dv8tion.jda.core.entities.Guild;
import net.dv8tion.jda.core.entities.Member; import net.dv8tion.jda.core.entities.Member;
import net.dv8tion.jda.core.entities.TextChannel; import net.dv8tion.jda.core.entities.TextChannel;
import net.dv8tion.jda.core.events.message.guild.GuildMessageReceivedEvent;
import java.io.IOException;
import java.util.Collections;
import java.util.List;
public abstract class Command { public abstract class Command {
@Getter @Setter private String command, description; @Getter
@Getter @Setter private RixaPermission permission; @Setter
@Getter @Setter private List<String> aliases; private String command, description;
public Command(String command) { @Getter
this(command, RixaPermission.NONE, "Undefined", Collections.emptyList()); @Setter
} private RixaPermission permission;
@Getter
@Setter
private List<String> aliases;
@Getter
@Setter
private CommandType commandType;
public Command(String command, RixaPermission rixaPermission) { public Command(String command) {
this(command, rixaPermission, "Undefined", Collections.emptyList()); this(command, RixaPermission.NONE, "Undefined", CommandType.USER, Collections.emptyList());
} }
public Command(String command, RixaPermission rixaPermission, String description) { public Command(String command, RixaPermission rixaPermission) {
this(command, rixaPermission, description, Collections.emptyList()); this(command, rixaPermission, "Undefined", CommandType.USER, Collections.emptyList());
} }
public Command(String command, RixaPermission rixaPermission, String description, List<String> aliases) { public Command(String command, RixaPermission rixaPermission, String description) {
setCommand(command); this(command, rixaPermission, description, CommandType.USER, Collections.emptyList());
setPermission(rixaPermission); }
setDescription(description);
setAliases(aliases);
}
// public abstract void execute(GuildMessageReceivedEvent event); public Command(String command, RixaPermission rixaPermission, String description, CommandType commandType) {
this(command, rixaPermission, description, commandType, Collections.emptyList());
}
public abstract void execute(String commandLabel, Guild guild, Member member, TextChannel channel, String[] args) throws IOException; public Command(String command, RixaPermission rixaPermission, String description,
CommandType commandType, List<String> aliases) {
setCommand(command);
setPermission(rixaPermission);
setDescription(description);
setAliases(aliases);
this.commandType = commandType;
}
// public abstract void execute(GuildMessageReceivedEvent event);
public abstract void execute(String commandLabel, Guild guild, Member member, TextChannel channel,
String[] args) throws IOException;
} }

View File

@ -1,6 +1,7 @@
package io.rixa.bot.commands.cmds.admin; package io.rixa.bot.commands.cmds.admin;
import io.rixa.bot.commands.Command; import io.rixa.bot.commands.Command;
import io.rixa.bot.commands.handler.CommandType;
import io.rixa.bot.commands.perms.RixaPermission; import io.rixa.bot.commands.perms.RixaPermission;
import io.rixa.bot.guild.RixaGuild; import io.rixa.bot.guild.RixaGuild;
import io.rixa.bot.guild.manager.GuildManager; import io.rixa.bot.guild.manager.GuildManager;
@ -22,8 +23,8 @@ public class ConfigCommand extends Command {
private Pagination pagination; private Pagination pagination;
public ConfigCommand(String command, RixaPermission rixaPermission, String description) { public ConfigCommand(String command, RixaPermission rixaPermission, String description, CommandType commandType) {
super(command, rixaPermission, description); super(command, rixaPermission, description, commandType);
pagination = new Pagination(Arrays.asList( pagination = new Pagination(Arrays.asList(
"%pconfig set greetings ; Set channel where greeting messages are announced!", "%pconfig set greetings ; Set channel where greeting messages are announced!",

View File

@ -1,6 +1,7 @@
package io.rixa.bot.commands.cmds.admin; package io.rixa.bot.commands.cmds.admin;
import io.rixa.bot.commands.Command; import io.rixa.bot.commands.Command;
import io.rixa.bot.commands.handler.CommandType;
import io.rixa.bot.commands.perms.RixaPermission; import io.rixa.bot.commands.perms.RixaPermission;
import io.rixa.bot.utils.DiscordUtils; import io.rixa.bot.utils.DiscordUtils;
import io.rixa.bot.utils.MessageFactory; import io.rixa.bot.utils.MessageFactory;
@ -14,10 +15,8 @@ import net.dv8tion.jda.core.requests.ErrorResponse;
public class PMCommand extends Command { public class PMCommand extends Command {
@Getter private RixaPermission rixaPermission; public PMCommand(String command, RixaPermission rixaPermission, String description, CommandType commandType) {
public PMCommand(String command, RixaPermission rixaPermission, String description) { super(command, rixaPermission, description, commandType);
super(command, rixaPermission, description);
this.rixaPermission = rixaPermission;
} }
@Override @Override

View File

@ -1,6 +1,7 @@
package io.rixa.bot.commands.cmds.general; package io.rixa.bot.commands.cmds.general;
import io.rixa.bot.commands.Command; import io.rixa.bot.commands.Command;
import io.rixa.bot.commands.handler.CommandType;
import io.rixa.bot.commands.perms.RixaPermission; import io.rixa.bot.commands.perms.RixaPermission;
import io.rixa.bot.utils.MessageFactory; import io.rixa.bot.utils.MessageFactory;
import io.rixa.bot.utils.WebUtil; import io.rixa.bot.utils.WebUtil;
@ -14,8 +15,8 @@ import java.io.IOException;
public class AdviceCommand extends Command { public class AdviceCommand extends Command {
public AdviceCommand(String command, RixaPermission rixaPermission, String description) { public AdviceCommand(String command, RixaPermission rixaPermission, String description, CommandType commandType) {
super(command, rixaPermission, description); super(command, rixaPermission, description, commandType);
} }
@Override @Override

View File

@ -1,6 +1,7 @@
package io.rixa.bot.commands.cmds.general; package io.rixa.bot.commands.cmds.general;
import io.rixa.bot.commands.Command; import io.rixa.bot.commands.Command;
import io.rixa.bot.commands.handler.CommandType;
import io.rixa.bot.commands.perms.RixaPermission; import io.rixa.bot.commands.perms.RixaPermission;
import io.rixa.bot.guild.RixaGuild; import io.rixa.bot.guild.RixaGuild;
import io.rixa.bot.guild.manager.GuildManager; import io.rixa.bot.guild.manager.GuildManager;
@ -16,8 +17,8 @@ public class FeaturesCommand extends Command {
"Role Management", "Fun Commands", "Custom Commands", "Games", "& more." "Role Management", "Fun Commands", "Custom Commands", "Games", "& more."
}; };
public FeaturesCommand(String command, RixaPermission rixaPermission, String description) { public FeaturesCommand(String command, RixaPermission rixaPermission, String description, CommandType commandType) {
super(command, rixaPermission, description); super(command, rixaPermission, description, commandType);
} }
@Override @Override

View File

@ -1,6 +1,7 @@
package io.rixa.bot.commands.cmds.general; package io.rixa.bot.commands.cmds.general;
import io.rixa.bot.commands.Command; import io.rixa.bot.commands.Command;
import io.rixa.bot.commands.handler.CommandType;
import io.rixa.bot.commands.perms.RixaPermission; import io.rixa.bot.commands.perms.RixaPermission;
import io.rixa.bot.utils.MessageFactory; import io.rixa.bot.utils.MessageFactory;
import net.dv8tion.jda.core.EmbedBuilder; import net.dv8tion.jda.core.EmbedBuilder;
@ -14,8 +15,8 @@ import net.dv8tion.jda.core.exceptions.PermissionException;
public class HelpCommand extends Command { public class HelpCommand extends Command {
public HelpCommand(String command, RixaPermission rixaPermission, String description) { public HelpCommand(String command, RixaPermission rixaPermission, String description, CommandType commandType) {
super(command, rixaPermission, description); super(command, rixaPermission, description, commandType);
} }
@Override @Override

View File

@ -2,6 +2,7 @@ package io.rixa.bot.commands.cmds.general;
import io.rixa.bot.Rixa; import io.rixa.bot.Rixa;
import io.rixa.bot.commands.Command; import io.rixa.bot.commands.Command;
import io.rixa.bot.commands.handler.CommandType;
import io.rixa.bot.commands.perms.RixaPermission; import io.rixa.bot.commands.perms.RixaPermission;
import io.rixa.bot.utils.DiscordUtils; import io.rixa.bot.utils.DiscordUtils;
import io.rixa.bot.utils.MessageFactory; import io.rixa.bot.utils.MessageFactory;
@ -20,8 +21,8 @@ import java.util.concurrent.TimeUnit;
public class InfoCommand extends Command { public class InfoCommand extends Command {
public InfoCommand(String command, RixaPermission rixaPermission, String description) { public InfoCommand(String command, RixaPermission rixaPermission, String description, CommandType commandType) {
super(command, rixaPermission, description); super(command, rixaPermission, description, commandType);
} }
@Override @Override

View File

@ -1,6 +1,7 @@
package io.rixa.bot.commands.cmds.general; package io.rixa.bot.commands.cmds.general;
import io.rixa.bot.commands.Command; import io.rixa.bot.commands.Command;
import io.rixa.bot.commands.handler.CommandType;
import io.rixa.bot.commands.perms.RixaPermission; import io.rixa.bot.commands.perms.RixaPermission;
import io.rixa.bot.guild.RixaGuild; import io.rixa.bot.guild.RixaGuild;
import io.rixa.bot.guild.manager.GuildManager; import io.rixa.bot.guild.manager.GuildManager;
@ -20,8 +21,8 @@ import java.util.List;
public class LeaderboardsCommand extends Command { public class LeaderboardsCommand extends Command {
public LeaderboardsCommand(String command, RixaPermission rixaPermission, String description) { public LeaderboardsCommand(String command, RixaPermission rixaPermission, String description, CommandType commandType {
super(command, rixaPermission, description); super(command, rixaPermission, description, commandType);
} }
@Override @Override

View File

@ -1,6 +1,7 @@
package io.rixa.bot.commands.cmds.general; package io.rixa.bot.commands.cmds.general;
import io.rixa.bot.commands.Command; import io.rixa.bot.commands.Command;
import io.rixa.bot.commands.handler.CommandType;
import io.rixa.bot.commands.perms.RixaPermission; import io.rixa.bot.commands.perms.RixaPermission;
import io.rixa.bot.utils.MessageFactory; import io.rixa.bot.utils.MessageFactory;
import io.rixa.bot.utils.WebUtil; import io.rixa.bot.utils.WebUtil;
@ -16,8 +17,8 @@ import java.util.List;
public class MinecraftCommand extends Command { public class MinecraftCommand extends Command {
public MinecraftCommand(String command, RixaPermission rixaPermission, String description, List<String>aliases) { public MinecraftCommand(String command, RixaPermission rixaPermission, String description, CommandType commandType, List<String>aliases) {
super(command, rixaPermission, description, aliases); super(command, rixaPermission, description, commandType, aliases);
} }
@Override @Override

View File

@ -1,6 +1,7 @@
package io.rixa.bot.commands.cmds.general; package io.rixa.bot.commands.cmds.general;
import io.rixa.bot.commands.Command; import io.rixa.bot.commands.Command;
import io.rixa.bot.commands.handler.CommandType;
import io.rixa.bot.commands.perms.RixaPermission; import io.rixa.bot.commands.perms.RixaPermission;
import io.rixa.bot.guild.RixaGuild; import io.rixa.bot.guild.RixaGuild;
import io.rixa.bot.guild.manager.GuildManager; import io.rixa.bot.guild.manager.GuildManager;
@ -15,8 +16,8 @@ import java.util.List;
public class ModulesCommand extends Command { public class ModulesCommand extends Command {
public ModulesCommand(String command, RixaPermission rixaPermission, String description) { public ModulesCommand(String command, RixaPermission rixaPermission, String description, CommandType commandType) {
super(command, rixaPermission, description); super(command, rixaPermission, description, commandType);
} }
@Override @Override

View File

@ -17,6 +17,7 @@ import com.sedmelluq.discord.lavaplayer.track.AudioPlaylist;
import com.sedmelluq.discord.lavaplayer.track.AudioTrack; import com.sedmelluq.discord.lavaplayer.track.AudioTrack;
import io.rixa.bot.apis.YoutubeSearch; import io.rixa.bot.apis.YoutubeSearch;
import io.rixa.bot.commands.Command; import io.rixa.bot.commands.Command;
import io.rixa.bot.commands.handler.CommandType;
import io.rixa.bot.commands.perms.RixaPermission; import io.rixa.bot.commands.perms.RixaPermission;
import io.rixa.bot.guild.RixaGuild; import io.rixa.bot.guild.RixaGuild;
import io.rixa.bot.guild.manager.GuildManager; import io.rixa.bot.guild.manager.GuildManager;
@ -43,8 +44,8 @@ public class MusicCommand extends Command {
private final int DEFAULT_VOLUME = 35; private final int DEFAULT_VOLUME = 35;
private final AudioPlayerManager playerManager; private final AudioPlayerManager playerManager;
public MusicCommand(String command, RixaPermission rixaPermission, String description) { public MusicCommand(String command, RixaPermission rixaPermission, String description, CommandType commandType) {
super(command, rixaPermission, description); super(command, rixaPermission, description, commandType);
this.playerManager = new DefaultAudioPlayerManager(); this.playerManager = new DefaultAudioPlayerManager();
this.playerManager.registerSourceManager(new YoutubeAudioSourceManager()); this.playerManager.registerSourceManager(new YoutubeAudioSourceManager());
this.playerManager.registerSourceManager(new SoundCloudAudioSourceManager()); this.playerManager.registerSourceManager(new SoundCloudAudioSourceManager());

View File

@ -1,6 +1,7 @@
package io.rixa.bot.commands.cmds.general; package io.rixa.bot.commands.cmds.general;
import io.rixa.bot.commands.Command; import io.rixa.bot.commands.Command;
import io.rixa.bot.commands.handler.CommandType;
import io.rixa.bot.commands.perms.RixaPermission; import io.rixa.bot.commands.perms.RixaPermission;
import io.rixa.bot.utils.MessageFactory; import io.rixa.bot.utils.MessageFactory;
import net.dv8tion.jda.core.entities.Guild; import net.dv8tion.jda.core.entities.Guild;
@ -10,8 +11,8 @@ import net.dv8tion.jda.core.events.message.guild.GuildMessageReceivedEvent;
public class PingCommand extends Command { public class PingCommand extends Command {
public PingCommand(String command, RixaPermission rixaPermission, String description) { public PingCommand(String command, RixaPermission rixaPermission, String description, CommandType commandType) {
super(command, rixaPermission, description); super(command, rixaPermission, description, commandType);
} }
@Override @Override

View File

@ -1,6 +1,7 @@
package io.rixa.bot.commands.cmds.general; package io.rixa.bot.commands.cmds.general;
import io.rixa.bot.commands.Command; import io.rixa.bot.commands.Command;
import io.rixa.bot.commands.handler.CommandType;
import io.rixa.bot.commands.perms.RixaPermission; import io.rixa.bot.commands.perms.RixaPermission;
import io.rixa.bot.utils.MessageFactory; import io.rixa.bot.utils.MessageFactory;
import io.rixa.bot.utils.WebUtil; import io.rixa.bot.utils.WebUtil;
@ -14,8 +15,8 @@ import java.io.IOException;
public class QuoteCommand extends Command { public class QuoteCommand extends Command {
public QuoteCommand(String command, RixaPermission rixaPermission, String description) { public QuoteCommand(String command, RixaPermission rixaPermission, String description, CommandType commandType) {
super(command, rixaPermission, description); super(command, rixaPermission, description, commandType);
} }
@Override @Override

View File

@ -1,32 +1,25 @@
package io.rixa.bot.commands.cmds.general; package io.rixa.bot.commands.cmds.general;
import io.rixa.bot.Rixa;
import io.rixa.bot.commands.Command; import io.rixa.bot.commands.Command;
import io.rixa.bot.commands.handler.CommandType;
import io.rixa.bot.commands.perms.RixaPermission; import io.rixa.bot.commands.perms.RixaPermission;
import io.rixa.bot.data.storage.DatabaseAdapter; import io.rixa.bot.data.storage.DatabaseAdapter;
import io.rixa.bot.guild.RixaGuild; import io.rixa.bot.guild.RixaGuild;
import io.rixa.bot.guild.manager.GuildManager; import io.rixa.bot.guild.manager.GuildManager;
import io.rixa.bot.guild.modules.module.LevelsModule;
import io.rixa.bot.pagination.ObjectPagination;
import io.rixa.bot.user.RixaUser; import io.rixa.bot.user.RixaUser;
import io.rixa.bot.user.manager.UserManager; import io.rixa.bot.user.manager.UserManager;
import io.rixa.bot.utils.DiscordUtils; import io.rixa.bot.utils.DiscordUtils;
import io.rixa.bot.utils.MessageFactory; import io.rixa.bot.utils.MessageFactory;
import net.dv8tion.jda.core.MessageBuilder; import java.util.List;
import net.dv8tion.jda.core.entities.Guild; import net.dv8tion.jda.core.entities.Guild;
import net.dv8tion.jda.core.entities.Member; import net.dv8tion.jda.core.entities.Member;
import net.dv8tion.jda.core.entities.TextChannel; import net.dv8tion.jda.core.entities.TextChannel;
import net.dv8tion.jda.core.entities.User; import net.dv8tion.jda.core.entities.User;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Collections;
import java.util.List;
public class RankCommand extends Command { public class RankCommand extends Command {
public RankCommand(String command, RixaPermission rixaPermission, String description) { public RankCommand(String command, RixaPermission rixaPermission, String description, CommandType commandType) {
super(command, rixaPermission, description); super(command, rixaPermission, description, commandType);
} }
@Override @Override

View File

@ -1,6 +1,7 @@
package io.rixa.bot.commands.cmds.general; package io.rixa.bot.commands.cmds.general;
import io.rixa.bot.commands.Command; import io.rixa.bot.commands.Command;
import io.rixa.bot.commands.handler.CommandType;
import io.rixa.bot.commands.perms.RixaPermission; import io.rixa.bot.commands.perms.RixaPermission;
import io.rixa.bot.utils.DiscordUtils; import io.rixa.bot.utils.DiscordUtils;
import io.rixa.bot.utils.MessageFactory; import io.rixa.bot.utils.MessageFactory;
@ -14,8 +15,8 @@ import java.util.List;
public class RoleMemberList extends Command { public class RoleMemberList extends Command {
public RoleMemberList(String command, RixaPermission rixaPermission, String description) { public RoleMemberList(String command, RixaPermission rixaPermission, String description, CommandType commandType) {
super(command, rixaPermission, description); super(command, rixaPermission, description, commandType);
} }
@Override @Override

View File

@ -1,6 +1,7 @@
package io.rixa.bot.commands.cmds.general; package io.rixa.bot.commands.cmds.general;
import io.rixa.bot.commands.Command; import io.rixa.bot.commands.Command;
import io.rixa.bot.commands.handler.CommandType;
import io.rixa.bot.commands.perms.RixaPermission; import io.rixa.bot.commands.perms.RixaPermission;
import io.rixa.bot.guild.RixaGuild; import io.rixa.bot.guild.RixaGuild;
import io.rixa.bot.guild.manager.GuildManager; import io.rixa.bot.guild.manager.GuildManager;
@ -15,8 +16,8 @@ import java.time.format.DateTimeFormatter;
public class ServerInfoCommand extends Command { public class ServerInfoCommand extends Command {
public ServerInfoCommand(String command, RixaPermission rixaPermission, String description) { public ServerInfoCommand(String command, RixaPermission rixaPermission, String description, CommandType commandType) {
super(command, rixaPermission, description); super(command, rixaPermission, description, commandType);
} }
@Override @Override

View File

@ -2,6 +2,7 @@ package io.rixa.bot.commands.cmds.general;
import io.rixa.bot.apis.UrbanDictionary; import io.rixa.bot.apis.UrbanDictionary;
import io.rixa.bot.commands.Command; import io.rixa.bot.commands.Command;
import io.rixa.bot.commands.handler.CommandType;
import io.rixa.bot.commands.perms.RixaPermission; import io.rixa.bot.commands.perms.RixaPermission;
import io.rixa.bot.utils.MessageFactory; import io.rixa.bot.utils.MessageFactory;
import net.dv8tion.jda.core.MessageBuilder; import net.dv8tion.jda.core.MessageBuilder;
@ -15,8 +16,8 @@ import java.net.URLEncoder;
public class UrbanDictionaryCommand extends Command { public class UrbanDictionaryCommand extends Command {
public UrbanDictionaryCommand(String command, RixaPermission rixaPermission, String description) { public UrbanDictionaryCommand(String command, RixaPermission rixaPermission, String description, CommandType commandType) {
super(command, rixaPermission, description); super(command, rixaPermission, description, commandType);
} }
@Override @Override

View File

@ -2,6 +2,7 @@ package io.rixa.bot.commands.cmds.general;
import io.rixa.bot.apis.YoutubeSearch; import io.rixa.bot.apis.YoutubeSearch;
import io.rixa.bot.commands.Command; import io.rixa.bot.commands.Command;
import io.rixa.bot.commands.handler.CommandType;
import io.rixa.bot.commands.perms.RixaPermission; import io.rixa.bot.commands.perms.RixaPermission;
import io.rixa.bot.utils.MessageFactory; import io.rixa.bot.utils.MessageFactory;
import net.dv8tion.jda.core.entities.Guild; import net.dv8tion.jda.core.entities.Guild;
@ -12,8 +13,8 @@ import java.io.IOException;
public class YoutubeCommand extends Command { public class YoutubeCommand extends Command {
public YoutubeCommand(String command, RixaPermission rixaPermission, String description) { public YoutubeCommand(String command, RixaPermission rixaPermission, String description, CommandType commandType) {
super(command, rixaPermission, description); super(command, rixaPermission, description, commandType);
} }
@Override @Override

View File

@ -1,24 +1,21 @@
package io.rixa.bot.commands.cmds.moderator; package io.rixa.bot.commands.cmds.moderator;
import io.rixa.bot.Rixa;
import io.rixa.bot.commands.Command; import io.rixa.bot.commands.Command;
import io.rixa.bot.commands.handler.CommandType;
import io.rixa.bot.commands.perms.RixaPermission; import io.rixa.bot.commands.perms.RixaPermission;
import io.rixa.bot.guild.RixaGuild; import io.rixa.bot.guild.RixaGuild;
import io.rixa.bot.guild.manager.GuildManager; import io.rixa.bot.guild.manager.GuildManager;
import io.rixa.bot.utils.MessageFactory; import io.rixa.bot.utils.MessageFactory;
import jdk.nashorn.internal.objects.annotations.Getter;
import net.dv8tion.jda.core.entities.Guild; import net.dv8tion.jda.core.entities.Guild;
import net.dv8tion.jda.core.entities.Member; import net.dv8tion.jda.core.entities.Member;
import net.dv8tion.jda.core.entities.TextChannel; import net.dv8tion.jda.core.entities.TextChannel;
import java.util.List;
public class BanCommand extends Command { public class BanCommand extends Command {
RixaPermission permission; RixaPermission permission;
public BanCommand(String command, RixaPermission permission, String descriptopn) { public BanCommand(String command, RixaPermission permission, String description, CommandType commandType) {
super(command, permission, descriptopn); super(command, permission, description, commandType);
this.permission = permission; this.permission = permission;
} }
@ -29,7 +26,7 @@ public class BanCommand extends Command {
MessageFactory.create( MessageFactory.create(
String.format("Incorrect Usage! Example: `%s%s @User`", rixaGuild.getSettings().getPrefix(), String.format("Incorrect Usage! Example: `%s%s @User`", rixaGuild.getSettings().getPrefix(),
command)).setColor(member.getColor()).queue(channel); command)).setColor(member.getColor()).queue(channel);
return;
} }
} }

View File

@ -2,6 +2,7 @@ package io.rixa.bot.commands.cmds.moderator;
import io.rixa.bot.Rixa; import io.rixa.bot.Rixa;
import io.rixa.bot.commands.Command; import io.rixa.bot.commands.Command;
import io.rixa.bot.commands.handler.CommandType;
import io.rixa.bot.commands.perms.RixaPermission; import io.rixa.bot.commands.perms.RixaPermission;
import io.rixa.bot.guild.RixaGuild; import io.rixa.bot.guild.RixaGuild;
import io.rixa.bot.guild.manager.GuildManager; import io.rixa.bot.guild.manager.GuildManager;
@ -25,9 +26,9 @@ public class ClearCommand extends Command {
@Getter @Getter
private RixaPermission rixaPermission; private RixaPermission rixaPermission;
public ClearCommand(String command, RixaPermission rixaPermission, String description, public ClearCommand(String command, RixaPermission rixaPermission, String description, CommandType commandType,
List<String> aliases) { List<String> aliases) {
super(command, rixaPermission, description, aliases); super(command, rixaPermission, description, commandType, aliases);
this.rixaPermission = rixaPermission; this.rixaPermission = rixaPermission;
} }

View File

@ -3,6 +3,7 @@ package io.rixa.bot.commands.cmds.moderator;
import com.dumptruckman.taskmin.Task; import com.dumptruckman.taskmin.Task;
import com.dumptruckman.taskmin.TaskManager; import com.dumptruckman.taskmin.TaskManager;
import io.rixa.bot.commands.Command; import io.rixa.bot.commands.Command;
import io.rixa.bot.commands.handler.CommandType;
import io.rixa.bot.commands.perms.RixaPermission; import io.rixa.bot.commands.perms.RixaPermission;
import io.rixa.bot.guild.RixaGuild; import io.rixa.bot.guild.RixaGuild;
import io.rixa.bot.guild.manager.GuildManager; import io.rixa.bot.guild.manager.GuildManager;
@ -13,17 +14,15 @@ import java.time.LocalDateTime;
import java.time.temporal.ChronoUnit; import java.time.temporal.ChronoUnit;
import net.dv8tion.jda.core.entities.Guild; import net.dv8tion.jda.core.entities.Guild;
import net.dv8tion.jda.core.entities.Member; import net.dv8tion.jda.core.entities.Member;
import net.dv8tion.jda.core.entities.Role;
import net.dv8tion.jda.core.entities.TextChannel; import net.dv8tion.jda.core.entities.TextChannel;
import net.dv8tion.jda.core.entities.User; import net.dv8tion.jda.core.entities.User;
public class MuteCommand extends Command { public class MuteCommand extends Command {
private RixaPermission rixaPermission;
private TaskManager taskManager; private TaskManager taskManager;
public MuteCommand(String command, RixaPermission rixaPermission, String description) { public MuteCommand(String command, RixaPermission rixaPermission, String description, CommandType commandType) {
super(command, rixaPermission, description); super(command, rixaPermission, description, commandType);
this.rixaPermission = rixaPermission;
this.taskManager = TaskManager.createBasicTaskManager(); this.taskManager = TaskManager.createBasicTaskManager();
} }
@ -31,22 +30,34 @@ public class MuteCommand extends Command {
public void execute(String commandLabel, Guild guild, Member member, TextChannel channel, public void execute(String commandLabel, Guild guild, Member member, TextChannel channel,
String[] args) { String[] args) {
RixaGuild rixaGuild = GuildManager.getInstance().getGuild(guild); RixaGuild rixaGuild = GuildManager.getInstance().getGuild(guild);
if (args.length < 2) {
MessageFactory.create(String.format
("Incorrect Usage! Example: `%s%s <user> <timeFrame> [reason]`",
rixaGuild.getSettings().getPrefix(), commandLabel))
.setColor(member.getColor())
.queue(channel);
return;
}
String argumentString = String.join(" ", args); String argumentString = String.join(" ", args);
Object[] objArray = DiscordUtils.memberSearchArray(guild, argumentString, false); Object[] objArray = DiscordUtils.memberSearchArray(guild, argumentString, false);
if (objArray.length == 0) { if (objArray.length == 0) {
MessageFactory.create("Could not find member!").setColor(member.getColor()).queue(channel); MessageFactory.create("Could not find member!").setColor(member.getColor()).queue(channel);
return; return;
} }
Member targetMember = (Member) objArray[1];
String targetMemberName = String.valueOf(objArray[0]); String targetMemberName = String.valueOf(objArray[0]);
Member targetMember = (Member) objArray[1];
if (targetMember == null) { if (targetMember == null) {
MessageFactory.create("Could not find member!").setColor(member.getColor()).queue(channel); MessageFactory.create("Could not find member!").setColor(member.getColor()).queue(channel);
return; return;
} }
argumentString = argumentString.replaceFirst(targetMemberName, "").trim(); argumentString = argumentString.replaceFirst(targetMemberName, "").trim();
args = argumentString.split(" "); args = argumentString.split(" ");
if (args[0].length() == 0) { if (args.length == 0) {
// Incorrect Usage MessageFactory.create(String.format
("Incorrect Usage! Example: `%s%s <user> <timeFrame> [reason]`",
rixaGuild.getSettings().getPrefix(), commandLabel))
.setColor(member.getColor())
.queue(channel);
return; return;
} }
String time = args[0].trim(); String time = args[0].trim();
@ -61,13 +72,16 @@ public class MuteCommand extends Command {
long milliseconds = Utils.toMilliSec(time); long milliseconds = Utils.toMilliSec(time);
String reason = argumentString; String reason = argumentString;
guild.getController().addRolesToMember(targetMember, rixaGuild.getSettings().getMuteRole())
Role muteRole = rixaGuild.getSettings().getMuteRole() == null
? DiscordUtils.createMuteRole(guild) : rixaGuild.getSettings().getMuteRole();
guild.getController().addRolesToMember(targetMember, muteRole)
.queue(onSuccess -> MessageFactory.create(String.format( .queue(onSuccess -> MessageFactory.create(String.format(
"Temporarily muted %s for %s\n Reason: %s", "Temporarily muted %s for %s\n Reason: %s",
this.getUser(targetMember.getUser()), this.getUser(targetMember.getUser()),
this.getTime(milliseconds), this.getTime(milliseconds),
reason)) reason))
.setColor(member.getColor()).setTimestamp().queue(channel), .setColor(member.getColor()).setTimestamp().queue(channel),
onFailure -> MessageFactory.create( onFailure -> MessageFactory.create(
"Could not successfully mute user `" + targetMember.getUser().getName() + "#" "Could not successfully mute user `" + targetMember.getUser().getName() + "#"
+ targetMember.getUser() + targetMember.getUser()
@ -89,7 +103,8 @@ public class MuteCommand extends Command {
days = hours / 24; days = hours / 24;
minutes = minutes % 60; minutes = minutes % 60;
return(String.format("%s days, %s hours, %s minutes, %s seconds", days, hours, minutes, seconds)); return (String
.format("%s days, %s hours, %s minutes, %s seconds", days, hours, minutes, seconds));
} }
private String getUser(User member) { private String getUser(User member) {

View File

@ -2,6 +2,7 @@ package io.rixa.bot.commands.cmds.other;
import io.rixa.bot.Rixa; import io.rixa.bot.Rixa;
import io.rixa.bot.commands.Command; import io.rixa.bot.commands.Command;
import io.rixa.bot.commands.handler.CommandType;
import io.rixa.bot.commands.perms.RixaPermission; import io.rixa.bot.commands.perms.RixaPermission;
import io.rixa.bot.guild.RixaGuild; import io.rixa.bot.guild.RixaGuild;
import io.rixa.bot.guild.manager.GuildManager; import io.rixa.bot.guild.manager.GuildManager;
@ -13,8 +14,8 @@ import net.dv8tion.jda.core.events.message.guild.GuildMessageReceivedEvent;
public class ShutdownCommand extends Command { public class ShutdownCommand extends Command {
public ShutdownCommand(String command, RixaPermission rixaPermission, String description) { public ShutdownCommand(String command, RixaPermission rixaPermission, String description, CommandType commandType) {
super(command, rixaPermission, description); super(command, rixaPermission, description, commandType);
} }
@Override @Override

View File

@ -0,0 +1,8 @@
package io.rixa.bot.commands.exceptions;
public class ReactNotFoundException extends Exception {
public ReactNotFoundException(String message) {
super(message);
}
}

View File

@ -31,4 +31,8 @@ public class CommandHandler {
} }
throw new CommandNotFoundException("Could not find command"); throw new CommandNotFoundException("Could not find command");
} }
public Map<String, Command> getAllCommands() {
return this.commandMap;
}
} }

View File

@ -0,0 +1,8 @@
package io.rixa.bot.commands.handler;
public enum CommandType {
STAFF,
USER,
OWNER;
}

View File

@ -15,10 +15,16 @@ import java.io.IOException;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
import net.dv8tion.jda.core.entities.TextChannel; import net.dv8tion.jda.core.entities.TextChannel;
import net.dv8tion.jda.core.events.message.guild.GuildMessageReceivedEvent; import net.dv8tion.jda.core.events.message.guild.GuildMessageReceivedEvent;
import net.dv8tion.jda.core.events.message.guild.react.GuildMessageReactionAddEvent;
import net.dv8tion.jda.core.hooks.SubscribeEvent; import net.dv8tion.jda.core.hooks.SubscribeEvent;
public class MessageListener { public class MessageListener {
@SubscribeEvent
public void onReactionAdded(GuildMessageReactionAddEvent event) {
if (event.getUser().isBot()) return;
}
@SubscribeEvent @SubscribeEvent
public void onMessage(GuildMessageReceivedEvent event) { public void onMessage(GuildMessageReceivedEvent event) {
if (event.getAuthor().isBot()) { if (event.getAuthor().isBot()) {
@ -26,7 +32,8 @@ public class MessageListener {
} }
String message = event.getMessage().getContentRaw().trim(); String message = event.getMessage().getContentRaw().trim();
RixaGuild rixaGuild = GuildManager.getInstance().getGuild(event.getGuild()); RixaGuild rixaGuild = GuildManager.getInstance().getGuild(event.getGuild());
if (event.getMessage().getContentDisplay().startsWith("@" + event.getGuild().getSelfMember().getEffectiveName())) { if (event.getMessage().getContentDisplay()
.startsWith("@" + event.getGuild().getSelfMember().getEffectiveName())) {
String chat = event.getMessage().getContentDisplay(); String chat = event.getMessage().getContentDisplay();
chatter(rixaGuild, event.getChannel(), chatter(rixaGuild, event.getChannel(),
chat.replace("@" + event.getGuild().getSelfMember().getEffectiveName(), "")); chat.replace("@" + event.getGuild().getSelfMember().getEffectiveName(), ""));
@ -62,7 +69,8 @@ public class MessageListener {
//command.execute(event); //command.execute(event);
event.getMessage().delete().queueAfter(3, TimeUnit.SECONDS); event.getMessage().delete().queueAfter(3, TimeUnit.SECONDS);
RixaGuild rixaGuild = GuildManager.getInstance().getGuild(event.getGuild()); RixaGuild rixaGuild = GuildManager.getInstance().getGuild(event.getGuild());
if (command.getPermission() != null && command.getPermission() != RixaPermission.NONE && if (!event.getGuild().getOwner().getUser().getId().equalsIgnoreCase(event.getAuthor().getId())
&& command.getPermission() != null && command.getPermission() != RixaPermission.NONE &&
(!rixaGuild.hasPermission(event.getMember().getUser(), command.getPermission())) (!rixaGuild.hasPermission(event.getMember().getUser(), command.getPermission()))
&& (!Rixa.getInstance().getConfiguration().isBotAdmin(event.getAuthor().getId()))) { && (!Rixa.getInstance().getConfiguration().isBotAdmin(event.getAuthor().getId()))) {
MessageFactory.create("Sorry! You do not have permission for this command!") MessageFactory.create("Sorry! You do not have permission for this command!")

View File

@ -0,0 +1,10 @@
package io.rixa.bot.reactions;
import net.dv8tion.jda.core.events.message.guild.react.GuildMessageReactionAddEvent;
public interface React {
void onReact(GuildMessageReactionAddEvent event);
String getName();
}

View File

@ -0,0 +1,37 @@
package io.rixa.bot.reactions;
import io.rixa.bot.commands.Command;
import io.rixa.bot.commands.exceptions.CommandNotFoundException;
import io.rixa.bot.commands.exceptions.ReactNotFoundException;
import java.util.HashMap;
import java.util.Map;
public class ReactManager {
private Map<String, React> reactMap = new HashMap<>();
private void registerReact(React react) {
if (this.reactMap.containsKey(react.getName())) {
return;
}
this.reactMap.put(react.getName(), react);
}
public void registerReact(React... reacts) {
for (React react : reacts) {
registerReact(react);
}
}
public React getReaction(String react) throws ReactNotFoundException {
if (reactMap.containsKey(react.toLowerCase())) {
return reactMap.get(react.toLowerCase());
}
throw new ReactNotFoundException("Could not find reaction");
}
public Map<String, React> getAllReactions() {
return this.reactMap;
}
}

View File

@ -0,0 +1,118 @@
package io.rixa.bot.reactions.react;
import io.rixa.bot.Rixa;
import io.rixa.bot.commands.handler.CommandHandler;
import io.rixa.bot.guild.RixaGuild;
import io.rixa.bot.guild.manager.GuildManager;
import io.rixa.bot.reactions.React;
import net.dv8tion.jda.core.EmbedBuilder;
import net.dv8tion.jda.core.entities.Message;
import net.dv8tion.jda.core.entities.MessageEmbed;
import net.dv8tion.jda.core.events.message.guild.react.GuildMessageReactionAddEvent;
import net.dv8tion.jda.core.exceptions.ErrorResponseException;
import net.dv8tion.jda.core.hooks.SubscribeEvent;
public class HelpReaction implements React {
@Override
@SubscribeEvent
public void onReact(GuildMessageReactionAddEvent event) {
if (event.getUser().getId().equalsIgnoreCase(event.getJDA().getSelfUser().getId())) {
return;
}
Message message = event.getChannel().getMessageById(event.getMessageId()).complete();
MessageEmbed messageEmbed = message.getEmbeds().get(0);
if (!messageEmbed.getTitle().contains(": ")) {
return;
}
String title = messageEmbed.getTitle().split(": ")[1];
RixaGuild rixaGuild = GuildManager.getInstance().getGuild(event.getJDA().getGuildById(title));
if (rixaGuild == null) {
return;
}
String prefix = rixaGuild.getSettings().getPrefix();
EmbedBuilder embedBuilder;
try {
switch (event.getReaction().getReactionEmote().getName()) {
case "\uD83D\uDDD1":// waste bin
if (message.getAuthor().getId().equalsIgnoreCase(event.getJDA().getSelfUser().getId())) {
message.delete().complete();
}
break;
case "\u0031\u20E3":// one emoji
embedBuilder = new EmbedBuilder();
String stringBuilder = "\u2753" +
" **General Commands Help**" +
"\n" +
"Click a number below for information about other commands.";
embedBuilder.setTitle(String.format("Help: %s", title));
embedBuilder.setDescription(stringBuilder);
Rixa.getInstance().getCommandHandler().getAllCommands().values()
.forEach(cmd -> embedBuilder.addField(prefix + cmd.getCommand(),
cmd.getDescription(), false));
message.editMessage(embedBuilder.build()).queue();
break;
/*case "\u0032\u20E3": // two emoji
embedBuilder = new EmbedBuilder();
stringBuilder = "\u2753" +
" **Staff Commands Help**" +
"\n" +
"Click a number below for information about other commands.";
embedBuilder.setTitle(String.format("Help: %s", title));
embedBuilder.setDescription(stringBuilder);
Rixa.getInstance().getCommandHandler().getAllCommands().values().stream()
.filter(cmd -> cmd.getAnnotation().type() == CommandType.ADMIN
|| cmd.getAnnotation().type() == CommandType.MOD)
.forEach(cmd -> embedBuilder.addField(prefix + cmd.getAnnotation().mainCommand(),
cmd.getAnnotation().description(), false));
message.editMessage(embedBuilder.build()).queue();
break;*/
case "\u0033\u20E3": // three emoji
embedBuilder = new EmbedBuilder();
stringBuilder = "\u2753" +
" **Music Commands Help**" +
"\n" +
"Click a number below for information about other commands.";
embedBuilder.setTitle(String.format("Help: %s", title));
embedBuilder.setDescription(stringBuilder);
embedBuilder.addField(prefix + "music join [name]",
"Joins a voice channel that has the provided name", false)
.addField(prefix + "music join [id]",
"Joins a voice channel based on the provided id.", false)
.addField(prefix + "music leave",
"Leaves the voice channel that the bot is currently in.", false)
.addField(prefix + "music play",
"Plays songs from the current queue. Starts playing again if it was previously paused",
false)
.addField(prefix + "music play [url]",
"Adds a new song to the queue and starts playing if it wasn't playing already",
false)
.addField(prefix + "music playlist",
"Adds a playlist to the queue and starts playing if not already playing", false)
.addField(prefix + "music pause", "Pauses audio playback", false)
.addField(prefix + "music stop",
"Completely stops audio playback, skipping the current song.", false)
.addField(prefix + "music skip",
"Skips the current song, automatically starting the next", false)
.addField(prefix + "music nowplaying",
"Prints information about the currently playing song (title, current time)",
false)
.addField(prefix + "music np", "Alias for nowplaying", false)
.addField(prefix + "music list", "Lists the songs in the queue", false)
.addField(prefix + "music volume [vol]",
"Sets the volume of the MusicPlayer [10 - 100]", false)
.addField(prefix + "music restart",
"Restarts the current song or restarts the previous song if there is no current song playing.",
false)
.addField(prefix + "music repeat",
"Makes the player repeat the currently playing song", false)
.addField(prefix + "music reset",
"Completely resets the player, fixing all errors and clearing the queue.", false)
.addField(prefix + "music shuffle", "Shuffle current music queue.", false);
message.editMessage(embedBuilder.build()).queue();
break;
}
} catch (ErrorResponseException ignored) {
}
}
}

View File

@ -1,8 +1,12 @@
package io.rixa.bot.utils; package io.rixa.bot.utils;
import java.awt.Color;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List; import java.util.List;
import java.util.Optional; import java.util.Optional;
import net.dv8tion.jda.core.Permission;
import net.dv8tion.jda.core.entities.Guild; import net.dv8tion.jda.core.entities.Guild;
import net.dv8tion.jda.core.entities.Member; import net.dv8tion.jda.core.entities.Member;
import net.dv8tion.jda.core.entities.Role; import net.dv8tion.jda.core.entities.Role;
@ -127,4 +131,17 @@ public class DiscordUtils {
} }
return xp; return xp;
} }
public static Role createMuteRole(Guild guild) {
Role role =
guild.getController().createRole().setName("Mute")
.setColor(Color.DARK_GRAY).setMentionable(false)
.complete();
guild.getTextChannels().forEach(textChannel ->
textChannel.createPermissionOverride(role).setPermissions(Arrays.asList(
Permission.MESSAGE_READ, Permission.MESSAGE_HISTORY),
Collections.singletonList(
Permission.MESSAGE_WRITE)).queue());
return role;
}
} }