use of net.dv8tion.jda.core.entities.Guild in project Ardent by adamint.
the class OnMessage method onMessage.
@SubscribeEvent
public void onMessage(MessageReceivedEvent event) {
if (!Ardent.started)
return;
if (event.getAuthor().isBot())
return;
try {
switch(event.getChannel().getType()) {
case TEXT:
TriviaChecker.check(event);
Guild guild = event.getGuild();
Shard shard = GuildUtils.getShard(guild);
shard.factory.incrementMessagesReceived();
if (event.getGuild() == null)
// This one will never be executed. But just in case to avoid NPE.
return;
AntiAdvertisingSettings antiAdvertisingSettings = BaseCommand.asPojo(r.table("anti_advertising_settings").get(guild.getId()).run(connection), AntiAdvertisingSettings.class);
if (antiAdvertisingSettings != null && !antiAdvertisingSettings.isAllow_discord_server_links()) {
if (!event.getMember().hasPermission(Permission.MANAGE_SERVER)) {
if (event.getMessage().getRawContent().contains("discordapp.com/invite") || event.getMessage().getRawContent().contains("discord.gg")) {
event.getMessage().delete().queue();
ArrayList<AdvertisingInfraction> infractions = BaseCommand.queryAsArrayList(AdvertisingInfraction.class, r.table("advertising_infractions").filter(row -> row.g("guild_id").eq(guild.getId()).and(row.g("user_id").eq(event.getAuthor().getId()))).run(connection));
if (infractions.size() > 2 && antiAdvertisingSettings.isBan_after_two_infractions()) {
guild.getController().ban(event.getAuthor(), 1).queue();
shard.help.sendEditedTranslation("Banned {0} for advertising.", event.getAuthor(), event.getChannel(), UserUtils.getNameWithDiscriminator(event.getAuthor().getId()));
event.getAuthor().openPrivateChannel().queue(privateChannel -> {
privateChannel.sendMessage("You were banned from " + guild.getName() + " for advertising.").queue();
});
r.table("advertising_infractions").filter(row -> row.g("guild_id").eq(guild.getId()).and(row.g("user_id").eq(event.getAuthor().getId()))).delete().run(connection);
} else {
r.table("advertising_infractions").insert(r.json(BaseCommand.getStaticGson().toJson(new AdvertisingInfraction(event.getAuthor().getId(), guild.getId())))).run(connection);
shard.help.sendEditedTranslation("{0}, you can't advertise Discord servers here!", event.getAuthor(), event.getChannel(), event.getAuthor().getAsMention());
}
return;
}
}
}
if (guild.getId().equalsIgnoreCase("260841592070340609")) {
UserUtils.addMoney(event.getAuthor(), 0.10);
}
Member ardentMember = event.getGuild().getMember(event.getJDA().getSelfUser());
Member userMember = event.getMember();
if (ardentMember == null || userMember == null || userMember.hasPermission(Permission.MANAGE_SERVER) || !ardentMember.hasPermission(Permission.MESSAGE_MANAGE)) {
shard.factory.pass(event, GuildUtils.getPrefix(guild));
// The event will be handled and musn't be resumed here.
return;
}
if (!shard.botMuteData.isMuted(event.getMember())) {
shard.factory.pass(event, GuildUtils.getPrefix(guild));
// The event will be handled and musn't be resumed here.
return;
}
event.getMessage().delete().queue();
String reply = "Sorry, but you're muted in {0} until {1}".replace("{0}", event.getGuild().getName()).replace("{1}", Date.from(Instant.ofEpochSecond(shard.botMuteData.getUnmuteTime(event.getMember()) / 1000)).toLocaleString());
event.getAuthor().openPrivateChannel().queue(privateChannel -> privateChannel.sendMessage(reply).queue());
break;
case PRIVATE:
event.getChannel().sendMessage("Please use Ardent commands inside of a guild!").queue();
shard0.factory.incrementMessagesReceived();
break;
}
} catch (Exception ex) {
new BotException(ex);
}
}
use of net.dv8tion.jda.core.entities.Guild in project Ardent by adamint.
the class StuckVoiceConnection method run.
@Override
public void run() {
for (Shard shard : getShards()) {
for (Guild guild : shard.jda.getGuilds()) {
GuildMusicManager guildMusicManager = Music.getGuildAudioPlayer(guild, null, shard);
AudioPlayer player = guildMusicManager.player;
if (!player.isPaused() && guild.getAudioManager().getConnectedChannel() != null && guild.getAudioManager().getConnectedChannel().getMembers().size() > 1) {
AudioTrack playingTrack = player.getPlayingTrack();
if (playingTrack != null) {
long position = playingTrack.getPosition();
if (position == 0 || (position > 0 && !guild.getAudioManager().isConnected())) {
String textChannelId = voiceChannelsAtZeroDuration.get(guild.getId());
if (textChannelId == null) {
ArdentMusicManager ardentMusicManager = guildMusicManager.scheduler.manager;
TextChannel channel = ardentMusicManager.getChannel();
voiceChannelsAtZeroDuration.put(guild.getId(), channel.getId());
} else {
TextChannel channel = guild.getTextChannelById(textChannelId);
ArdentMusicManager ardentMusicManager = guildMusicManager.scheduler.manager;
if (ardentMusicManager != null) {
List<ArdentTrack> queue = ardentMusicManager.getQueueAsList();
shard.musicManagers.remove(Long.parseLong(guild.getId()));
GuildMusicManager manager = Music.getGuildAudioPlayer(guild, channel, shard);
for (ArdentTrack track : queue) {
manager.scheduler.manager.addToQueue(new ArdentTrack(track.getAuthor(), track.getAddedFrom(), track.getTrack().makeClone()));
}
} else
shard.musicManagers.remove(Long.parseLong(guild.getId()));
if (channel == null)
channel = guild.getPublicChannel();
try {
channel.sendMessage("I detected that my audio connection was stuck and reset my player. #BlameDiscord").queue();
} catch (Exception e) {
new BotException(e);
}
}
}
} else {
voiceChannelsAtZeroDuration.remove(guild.getId());
}
}
}
}
}
use of net.dv8tion.jda.core.entities.Guild in project Ardent by adamint.
the class TriviaChecker method check.
static void check(MessageReceivedEvent event) throws Exception {
if (event.isFromType(ChannelType.TEXT)) {
User user = event.getAuthor();
Guild guild = event.getGuild();
Shard shard = GuildUtils.getShard(guild);
TextChannel channel = event.getTextChannel();
for (Iterator<TriviaGame> iterator = Trivia.gamesInSession.iterator(); iterator.hasNext(); ) {
TriviaGame triviaGame = iterator.next();
if (triviaGame.getGuildId().equalsIgnoreCase(guild.getId()) && triviaGame.getTextChannelId().equalsIgnoreCase(channel.getId())) {
if (!triviaGame.isAnsweredCurrentQuestion()) {
if (triviaGame.isSolo() && !triviaGame.getCreator().equalsIgnoreCase(user.getId()))
return;
String content = event.getMessage().getContent();
if (triviaGame.getCurrentTriviaQuestion() != null) {
final boolean[] correct = { false };
triviaGame.getCurrentTriviaQuestion().getAnswers().forEach(a -> {
if (a.equalsIgnoreCase(content))
correct[0] = true;
});
if (correct[0]) {
triviaGame.addPoint(user);
shard.help.sendEditedTranslation("{0} got it right!", user, channel, user.getAsMention());
if (triviaGame.getRound() != triviaGame.getTotalRounds()) {
Trivia.dispatchRound(guild, channel, guild.getMemberById(triviaGame.getCreator()).getUser(), triviaGame, triviaGame.getEx());
} else
triviaGame.finish(shard, shard.help);
}
}
}
}
}
}
}
use of net.dv8tion.jda.core.entities.Guild 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.Guild 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);
}
Aggregations