use of net.dv8tion.jda.core.entities.MessageChannel in project Ardent by adamint.
the class RPGMoney method setupSubcommands.
@Override
public void setupSubcommands() throws Exception {
subcommands.add(new Subcommand("See who has the most money - globally!", "top", "top") {
@Override
public void onCall(Guild guild, MessageChannel channel, User user, Message message, String[] args) throws Exception {
if (args.length == 2) {
HashMap<User, Double> moneyAmounts = new HashMap<>();
Cursor<HashMap> top = r.db("data").table("profiles").orderBy().optArg("index", r.desc("money")).limit(20).run(connection);
top.forEach(hashMap -> {
Profile profile = asPojo(hashMap, Profile.class);
assert profile.getUser() != null;
moneyAmounts.put(profile.getUser(), profile.getMoney());
});
Map<User, Double> sortedAmounts = MapUtils.sortByValue(moneyAmounts);
String topMoney = "Global Richest Users";
EmbedBuilder builder = MessageUtils.getDefaultEmbed(user);
builder.setAuthor(topMoney, getShard().url, guild.getIconUrl());
StringBuilder description = new StringBuilder();
final int[] current = { 0 };
sortedAmounts.forEach((u, money) -> {
if (u != null) {
description.append("\n#" + (current[0] + 1) + ": **" + u.getName() + "** " + RPGUtils.formatMoney(money));
current[0]++;
}
});
description.append("\n\nGet money by sending commands or asking questions on our support server ( https://ardentbot" + ".tk/guild )\n\nSee people's money by doing /money @User or see yours by just using /money");
sendEmbed(builder.setDescription(description.toString()), channel, user);
return;
}
try {
int page = Integer.parseInt(args[2]) - 1;
HashMap<User, Double> moneyAmounts = new HashMap<>();
Cursor<HashMap> top = r.db("data").table("profiles").orderBy().optArg("index", r.desc("money")).slice((page * 20), (page * 20) + 11).limit(25).run(connection);
top.forEach(hashMap -> {
Profile profile = asPojo(hashMap, Profile.class);
assert profile.getUser() != null;
moneyAmounts.put(profile.getUser(), profile.getMoney());
});
Map<User, Double> sortedAmounts = MapUtils.sortByValue(moneyAmounts);
String topMoney = "Global Richest Users | Page " + page;
EmbedBuilder builder = MessageUtils.getDefaultEmbed(user);
builder.setAuthor(topMoney, getShard().url, guild.getIconUrl());
StringBuilder description = new StringBuilder();
final int[] current = { 0 };
sortedAmounts.forEach((u, money) -> {
if (u != null) {
description.append("\n#" + ((page * 20) + current[0] + 1) + ": **" + u.getName() + "** " + RPGUtils.formatMoney(money));
current[0]++;
}
});
description.append("\n\nGet money by sending commands or asking questions on our support server ( https://ardentbot" + ".tk/guild )\n\nSee people's money by doing /money @User or see yours by just using /money");
sendEmbed(builder.setDescription(description.toString()), channel, user);
} catch (NumberFormatException e) {
sendTranslatedMessage("You need to specify a valid page number!", channel, user);
}
}
});
subcommands.add(new Subcommand("See who has the most money in your server", "server", "server", "guild", "topguild") {
@Override
public void onCall(Guild guild, MessageChannel channel, User user, Message message, String[] args) throws Exception {
if (!generatedFirstTimeFor.contains(guild.getId())) {
sendTranslatedMessage("Please wait a second, generating and caching your server's statistics", channel, user);
generatedFirstTimeFor.add(guild.getId());
}
HashMap<User, Double> moneyAmounts = new HashMap<>();
guild.getMembers().forEach(member -> {
User u = member.getUser();
moneyAmounts.put(u, Profile.get(u).getMoney());
});
Map<User, Double> sortedAmounts = MapUtils.sortByValue(moneyAmounts);
EmbedBuilder builder = MessageUtils.getDefaultEmbed(user);
builder.setAuthor("Richest Users | This Server", getShard().url, guild.getIconUrl());
StringBuilder description = new StringBuilder();
description.append("**Richest Users in this Server**");
final int[] current = { 0 };
sortedAmounts.forEach((u, money) -> {
if (current[0] < 10) {
description.append("\n#" + (current[0] + 1) + ": **" + u.getName() + "** " + RPGUtils.formatMoney(money));
current[0]++;
}
});
description.append("\n\nGet money by sending commands or asking questions on our support server ( https://ardentbot" + ".tk/guild )\n\nSee people's money by doing /money @User or see yours by just using /money");
sendEmbed(builder.setDescription(description.toString()), channel, user);
}
});
}
use of net.dv8tion.jda.core.entities.MessageChannel in project Ardent by adamint.
the class GuildInfo method noArgs.
@Override
public void noArgs(Guild guild, MessageChannel channel, User user, Message message, String[] args) throws Exception {
EmbedBuilder builder = MessageUtils.getDefaultEmbed(user);
builder.setAuthor("Server Info", guild.getIconUrl(), guild.getIconUrl());
builder.addField("Number of users", String.valueOf(guild.getMembers().size()), true);
builder.addField("Online users", String.valueOf(guild.getMembers().stream().filter(m -> m.getOnlineStatus() == OnlineStatus.ONLINE).count()), true);
builder.addField("Prefix", GuildUtils.getPrefix(guild), true);
builder.addField("Premium Server", String.valueOf(EntityGuild.get(guild).isPremium()), true);
builder.addField("Owner", UserUtils.getNameWithDiscriminator(guild.getOwner().getUser().getId()), true);
builder.addField("Creation Date", guild.getCreationTime().toLocalDate().toString(), true);
builder.addField("Public channel", guild.getPublicChannel().getAsMention(), true);
builder.addField("# of Voice Channels", String.valueOf(guild.getVoiceChannels().size()), true);
builder.addField("# of Text Channels", String.valueOf(guild.getTextChannels().size()), true);
builder.addField("# of Roles", String.valueOf(guild.getRoles().size()), true);
builder.addField("Region", guild.getRegion().getName(), true);
builder.addField("Verification Level", String.valueOf(guild.getVerificationLevel()), true);
sendEmbed(builder, channel, user);
}
use of net.dv8tion.jda.core.entities.MessageChannel in project Ardent by adamint.
the class Bet method setupSubcommands.
@Override
public void setupSubcommands() throws Exception {
subcommands.add(new Subcommand("Bet a specified amount of money", "start", "start") {
@Override
public void onCall(Guild guild, MessageChannel channel, User user, Message message, String[] args) throws Exception {
if (args.length == 2) {
sendTranslatedMessage("You need to specify a bet amount", channel, user);
return;
}
try {
double amountToBet = Double.parseDouble(args[2]);
Profile profile = Profile.get(user);
if (amountToBet <= 0 || profile.getMoney() < amountToBet) {
sendTranslatedMessage("Invalid amount - either it was more than what you have or less than $0", channel, user);
return;
}
sendEditedTranslation("Are you sure you want to bet **{0}**? Type **yes** if so, or **no** to cancel", user, channel, RPGUtils.formatMoney(amountToBet));
interactiveOperation(channel, message, (returnedMessage) -> {
if (returnedMessage.getContent().equalsIgnoreCase("yes")) {
sendTranslatedMessage("Type 1 or 2 below - choose wisely!", channel, user);
interactiveOperation(channel, message, (numberInput) -> {
try {
int num = Integer.parseInt(numberInput.getContent());
if (num > 0 && num <= 2) {
int generated = new SecureRandom().nextInt(2) + 1;
if (num == generated || new Random().nextInt(20) == 5) {
profile.addMoney(profile.afterCredit(amountToBet));
sendTranslatedMessage("Congrats! You won " + RPGUtils.formatMoney(profile.afterCredit(amountToBet)), channel, user);
} else {
sendTranslatedMessage("Sorry, you lost " + RPGUtils.formatMoney(amountToBet) + " :frowning: " + "The correct answer " + "was " + generated, channel, user);
profile.removeMoney(amountToBet);
}
} else
sendTranslatedMessage("You specified an invalid number", channel, user);
} catch (Exception ex) {
sendTranslatedMessage("You specified an invalid number", channel, user);
}
});
} else {
sendTranslatedMessage("Ok, cancelled your bet", channel, user);
}
});
} catch (NumberFormatException e) {
sendTranslatedMessage("That's not a number!", channel, user);
}
}
});
subcommands.add(new Subcommand("Bet all your money", "all", "all") {
@Override
public void onCall(Guild guild, MessageChannel channel, User user, Message message, String[] args) throws Exception {
Profile profile = Profile.get(user);
if (profile.getMoney() < 0) {
sendTranslatedMessage("You can't bet if you're in debt!", channel, user);
return;
}
sendEditedTranslation("Are you sure you want to bet all? Type **yes** if so, or **no** to cancel", user, channel, RPGUtils.formatMoney(profile.getMoney()));
interactiveOperation(channel, message, (returnedMessage) -> {
if (returnedMessage.getContent().equalsIgnoreCase("yes")) {
sendTranslatedMessage("Type 1 or 2 below - choose wisely!", channel, user);
interactiveOperation(channel, message, (numberInput) -> {
try {
int num = Integer.parseInt(numberInput.getContent());
if (num > 0 && num <= 2) {
int generated = new SecureRandom().nextInt(2) + 1;
if (num == generated || new Random().nextInt(20) == 5) {
profile.addMoney(profile.afterCredit(profile.getMoney()));
sendTranslatedMessage("Congrats! You won " + RPGUtils.formatMoney(profile.afterCredit(profile.getMoney())), channel, user);
} else {
sendTranslatedMessage("Sorry, you lost " + RPGUtils.formatMoney(profile.getMoney()) + " :frowning: The correct answer " + "was " + generated, channel, user);
profile.setZero();
}
} else
sendTranslatedMessage("You specified an invalid number", channel, user);
} catch (Exception ex) {
sendTranslatedMessage("You specified an invalid number", channel, user);
}
});
} else {
sendTranslatedMessage("Ok, cancelled your bet", channel, user);
}
});
}
});
}
use of net.dv8tion.jda.core.entities.MessageChannel in project Ardent by adamint.
the class ShardInfo method noArgs.
@Override
public void noArgs(Guild guild, MessageChannel channel, User user, Message message, String[] args) throws Exception {
StringBuilder builder = new StringBuilder();
for (Shard shard : ShardManager.getShards()) {
builder.append(shard.jda.getShardInfo()).append(" | STATUS: ").append(shard.jda.getStatus()).append(" | " + "U: ").append(shard.jda.getUsers().size()).append(" | G: ").append(shard.jda.getGuilds().size()).append(" | MC: ").append(shard.jda.getVoiceChannels().stream().filter(voiceChannel -> voiceChannel.getMembers().contains(voiceChannel.getGuild().getSelfMember())).count()).append(" | LE: " + (System.currentTimeMillis() - shard.getLAST_EVENT()));
if (shard.jda.getShardInfo() != null && shard.jda.getShardInfo().equals(guild.getJDA().getShardInfo())) {
builder.append(" <- CURRENT");
}
builder.append("\n");
}
channel.sendMessage(String.format("```prolog\n%s```", builder.toString())).queue();
}
use of net.dv8tion.jda.core.entities.MessageChannel in project Ardent by adamint.
the class Stats method setupSubcommands.
@Override
public void setupSubcommands() throws Exception {
subcommands.add(new Subcommand("See what commands are being used", "commands", "commands") {
@Override
public void onCall(Guild guild, MessageChannel channel, User user, Message message, String[] args) throws Exception {
StringBuilder commandBars = new StringBuilder();
Map<String, Long> commandsUsed = getCommandData(ShardManager.getShards());
final int[] counter = { 0 };
final int[] totalCommandsReceived = { 0 };
commandsUsed.forEach((key, value) -> {
if (counter[0] < 7)
totalCommandsReceived[0] += value;
counter[0]++;
});
counter[0] = 0;
commandsUsed.forEach((key, value) -> {
if (counter[0] < 7) {
int percent = (int) (value * 100 / totalCommandsReceived[0]);
String bar = bar(percent);
if (bar != null) {
commandBars.append(bar + " " + percent + "% **" + key + "**\n");
}
}
counter[0]++;
});
EmbedBuilder builder = MessageUtils.getDefaultEmbed(user);
builder.setAuthor("Command Statistics", getShard().url, getShard().bot.getAvatarUrl());
builder.setColor(Color.GREEN);
builder.setDescription("Command Usage\n" + commandBars.toString());
sendEmbed(builder, channel, user);
}
});
subcommands.add(new Subcommand("See how many server's I'm joining and leaving", "guilds") {
@Override
public void onCall(Guild guild, MessageChannel channel, User user, Message message, String[] args) throws Exception {
EmbedBuilder builder = MessageUtils.getDefaultEmbed(user);
builder.setAuthor("Guild Statistics", getShard().url, getShard().bot.getAvatarUrl());
builder.setColor(Color.GREEN);
int lPH = 0;
int lPD = 0;
int lPS = 0;
long epochSecond = Instant.now().getEpochSecond();
long hBar = epochSecond - (60 * 60);
long dBar = epochSecond - (60 * 60 * 24);
long sBar = 0;
for (Instant i : Leave.botLeaveEvents) {
if (i.getEpochSecond() >= hBar)
lPH++;
if (i.getEpochSecond() >= dBar)
lPD++;
// Always true
if (i.getEpochSecond() >= sBar)
lPS++;
}
int jPH = 0;
int jPD = 0;
int jPS = 0;
for (Instant i : Join.botJoinEvents) {
if (i.getEpochSecond() >= hBar)
jPH++;
if (i.getEpochSecond() >= dBar)
jPD++;
// Always true
if (i.getEpochSecond() >= sBar)
jPS++;
}
builder.addField("Hourly", generateGuild(jPH, lPH), false);
builder.addField("Daily", generateGuild(jPD, lPD), false);
builder.addField("This Session", generateGuild(jPS, lPS), false);
builder.addField("Guilds", String.valueOf(InternalStats.collect().getGuilds()), false);
sendEmbed(builder, channel, user);
}
});
}
Aggregations