use of com.rethinkdb.gen.exc.ReqlError in project MantaroBot by Mantaro.
the class CommandListener method onCommand.
private void onCommand(GuildMessageReceivedEvent event) {
try {
Member self = event.getGuild().getSelfMember();
if (!self.getPermissions(event.getChannel()).contains(Permission.MESSAGE_WRITE) && !self.hasPermission(Permission.ADMINISTRATOR))
return;
if (commandProcessor.run(event)) {
commandTotal++;
} else {
// Only run experience if no command has been executed, avoids weird race conditions when saving player status.
try {
// Only run experience if the user is not rate limited (clears every 30 seconds)
if (random.nextInt(15) > 7 && !event.getAuthor().isBot() && experienceRatelimiter.process(event.getAuthor())) {
if (event.getMember() == null)
return;
// some nasty race conditions involving player save.
if (InteractiveOperations.get(event.getChannel()) != null)
return;
Player player = MantaroData.db().getPlayer(event.getAuthor());
PlayerData data = player.getData();
DBGuild dbGuild = MantaroData.db().getGuild(event.getGuild());
GuildData guildData = dbGuild.getData();
if (player.isLocked())
return;
// Set level to 1 if level is zero.
if (player.getLevel() == 0)
player.setLevel(1);
// Set player experience to a random number between 1 and 5.
data.setExperience(data.getExperience() + Math.round(random.nextInt(5)));
// Apply some black magic.
if (data.getExperience() > (player.getLevel() * Math.log10(player.getLevel()) * 1000) + (50 * player.getLevel() / 2)) {
player.setLevel(player.getLevel() + 1);
// Check if the member is not null, just to be sure it happened in-between.
if (player.getLevel() > 1 && event.getGuild().getMemberById(player.getUserId()) != null) {
if (guildData.isEnabledLevelUpMessages()) {
String levelUpChannel = guildData.getLevelUpChannel();
String levelUpMessage = guildData.getLevelUpMessage();
// Player has leveled up!
if (levelUpMessage != null && levelUpChannel != null) {
processMessage(String.valueOf(player.getLevel()), levelUpMessage, levelUpChannel, event);
}
}
}
}
// This time, actually remember to save the player so you don't have to restart 102 shards to fix it.
player.saveAsync();
}
} catch (Exception ignored) {
}
}
} catch (IndexOutOfBoundsException e) {
event.getChannel().sendMessage(EmoteReference.ERROR + "Your query returned no results or you used the incorrect arguments, seemingly. Just in case, check command help!").queue();
} catch (PermissionException e) {
if (e.getPermission() != Permission.UNKNOWN) {
event.getChannel().sendMessage(String.format("%sI don't have permission to do this :<, I need the permission: **%s**%s", EmoteReference.ERROR, e.getPermission().getName(), e.getMessage() != null ? String.format(" | Message: %s", e.getMessage()) : "")).queue();
} else {
event.getChannel().sendMessage(EmoteReference.ERROR + "I cannot perform this action due to the lack of permission! Is the role I might be trying to assign" + " higher than my role? Do I have the correct permissions/hierarchy to perform this action?").queue();
}
} catch (IllegalArgumentException e) {
// NumberFormatException == IllegalArgumentException
String id = Snow64.toSnow64(event.getMessage().getIdLong());
event.getChannel().sendMessage(String.format("%sI think you forgot something on the floor. (Maybe we threw it there? [Error ID: %s]... I hope we didn't)\n" + "- Incorrect type arguments or the message I'm trying to send exceeds 2048 characters, Just in case, check command help!", EmoteReference.ERROR, id)).queue();
log.warn("Exception caught and alternate message sent. We should look into this, anyway (ID: {})", id, e);
} catch (ReqlError e) {
// So much just went wrong...
e.printStackTrace();
SentryHelper.captureExceptionContext("Something seems to have broken in the db! Check this out!", e, this.getClass(), "Database");
} catch (RedisException e) {
// So much just went wrong but on another side of the db...
e.printStackTrace();
SentryHelper.captureExceptionContext("Something seems to have broken in the db! Check this out!", e, this.getClass(), "Redis Database");
} catch (Exception e) {
String id = Snow64.toSnow64(event.getMessage().getIdLong());
Player player = MantaroData.db().getPlayer(event.getAuthor());
event.getChannel().sendMessage(String.format("%s%s\n(Error ID: `%s`)\n" + "If you want, join our **support guild** (Link on `~>about`), or check out our GitHub page (/Mantaro/MantaroBot). " + "Please tell them to quit exploding me and please don't forget the Error ID when reporting!", EmoteReference.ERROR, boomQuotes[rand.nextInt(boomQuotes.length)], id)).queue();
if (player.getData().addBadgeIfAbsent(Badge.FIRE))
player.saveAsync();
SentryHelper.captureException(String.format("Unexpected Exception on Command: %s | (Error ID: ``%s``)", event.getMessage().getContentRaw(), id), e, this.getClass());
log.error("Error happened with id: {} (Error ID: {})", event.getMessage().getContentRaw(), id, e);
}
}
Aggregations