use of me.shadorc.shadbot.exception.MissingArgumentException in project Shadbot by Shadorc.
the class DiabloCmd method execute.
@Override
public void execute(Context context) throws MissingArgumentException, IllegalCmdArgumentException {
if (!context.hasArg()) {
throw new MissingArgumentException();
}
List<String> splitArgs = StringUtils.split(context.getArg(), 2);
if (splitArgs.size() != 2) {
throw new MissingArgumentException();
}
Region region = Utils.getValueOrNull(Region.class, splitArgs.get(0));
if (region == null) {
throw new IllegalCmdArgumentException(String.format("`%s` is not a valid Region. %s", splitArgs.get(0), FormatUtils.formatOptions(Region.class)));
}
String battletag = splitArgs.get(1);
if (!battletag.matches("(\\p{L}*)#[0-9]*")) {
throw new IllegalCmdArgumentException(String.format("`%s` is not a valid Battletag.", splitArgs.get(1)));
}
battletag = battletag.replaceAll("#", "-");
LoadingMessage loadingMsg = new LoadingMessage("Loading Diablo 3 stats...", context.getChannel());
loadingMsg.send();
try {
String url = String.format("https://%s.api.battle.net/d3/profile/%s/?locale=en_GB&apikey=%s", region, NetUtils.encode(battletag), APIKeys.get(APIKey.BLIZZARD_API_KEY));
JSONObject playerObj = new JSONObject(NetUtils.getBody(url));
if (playerObj.has("code") && playerObj.getString("code").equals("NOTFOUND")) {
loadingMsg.edit(Emoji.MAGNIFYING_GLASS + " This user doesn't play Diablo 3 or doesn't exist.");
return;
}
TreeMap<Double, String> heroesMap = new TreeMap<>(Collections.reverseOrder());
JSONArray heroesArray = playerObj.getJSONArray("heroes");
for (int i = 0; i < heroesArray.length(); i++) {
JSONObject heroObj = heroesArray.getJSONObject(i);
String name = heroObj.getString("name");
String heroClass = StringUtils.capitalize(heroObj.getString("class").replace("-", " "));
url = String.format("https://%s.api.battle.net/d3/profile/%s/hero/%d?locale=en_GB&apikey=%s", region, NetUtils.encode(battletag), heroObj.getLong("id"), APIKeys.get(APIKey.BLIZZARD_API_KEY));
JSONObject statsHeroObj = new JSONObject(NetUtils.getBody(url));
Double dps = statsHeroObj.has("code") ? Double.NaN : statsHeroObj.getJSONObject("stats").getDouble("damage");
heroesMap.put(dps, String.format("**%s** (*%s*)", name, heroClass));
}
EmbedBuilder embed = EmbedUtils.getDefaultEmbed().setLenient(true).withAuthorName("Diablo 3 Stats").withThumbnail("http://osx.wdfiles.com/local--files/icon:d3/D3.png").appendDescription(String.format("Stats for **%s** (Guild: **%s**)" + "%n%nParangon level: **%s** (*Normal*) / **%s** (*Hardcore*)" + "%nSeason Parangon level: **%s** (*Normal*) / **%s** (*Hardcore*)", playerObj.getString("battleTag"), playerObj.getString("guildName"), playerObj.getInt("paragonLevel"), playerObj.getInt("paragonLevelSeasonHardcore"), playerObj.getInt("paragonLevelSeason"), playerObj.getInt("paragonLevelSeasonHardcore"))).appendField("Heroes", FormatUtils.format(heroesMap.values().stream(), Object::toString, "\n"), true).appendField("Damage", FormatUtils.format(heroesMap.keySet().stream(), dps -> String.format("%s DPS", FormatUtils.formatNum(dps)), "\n"), true);
loadingMsg.edit(embed.build());
} catch (FileNotFoundException err) {
loadingMsg.delete();
BotUtils.sendMessage(Emoji.MAGNIFYING_GLASS + " This user doesn't play Diablo 3 or doesn't exist.", context.getChannel());
} catch (JSONException | IOException err) {
loadingMsg.delete();
Utils.handle("getting Diablo 3 stats", context, err);
}
}
use of me.shadorc.shadbot.exception.MissingArgumentException in project Shadbot by Shadorc.
the class OverwatchCmd method execute.
@Override
public void execute(Context context) throws MissingArgumentException, IllegalCmdArgumentException {
List<String> splitArgs = StringUtils.split(context.getArg());
if (!Utils.isInRange(splitArgs.size(), 1, 3)) {
throw new MissingArgumentException();
}
LoadingMessage loadingMsg = new LoadingMessage("Loading Overwatch profile...", context.getChannel());
try {
OverwatchPlayer player;
String username = null;
Platform platform = null;
if (splitArgs.size() == 1) {
username = splitArgs.get(0);
loadingMsg.send();
player = new OverwatchPlayer(username);
} else {
platform = this.getPlatform(splitArgs.get(0));
username = splitArgs.get(1);
loadingMsg.send();
player = new OverwatchPlayer(username, platform);
}
EmbedBuilder embed = EmbedUtils.getDefaultEmbed().setLenient(true).withAuthorName("Overwatch Stats").withAuthorIcon("http://vignette4.wikia.nocookie.net/overwatch/images/b/bd/Overwatch_line_art_logo_symbol-only.png").withAuthorUrl(player.getProfileURL()).withThumbnail(player.getIconUrl()).appendDescription(String.format("Stats for user **%s**", player.getName())).appendField("Level", Integer.toString(player.getLevel()), true).appendField("Competitive rank", Integer.toString(player.getRank()), true).appendField("Wins", Integer.toString(player.getWins()), true).appendField("Game time", player.getTimePlayed(), true).appendField("Top hero (Time played)", this.getTopThreeHeroes(player.getList(TopHeroesStats.TIME_PLAYED)), true).appendField("Top hero (Eliminations per life)", this.getTopThreeHeroes(player.getList(TopHeroesStats.ELIMINATIONS_PER_LIFE)), true);
loadingMsg.edit(embed.build());
} catch (OverwatchException err) {
loadingMsg.edit(Emoji.MAGNIFYING_GLASS + " " + err.getMessage());
} catch (IOException err) {
loadingMsg.delete();
Utils.handle("getting information from Overwatch profile", context, err);
}
}
use of me.shadorc.shadbot.exception.MissingArgumentException in project Shadbot by Shadorc.
the class HelpCmd method execute.
@Override
public void execute(Context context) throws MissingArgumentException, IllegalCmdArgumentException {
if (context.hasArg()) {
AbstractCommand cmd = CommandManager.getCommand(context.getArg());
if (cmd == null) {
return;
}
BotUtils.sendMessage(cmd.getHelp(context.getPrefix()), context.getChannel());
CommandStatsManager.log(CommandEnum.COMMAND_HELPED, cmd);
return;
}
EmbedBuilder embed = EmbedUtils.getDefaultEmbed().setLenient(true).withAuthorName("Shadbot Help").appendDescription(String.format("Any issues, questions or suggestions ? Join the [support server.](%s)" + "%nGet more information by using `%s%s <command>`.", Config.SUPPORT_SERVER, context.getPrefix(), this.getName()));
for (CommandCategory category : CommandCategory.values()) {
if (category.equals(CommandCategory.HIDDEN)) {
continue;
}
String commands = CommandManager.getCommands().values().stream().distinct().filter(cmd -> cmd.getCategory().equals(category) && !cmd.getPermission().isSuperior(context.getAuthorPermission()) && (context.getGuild() == null || BotUtils.isCommandAllowed(context.getGuild(), cmd))).map(cmd -> String.format("`%s%s`", context.getPrefix(), cmd.getName())).collect(Collectors.joining(" "));
embed.appendField(String.format("%s Commands", category.toString()), commands, false);
}
BotUtils.sendMessage(embed.build(), context.getChannel());
}
use of me.shadorc.shadbot.exception.MissingArgumentException in project Shadbot by Shadorc.
the class Rule34Cmd method execute.
@Override
public void execute(Context context) throws MissingArgumentException {
if (!context.getChannel().isNSFW()) {
BotUtils.sendMessage(TextUtils.mustBeNSFW(context.getPrefix()), context.getChannel());
return;
}
if (!context.hasArg()) {
throw new MissingArgumentException();
}
LoadingMessage loadingMsg = new LoadingMessage("Loading image...", context.getChannel());
loadingMsg.send();
try {
String url = String.format("https://rule34.xxx/index.php?page=dapi&s=post&q=index&tags=%s", NetUtils.encode(context.getArg().replace(" ", "_")));
JSONObject mainObj = XML.toJSONObject(NetUtils.getBody(url));
JSONObject postsObj = mainObj.getJSONObject("posts");
if (postsObj.getInt("count") == 0) {
loadingMsg.edit(TextUtils.noResult(context.getArg()));
return;
}
JSONObject postObj;
if (postsObj.get("post") instanceof JSONArray) {
JSONArray postsArray = postsObj.getJSONArray("post");
postObj = postsArray.getJSONObject(ThreadLocalRandom.current().nextInt(postsArray.length()));
} else {
postObj = postsObj.getJSONObject("post");
}
List<String> tags = StringUtils.split(postObj.getString("tags"), " ");
if (postObj.getBoolean("has_children") || tags.stream().anyMatch(tag -> tag.contains("loli") || tag.contains("shota"))) {
loadingMsg.edit(Emoji.WARNING + " Sorry, I don't display images containing children or tagged with `loli` or `shota`.");
return;
}
String formattedtags = StringUtils.truncate(FormatUtils.format(tags, tag -> String.format("`%s`", tag.toString()), " "), MAX_TAGS_LENGTH);
EmbedBuilder embed = EmbedUtils.getDefaultEmbed().setLenient(true).withAuthorName("Rule34 (Search: " + context.getArg() + ")").withAuthorUrl(postObj.getString("file_url")).withThumbnail("http://rule34.paheal.net/themes/rule34v2/rule34_logo_top.png").appendField("Resolution", String.format("%dx%s", postObj.getInt("width"), postObj.getInt("height")), false).appendField("Tags", formattedtags, false).withImage(postObj.getString("file_url")).withFooterText("If there is no preview, click on the title to see the media (probably a video)");
String source = postObj.get("source").toString();
if (!source.isEmpty()) {
embed.withDescription(String.format("%n[**Source**](%s)", source));
}
loadingMsg.edit(embed.build());
} catch (JSONException | IOException err) {
loadingMsg.delete();
Utils.handle("getting an image from Rule34", context, err);
}
}
use of me.shadorc.shadbot.exception.MissingArgumentException in project Shadbot by Shadorc.
the class TransferCoinsCmd method execute.
@Override
public void execute(Context context) throws MissingArgumentException, IllegalCmdArgumentException {
if (!context.hasArg()) {
throw new MissingArgumentException();
}
if (context.getMessage().getMentions().isEmpty()) {
throw new MissingArgumentException();
}
List<String> splitCmd = StringUtils.split(context.getArg(), 2);
if (splitCmd.size() != 2) {
throw new MissingArgumentException();
}
IUser receiverUser = context.getMessage().getMentions().get(0);
IUser senderUser = context.getAuthor();
if (receiverUser.equals(senderUser)) {
throw new IllegalCmdArgumentException("You cannot transfer coins to yourself.");
}
Integer coins = CastUtils.asPositiveInt(splitCmd.get(0));
if (coins == null) {
throw new IllegalCmdArgumentException(String.format("`%s` is not a valid amount for coins.", splitCmd.get(0)));
}
if (Database.getDBUser(context.getGuild(), senderUser).getCoins() < coins) {
BotUtils.sendMessage(TextUtils.notEnoughCoins(context.getAuthor()), context.getChannel());
return;
}
if (Database.getDBUser(context.getGuild(), receiverUser).getCoins() + coins >= Config.MAX_COINS) {
BotUtils.sendMessage(String.format(Emoji.BANK + " This transfer cannot be done because %s would exceed the maximum coins cap.", receiverUser.getName()), context.getChannel());
return;
}
Database.getDBUser(context.getGuild(), senderUser).addCoins(-coins);
Database.getDBUser(context.getGuild(), receiverUser).addCoins(coins);
BotUtils.sendMessage(String.format(Emoji.BANK + " %s has transfered **%s** to %s", senderUser.mention(), FormatUtils.formatCoins(coins), receiverUser.mention()), context.getChannel());
}
Aggregations