diff --git a/pom.xml b/pom.xml index 46d460e..7548e0f 100644 --- a/pom.xml +++ b/pom.xml @@ -5,7 +5,7 @@ 4.0.0 Hadder Hadder - 1.1.0 + 1.0.3 Hadder @@ -66,7 +66,7 @@ com.rethinkdb rethinkdb-driver - 2.4.0 + 2.3.3 org.slf4j diff --git a/src/main/java/com/bbn/hadder/Rethink.java b/src/main/java/com/bbn/hadder/Rethink.java index aeaaf58..29b8346 100644 --- a/src/main/java/com/bbn/hadder/Rethink.java +++ b/src/main/java/com/bbn/hadder/Rethink.java @@ -136,18 +136,23 @@ public class Rethink { .with("blacklisted", "none")); } + // TODO + public boolean hasStarboardChannel(String guild_id) { + return !this.getByID("server", guild_id, "starboard").equals(""); + } + // TODO public void insertStarboardMessage(String message_id, String guild_id, String starboard_message_id) { this.insert("stars", r.hashMap("id", message_id).with("guild", guild_id).with("starboardmsg", starboard_message_id)); } - + // TODO public String getStarboardMessage(String message_id) { return (String) this.getByID("stars", message_id, "starboardmsg"); } - + // TODO public void removeStarboardMessage(String message_id) { this.remove("stars", "id", message_id); } - + // TODO public boolean hasStarboardMessage(String message_id) { try { this.getByID("stars", message_id, "guild"); @@ -157,6 +162,7 @@ public class Rethink { } } + public void pushServer(RethinkServer server) { JSONObject object = new JSONObject(); for (Field field : server.getClass().getDeclaredFields()) { diff --git a/src/main/java/com/bbn/hadder/RethinkServer.java b/src/main/java/com/bbn/hadder/RethinkServer.java index 200e13a..c15c448 100644 --- a/src/main/java/com/bbn/hadder/RethinkServer.java +++ b/src/main/java/com/bbn/hadder/RethinkServer.java @@ -24,15 +24,15 @@ public class RethinkServer { private Rethink rethink; - public String accept_emote = ""; - public String decline_emote = ""; - public String id; - public boolean invite_detect = false; - public String message_id = ""; - public String neededstars = "3"; - public String prefix = "h."; - public String role_id = ""; - public String starboard = ""; + String accept_emote = ""; + String decline_emote = ""; + String id; + boolean invite_detect = false; + String message_id = ""; + String neededstars = "3"; + String prefix = "h."; + String role_id = ""; + String starboard = ""; public RethinkServer(JSONObject object, Rethink rethink) { for (Field field : this.getClass().getDeclaredFields()) { @@ -68,7 +68,7 @@ public class RethinkServer { return id; } - public boolean hasInviteDetect() { + public boolean isInviteDetect() { return invite_detect; } @@ -116,10 +116,6 @@ public class RethinkServer { this.starboard = starboard; } - public boolean hasStarboardChannel() { - return !"".equals(starboard); - } - public void updateRules(String message_id, String role_id, String accept_emote, String decline_emote) { this.setMessageID(message_id); this.setRoleID(role_id); diff --git a/src/main/java/com/bbn/hadder/RethinkUser.java b/src/main/java/com/bbn/hadder/RethinkUser.java index cc3b41d..1d99ac5 100644 --- a/src/main/java/com/bbn/hadder/RethinkUser.java +++ b/src/main/java/com/bbn/hadder/RethinkUser.java @@ -24,10 +24,10 @@ public class RethinkUser { private Rethink rethink; - public String id; - public String prefix = "h."; - public String language = "en"; - public String blacklisted = "none"; + String id; + String prefix = "h."; + String language = "en"; + String blacklisted = "none"; public RethinkUser(JSONObject object, Rethink rethink) { for (Field field : this.getClass().getDeclaredFields()) { diff --git a/src/main/java/com/bbn/hadder/audio/AudioManager.java b/src/main/java/com/bbn/hadder/audio/AudioManager.java index 363581c..fe45e59 100644 --- a/src/main/java/com/bbn/hadder/audio/AudioManager.java +++ b/src/main/java/com/bbn/hadder/audio/AudioManager.java @@ -76,31 +76,17 @@ public class AudioManager { @Override public void trackLoaded(AudioTrack track) { - if (getTrackManager(guild).getQueuedTracks().isEmpty()) { - getTrackManager(guild).queue(track, event.getMember()); - msg.editMessage(event.getMessageEditor().getMessage(MessageEditor.MessageType.INFO, - "commands.music.play.success.loading.title", "⏯", - "", "") - .addField(event.getMessageEditor().getTerm("commands.music.play.success.title"), track.getInfo().title, false) - .addField(event.getMessageEditor().getTerm("commands.music.play.success.author"), track.getInfo().author, true) - .addField(event.getMessageEditor().getTerm("commands.music.play.success.length"), - String.format("%02d:%02d:%02d", TimeUnit.MILLISECONDS.toHours(track.getInfo().length), - TimeUnit.MILLISECONDS.toMinutes(track.getInfo().length) % TimeUnit.HOURS.toMinutes(1), - TimeUnit.MILLISECONDS.toSeconds(track.getInfo().length) % TimeUnit.MINUTES.toSeconds(1)), true) - .build()).queue(); - } else { - getTrackManager(guild).queue(track, event.getMember()); - msg.editMessage(event.getMessageEditor().getMessage(MessageEditor.MessageType.INFO, - "commands.music.play.success.queueing.title", "⏺", - "", "") - .addField(event.getMessageEditor().getTerm("commands.music.play.success.title"), track.getInfo().title, false) - .addField(event.getMessageEditor().getTerm("commands.music.play.success.author"), track.getInfo().author, true) - .addField(event.getMessageEditor().getTerm("commands.music.play.success.length"), - String.format("%02d:%02d:%02d", TimeUnit.MILLISECONDS.toHours(track.getInfo().length), - TimeUnit.MILLISECONDS.toMinutes(track.getInfo().length) % TimeUnit.HOURS.toMinutes(1), - TimeUnit.MILLISECONDS.toSeconds(track.getInfo().length) % TimeUnit.MINUTES.toSeconds(1)), true) - .build()).queue(); - } + getTrackManager(guild).queue(track, event.getMember()); + msg.editMessage(event.getMessageEditor().getMessage(MessageEditor.MessageType.INFO, + "commands.music.play.success.loading.title", "⏯", + "", "") + .addField(event.getMessageEditor().getTerm("commands.music.play.success.title"), track.getInfo().title, false) + .addField(event.getMessageEditor().getTerm("commands.music.play.success.author"), track.getInfo().author, true) + .addField(event.getMessageEditor().getTerm("commands.music.play.success.length"), + String.format("%02d:%02d:%02d", TimeUnit.MILLISECONDS.toHours(track.getInfo().length), + TimeUnit.MILLISECONDS.toMinutes(track.getInfo().length) % TimeUnit.HOURS.toMinutes(1), + TimeUnit.MILLISECONDS.toSeconds(track.getInfo().length) % TimeUnit.MINUTES.toSeconds(1)), true) + .build()).queue(); } @Override diff --git a/src/main/java/com/bbn/hadder/audio/AudioPlayerSendHandler.java b/src/main/java/com/bbn/hadder/audio/AudioPlayerSendHandler.java index eb4f330..cdbda28 100644 --- a/src/main/java/com/bbn/hadder/audio/AudioPlayerSendHandler.java +++ b/src/main/java/com/bbn/hadder/audio/AudioPlayerSendHandler.java @@ -18,20 +18,15 @@ package com.bbn.hadder.audio; import com.sedmelluq.discord.lavaplayer.player.AudioPlayer; import com.sedmelluq.discord.lavaplayer.track.playback.AudioFrame; -import net.dv8tion.jda.api.audio.AudioReceiveHandler; import net.dv8tion.jda.api.audio.AudioSendHandler; -import net.dv8tion.jda.api.audio.CombinedAudio; import javax.annotation.Nullable; import java.nio.ByteBuffer; -import java.util.Queue; -import java.util.concurrent.ConcurrentLinkedQueue; -public class AudioPlayerSendHandler implements AudioSendHandler, AudioReceiveHandler { +public class AudioPlayerSendHandler implements AudioSendHandler { private final AudioPlayer audioPlayer; private AudioFrame lastFrame; - private final Queue queue = new ConcurrentLinkedQueue<>(); public AudioPlayerSendHandler(AudioPlayer audioPlayer) { this.audioPlayer = audioPlayer; @@ -39,49 +34,28 @@ public class AudioPlayerSendHandler implements AudioSendHandler, AudioReceiveHan @Override public boolean canProvide() { - if (audioPlayer.getPlayingTrack() == null) - return !queue.isEmpty(); - else if (lastFrame == null) { + if (lastFrame == null) { lastFrame = audioPlayer.provide(); - return lastFrame != null; } - return false; + + return lastFrame != null; } @Nullable @Override public ByteBuffer provide20MsAudio() { - if (audioPlayer.getPlayingTrack() == null) { - byte[] data = queue.poll(); - return data == null ? null : ByteBuffer.wrap(data); - } else { - if (lastFrame == null) { - lastFrame = audioPlayer.provide(); - } - - byte[] data = lastFrame != null ? lastFrame.getData() : null; - lastFrame = null; - - return ByteBuffer.wrap(data); + if (lastFrame == null) { + lastFrame = audioPlayer.provide(); } - } - @Override - public boolean canReceiveCombined() { - return queue.size() < 10; - } + byte[] data = lastFrame != null ? lastFrame.getData() : null; + lastFrame = null; - @Override - public void handleCombinedAudio(CombinedAudio combinedAudio) { - if (combinedAudio.getUsers().isEmpty()) - return; - - byte[] data = combinedAudio.getAudioData(1.0f); - queue.add(data); + return ByteBuffer.wrap(data); } @Override public boolean isOpus() { - return audioPlayer.getPlayingTrack() != null; + return true; } } diff --git a/src/main/java/com/bbn/hadder/audio/TrackManager.java b/src/main/java/com/bbn/hadder/audio/TrackManager.java index 669f32c..bb4141f 100644 --- a/src/main/java/com/bbn/hadder/audio/TrackManager.java +++ b/src/main/java/com/bbn/hadder/audio/TrackManager.java @@ -63,19 +63,17 @@ public class TrackManager extends AudioEventAdapter { @Override public void onTrackEnd(AudioPlayer player, AudioTrack track, AudioTrackEndReason endReason) { + Guild g = queue.poll().getAuthor().getGuild(); + this.lastTrack = track; if (loop) { - this.lastTrack = track; player.playTrack(lastTrack.makeClone()); + } else if (queue.isEmpty()) { + manager.players.remove(g.getId()); + manager.getPlayer(g).destroy(); + manager.getTrackManager(g).purgeQueue(); + g.getAudioManager().closeAudioConnection(); } else { - Guild g = queue.poll().getAuthor().getGuild(); - manager.getPlayer(g).stopTrack(); - if (!queue.isEmpty()) player.playTrack(queue.element().getTrack().makeClone()); - else { - manager.players.remove(g.getId()); - manager.getPlayer(g).destroy(); - manager.getTrackManager(g).purgeQueue(); - g.getAudioManager().closeAudioConnection(); - } + player.playTrack(queue.element().getTrack()); } } @@ -100,4 +98,8 @@ public class TrackManager extends AudioEventAdapter { { this.loop = repeating; } + + public AudioInfo getTrackInfo(AudioTrack track) { + return queue.stream().filter(audioInfo -> audioInfo.getTrack().equals(track)).findFirst().orElse(null); + } } diff --git a/src/main/java/com/bbn/hadder/commands/misc/CodeCommand.java b/src/main/java/com/bbn/hadder/commands/misc/CodeCommand.java index a154bb2..728a975 100644 --- a/src/main/java/com/bbn/hadder/commands/misc/CodeCommand.java +++ b/src/main/java/com/bbn/hadder/commands/misc/CodeCommand.java @@ -41,12 +41,11 @@ public class CodeCommand implements Command { "commands.misc.code.success.description") .addField("Code", "[" + args[0] + "](https://discord.gg/" + args[0] + ")", true) .addField("Guild Name", json.getJSONObject("guild").getString("name"), true) - .addBlankField(true) - .addField("Verification Level", String.valueOf(json.getJSONObject("guild").getInt("verification_level")), true) .addField("Guild ID", json.getJSONObject("guild").getString("id"), true) - .addBlankField(true) + .addField("Verification Level", json.getJSONObject("guild").getString("verification_level"), true) .setThumbnail("https://cdn.discordapp.com/icons/" + json.getJSONObject("guild").getString("id") + "/" + json.getJSONObject("guild").getString("icon") + ".png") .build()).queue(); + e.getTextChannel().sendMessage(json.toString()).queue(); } catch (JSONException ex) { e.getTextChannel().sendMessage(e.getMessageEditor().getMessage(MessageEditor.MessageType.ERROR, "commands.misc.code.error.title", diff --git a/src/main/java/com/bbn/hadder/commands/misc/ScreenShareCommand.java b/src/main/java/com/bbn/hadder/commands/misc/ScreenShareCommand.java index c000356..30265d7 100644 --- a/src/main/java/com/bbn/hadder/commands/misc/ScreenShareCommand.java +++ b/src/main/java/com/bbn/hadder/commands/misc/ScreenShareCommand.java @@ -74,7 +74,9 @@ public class ScreenShareCommand implements Command { .setDescription("http://discordapp.com/channels/" + e.getGuild().getId() + "/" + vcs.get(0).getId() + "/").build()).queue(); } } - } else e.getHelpCommand().sendHelp(this, e); + } else { + e.getHelpCommand().sendHelp(this, e); + } } @Override diff --git a/src/main/java/com/bbn/hadder/commands/misc/ServerStatsCommand.java b/src/main/java/com/bbn/hadder/commands/misc/ServerStatsCommand.java index 009a8a0..6ea8bbf 100644 --- a/src/main/java/com/bbn/hadder/commands/misc/ServerStatsCommand.java +++ b/src/main/java/com/bbn/hadder/commands/misc/ServerStatsCommand.java @@ -43,7 +43,6 @@ public class ServerStatsCommand implements Command { .addField("Member Count", String.valueOf(e.getGuild().getMemberCount()), true) .addField("Explicit Content Level", e.getGuild().getExplicitContentLevel().getKey() + ": " + e.getGuild().getExplicitContentLevel(), true) .addField("Features", e.getGuild().getFeatures().toString().replaceAll("\\[", "`").replaceAll(",", "`, `").replaceAll("]", "`"), true) - .addBlankField(true) .setThumbnail(e.getGuild().getIconUrl()) .setImage(e.getGuild().getBannerUrl()); diff --git a/src/main/java/com/bbn/hadder/commands/moderation/BanCommand.java b/src/main/java/com/bbn/hadder/commands/moderation/BanCommand.java index d179018..6fd6bb2 100644 --- a/src/main/java/com/bbn/hadder/commands/moderation/BanCommand.java +++ b/src/main/java/com/bbn/hadder/commands/moderation/BanCommand.java @@ -58,6 +58,8 @@ public class BanCommand implements Command { "commands.moderation.ban.error.title", "commands.moderation.ban.yourself.error.description").build()).queue(); } + } else if (e.getMessage().getMentionedMembers().size() == 0) { + e.getHelpCommand().sendHelp(this, e); } else if (e.getMessage().getMentionedMembers().size() > 1) { for (int i = 0; i < e.getMessage().getMentionedMembers().size(); i++) { Member member = e.getMessage().getMentionedMembers().get(i); @@ -87,7 +89,7 @@ public class BanCommand implements Command { "", "commands.moderation.ban.massban.success.description", String.valueOf(e.getMessage().getMentionedMembers().size())).build()).queue(); - } else e.getHelpCommand().sendHelp(this, e); + } } @Override diff --git a/src/main/java/com/bbn/hadder/commands/moderation/ClearCommand.java b/src/main/java/com/bbn/hadder/commands/moderation/ClearCommand.java index d595aa7..9f6fc14 100644 --- a/src/main/java/com/bbn/hadder/commands/moderation/ClearCommand.java +++ b/src/main/java/com/bbn/hadder/commands/moderation/ClearCommand.java @@ -92,7 +92,9 @@ public class ClearCommand implements Command { } else { e.getTextChannel().sendMessage(e.getMessageEditor().getMessage(MessageEditor.MessageType.NO_SELF_PERMISSION).build()).queue(); } - } else e.getHelpCommand().sendHelp(this, e); + } else { + e.getHelpCommand().sendHelp(this, e); + } } @Override diff --git a/src/main/java/com/bbn/hadder/commands/moderation/InviteDetectCommand.java b/src/main/java/com/bbn/hadder/commands/moderation/InviteDetectCommand.java index bd1e4cd..faad4da 100644 --- a/src/main/java/com/bbn/hadder/commands/moderation/InviteDetectCommand.java +++ b/src/main/java/com/bbn/hadder/commands/moderation/InviteDetectCommand.java @@ -31,7 +31,7 @@ public class InviteDetectCommand implements Command { String opinion = args[0].toLowerCase(); switch (opinion) { case "on": - if (!e.getRethinkServer().hasInviteDetect()) { + if (!e.getRethinkServer().isInviteDetect()) { e.getRethinkServer().setInviteDetect(true); e.getTextChannel().sendMessage( e.getMessageEditor().getMessage( @@ -50,7 +50,7 @@ public class InviteDetectCommand implements Command { break; case "off": - if (e.getRethinkServer().hasInviteDetect()) { + if (e.getRethinkServer().isInviteDetect()) { e.getRethinkServer().setInviteDetect(false); e.getTextChannel().sendMessage(e.getMessageEditor().getMessage( MessageEditor.MessageType.INFO, @@ -69,7 +69,9 @@ public class InviteDetectCommand implements Command { default: e.getHelpCommand().sendHelp(this, e); } - } else e.getHelpCommand().sendHelp(this, e); + } else { + e.getHelpCommand().sendHelp(this, e); + } } @Override diff --git a/src/main/java/com/bbn/hadder/commands/moderation/KickCommand.java b/src/main/java/com/bbn/hadder/commands/moderation/KickCommand.java index 5784644..990042f 100644 --- a/src/main/java/com/bbn/hadder/commands/moderation/KickCommand.java +++ b/src/main/java/com/bbn/hadder/commands/moderation/KickCommand.java @@ -54,6 +54,8 @@ public class KickCommand implements Command { } else { e.getTextChannel().sendMessage(e.getMessageEditor().getMessage(MessageEditor.MessageType.ERROR, "commands.moderation.kick.error.title", "commands.moderation.kick.yourself.error.description").build()).queue(); } + } else if (e.getMessage().getMentionedMembers().size() == 0) { + e.getHelpCommand().sendHelp(this, e); } else if (e.getMessage().getMentionedMembers().size() > 1) { for (int i = 0; i < e.getMessage().getMentionedMembers().size(); i++) { Member member = e.getMessage().getMentionedMembers().get(i); @@ -72,7 +74,7 @@ public class KickCommand implements Command { } } e.getTextChannel().sendMessage(e.getMessageEditor().getMessage(MessageEditor.MessageType.INFO, "commands.moderation.kick.success.title", "✅", "commands.moderation.kick.masskick.success.description", String.valueOf(e.getMessage().getMentionedMembers().size())).build()).queue(); - } else e.getHelpCommand().sendHelp(this, e); + } } @Override diff --git a/src/main/java/com/bbn/hadder/commands/moderation/NickCommand.java b/src/main/java/com/bbn/hadder/commands/moderation/NickCommand.java index 40415bd..1849238 100644 --- a/src/main/java/com/bbn/hadder/commands/moderation/NickCommand.java +++ b/src/main/java/com/bbn/hadder/commands/moderation/NickCommand.java @@ -54,7 +54,9 @@ public class NickCommand implements Command { "commands.moderation.nick.success.description", e.getMessage().getMentionedMembers().get(0).getUser().getAsTag() ).build()).queue(); } - } else e.getHelpCommand().sendHelp(this, e); + } else { + e.getHelpCommand().sendHelp(this, e); + } } else { e.getTextChannel().sendMessage(e.getMessageEditor().getMessage(MessageEditor.MessageType.NO_SELF_PERMISSION).build()).queue(); } @@ -79,7 +81,9 @@ public class NickCommand implements Command { ).build()).queue(); } } - } else if (e.getMessage().getMentionedUsers().size() > 1) { + } else if (e.getMessage().getMentionedMembers().size() == 0) { + e.getHelpCommand().sendHelp(this, e); + } else { for (int i = 0; i < e.getMessage().getMentionedMembers().size(); i++) { Member member = e.getMessage().getMentionedMembers().get(i); if (!e.getJDA().getSelfUser().getId().equals(member.getId())) { @@ -95,7 +99,7 @@ public class NickCommand implements Command { "✅", "commands.moderation.nick.myself.success.description", String.valueOf(e.getMessage().getMentionedMembers().size()) ).build()).queue(); - } else e.getHelpCommand().sendHelp(this, e); + } } else { e.getTextChannel().sendMessage(e.getMessageEditor().getMessage(MessageEditor.MessageType.NO_SELF_PERMISSION).build()).queue(); } diff --git a/src/main/java/com/bbn/hadder/commands/moderation/PrefixCommand.java b/src/main/java/com/bbn/hadder/commands/moderation/PrefixCommand.java index 7b4737b..a6db1db 100644 --- a/src/main/java/com/bbn/hadder/commands/moderation/PrefixCommand.java +++ b/src/main/java/com/bbn/hadder/commands/moderation/PrefixCommand.java @@ -34,7 +34,7 @@ public class PrefixCommand implements Command { e.getTextChannel().sendMessage(e.getMessageEditor().getMessage( MessageEditor.MessageType.INFO, "commands.moderation.prefix.success.title", - "", + "✅", "commands.moderation.prefix.success.description", args[0]).build() ).queue(); @@ -45,7 +45,9 @@ public class PrefixCommand implements Command { "", "commands.moderation.prefix.error.description").build()).queue(); } - } else e.getHelpCommand().sendHelp(this, e); + } else { + e.getHelpCommand().sendHelp(this, e); + } } @Override diff --git a/src/main/java/com/bbn/hadder/commands/moderation/RegionChangeCommand.java b/src/main/java/com/bbn/hadder/commands/moderation/RegionChangeCommand.java index 5e7efcf..59c7a0d 100644 --- a/src/main/java/com/bbn/hadder/commands/moderation/RegionChangeCommand.java +++ b/src/main/java/com/bbn/hadder/commands/moderation/RegionChangeCommand.java @@ -86,16 +86,17 @@ public class RegionChangeCommand implements Command { case "us-south": setRegion(Region.US_SOUTH, "US South", e); break; - case "south-korea": + /*case "south-korea": setRegion(Region.SOUTH_KOREA, "South Korea", e); break; + TODO: Publish when JDA v4.2.0 is released*/ default: e.getTextChannel().sendMessage( e.getMessageEditor().getMessage( MessageEditor.MessageType.INFO, "commands.moderation.regionchange.regions.title", "") - .setDescription("**LOCKED:**\n`amsterdam` `frankfurt` `eu-west` `eu-central` `london` `south korea`\n\n**UNLOCKED:**\n`europe` `brazil` `hongkong` `india` `japan` `singapore` `south-africa` `sydney` `us-central` `us-east` `us-west` `us-south`") + .setDescription("**LOCKED:**\n`amsterdam` `frankfurt` `eu-west` `eu-central` `london`\n\n**UNLOCKED:**\n`europe` `brazil` `hongkong` `india` `japan` `singapore` `south-africa` `sydney` `us-central` `us-east` `us-west` `us-south`") .build()).queue(); break; } @@ -123,7 +124,7 @@ public class RegionChangeCommand implements Command { @Override public String[] labels() { - return new String[]{"changeregion", "cr", "change-region", "region"}; + return new String[]{"changeregion", "cr", "change-region"}; } @Override diff --git a/src/main/java/com/bbn/hadder/commands/moderation/RoleCommand.java b/src/main/java/com/bbn/hadder/commands/moderation/RoleCommand.java index 9094bcd..3799f7f 100644 --- a/src/main/java/com/bbn/hadder/commands/moderation/RoleCommand.java +++ b/src/main/java/com/bbn/hadder/commands/moderation/RoleCommand.java @@ -95,7 +95,9 @@ public class RoleCommand implements Command { } else { e.getTextChannel().sendMessage(e.getMessageEditor().getMessage(MessageEditor.MessageType.NO_SELF_PERMISSION).build()).queue(); } - } else e.getHelpCommand().sendHelp(this, e); + } else { + e.getHelpCommand().sendHelp(this, e); + } } @Override diff --git a/src/main/java/com/bbn/hadder/commands/moderation/StarboardCommand.java b/src/main/java/com/bbn/hadder/commands/moderation/StarboardCommand.java index 03629d5..59bdb7b 100644 --- a/src/main/java/com/bbn/hadder/commands/moderation/StarboardCommand.java +++ b/src/main/java/com/bbn/hadder/commands/moderation/StarboardCommand.java @@ -39,10 +39,12 @@ public class StarboardCommand implements Command { if (channel!=null) { e.getRethinkServer().setStarboard(channel.getId()); } - } else e.getHelpCommand().sendHelp(this, e); + } else { + e.getHelpCommand().sendHelp(this, e); + } } - if (args.length == 2) { + if (args.length==2) { e.getRethinkServer().setNeededStars(args[1]); } diff --git a/src/main/java/com/bbn/hadder/commands/music/EchoCommand.java b/src/main/java/com/bbn/hadder/commands/music/EchoCommand.java index 3af61a9..268498b 100644 --- a/src/main/java/com/bbn/hadder/commands/music/EchoCommand.java +++ b/src/main/java/com/bbn/hadder/commands/music/EchoCommand.java @@ -16,33 +16,68 @@ package com.bbn.hadder.commands.music; -import com.bbn.hadder.audio.AudioPlayerSendHandler; import com.bbn.hadder.commands.Command; import com.bbn.hadder.commands.CommandEvent; -import com.bbn.hadder.utils.MessageEditor; +import com.bbn.hadder.core.Perm; +import com.bbn.hadder.core.Perms; +import net.dv8tion.jda.api.audio.*; import net.dv8tion.jda.api.entities.Guild; import net.dv8tion.jda.api.managers.AudioManager; +import javax.annotation.Nonnull; +import javax.annotation.Nullable; +import java.nio.ByteBuffer; +import java.util.Queue; +import java.util.concurrent.ConcurrentLinkedQueue; + +@Perms(Perm.BOT_OWNER) public class EchoCommand implements Command { @Override - public void executed(String[] args, CommandEvent e) { - Guild guild = e.getMember().getVoiceState().getChannel().getGuild(); + public void executed(String[] args, CommandEvent event) { + Guild guild = event.getMember().getVoiceState().getChannel().getGuild(); AudioManager audioManager = guild.getAudioManager(); - AudioPlayerSendHandler handler = new AudioPlayerSendHandler(e.getAudioManager().getPlayer(e.getGuild())); + EchoHandler handler = new EchoHandler(); if (!audioManager.isConnected()) { audioManager.setSendingHandler(handler); audioManager.setReceivingHandler(handler); - audioManager.openAudioConnection(e.getMember().getVoiceState().getChannel()); - e.getTextChannel().sendMessage(e.getMessageEditor().getMessage(MessageEditor.MessageType.INFO, - "commands.music.echo.success.title", - "commands.music.echo.success.description") - .build()).queue(); + audioManager.openAudioConnection(event.getMember().getVoiceState().getChannel()); } else { audioManager.closeAudioConnection(); } } + public static class EchoHandler implements AudioSendHandler, AudioReceiveHandler { + + private final Queue queue = new ConcurrentLinkedQueue<>(); + + @Override + public boolean canProvide() { + return !queue.isEmpty(); + } + + @Nullable + @Override + public ByteBuffer provide20MsAudio() { + byte[] data = queue.poll(); + return data == null ? null : ByteBuffer.wrap(data); // Wrap this in a java.nio.ByteBuffer + } + + @Override + public boolean canReceiveCombined() { + return queue.size() < 10; + } + + @Override + public void handleCombinedAudio(@Nonnull CombinedAudio combinedAudio) { + if (combinedAudio.getUsers().isEmpty()) + return; + + byte[] data = combinedAudio.getAudioData(1.0f); // volume at 100% = 1.0 (50% = 0.5 / 55% = 0.55) + queue.add(data); + } + } + @Override public String[] labels() { return new String[]{"echo"}; @@ -50,7 +85,7 @@ public class EchoCommand implements Command { @Override public String description() { - return "commands.music.echo.help.description"; + return null; } @Override @@ -62,4 +97,5 @@ public class EchoCommand implements Command { public String example() { return null; } + } diff --git a/src/main/java/com/bbn/hadder/commands/music/RecordCommand.java b/src/main/java/com/bbn/hadder/commands/music/RecordCommand.java index 95ca154..48339ed 100644 --- a/src/main/java/com/bbn/hadder/commands/music/RecordCommand.java +++ b/src/main/java/com/bbn/hadder/commands/music/RecordCommand.java @@ -1,17 +1,5 @@ /* - * Copyright 2019-2020 GregTCLTK and Schlauer-Hax - * - * Licensed under the GNU Affero General Public License, Version 3.0; - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.gnu.org/licenses/agpl-3.0.en.html - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * @author Hax / Hax6775 / Schlauer_Hax */ package com.bbn.hadder.commands.music; @@ -95,7 +83,7 @@ public class RecordCommand implements Command { @Override public String[] labels() { - return new String[]{"record"}; + return new String[]{"echo"}; } @Override diff --git a/src/main/java/com/bbn/hadder/commands/music/SkipCommand.java b/src/main/java/com/bbn/hadder/commands/music/SkipCommand.java index be1a5b1..9500988 100644 --- a/src/main/java/com/bbn/hadder/commands/music/SkipCommand.java +++ b/src/main/java/com/bbn/hadder/commands/music/SkipCommand.java @@ -33,7 +33,7 @@ public class SkipCommand implements Command { } else { e.getTextChannel().sendMessage(e.getMessageEditor().getMessage(MessageEditor.MessageType.ERROR, "commands.music.skip.error.connected.title", - "commands.music.skip.error.connected.description").build()).queue(); + "commands.music.skip.error.connected.description ").build()).queue(); } } else { e.getTextChannel().sendMessage(e.getMessageEditor().getMessage(MessageEditor.MessageType.ERROR, diff --git a/src/main/java/com/bbn/hadder/commands/owner/EvalCommand.java b/src/main/java/com/bbn/hadder/commands/owner/EvalCommand.java index 5d0f8f7..5b5f512 100644 --- a/src/main/java/com/bbn/hadder/commands/owner/EvalCommand.java +++ b/src/main/java/com/bbn/hadder/commands/owner/EvalCommand.java @@ -43,6 +43,7 @@ public class EvalCommand implements Command { } catch (ScriptException ex) { ex.printStackTrace(); } + engine.put("msg".toLowerCase(), e.getMessage()); engine.put("shardmanager".toLowerCase(), Hadder.shardManager); engine.put("rethink".toLowerCase(), e.getRethink()); @@ -96,7 +97,9 @@ public class EvalCommand implements Command { }, 0, TimeUnit.MILLISECONDS); - } else e.getHelpCommand().sendHelp(this, e); + } else { + e.getHelpCommand().sendHelp(this, e); + } } @Override diff --git a/src/main/java/com/bbn/hadder/commands/owner/GuildLeaveCommand.java b/src/main/java/com/bbn/hadder/commands/owner/GuildLeaveCommand.java index 0db2850..15bc1a9 100644 --- a/src/main/java/com/bbn/hadder/commands/owner/GuildLeaveCommand.java +++ b/src/main/java/com/bbn/hadder/commands/owner/GuildLeaveCommand.java @@ -41,7 +41,9 @@ public class GuildLeaveCommand implements Command { } catch (Exception ex) { e.getTextChannel().sendMessage(e.getMessageEditor().getMessage(MessageEditor.MessageType.ERROR, "commands.owner.guildleave.error.title", "", "commands.owner.guildleave.help.description", guild.getName()).build()).queue(); } - } else e.getHelpCommand().sendHelp(this, e); + } else { + e.getHelpCommand().sendHelp(this, e); + } } @Override diff --git a/src/main/java/com/bbn/hadder/commands/settings/LanguageCommand.java b/src/main/java/com/bbn/hadder/commands/settings/LanguageCommand.java index 7c6ab93..e09a44a 100644 --- a/src/main/java/com/bbn/hadder/commands/settings/LanguageCommand.java +++ b/src/main/java/com/bbn/hadder/commands/settings/LanguageCommand.java @@ -54,7 +54,9 @@ public class LanguageCommand implements Command { .build()).queue(); break; } - } else e.getHelpCommand().sendHelp(this, e); + } else { + e.getHelpCommand().sendHelp(this, e); + } } public void setLanguage(String language_code, String language, CommandEvent e) { diff --git a/src/main/java/com/bbn/hadder/commands/settings/UserPrefixCommand.java b/src/main/java/com/bbn/hadder/commands/settings/UserPrefixCommand.java index 3867bb4..4b17d3f 100644 --- a/src/main/java/com/bbn/hadder/commands/settings/UserPrefixCommand.java +++ b/src/main/java/com/bbn/hadder/commands/settings/UserPrefixCommand.java @@ -32,7 +32,9 @@ public class UserPrefixCommand implements Command { .build()) .queue(); e.getRethinkUser().push(); - } else e.getHelpCommand().sendHelp(this, e); + } else { + e.getHelpCommand().sendHelp(this, e); + } } @Override diff --git a/src/main/java/com/bbn/hadder/core/Perm.java b/src/main/java/com/bbn/hadder/core/Perm.java index 0eea910..042412e 100644 --- a/src/main/java/com/bbn/hadder/core/Perm.java +++ b/src/main/java/com/bbn/hadder/core/Perm.java @@ -33,6 +33,12 @@ public enum Perm { return e.getMember().hasPermission(Permission.MESSAGE_MANAGE) || e.getConfig().getOwners().contains(e.getAuthor().getIdLong()); } }, + EMBED_MESSAGES { + @Override + public boolean check(CommandEvent e) { + return e.getMember().hasPermission(Permission.MESSAGE_EMBED_LINKS) || e.getConfig().getOwners().contains(e.getAuthor().getIdLong()); + } + }, BAN_MEMBERS { @Override public boolean check(CommandEvent e) { diff --git a/src/main/java/com/bbn/hadder/listener/InviteLinkListener.java b/src/main/java/com/bbn/hadder/listener/InviteLinkListener.java index ea00e93..88aa3ee 100644 --- a/src/main/java/com/bbn/hadder/listener/InviteLinkListener.java +++ b/src/main/java/com/bbn/hadder/listener/InviteLinkListener.java @@ -41,11 +41,11 @@ public class InviteLinkListener extends ListenerAdapter { @Override public void onMessageReceived(@Nonnull MessageReceivedEvent e) { + RethinkServer rethinkServer = new RethinkServer(rethink.getObjectByID("server", e.getGuild().getId()), rethink); if (e.isFromType(ChannelType.TEXT)) { - RethinkServer rethinkServer = new RethinkServer(rethink.getObjectByID("server", e.getGuild().getId()), rethink); - if (e.getMessage().getContentRaw().contains("discord.gg/") && (!e.getMember().hasPermission(Permission.ADMINISTRATOR) && rethinkServer.hasInviteDetect())) { + if (e.getMessage().getContentRaw().contains("discord.gg/") && (!e.getMember().hasPermission(Permission.ADMINISTRATOR) && rethinkServer.isInviteDetect())) { checkInvite(e.getMessage(), "discord.gg/"); - } else if (e.getMessage().getContentRaw().contains("discordapp.com/invite") && !e.getMember().hasPermission(Permission.ADMINISTRATOR) && rethinkServer.hasInviteDetect()) { + } else if (e.getMessage().getContentRaw().contains("discordapp.com/invite") && (!e.getMember().hasPermission(Permission.ADMINISTRATOR) && rethinkServer.isInviteDetect())) { checkInvite(e.getMessage(), "discordapp.com/invite/"); } } @@ -69,11 +69,11 @@ public class InviteLinkListener extends ListenerAdapter { @Override public void onMessageUpdate(@Nonnull MessageUpdateEvent e) { + RethinkServer rethinkServer = new RethinkServer(rethink.getObjectByID("server", e.getGuild().getId()), rethink); if (e.isFromType(ChannelType.TEXT)) { - RethinkServer rethinkServer = new RethinkServer(rethink.getObjectByID("server", e.getGuild().getId()), rethink); - if (e.getMessage().getContentRaw().contains("discord.gg/") && !e.getMember().hasPermission(Permission.ADMINISTRATOR) && rethinkServer.hasInviteDetect()) { + if (e.getMessage().getContentRaw().contains("discord.gg/") && !e.getMember().hasPermission(Permission.ADMINISTRATOR) && rethinkServer.isInviteDetect()) { checkInvite(e.getMessage(), "discord.gg/"); - } else if (e.getMessage().getContentRaw().contains("discordapp.com/invite") && !e.getMember().hasPermission(Permission.ADMINISTRATOR) && rethinkServer.hasInviteDetect()) { + } else if (e.getMessage().getContentRaw().contains("discordapp.com/invite") && !e.getMember().hasPermission(Permission.ADMINISTRATOR) && rethinkServer.isInviteDetect()) { checkInvite(e.getMessage(), "discordapp.com/invite/"); } } diff --git a/src/main/java/com/bbn/hadder/listener/StarboardListener.java b/src/main/java/com/bbn/hadder/listener/StarboardListener.java index 2467ad5..ba66f81 100644 --- a/src/main/java/com/bbn/hadder/listener/StarboardListener.java +++ b/src/main/java/com/bbn/hadder/listener/StarboardListener.java @@ -50,7 +50,7 @@ public class StarboardListener extends ListenerAdapter { if (e.getReaction().getReactionEmote().getName().equals("⭐")) { RethinkServer rethinkServer = new RethinkServer(rethink.getObjectByID("server", e.getGuild().getId()), rethink); if (!rethink.hasStarboardMessage(e.getMessageId())) { - if (rethinkServer.hasStarboardChannel()) { + if (rethink.hasStarboardChannel(e.getGuild().getId())) { e.getTextChannel().retrieveMessageById(e.getMessageId()).queue( msg -> { int stars = 0; diff --git a/src/main/java/com/bbn/hadder/listener/VoiceLeaveListener.java b/src/main/java/com/bbn/hadder/listener/VoiceLeaveListener.java index 753cf7f..d53391f 100644 --- a/src/main/java/com/bbn/hadder/listener/VoiceLeaveListener.java +++ b/src/main/java/com/bbn/hadder/listener/VoiceLeaveListener.java @@ -30,7 +30,7 @@ public class VoiceLeaveListener extends ListenerAdapter { @Override public void onGuildVoiceLeave(GuildVoiceLeaveEvent e) { - if (!e.getMember().getUser().isBot() && audioManager.hasPlayer(e.getGuild()) && e.getChannelLeft().getMembers().size() == 1 && e.getChannelLeft().getMembers().get(0).equals(e.getGuild().getSelfMember())) { + if (audioManager.hasPlayer(e.getGuild()) && e.getChannelLeft().getMembers().equals(e.getGuild().getSelfMember())) { audioManager.players.remove(e.getGuild().getId()); audioManager.getPlayer(e.getGuild()).destroy(); audioManager.getTrackManager(e.getGuild()).purgeQueue(); diff --git a/src/main/resources/Translations/Translations_de.properties b/src/main/resources/Translations/Translations_de.properties index 1c0ee4f..bda82bd 100644 --- a/src/main/resources/Translations/Translations_de.properties +++ b/src/main/resources/Translations/Translations_de.properties @@ -117,17 +117,17 @@ commands.moderation.clear.message.error.title = Keine Nachrichten\! commands.moderation.clear.message.error.description = Es gibt keine Nachrichten in diesem Kanal. commands.moderation.clear.help.description = Löscht die angegebene Anzahl von Nachrichten. commands.moderation.prefix.success.title = Erfolgreich festgelegt -commands.moderation.prefix.success.description = Ich habe den neuen Prefix für die Guild erfolgreich zu `%extra% ` geändert. +commands.moderation.prefix.success.description = I successfully set the new prefix for the server to `%extra%`. commands.moderation.prefix.error.description = Der Prefix darf nicht **"** enthalten commands.moderation.prefix.help.description = Legt den Guild-Prefix fest. commands.moderation.invitedetect.activate.success.title = Erfolgreich aktiviert -commands.moderation.invitedetect.activate.success.description = Ich habe erfolgreich die Erkennung für Einladungslinks auf diesem Server aktiviert. +commands.moderation.invitedetect.activate.success.description = I successfully activated the invite link detection for this server. commands.moderation.invitedetect.activate.error.title = Bereits aktiviert -commands.moderation.invitedetect.activate.error.description = Die Erkennung für Einladungslinks ist bereits auf diesem Server aktiviert. +commands.moderation.invitedetect.activate.error.description = The invite link detection is already activated on this server. commands.moderation.invitedetect.deactivate.success.title = Erfolgreich deaktiviert -commands.moderation.invitedetect.deactivate.success.description = Ich habe erfolgreich die Erkennung für Einladungslinks auf diesem Server deaktiviert. +commands.moderation.invitedetect.deactivate.success.description = I successfully deactivated the invite link detection for this server. commands.moderation.invitedetect.deactivate.error.title = Bereits deaktiviert -commands.moderation.invitedetect.deactivate.error.description = Die Einladungslink-Erkennung ist auf dieser Guild bereits deaktiviert. +commands.moderation.invitedetect.deactivate.error.description = The invite link detection is already deactivated on this server. commands.moderation.invitedetect.help.description = Aktiviert oder deaktiviert die Discord Einladungserkennung. commands.moderation.kick.success.title = %extra% Erfolgreich gekickt %extra% commands.moderation.kick.success.description = Ich habe %extra% erfolgreich gekickt. @@ -160,11 +160,11 @@ commands.moderation.rules.rules.description = Der Kanal wurde erfolgreich auf %e commands.moderation.rules.role.title = Rolle zum Hinzufügen commands.moderation.rules.role.description = Die Regeln wurden erfolgreich festgelegt. Bitte sende mir den Namen der Rolle, die der Benutzer erhalten soll nachdem er die Regeln akzeptiert hat. commands.moderation.rules.role.error.title = Rolle existiert nicht -commands.moderation.rules.role.error.description = The specified role does not exist on this guild. +commands.moderation.rules.role.error.description = The specified role does not exist on this server. commands.moderation.rules.role.permission.error.title = Keine Berechtigung commands.moderation.rules.role.permission.error.description = You cannot select this role because you cannot interact with it. commands.moderation.rules.guild.error.title = Falsche Guild -commands.moderation.rules.guild.error.description = Der erwähnte Kanal muss auf diesem Server sein\! +commands.moderation.rules.guild.error.description = The mentioned channel must be on this server\! commands.moderation.rules.emote.accept.title = Benutzerdefiniertes Zustimmungsemote commands.moderation.rules.emote.accept.description = The role has been successfully set to %extra%. Now send me the emote on which your user should react to to get verified. commands.moderation.rules.emote.decline.title = Custom Decline Emote @@ -223,6 +223,7 @@ commands.music.leave.help.description = Verlässt einen Sprachkanal. commands.music.play.load.title = %extra% Now loading %extra% commands.music.play.load.description = Versuche das Lied zu laden... commands.music.play.success.loading.title = %extra% Jetzt läuft %extra% +commands.music.play.success.queueing.title = %extra% Added to queue %extra% commands.music.play.success.title = Titel commands.music.play.success.author = Autor commands.music.play.success.length = Länge @@ -276,6 +277,9 @@ commands.music.loop.success.unloop.description = Ich werde den gerade gespielten commands.music.loop.error.connected.title = Kein Kanal commands.music.loop.error.connected.description = You have to be in the same voice channel as the bot to set the repeat status. commands.music.loop.help.description = Wiederholt ein Lied/Warteschlange. +commands.music.echo.success.title = Erfolgreich aktiviert +commands.music.echo.success.description = I will now repeat everything I can hear in your voice channel +commands.music.echo.help.description = Sends your voice through Hadder. commands.nsfw.gif.error.title = GIF wird nicht angezeigt? Klicke hier commands.nsfw.img.error.title = Bild wird nicht angezeigt? Klicke hier @@ -303,8 +307,8 @@ commands.owner.eval.help.description = Führt den angegebenen Code aus commands.owner.guildleave.success.title = Erfolgreich verlassen commands.owner.guildleave.success.description = Ich habe %extra% erfolgreich verlassen. commands.owner.guildleave.error.title = Verlassen nicht möglich -commands.owner.guildleave.error.description = I can not leave from this guild. Maybe this isn't a ID? -commands.owner.guildleave.help.description = Quit from a guild +commands.owner.guildleave.error.description = I can not leave from this server. Maybe this isn't a ID? +commands.owner.guildleave.help.description = Quit from a server commands.owner.reboot.help.description = Startet den Bot neu. commands.owner.shutdown.success.title = Fährt herrunter commands.owner.shutdown.help.description = Schalte den Bot ab. @@ -319,6 +323,6 @@ commands.owner.blacklist.help.description = Blacklist a user for specific comman commands.settings.language.success.title = Sprache festgelegt commands.settings.language.success.description = `%extra%` ist jetzt deine neue Sprache. commands.settings.language.help.description = Führt den angegebenen Code aus. -commands.settings.prefix.success.title = Erfolgreich festgelegt +commands.settings.prefix.success.title = Successfully set prefix commands.settings.prefix.success.description = Ich habe erfolgreich den neuen Prefix für dich auf `%extra% `gesetzt. commands.settings.prefix.help.description = Legt einen neuen Prefix fest. diff --git a/src/main/resources/Translations/Translations_es.properties b/src/main/resources/Translations/Translations_es.properties index 75aaadd..01d2f6e 100644 --- a/src/main/resources/Translations/Translations_es.properties +++ b/src/main/resources/Translations/Translations_es.properties @@ -117,17 +117,17 @@ commands.moderation.clear.message.error.title = No messages\! commands.moderation.clear.message.error.description = There are no messages in this channel. commands.moderation.clear.help.description = Deletes the specified number of messages. commands.moderation.prefix.success.title = %extra% Successfully set %extra% -commands.moderation.prefix.success.description = I successfully set the new prefix for the guild to `%extra%`. +commands.moderation.prefix.success.description = I successfully set the new prefix for the server to `%extra%`. commands.moderation.prefix.error.description = The prefix must not contain **"** commands.moderation.prefix.help.description = Sets the Guild-Prefix. commands.moderation.invitedetect.activate.success.title = Successfully activated -commands.moderation.invitedetect.activate.success.description = I successfully activated the invite link detection for this guild. +commands.moderation.invitedetect.activate.success.description = I successfully activated the invite link detection for this server. commands.moderation.invitedetect.activate.error.title = Already activated -commands.moderation.invitedetect.activate.error.description = The invite link detection is already activated on this guild. +commands.moderation.invitedetect.activate.error.description = The invite link detection is already activated on this server. commands.moderation.invitedetect.deactivate.success.title = Successfully deactivated -commands.moderation.invitedetect.deactivate.success.description = I successfully deactivated the invite link detection for this guild. +commands.moderation.invitedetect.deactivate.success.description = I successfully deactivated the invite link detection for this server. commands.moderation.invitedetect.deactivate.error.title = Already deactivated -commands.moderation.invitedetect.deactivate.error.description = The invite link detection is already deactivated on this guild. +commands.moderation.invitedetect.deactivate.error.description = The invite link detection is already deactivated on this server. commands.moderation.invitedetect.help.description = Activate or deactivate the Discord invite link detection. commands.moderation.kick.success.title = %extra% Successfully kicked %extra% commands.moderation.kick.success.description = I successfully kicked %extra%. @@ -160,11 +160,11 @@ commands.moderation.rules.rules.description = The channel was successfully set t commands.moderation.rules.role.title = Role to assign/remove commands.moderation.rules.role.description = The rules were successfully set. Please send me the name of the role which the user receives/loses after he accepted the rules. commands.moderation.rules.role.error.title = Role does not exist -commands.moderation.rules.role.error.description = The specified role does not exist on this guild. +commands.moderation.rules.role.error.description = The specified role does not exist on this server. commands.moderation.rules.role.permission.error.title = No permission commands.moderation.rules.role.permission.error.description = You cannot select this role because you cannot interact with it. commands.moderation.rules.guild.error.title = Wrong Guild -commands.moderation.rules.guild.error.description = The mentioned channel must be on this guild\! +commands.moderation.rules.guild.error.description = The mentioned channel must be on this server\! commands.moderation.rules.emote.accept.title = Custom Accept Emote commands.moderation.rules.emote.accept.description = The role has been successfully set to %extra%. Now send me the emote on which your user should react to to get verified. commands.moderation.rules.emote.decline.title = Custom Decline Emote @@ -223,6 +223,7 @@ commands.music.leave.help.description = Leaves your voice channel. commands.music.play.load.title = %extra% Now loading %extra% commands.music.play.load.description = Trying to load the song... commands.music.play.success.loading.title = %extra% Now playing %extra% +commands.music.play.success.queueing.title = %extra% Added to queue %extra% commands.music.play.success.title = Title commands.music.play.success.author = Author commands.music.play.success.length = Length @@ -276,6 +277,9 @@ commands.music.loop.success.unloop.description = I will no longer repeat the cur commands.music.loop.error.connected.title = No channel commands.music.loop.error.connected.description = You have to be in the same voice channel as the bot to set the repeat status. commands.music.loop.help.description = Repeats a song/queue. +commands.music.echo.success.title = Successfully activated +commands.music.echo.success.description = I will now repeat everything I can hear in your voice channel +commands.music.echo.help.description = Sends your voice through Hadder. commands.nsfw.gif.error.title = GIF not showing? Click here commands.nsfw.img.error.title = Image not showing? Click here @@ -303,8 +307,8 @@ commands.owner.eval.help.description = Execute the given code commands.owner.guildleave.success.title = Successfully left commands.owner.guildleave.success.description = I successfully left %extra%. commands.owner.guildleave.error.title = Can not leave -commands.owner.guildleave.error.description = I can not leave from this guild. Maybe this isn't a ID? -commands.owner.guildleave.help.description = Quit from a guild +commands.owner.guildleave.error.description = I can not leave from this server. Maybe this isn't a ID? +commands.owner.guildleave.help.description = Quit from a server commands.owner.reboot.help.description = Restart the bot commands.owner.shutdown.success.title = Shutdown commands.owner.shutdown.help.description = Shuts the Bot down @@ -319,6 +323,6 @@ commands.owner.blacklist.help.description = Blacklist a user for specific comman commands.settings.language.success.title = Language set commands.settings.language.success.description = `%extra%` is your new language now. commands.settings.language.help.description = Sets the new primary language for a user. -commands.settings.prefix.success.title = %extra% Successfully set %extra% +commands.settings.prefix.success.title = Successfully set prefix commands.settings.prefix.success.description = I successfully set the new prefix for you to `%extra%`. commands.settings.prefix.help.description = Sets a new prefix. diff --git a/src/main/resources/Translations/Translations_fr.properties b/src/main/resources/Translations/Translations_fr.properties index 75aaadd..01d2f6e 100644 --- a/src/main/resources/Translations/Translations_fr.properties +++ b/src/main/resources/Translations/Translations_fr.properties @@ -117,17 +117,17 @@ commands.moderation.clear.message.error.title = No messages\! commands.moderation.clear.message.error.description = There are no messages in this channel. commands.moderation.clear.help.description = Deletes the specified number of messages. commands.moderation.prefix.success.title = %extra% Successfully set %extra% -commands.moderation.prefix.success.description = I successfully set the new prefix for the guild to `%extra%`. +commands.moderation.prefix.success.description = I successfully set the new prefix for the server to `%extra%`. commands.moderation.prefix.error.description = The prefix must not contain **"** commands.moderation.prefix.help.description = Sets the Guild-Prefix. commands.moderation.invitedetect.activate.success.title = Successfully activated -commands.moderation.invitedetect.activate.success.description = I successfully activated the invite link detection for this guild. +commands.moderation.invitedetect.activate.success.description = I successfully activated the invite link detection for this server. commands.moderation.invitedetect.activate.error.title = Already activated -commands.moderation.invitedetect.activate.error.description = The invite link detection is already activated on this guild. +commands.moderation.invitedetect.activate.error.description = The invite link detection is already activated on this server. commands.moderation.invitedetect.deactivate.success.title = Successfully deactivated -commands.moderation.invitedetect.deactivate.success.description = I successfully deactivated the invite link detection for this guild. +commands.moderation.invitedetect.deactivate.success.description = I successfully deactivated the invite link detection for this server. commands.moderation.invitedetect.deactivate.error.title = Already deactivated -commands.moderation.invitedetect.deactivate.error.description = The invite link detection is already deactivated on this guild. +commands.moderation.invitedetect.deactivate.error.description = The invite link detection is already deactivated on this server. commands.moderation.invitedetect.help.description = Activate or deactivate the Discord invite link detection. commands.moderation.kick.success.title = %extra% Successfully kicked %extra% commands.moderation.kick.success.description = I successfully kicked %extra%. @@ -160,11 +160,11 @@ commands.moderation.rules.rules.description = The channel was successfully set t commands.moderation.rules.role.title = Role to assign/remove commands.moderation.rules.role.description = The rules were successfully set. Please send me the name of the role which the user receives/loses after he accepted the rules. commands.moderation.rules.role.error.title = Role does not exist -commands.moderation.rules.role.error.description = The specified role does not exist on this guild. +commands.moderation.rules.role.error.description = The specified role does not exist on this server. commands.moderation.rules.role.permission.error.title = No permission commands.moderation.rules.role.permission.error.description = You cannot select this role because you cannot interact with it. commands.moderation.rules.guild.error.title = Wrong Guild -commands.moderation.rules.guild.error.description = The mentioned channel must be on this guild\! +commands.moderation.rules.guild.error.description = The mentioned channel must be on this server\! commands.moderation.rules.emote.accept.title = Custom Accept Emote commands.moderation.rules.emote.accept.description = The role has been successfully set to %extra%. Now send me the emote on which your user should react to to get verified. commands.moderation.rules.emote.decline.title = Custom Decline Emote @@ -223,6 +223,7 @@ commands.music.leave.help.description = Leaves your voice channel. commands.music.play.load.title = %extra% Now loading %extra% commands.music.play.load.description = Trying to load the song... commands.music.play.success.loading.title = %extra% Now playing %extra% +commands.music.play.success.queueing.title = %extra% Added to queue %extra% commands.music.play.success.title = Title commands.music.play.success.author = Author commands.music.play.success.length = Length @@ -276,6 +277,9 @@ commands.music.loop.success.unloop.description = I will no longer repeat the cur commands.music.loop.error.connected.title = No channel commands.music.loop.error.connected.description = You have to be in the same voice channel as the bot to set the repeat status. commands.music.loop.help.description = Repeats a song/queue. +commands.music.echo.success.title = Successfully activated +commands.music.echo.success.description = I will now repeat everything I can hear in your voice channel +commands.music.echo.help.description = Sends your voice through Hadder. commands.nsfw.gif.error.title = GIF not showing? Click here commands.nsfw.img.error.title = Image not showing? Click here @@ -303,8 +307,8 @@ commands.owner.eval.help.description = Execute the given code commands.owner.guildleave.success.title = Successfully left commands.owner.guildleave.success.description = I successfully left %extra%. commands.owner.guildleave.error.title = Can not leave -commands.owner.guildleave.error.description = I can not leave from this guild. Maybe this isn't a ID? -commands.owner.guildleave.help.description = Quit from a guild +commands.owner.guildleave.error.description = I can not leave from this server. Maybe this isn't a ID? +commands.owner.guildleave.help.description = Quit from a server commands.owner.reboot.help.description = Restart the bot commands.owner.shutdown.success.title = Shutdown commands.owner.shutdown.help.description = Shuts the Bot down @@ -319,6 +323,6 @@ commands.owner.blacklist.help.description = Blacklist a user for specific comman commands.settings.language.success.title = Language set commands.settings.language.success.description = `%extra%` is your new language now. commands.settings.language.help.description = Sets the new primary language for a user. -commands.settings.prefix.success.title = %extra% Successfully set %extra% +commands.settings.prefix.success.title = Successfully set prefix commands.settings.prefix.success.description = I successfully set the new prefix for you to `%extra%`. commands.settings.prefix.help.description = Sets a new prefix. diff --git a/src/main/resources/Translations/Translations_ru.properties b/src/main/resources/Translations/Translations_ru.properties index 75aaadd..01d2f6e 100644 --- a/src/main/resources/Translations/Translations_ru.properties +++ b/src/main/resources/Translations/Translations_ru.properties @@ -117,17 +117,17 @@ commands.moderation.clear.message.error.title = No messages\! commands.moderation.clear.message.error.description = There are no messages in this channel. commands.moderation.clear.help.description = Deletes the specified number of messages. commands.moderation.prefix.success.title = %extra% Successfully set %extra% -commands.moderation.prefix.success.description = I successfully set the new prefix for the guild to `%extra%`. +commands.moderation.prefix.success.description = I successfully set the new prefix for the server to `%extra%`. commands.moderation.prefix.error.description = The prefix must not contain **"** commands.moderation.prefix.help.description = Sets the Guild-Prefix. commands.moderation.invitedetect.activate.success.title = Successfully activated -commands.moderation.invitedetect.activate.success.description = I successfully activated the invite link detection for this guild. +commands.moderation.invitedetect.activate.success.description = I successfully activated the invite link detection for this server. commands.moderation.invitedetect.activate.error.title = Already activated -commands.moderation.invitedetect.activate.error.description = The invite link detection is already activated on this guild. +commands.moderation.invitedetect.activate.error.description = The invite link detection is already activated on this server. commands.moderation.invitedetect.deactivate.success.title = Successfully deactivated -commands.moderation.invitedetect.deactivate.success.description = I successfully deactivated the invite link detection for this guild. +commands.moderation.invitedetect.deactivate.success.description = I successfully deactivated the invite link detection for this server. commands.moderation.invitedetect.deactivate.error.title = Already deactivated -commands.moderation.invitedetect.deactivate.error.description = The invite link detection is already deactivated on this guild. +commands.moderation.invitedetect.deactivate.error.description = The invite link detection is already deactivated on this server. commands.moderation.invitedetect.help.description = Activate or deactivate the Discord invite link detection. commands.moderation.kick.success.title = %extra% Successfully kicked %extra% commands.moderation.kick.success.description = I successfully kicked %extra%. @@ -160,11 +160,11 @@ commands.moderation.rules.rules.description = The channel was successfully set t commands.moderation.rules.role.title = Role to assign/remove commands.moderation.rules.role.description = The rules were successfully set. Please send me the name of the role which the user receives/loses after he accepted the rules. commands.moderation.rules.role.error.title = Role does not exist -commands.moderation.rules.role.error.description = The specified role does not exist on this guild. +commands.moderation.rules.role.error.description = The specified role does not exist on this server. commands.moderation.rules.role.permission.error.title = No permission commands.moderation.rules.role.permission.error.description = You cannot select this role because you cannot interact with it. commands.moderation.rules.guild.error.title = Wrong Guild -commands.moderation.rules.guild.error.description = The mentioned channel must be on this guild\! +commands.moderation.rules.guild.error.description = The mentioned channel must be on this server\! commands.moderation.rules.emote.accept.title = Custom Accept Emote commands.moderation.rules.emote.accept.description = The role has been successfully set to %extra%. Now send me the emote on which your user should react to to get verified. commands.moderation.rules.emote.decline.title = Custom Decline Emote @@ -223,6 +223,7 @@ commands.music.leave.help.description = Leaves your voice channel. commands.music.play.load.title = %extra% Now loading %extra% commands.music.play.load.description = Trying to load the song... commands.music.play.success.loading.title = %extra% Now playing %extra% +commands.music.play.success.queueing.title = %extra% Added to queue %extra% commands.music.play.success.title = Title commands.music.play.success.author = Author commands.music.play.success.length = Length @@ -276,6 +277,9 @@ commands.music.loop.success.unloop.description = I will no longer repeat the cur commands.music.loop.error.connected.title = No channel commands.music.loop.error.connected.description = You have to be in the same voice channel as the bot to set the repeat status. commands.music.loop.help.description = Repeats a song/queue. +commands.music.echo.success.title = Successfully activated +commands.music.echo.success.description = I will now repeat everything I can hear in your voice channel +commands.music.echo.help.description = Sends your voice through Hadder. commands.nsfw.gif.error.title = GIF not showing? Click here commands.nsfw.img.error.title = Image not showing? Click here @@ -303,8 +307,8 @@ commands.owner.eval.help.description = Execute the given code commands.owner.guildleave.success.title = Successfully left commands.owner.guildleave.success.description = I successfully left %extra%. commands.owner.guildleave.error.title = Can not leave -commands.owner.guildleave.error.description = I can not leave from this guild. Maybe this isn't a ID? -commands.owner.guildleave.help.description = Quit from a guild +commands.owner.guildleave.error.description = I can not leave from this server. Maybe this isn't a ID? +commands.owner.guildleave.help.description = Quit from a server commands.owner.reboot.help.description = Restart the bot commands.owner.shutdown.success.title = Shutdown commands.owner.shutdown.help.description = Shuts the Bot down @@ -319,6 +323,6 @@ commands.owner.blacklist.help.description = Blacklist a user for specific comman commands.settings.language.success.title = Language set commands.settings.language.success.description = `%extra%` is your new language now. commands.settings.language.help.description = Sets the new primary language for a user. -commands.settings.prefix.success.title = %extra% Successfully set %extra% +commands.settings.prefix.success.title = Successfully set prefix commands.settings.prefix.success.description = I successfully set the new prefix for you to `%extra%`. commands.settings.prefix.help.description = Sets a new prefix. diff --git a/src/main/resources/Translations/Translations_tr.properties b/src/main/resources/Translations/Translations_tr.properties index 75aaadd..01d2f6e 100644 --- a/src/main/resources/Translations/Translations_tr.properties +++ b/src/main/resources/Translations/Translations_tr.properties @@ -117,17 +117,17 @@ commands.moderation.clear.message.error.title = No messages\! commands.moderation.clear.message.error.description = There are no messages in this channel. commands.moderation.clear.help.description = Deletes the specified number of messages. commands.moderation.prefix.success.title = %extra% Successfully set %extra% -commands.moderation.prefix.success.description = I successfully set the new prefix for the guild to `%extra%`. +commands.moderation.prefix.success.description = I successfully set the new prefix for the server to `%extra%`. commands.moderation.prefix.error.description = The prefix must not contain **"** commands.moderation.prefix.help.description = Sets the Guild-Prefix. commands.moderation.invitedetect.activate.success.title = Successfully activated -commands.moderation.invitedetect.activate.success.description = I successfully activated the invite link detection for this guild. +commands.moderation.invitedetect.activate.success.description = I successfully activated the invite link detection for this server. commands.moderation.invitedetect.activate.error.title = Already activated -commands.moderation.invitedetect.activate.error.description = The invite link detection is already activated on this guild. +commands.moderation.invitedetect.activate.error.description = The invite link detection is already activated on this server. commands.moderation.invitedetect.deactivate.success.title = Successfully deactivated -commands.moderation.invitedetect.deactivate.success.description = I successfully deactivated the invite link detection for this guild. +commands.moderation.invitedetect.deactivate.success.description = I successfully deactivated the invite link detection for this server. commands.moderation.invitedetect.deactivate.error.title = Already deactivated -commands.moderation.invitedetect.deactivate.error.description = The invite link detection is already deactivated on this guild. +commands.moderation.invitedetect.deactivate.error.description = The invite link detection is already deactivated on this server. commands.moderation.invitedetect.help.description = Activate or deactivate the Discord invite link detection. commands.moderation.kick.success.title = %extra% Successfully kicked %extra% commands.moderation.kick.success.description = I successfully kicked %extra%. @@ -160,11 +160,11 @@ commands.moderation.rules.rules.description = The channel was successfully set t commands.moderation.rules.role.title = Role to assign/remove commands.moderation.rules.role.description = The rules were successfully set. Please send me the name of the role which the user receives/loses after he accepted the rules. commands.moderation.rules.role.error.title = Role does not exist -commands.moderation.rules.role.error.description = The specified role does not exist on this guild. +commands.moderation.rules.role.error.description = The specified role does not exist on this server. commands.moderation.rules.role.permission.error.title = No permission commands.moderation.rules.role.permission.error.description = You cannot select this role because you cannot interact with it. commands.moderation.rules.guild.error.title = Wrong Guild -commands.moderation.rules.guild.error.description = The mentioned channel must be on this guild\! +commands.moderation.rules.guild.error.description = The mentioned channel must be on this server\! commands.moderation.rules.emote.accept.title = Custom Accept Emote commands.moderation.rules.emote.accept.description = The role has been successfully set to %extra%. Now send me the emote on which your user should react to to get verified. commands.moderation.rules.emote.decline.title = Custom Decline Emote @@ -223,6 +223,7 @@ commands.music.leave.help.description = Leaves your voice channel. commands.music.play.load.title = %extra% Now loading %extra% commands.music.play.load.description = Trying to load the song... commands.music.play.success.loading.title = %extra% Now playing %extra% +commands.music.play.success.queueing.title = %extra% Added to queue %extra% commands.music.play.success.title = Title commands.music.play.success.author = Author commands.music.play.success.length = Length @@ -276,6 +277,9 @@ commands.music.loop.success.unloop.description = I will no longer repeat the cur commands.music.loop.error.connected.title = No channel commands.music.loop.error.connected.description = You have to be in the same voice channel as the bot to set the repeat status. commands.music.loop.help.description = Repeats a song/queue. +commands.music.echo.success.title = Successfully activated +commands.music.echo.success.description = I will now repeat everything I can hear in your voice channel +commands.music.echo.help.description = Sends your voice through Hadder. commands.nsfw.gif.error.title = GIF not showing? Click here commands.nsfw.img.error.title = Image not showing? Click here @@ -303,8 +307,8 @@ commands.owner.eval.help.description = Execute the given code commands.owner.guildleave.success.title = Successfully left commands.owner.guildleave.success.description = I successfully left %extra%. commands.owner.guildleave.error.title = Can not leave -commands.owner.guildleave.error.description = I can not leave from this guild. Maybe this isn't a ID? -commands.owner.guildleave.help.description = Quit from a guild +commands.owner.guildleave.error.description = I can not leave from this server. Maybe this isn't a ID? +commands.owner.guildleave.help.description = Quit from a server commands.owner.reboot.help.description = Restart the bot commands.owner.shutdown.success.title = Shutdown commands.owner.shutdown.help.description = Shuts the Bot down @@ -319,6 +323,6 @@ commands.owner.blacklist.help.description = Blacklist a user for specific comman commands.settings.language.success.title = Language set commands.settings.language.success.description = `%extra%` is your new language now. commands.settings.language.help.description = Sets the new primary language for a user. -commands.settings.prefix.success.title = %extra% Successfully set %extra% +commands.settings.prefix.success.title = Successfully set prefix commands.settings.prefix.success.description = I successfully set the new prefix for you to `%extra%`. commands.settings.prefix.help.description = Sets a new prefix. diff --git a/src/main/resources/Translations/Translations_zh.properties b/src/main/resources/Translations/Translations_zh.properties index 75aaadd..01d2f6e 100644 --- a/src/main/resources/Translations/Translations_zh.properties +++ b/src/main/resources/Translations/Translations_zh.properties @@ -117,17 +117,17 @@ commands.moderation.clear.message.error.title = No messages\! commands.moderation.clear.message.error.description = There are no messages in this channel. commands.moderation.clear.help.description = Deletes the specified number of messages. commands.moderation.prefix.success.title = %extra% Successfully set %extra% -commands.moderation.prefix.success.description = I successfully set the new prefix for the guild to `%extra%`. +commands.moderation.prefix.success.description = I successfully set the new prefix for the server to `%extra%`. commands.moderation.prefix.error.description = The prefix must not contain **"** commands.moderation.prefix.help.description = Sets the Guild-Prefix. commands.moderation.invitedetect.activate.success.title = Successfully activated -commands.moderation.invitedetect.activate.success.description = I successfully activated the invite link detection for this guild. +commands.moderation.invitedetect.activate.success.description = I successfully activated the invite link detection for this server. commands.moderation.invitedetect.activate.error.title = Already activated -commands.moderation.invitedetect.activate.error.description = The invite link detection is already activated on this guild. +commands.moderation.invitedetect.activate.error.description = The invite link detection is already activated on this server. commands.moderation.invitedetect.deactivate.success.title = Successfully deactivated -commands.moderation.invitedetect.deactivate.success.description = I successfully deactivated the invite link detection for this guild. +commands.moderation.invitedetect.deactivate.success.description = I successfully deactivated the invite link detection for this server. commands.moderation.invitedetect.deactivate.error.title = Already deactivated -commands.moderation.invitedetect.deactivate.error.description = The invite link detection is already deactivated on this guild. +commands.moderation.invitedetect.deactivate.error.description = The invite link detection is already deactivated on this server. commands.moderation.invitedetect.help.description = Activate or deactivate the Discord invite link detection. commands.moderation.kick.success.title = %extra% Successfully kicked %extra% commands.moderation.kick.success.description = I successfully kicked %extra%. @@ -160,11 +160,11 @@ commands.moderation.rules.rules.description = The channel was successfully set t commands.moderation.rules.role.title = Role to assign/remove commands.moderation.rules.role.description = The rules were successfully set. Please send me the name of the role which the user receives/loses after he accepted the rules. commands.moderation.rules.role.error.title = Role does not exist -commands.moderation.rules.role.error.description = The specified role does not exist on this guild. +commands.moderation.rules.role.error.description = The specified role does not exist on this server. commands.moderation.rules.role.permission.error.title = No permission commands.moderation.rules.role.permission.error.description = You cannot select this role because you cannot interact with it. commands.moderation.rules.guild.error.title = Wrong Guild -commands.moderation.rules.guild.error.description = The mentioned channel must be on this guild\! +commands.moderation.rules.guild.error.description = The mentioned channel must be on this server\! commands.moderation.rules.emote.accept.title = Custom Accept Emote commands.moderation.rules.emote.accept.description = The role has been successfully set to %extra%. Now send me the emote on which your user should react to to get verified. commands.moderation.rules.emote.decline.title = Custom Decline Emote @@ -223,6 +223,7 @@ commands.music.leave.help.description = Leaves your voice channel. commands.music.play.load.title = %extra% Now loading %extra% commands.music.play.load.description = Trying to load the song... commands.music.play.success.loading.title = %extra% Now playing %extra% +commands.music.play.success.queueing.title = %extra% Added to queue %extra% commands.music.play.success.title = Title commands.music.play.success.author = Author commands.music.play.success.length = Length @@ -276,6 +277,9 @@ commands.music.loop.success.unloop.description = I will no longer repeat the cur commands.music.loop.error.connected.title = No channel commands.music.loop.error.connected.description = You have to be in the same voice channel as the bot to set the repeat status. commands.music.loop.help.description = Repeats a song/queue. +commands.music.echo.success.title = Successfully activated +commands.music.echo.success.description = I will now repeat everything I can hear in your voice channel +commands.music.echo.help.description = Sends your voice through Hadder. commands.nsfw.gif.error.title = GIF not showing? Click here commands.nsfw.img.error.title = Image not showing? Click here @@ -303,8 +307,8 @@ commands.owner.eval.help.description = Execute the given code commands.owner.guildleave.success.title = Successfully left commands.owner.guildleave.success.description = I successfully left %extra%. commands.owner.guildleave.error.title = Can not leave -commands.owner.guildleave.error.description = I can not leave from this guild. Maybe this isn't a ID? -commands.owner.guildleave.help.description = Quit from a guild +commands.owner.guildleave.error.description = I can not leave from this server. Maybe this isn't a ID? +commands.owner.guildleave.help.description = Quit from a server commands.owner.reboot.help.description = Restart the bot commands.owner.shutdown.success.title = Shutdown commands.owner.shutdown.help.description = Shuts the Bot down @@ -319,6 +323,6 @@ commands.owner.blacklist.help.description = Blacklist a user for specific comman commands.settings.language.success.title = Language set commands.settings.language.success.description = `%extra%` is your new language now. commands.settings.language.help.description = Sets the new primary language for a user. -commands.settings.prefix.success.title = %extra% Successfully set %extra% +commands.settings.prefix.success.title = Successfully set prefix commands.settings.prefix.success.description = I successfully set the new prefix for you to `%extra%`. commands.settings.prefix.help.description = Sets a new prefix.