historyQueue = new ConcurrentLinkedQueue<>();
@SuppressWarnings("LeakingThisInConstructor")
AbstractPlayer(String guildId) {
@@ -322,7 +322,7 @@ private void updateHistoryQueue() {
*
* Silently playing a track will not trigger the onPlayHook (which announces the track usually)
*/
- protected void playTrack(AudioTrackContext trackContext, boolean... silent) {
+ private void playTrack(AudioTrackContext trackContext, boolean... silent) {
log.debug("playTrack({})", trackContext.getEffectiveTitle());
context = trackContext;
diff --git a/FredBoat/src/main/java/fredboat/audio/player/GuildPlayer.java b/FredBoat/src/main/java/fredboat/audio/player/GuildPlayer.java
index 0a34e2832..088dcb012 100644
--- a/FredBoat/src/main/java/fredboat/audio/player/GuildPlayer.java
+++ b/FredBoat/src/main/java/fredboat/audio/player/GuildPlayer.java
@@ -39,7 +39,7 @@
import fredboat.commandmeta.abs.CommandContext;
import fredboat.db.DatabaseNotReadyException;
import fredboat.db.EntityReader;
-import fredboat.db.entity.GuildConfig;
+import fredboat.db.entity.main.GuildConfig;
import fredboat.feature.I18n;
import fredboat.messaging.CentralMessaging;
import fredboat.perms.PermissionLevel;
diff --git a/FredBoat/src/main/java/fredboat/audio/player/LavalinkManager.java b/FredBoat/src/main/java/fredboat/audio/player/LavalinkManager.java
index 23a49ff8f..e312a2b53 100644
--- a/FredBoat/src/main/java/fredboat/audio/player/LavalinkManager.java
+++ b/FredBoat/src/main/java/fredboat/audio/player/LavalinkManager.java
@@ -49,10 +49,8 @@ private LavalinkManager() {
public void start() {
if (!isEnabled()) return;
- String userId = DiscordUtil.getUserId(Config.CONFIG.getBotToken());
-
lavalink = new Lavalink(
- userId,
+ Long.toString(DiscordUtil.getBotId()),
Config.getNumShards(),
shardId -> FredBoat.getShard(shardId).getJda()
);
diff --git a/FredBoat/src/main/java/fredboat/audio/source/SpotifyPlaylistSourceManager.java b/FredBoat/src/main/java/fredboat/audio/source/SpotifyPlaylistSourceManager.java
index 53377f81d..176be4c84 100644
--- a/FredBoat/src/main/java/fredboat/audio/source/SpotifyPlaylistSourceManager.java
+++ b/FredBoat/src/main/java/fredboat/audio/source/SpotifyPlaylistSourceManager.java
@@ -71,8 +71,7 @@ public class SpotifyPlaylistSourceManager implements AudioSourceManager, Playlis
//https://regex101.com/r/AEWyxi/3
private static final Pattern PLAYLIST_PATTERN = Pattern.compile("https?://.*\\.spotify\\.com/user/(.*)/playlist/([^?/\\s]*)");
- //Take care when deciding on upping the core pool size: The threads may hog database connections
- // (for selfhosters running on the SQLite db) when loading an uncached playlist.
+ //Take care when deciding on upping the core pool size: The threads may hog database connections when loading an uncached playlist.
// Upping the threads will also fire search requests more aggressively against Youtube which is probably better avoided.
public static ScheduledExecutorService loader = Executors.newScheduledThreadPool(1);
diff --git a/FredBoat/src/main/java/fredboat/command/admin/TestCommand.java b/FredBoat/src/main/java/fredboat/command/admin/TestCommand.java
index 07132f161..15918b08f 100644
--- a/FredBoat/src/main/java/fredboat/command/admin/TestCommand.java
+++ b/FredBoat/src/main/java/fredboat/command/admin/TestCommand.java
@@ -29,14 +29,17 @@
import fredboat.commandmeta.abs.Command;
import fredboat.commandmeta.abs.CommandContext;
import fredboat.commandmeta.abs.ICommandRestricted;
-import fredboat.db.DatabaseManager;
+import fredboat.db.DatabaseNotReadyException;
import fredboat.messaging.internal.Context;
import fredboat.perms.PermissionLevel;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import space.npstr.sqlsauce.DatabaseConnection;
+import space.npstr.sqlsauce.DatabaseException;
import javax.annotation.Nonnull;
import javax.persistence.EntityManager;
+import javax.persistence.PersistenceException;
/**
* Stress tests the database
@@ -47,7 +50,6 @@ public class TestCommand extends Command implements ICommandRestricted {
private enum Result {WORKING, SUCCESS, FAILED}
- // the SQL syntax used here work with both SQLite and PostgreSQL, beware when altering
private final String DROP_TEST_TABLE = "DROP TABLE IF EXISTS test;";
private final String CREATE_TEST_TABLE = "CREATE TABLE IF NOT EXISTS test (id serial, val integer, PRIMARY KEY (id));";
private final String INSERT_TEST_TABLE = "INSERT INTO test (val) VALUES (:val) ";
@@ -58,10 +60,10 @@ public TestCommand(String name, String... aliases) {
@Override
public void onInvoke(@Nonnull CommandContext context) {
- FredBoat.executor.submit(() -> invoke(FredBoat.getDbManager(), context, context.args));
+ FredBoat.executor.submit(() -> invoke(FredBoat.getMainDbConnection(), context, context.args));
}
- boolean invoke(DatabaseManager dbm, Context context, String args[]) {
+ boolean invoke(DatabaseConnection dbConn, Context context, String args[]) {
boolean result = false;
@@ -77,14 +79,14 @@ boolean invoke(DatabaseManager dbm, Context context, String args[]) {
context.replyWithName("Beginning stress test with " + threads + " threads each doing " + operations + " operations");
}
- prepareStressTest(dbm);
+ prepareStressTest(dbConn);
long started = System.currentTimeMillis();
Result[] results = new Result[threads];
Throwable[] exceptions = new Throwable[threads];
for (int i = 0; i < threads; i++) {
results[i] = Result.WORKING;
- new StressTestThread(i, operations, results, exceptions, dbm).start();
+ new StressTestThread(i, operations, results, exceptions, dbConn).start();
}
//wait for when it's done and report the results
@@ -134,16 +136,21 @@ private boolean doneYet(Result[] results) {
return true;
}
- private void prepareStressTest(DatabaseManager dbm) {
+ private void prepareStressTest(DatabaseConnection dbConn) {
//drop and recreate the test table
- EntityManager em = dbm.getEntityManager();
+ EntityManager em = null;
try {
+ em = dbConn.getEntityManager();
em.getTransaction().begin();
em.createNativeQuery(DROP_TEST_TABLE).executeUpdate();
em.createNativeQuery(CREATE_TEST_TABLE).executeUpdate();
em.getTransaction().commit();
+ } catch (DatabaseException | PersistenceException e) {
+ throw new DatabaseNotReadyException(e);
} finally {
- em.close();
+ if (em != null) {
+ em.close();
+ }
}
}
@@ -153,16 +160,16 @@ private class StressTestThread extends Thread {
private int operations;
private Result[] results;
private Throwable[] exceptions;
- private DatabaseManager dbm;
+ private DatabaseConnection dbConn;
+
-
- StressTestThread(int number, int operations, Result[] results, Throwable[] exceptions, DatabaseManager dbm) {
+ StressTestThread(int number, int operations, Result[] results, Throwable[] exceptions, DatabaseConnection dbConn) {
super(StressTestThread.class.getSimpleName() + " number");
this.number = number;
this.operations = operations;
this.results = results;
this.exceptions = exceptions;
- this.dbm = dbm;
+ this.dbConn = dbConn;
}
@Override
@@ -171,7 +178,7 @@ public void run() {
EntityManager em = null;
try {
for (int i = 0; i < operations; i++) {
- em = dbm.getEntityManager();
+ em = dbConn.getEntityManager();
try {
em.getTransaction().begin();
em.createNativeQuery(INSERT_TEST_TABLE)
diff --git a/FredBoat/src/main/java/fredboat/db/entity/UConfig.java b/FredBoat/src/main/java/fredboat/command/fun/MagicCommand.java
similarity index 50%
rename from FredBoat/src/main/java/fredboat/db/entity/UConfig.java
rename to FredBoat/src/main/java/fredboat/command/fun/MagicCommand.java
index 64282fac3..f39347b8c 100644
--- a/FredBoat/src/main/java/fredboat/db/entity/UConfig.java
+++ b/FredBoat/src/main/java/fredboat/command/fun/MagicCommand.java
@@ -1,4 +1,5 @@
/*
+ *
* MIT License
*
* Copyright (c) 2017 Frederik Ar. Mikkelsen
@@ -20,70 +21,40 @@
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
- *
*/
-package fredboat.db.entity;
-
-import javax.persistence.Entity;
-import javax.persistence.Id;
-import javax.persistence.Table;
-
-@Entity
-@Table(name = "user_config")
-public class UConfig implements IEntity {
-
- @Id
- private String userId;
- private String bearer;
- private String refresh;
- private long bearerexpiration;
+package fredboat.command.fun;
- public String getBearer() {
- return bearer;
- }
-
- public String getRefresh() {
- return refresh;
- }
-
- public String getUserId() {
- return userId;
- }
+import fredboat.commandmeta.abs.Command;
+import fredboat.commandmeta.abs.CommandContext;
+import fredboat.commandmeta.abs.IFunCommand;
+import fredboat.messaging.internal.Context;
+import fredboat.util.AsciiArtConstant;
+import fredboat.util.TextUtils;
- public long getBearerExpiration() {
- return bearerexpiration;
- }
+import javax.annotation.Nonnull;
- public UConfig(String id) {
- this.userId = id;
+/**
+ * Created by napster on 24.12.17.
+ */
+public class MagicCommand extends Command implements IFunCommand {
+ public MagicCommand(@Nonnull String name, String... aliases) {
+ super(name, aliases);
}
@Override
- public void setId(String id) {
- this.userId = id;
- }
-
- public UConfig() {
- }
+ public void onInvoke(@Nonnull CommandContext context) {
+ String message = "ABRA KADABRA...";
+ if (context.hasArguments()) {
+ message = TextUtils.defuseMentions(context.rawArgs);
+ }
- public UConfig setBearer(String bearer) {
- this.bearer = bearer;
- return this;
+ context.reply(AsciiArtConstant.MAGICAL_LENNY + message);
}
- public UConfig setRefresh(String refresh) {
- this.refresh = refresh;
- return this;
- }
-
- public UConfig setUserId(String userId) {
- this.userId = userId;
- return this;
- }
-
- public UConfig setBearerExpiration(long bearerExpiration) {
- this.bearerexpiration = bearerExpiration;
- return this;
+ @Nonnull
+ @Override
+ public String help(@Nonnull Context context) {
+ return "{0}{1} [message]\n#This command is magic ( ͡° ͜ʖ ͡°)";
}
-}
\ No newline at end of file
+}
diff --git a/FredBoat/src/main/java/fredboat/command/moderation/ConfigCommand.java b/FredBoat/src/main/java/fredboat/command/moderation/ConfigCommand.java
index d53b498a1..1302cc881 100644
--- a/FredBoat/src/main/java/fredboat/command/moderation/ConfigCommand.java
+++ b/FredBoat/src/main/java/fredboat/command/moderation/ConfigCommand.java
@@ -32,7 +32,7 @@
import fredboat.commandmeta.abs.IModerationCommand;
import fredboat.db.EntityReader;
import fredboat.db.EntityWriter;
-import fredboat.db.entity.GuildConfig;
+import fredboat.db.entity.main.GuildConfig;
import fredboat.messaging.CentralMessaging;
import fredboat.messaging.internal.Context;
import fredboat.perms.PermissionLevel;
diff --git a/FredBoat/src/main/java/fredboat/command/moderation/PermissionsCommand.java b/FredBoat/src/main/java/fredboat/command/moderation/PermissionsCommand.java
index f92c7c442..8717b08ce 100644
--- a/FredBoat/src/main/java/fredboat/command/moderation/PermissionsCommand.java
+++ b/FredBoat/src/main/java/fredboat/command/moderation/PermissionsCommand.java
@@ -31,7 +31,7 @@
import fredboat.commandmeta.abs.IModerationCommand;
import fredboat.db.EntityReader;
import fredboat.db.EntityWriter;
-import fredboat.db.entity.GuildPermissions;
+import fredboat.db.entity.main.GuildPermissions;
import fredboat.feature.togglz.FeatureFlags;
import fredboat.messaging.CentralMessaging;
import fredboat.messaging.internal.Context;
diff --git a/FredBoat/src/main/java/fredboat/command/moderation/PrefixCommand.java b/FredBoat/src/main/java/fredboat/command/moderation/PrefixCommand.java
index b5c741071..497c683a9 100644
--- a/FredBoat/src/main/java/fredboat/command/moderation/PrefixCommand.java
+++ b/FredBoat/src/main/java/fredboat/command/moderation/PrefixCommand.java
@@ -36,7 +36,7 @@
import fredboat.commandmeta.abs.IModerationCommand;
import fredboat.db.EntityReader;
import fredboat.db.EntityWriter;
-import fredboat.db.entity.GuildConfig;
+import fredboat.db.entity.main.GuildConfig;
import fredboat.messaging.internal.Context;
import fredboat.perms.PermissionLevel;
import fredboat.perms.PermsUtil;
@@ -66,7 +66,7 @@ public PrefixCommand(@Nonnull String name, String... aliases) {
//the refresh value to have the changes reflect faster in the bot, or consider implementing a FredBoat wide
//Listen/Notify system for changes to in memory cached values backed by the db
.recordStats()
- .refreshAfterWrite(1, TimeUnit.MINUTES) //NOTE: never use refreshing without async reloading
+ .refreshAfterWrite(1, TimeUnit.MINUTES) //NOTE: never use refreshing without async reloading, because Guavas cache uses the thread calling it to do cleanup tasks (including refreshing)
.expireAfterAccess(1, TimeUnit.MINUTES) //evict inactive guilds
.concurrencyLevel(Config.getNumShards()) //each shard has a thread (main JDA thread) accessing this cache many times
.build(CacheLoader.asyncReloading(CacheLoader.from(GuildConfig::getPrefix), FredBoat.executor));
@@ -84,7 +84,7 @@ public static String giefPrefix(@Nullable Guild guild) {
return Config.CONFIG.getPrefix();
}
- if (guild.getJDA().getSelfUser().getId().equalsIgnoreCase(BotConstants.PATRON_BOT_ID)) {
+ if (guild.getJDA().getSelfUser().getIdLong() == BotConstants.PATRON_BOT_ID) {
return Config.CONFIG.getPrefix(); //todo lift this limitation after sorting out a data strategy
}
@@ -103,7 +103,7 @@ public void onInvoke(@Nonnull CommandContext context) {
return;
}
- if (context.guild.getJDA().getSelfUser().getId().equalsIgnoreCase(BotConstants.PATRON_BOT_ID)) {
+ if (context.guild.getJDA().getSelfUser().getIdLong() == BotConstants.PATRON_BOT_ID) {
context.reply("Sorry, this feature has not yet been enabled for the PatronBot! Have a picture of a wombat instead.");
wombats.onInvoke(context);
return;
diff --git a/FredBoat/src/main/java/fredboat/command/music/control/SelectCommand.java b/FredBoat/src/main/java/fredboat/command/music/control/SelectCommand.java
index 16d0ee0bb..c9859637c 100644
--- a/FredBoat/src/main/java/fredboat/command/music/control/SelectCommand.java
+++ b/FredBoat/src/main/java/fredboat/command/music/control/SelectCommand.java
@@ -73,21 +73,16 @@ static void select(CommandContext context) {
// LinkedHashSet to handle order of choices + duplicates
LinkedHashSet requestChoices = new LinkedHashSet<>();
- // Combine all args and the command trigger. if the trigger is not a number it will be sanitized away
- String commandOptions = (context.trigger + " " + context.rawArgs).trim();
- String sanitizedQuery = sanitizeQueryForMultiSelect(commandOptions).trim();
+ // Combine all args and the command trigger if it is numeric
+ String commandOptions = context.rawArgs;
+ if (StringUtils.isNumeric(context.trigger)) {
+ commandOptions = (context.trigger + " " + commandOptions).trim();
+ }
if (StringUtils.isNumeric(commandOptions)) {
requestChoices.add(Integer.valueOf(commandOptions));
- } else if (TextUtils.isSplitSelect(sanitizedQuery)) {
- // Remove all non comma or number characters
- String[] querySplit = sanitizedQuery.split(",|\\s");
-
- for (String value : querySplit) {
- if (StringUtils.isNumeric(value)) {
- requestChoices.add(Integer.valueOf(value));
- }
- }
+ } else if (TextUtils.isSplitSelect(commandOptions)) {
+ requestChoices.addAll(TextUtils.getSplitSelect(commandOptions));
}
//Step 2: Use only valid numbers (usually 1-5)
@@ -147,15 +142,4 @@ public String help(@Nonnull Context context) {
public PermissionLevel getMinimumPerms() {
return PermissionLevel.USER;
}
-
- /**
- * Helper method to remove all characters from arg that is not numerical or comma.
- *
- * @param arg String to be sanitized.
- * @return Sanitized string.
- */
- private static String sanitizeQueryForMultiSelect(@Nonnull String arg) {
- return arg.replaceAll("[^0-9$., ]", "");
- }
-
}
diff --git a/FredBoat/src/main/java/fredboat/command/util/HelpCommand.java b/FredBoat/src/main/java/fredboat/command/util/HelpCommand.java
index a173deadb..ddd9a107e 100644
--- a/FredBoat/src/main/java/fredboat/command/util/HelpCommand.java
+++ b/FredBoat/src/main/java/fredboat/command/util/HelpCommand.java
@@ -34,26 +34,25 @@
import fredboat.commandmeta.abs.CommandContext;
import fredboat.commandmeta.abs.ICommandRestricted;
import fredboat.commandmeta.abs.IUtilCommand;
-import fredboat.feature.I18n;
import fredboat.messaging.CentralMessaging;
import fredboat.messaging.internal.Context;
import fredboat.perms.PermissionLevel;
+import fredboat.shared.constant.BotConstants;
import fredboat.util.Emojis;
import fredboat.util.TextUtils;
import net.dv8tion.jda.core.Permission;
import net.dv8tion.jda.core.entities.Guild;
+import net.dv8tion.jda.core.entities.Member;
+import net.dv8tion.jda.core.entities.TextChannel;
+import net.dv8tion.jda.core.entities.User;
import net.dv8tion.jda.core.events.message.priv.PrivateMessageReceivedEvent;
import javax.annotation.Nonnull;
-import javax.annotation.Nullable;
import java.text.MessageFormat;
import java.util.concurrent.TimeUnit;
public class HelpCommand extends Command implements IUtilCommand {
- //This can be set using eval in case we need to change it in the future ~Fre_d
- public static String inviteLink = "https://discord.gg/cgPFW4q";
-
//keeps track of whether a user received help lately to avoid spamming/clogging up DMs which are rather harshly ratelimited
public static final Cache HELP_RECEIVED_RECENTLY = CacheBuilder.newBuilder()
.recordStats()
@@ -87,7 +86,7 @@ public static void sendGeneralHelp(@Nonnull CommandContext context) {
return;
}
- context.replyPrivate(getHelpDmMsg(context.guild),
+ context.replyPrivate(getHelpDmMsg(context),
success -> {
HELP_RECEIVED_RECENTLY.put(userId, true);
String out = context.i18n("helpSent");
@@ -113,7 +112,27 @@ public static void sendGeneralHelp(@Nonnull PrivateMessageReceivedEvent event) {
}
HELP_RECEIVED_RECENTLY.put(event.getAuthor().getIdLong(), true);
- CentralMessaging.sendMessage(event.getChannel(), getHelpDmMsg(null));
+ CentralMessaging.sendMessage(event.getChannel(), getHelpDmMsg(new Context() { //yeah this is ugly ¯\_(ツ)_/¯
+ @Override
+ public TextChannel getTextChannel() {
+ return null;
+ }
+
+ @Override
+ public Guild getGuild() {
+ return null;
+ }
+
+ @Override
+ public Member getMember() {
+ return null;
+ }
+
+ @Override
+ public User getUser() {
+ return event.getAuthor();
+ }
+ }));
}
public static String getFormattedCommandHelp(Context context, Command command, String commandOrAlias) {
@@ -154,7 +173,12 @@ private static void sendFormattedCommandHelp(CommandContext context, String trig
context.replyWithName(out);
}
- public static String getHelpDmMsg(@Nullable Guild guild) {
- return MessageFormat.format(I18n.get(guild).getString("helpDM"), inviteLink);
+ @Nonnull
+ public static String getHelpDmMsg(@Nonnull Context context) {
+ String docsLocation = context.i18n("helpDocsLocation") + "\n" + BotConstants.DOCS_URL;
+ String botInvite = context.i18n("helpBotInvite") + "\n<" + BotConstants.botInvite + ">";
+ String hangoutInvite = context.i18n("helpHangoutInvite") + "\n" + BotConstants.hangoutInvite;
+ String footer = context.i18n("helpNoDmCommands") + "\n" + context.i18n("helpCredits");
+ return docsLocation + "\n\n" + botInvite + "\n\n" + hangoutInvite + "\n\n" + footer;
}
}
diff --git a/FredBoat/src/main/java/fredboat/commandmeta/CommandManager.java b/FredBoat/src/main/java/fredboat/commandmeta/CommandManager.java
index 581dfe43c..d225f1714 100644
--- a/FredBoat/src/main/java/fredboat/commandmeta/CommandManager.java
+++ b/FredBoat/src/main/java/fredboat/commandmeta/CommandManager.java
@@ -26,7 +26,6 @@
package fredboat.commandmeta;
-import fredboat.Config;
import fredboat.audio.player.PlayerRegistry;
import fredboat.command.fun.AkinatorCommand;
import fredboat.commandmeta.abs.Command;
@@ -40,7 +39,6 @@
import fredboat.perms.PermissionLevel;
import fredboat.perms.PermsUtil;
import fredboat.shared.constant.BotConstants;
-import fredboat.shared.constant.DistributionEnum;
import fredboat.util.TextUtils;
import net.dv8tion.jda.core.entities.Guild;
import net.dv8tion.jda.core.entities.Member;
@@ -70,13 +68,6 @@ public static void prefixCalled(CommandContext context) {
totalCommandsExecuted.incrementAndGet();
Metrics.commandsExecuted.labels(invoked.getClass().getSimpleName()).inc();
- if (guild.getJDA().getSelfUser().getId().equals(BotConstants.PATRON_BOT_ID)
- && Config.CONFIG.getDistribution() == DistributionEnum.PATRON
- && guild.getId().equals(BotConstants.FREDBOAT_HANGOUT_ID)) {
- log.info("Ignored command because patron bot is not allowed in FredBoatHangout");
- return;
- }
-
if (FeatureFlags.PATRON_VALIDATION.isActive()) {
PatronageChecker.Status status = PatronageCheckerHolder.instance.getStatus(guild);
if (!status.isValid()) {
@@ -92,8 +83,8 @@ public static void prefixCalled(CommandContext context) {
//Hardcode music commands in FredBoatHangout. Blacklist any channel that isn't #general or #staff, but whitelist Frederikam
if ((invoked instanceof IMusicCommand || invoked instanceof AkinatorCommand) // the hate is real
- && guild.getId().equals(BotConstants.FREDBOAT_HANGOUT_ID)
- && guild.getJDA().getSelfUser().getId().equals(BotConstants.MUSIC_BOT_ID)) {
+ && guild.getIdLong() == BotConstants.FREDBOAT_HANGOUT_ID
+ && guild.getJDA().getSelfUser().getIdLong() == BotConstants.MUSIC_BOT_ID) {
if (!channel.getId().equals("174821093633294338") // #spam_and_music
&& !channel.getId().equals("217526705298866177") // #staff
&& !invoker.getUser().getId().equals("203330266461110272")//Cynth
diff --git a/FredBoat/src/main/java/fredboat/commandmeta/abs/CommandContext.java b/FredBoat/src/main/java/fredboat/commandmeta/abs/CommandContext.java
index a1b6eca27..2159a0fb9 100644
--- a/FredBoat/src/main/java/fredboat/commandmeta/abs/CommandContext.java
+++ b/FredBoat/src/main/java/fredboat/commandmeta/abs/CommandContext.java
@@ -118,7 +118,8 @@ public static CommandContext parse(MessageReceivedEvent event) {
}
}
- String[] args = input.split("\\s+"); //split by any length of white space characters (including new lines)
+ // the \p{javaSpaceChar} instead of the better known \s is used because it actually includes unicode whitespaces
+ String[] args = input.split("\\p{javaSpaceChar}+");
if (args.length < 1) {
return null; //while this shouldn't technically be possible due to the preprocessing of the input, better be safe than throw exceptions
}
@@ -157,8 +158,10 @@ private CommandContext(@Nonnull Guild guild, @Nonnull TextChannel channel, @Nonn
*/
public void deleteMessage() {
TextChannel tc = msg.getTextChannel();
- if (tc != null && hasPermissions(tc, Permission.MESSAGE_MANAGE, Permission.MESSAGE_READ)) {
- CentralMessaging.deleteMessage(msg);
+ if (tc != null && hasPermissions(tc, Permission.MESSAGE_MANAGE, //While Manage Message _should_ be enough as it _should_
+ Permission.MESSAGE_READ, // implicitly give us all the other Text permissions,
+ Permission.MESSAGE_HISTORY)) { // it is bugged, so we do some additional checks here.
+ CentralMessaging.deleteMessage(msg); // See https://github.com/DV8FromTheWorld/JDA/issues/414 for more info.
}
}
diff --git a/FredBoat/src/main/java/fredboat/commandmeta/init/MainCommandInitializer.java b/FredBoat/src/main/java/fredboat/commandmeta/init/MainCommandInitializer.java
index de476a3c0..021a5ef61 100644
--- a/FredBoat/src/main/java/fredboat/commandmeta/init/MainCommandInitializer.java
+++ b/FredBoat/src/main/java/fredboat/commandmeta/init/MainCommandInitializer.java
@@ -116,7 +116,7 @@ public static void initCommands() {
CommandRegistry.registerCommand(new TextCommand("/╲/╭( ͡° ͡° ͜ʖ ͡° ͡°)╮/╱\\", "spiderlenny"));
CommandRegistry.registerCommand(new TextCommand("( ͡° ͜ʖ ͡°)", "lenny"));
CommandRegistry.registerCommand(new TextCommand("┬┴┬┴┤ ͜ʖ ͡°) ├┬┴┬┴", "peeking", "peekinglenny", "peek"));
- CommandRegistry.registerCommand(new TextCommand(AsciiArtConstant.MAGICAL_LENNY, "magicallenny", "lennymagical"));
+ CommandRegistry.registerCommand(new MagicCommand("magic", "magicallenny", "lennymagical"));
CommandRegistry.registerCommand(new TextCommand(AsciiArtConstant.EAGLE_OF_LENNY, "eagleoflenny", "eol", "lennyeagle"));
/* Misc - All commands under this line fall in this category */
diff --git a/FredBoat/src/main/java/fredboat/db/DatabaseManager.java b/FredBoat/src/main/java/fredboat/db/DatabaseManager.java
index 5b540f421..9fd32a57f 100644
--- a/FredBoat/src/main/java/fredboat/db/DatabaseManager.java
+++ b/FredBoat/src/main/java/fredboat/db/DatabaseManager.java
@@ -25,332 +25,128 @@
package fredboat.db;
-import com.jcraft.jsch.JSch;
-import com.jcraft.jsch.Session;
-import com.zaxxer.hikari.HikariDataSource;
+import com.zaxxer.hikari.HikariConfig;
import fredboat.Config;
-import fredboat.FredBoat;
import fredboat.feature.metrics.Metrics;
import net.sf.ehcache.CacheManager;
import net.sf.ehcache.config.CacheConfiguration;
import net.sf.ehcache.config.PersistenceConfiguration;
-import org.hibernate.engine.jdbc.connections.spi.ConnectionProvider;
-import org.hibernate.internal.SessionFactoryImpl;
-import org.hibernate.jpa.HibernatePersistenceProvider;
+import org.flywaydb.core.Flyway;
+import org.flywaydb.core.api.MigrationVersion;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean;
-import org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter;
+import space.npstr.sqlsauce.DatabaseConnection;
+import space.npstr.sqlsauce.DatabaseException;
-import javax.persistence.EntityManager;
-import javax.persistence.EntityManagerFactory;
+import javax.annotation.Nonnull;
+import javax.annotation.Nullable;
import java.util.Properties;
public class DatabaseManager {
private static final Logger log = LoggerFactory.getLogger(DatabaseManager.class);
- private static final String DEFAULT_PERSISTENCE_UNIT_NAME = "fredboat.default";
-
- //see https://github.com/brettwooldridge/HikariCP connectionTimeout
- private static final int HIKARI_TIMEOUT_MILLISECONDS = 1000;
-
- private EntityManagerFactory emf;
- private Session sshTunnel;
- private DatabaseState state = DatabaseState.UNINITIALIZED;
-
- //local port, if using SSH tunnel point your jdbc to this, e.g. jdbc:postgresql://localhost:9333/...
- private static final int SSH_TUNNEL_PORT = 9333;
-
- private final String jdbcUrl;
- private final int poolSize;
-
- /**
- * @param jdbcUrl connection to the database
- * @param poolSize max size of the connection pool
- */
- private DatabaseManager(String jdbcUrl, int poolSize) {
- this.jdbcUrl = jdbcUrl;
- this.poolSize = poolSize;
- }
-
-
- public static DatabaseManager postgres() {
- String jdbc = Config.CONFIG.getJdbcUrl();
- if (jdbc == null || jdbc.isEmpty()) {
- log.info("No JDBC URL found, assuming this is a docker environment. Trying default docker JDBC url");
- jdbc = "jdbc:postgresql://db:5432/fredboat?user=fredboat";
- }
- return new DatabaseManager(jdbc, Config.CONFIG.getHikariPoolSize());
- }
-
- /**
- * Starts the database connection.
- *
- * @throws IllegalStateException if trying to start a database that is READY or INITIALIZING
- */
- public synchronized DatabaseManager startup() {
- if (state == DatabaseState.READY || state == DatabaseState.INITIALIZING) {
- throw new IllegalStateException("Can't start the database, when it's current state is " + state);
- }
-
- state = DatabaseState.INITIALIZING;
-
- try {
- if (Config.CONFIG.isUseSshTunnel()) {
- //don't connect again if it's already connected
- if (sshTunnel == null || !sshTunnel.isConnected()) {
- connectSSH();
- }
- }
-
- //These are now located in the resources directory as XML
- Properties properties = new Properties();
- properties.put("configLocation", "hibernate.cfg.xml");
-
- properties.put("hibernate.connection.provider_class", "org.hibernate.hikaricp.internal.HikariCPConnectionProvider");
- properties.put("hibernate.connection.url", jdbcUrl);
- properties.put("hibernate.dialect", "org.hibernate.dialect.PostgreSQL95Dialect");
- properties.put("hibernate.cache.use_second_level_cache", "true");
- properties.put("hibernate.cache.provider_configuration_file_resource_path", "ehcache.xml");
- properties.put("hibernate.cache.region.factory_class", "org.hibernate.cache.ehcache.EhCacheRegionFactory");
-
- //this does a lot of logs
- //properties.put("hibernate.show_sql", "true");
-
- //automatically update the tables we need
- //caution: only add new columns, don't remove or alter old ones, otherwise manual db table migration needed
- properties.put("hibernate.hbm2ddl.auto", "update");
-
- //disable autocommit, it is not recommended for our usecases, and interferes with some of them
- // see https://vladmihalcea.com/2017/05/17/why-you-should-always-use-hibernate-connection-provider_disables_autocommit-for-resource-local-jpa-transactions/
- // this also means all EntityManager interactions need to be wrapped into em.getTransaction.begin() and
- // em.getTransaction.commit() to prevent a rollback spam at the database
- properties.put("hibernate.connection.autocommit", "true");
- properties.put("hibernate.connection.provider_disables_autocommit", "false");
-
- properties.put("hibernate.hikari.maximumPoolSize", Integer.toString(poolSize));
-
- //how long to wait for a connection becoming available, also the timeout when a DB fails
- properties.put("hibernate.hikari.connectionTimeout", Integer.toString(HIKARI_TIMEOUT_MILLISECONDS));
- //this helps with sorting out connections in pgAdmin
- properties.put("hibernate.hikari.dataSource.ApplicationName", "FredBoat_" + Config.CONFIG.getDistribution());
-
- //timeout the validation query (will be done automatically through Connection.isValid())
- properties.put("hibernate.hikari.validationTimeout", "1000");
-
- properties.put("hibernate.hikari.driverClassName", "org.postgresql.Driver");
-
-
- LocalContainerEntityManagerFactoryBean emfb = new LocalContainerEntityManagerFactoryBean();
- emfb.setPackagesToScan("fredboat.db.entity");
- emfb.setJpaVendorAdapter(new HibernateJpaVendorAdapter());
- emfb.setJpaProperties(properties);
- emfb.setPersistenceUnitName(DEFAULT_PERSISTENCE_UNIT_NAME);
- emfb.setPersistenceProviderClass(HibernatePersistenceProvider.class);
- emfb.afterPropertiesSet();
-
- //leak prevention, close existing factory if possible
- closeEntityManagerFactory();
-
- emf = emfb.getObject();
-
- try {
- //add metrics to hikari and hibernate
- SessionFactoryImpl sessionFactory = emf.unwrap(SessionFactoryImpl.class);
- sessionFactory.getServiceRegistry().getService(ConnectionProvider.class)
- .unwrap(HikariDataSource.class)
- .setMetricsTrackerFactory(Metrics.instance().hikariStats);
- //NOTE the register() on the HibernateCollector may only be called once so this will break in case we create 2 connections
- Metrics.instance().hibernateStats.add(sessionFactory, DEFAULT_PERSISTENCE_UNIT_NAME).register();
- } catch (Exception e) {
- log.warn("Exception when registering database metrics. This is not expected to happen outside of tests.", e);
- }
-
- //adjusting the ehcache config
- if (!Config.CONFIG.isUseSshTunnel()) {
- //local database: turn off overflow to disk of the cache
- for (CacheManager cacheManager : CacheManager.ALL_CACHE_MANAGERS) {
- for (String cacheName : cacheManager.getCacheNames()) {
- CacheConfiguration cacheConfig = cacheManager.getCache(cacheName).getCacheConfiguration();
- cacheConfig.getPersistenceConfiguration().strategy(PersistenceConfiguration.Strategy.NONE);
- }
- }
- }
- for (CacheManager cacheManager : CacheManager.ALL_CACHE_MANAGERS) {
- log.debug(cacheManager.getActiveConfigurationText());
+ private static final String MAIN_PERSISTENCE_UNIT_NAME = "fredboat.main";
+ private static final String CACHE_PERSISTENCE_UNIT_NAME = "fredboat.cache";
+
+ @Nonnull
+ public static DatabaseConnection main() throws DatabaseException {
+ String jdbc = Config.CONFIG.getMainJdbcUrl();
+
+ Flyway flyway = new Flyway();
+ flyway.setBaselineOnMigrate(true);
+ flyway.setBaselineVersion(MigrationVersion.fromVersion("0"));
+ flyway.setBaselineDescription("Base Migration");
+ flyway.setLocations("classpath:fredboat/db/migrations/main");
+
+ HikariConfig hikariConfig = DatabaseConnection.Builder.getDefaultHikariConfig();
+ hikariConfig.setMaximumPoolSize(Config.CONFIG.getHikariPoolSize());
+
+ Properties hibernateProps = DatabaseConnection.Builder.getDefaultHibernateProps();
+ hibernateProps.put("hibernate.cache.use_second_level_cache", "true");
+ hibernateProps.put("hibernate.cache.use_query_cache", "true");
+ hibernateProps.put("net.sf.ehcache.configurationResourceName", "/ehcache_main.xml");
+ hibernateProps.put("hibernate.cache.provider_configuration_file_resource_path", "ehcache_main.xml");
+ hibernateProps.put("hibernate.cache.region.factory_class", "org.hibernate.cache.ehcache.EhCacheRegionFactory");
+ //we use flyway db now for migrations, hibernate shall only run validations
+ hibernateProps.put("hibernate.hbm2ddl.auto", "validate");
+
+ DatabaseConnection databaseConnection = new DatabaseConnection.Builder(MAIN_PERSISTENCE_UNIT_NAME, jdbc)
+ .setHikariConfig(hikariConfig)
+ .setHibernateProps(hibernateProps)
+ .setDialect("org.hibernate.dialect.PostgreSQL95Dialect")
+ .addEntityPackage("fredboat.db.entity.main")
+ .setAppName("FredBoat_" + Config.CONFIG.getDistribution())
+ .setSshDetails(Config.CONFIG.getMainSshTunnelConfig())
+ .setHikariStats(Metrics.instance().hikariStats)
+ .setHibernateStats(Metrics.instance().hibernateStats)
+ .setCheckConnection(false)
+ .setFlyway(flyway)
+ .build();
+
+ //adjusting the ehcache config
+ if (Config.CONFIG.getMainSshTunnelConfig() == null) {
+ //local database: turn off overflow to disk of the cache
+ CacheManager cacheManager = CacheManager.getCacheManager("MAIN_CACHEMANAGER");
+ for (String cacheName : cacheManager.getCacheNames()) {
+ CacheConfiguration cacheConfig = cacheManager.getCache(cacheName).getCacheConfiguration();
+ cacheConfig.getPersistenceConfiguration().strategy(PersistenceConfiguration.Strategy.NONE);
}
-
- log.info("Started Hibernate");
- state = DatabaseState.READY;
- } catch (Exception ex) {
- state = DatabaseState.FAILED;
- throw new RuntimeException("Failed starting database connection", ex);
}
- return this;
- }
+ log.debug(CacheManager.getCacheManager("MAIN_CACHEMANAGER").getActiveConfigurationText());
- public void reconnectSSH() {
- connectSSH();
- //try a test query and if successful set state to ready
- EntityManager em = getEntityManager();
- try {
- em.getTransaction().begin();
- em.createNativeQuery("SELECT 1;").getResultList();
- em.getTransaction().commit();
- state = DatabaseState.READY;
- } finally {
- em.close();
- }
+ return databaseConnection;
}
- private synchronized void connectSSH() {
- if (!Config.CONFIG.isUseSshTunnel()) {
- log.warn("Cannot connect ssh tunnel as it is not specified in the config");
- return;
- }
- if (sshTunnel != null && sshTunnel.isConnected()) {
- log.info("Tunnel is already connected, disconnect first before reconnecting");
- return;
- }
- try {
- //establish the tunnel
- log.info("Starting SSH tunnel");
-
- java.util.Properties config = new java.util.Properties();
- JSch jsch = new JSch();
- JSch.setLogger(new JSchLogger());
-
- //Parse host:port
- String sshHost = Config.CONFIG.getSshHost().split(":")[0];
- int sshPort = Integer.parseInt(Config.CONFIG.getSshHost().split(":")[1]);
-
- Session session = jsch.getSession(Config.CONFIG.getSshUser(),
- sshHost,
- sshPort
- );
- jsch.addIdentity(Config.CONFIG.getSshPrivateKeyFile());
- config.put("StrictHostKeyChecking", "no");
- config.put("ConnectionAttempts", "3");
- session.setConfig(config);
- session.setServerAliveInterval(1000);//milliseconds
- session.connect();
-
- log.info("SSH Connected");
-
- //forward the port
- int assignedPort = session.setPortForwardingL(
- SSH_TUNNEL_PORT,
- "localhost",
- Config.CONFIG.getForwardToPort()
- );
-
- sshTunnel = session;
- log.info("localhost:" + assignedPort + " -> " + sshHost + ":" + Config.CONFIG.getForwardToPort());
- log.info("Port Forwarded");
- } catch (Exception e) {
- throw new RuntimeException("Failed to start SSH tunnel", e);
- }
- }
-
- /**
- * Please call close() on the EntityManager object you receive after you are done to let the pool recycle the
- * connection and save the nature from environmental toxins like open database connections.
- */
- public EntityManager getEntityManager() {
- return emf.createEntityManager();
- }
-
- /**
- * Performs health checks on the ssh tunnel and database
- *
- * @return true if the database is operational, false if not
- */
- public boolean isAvailable() {
- if (state != DatabaseState.READY) {
- return false;
- }
-
- //is the ssh connection still alive?
- if (sshTunnel != null && !sshTunnel.isConnected()) {
- log.error("SSH tunnel lost connection.");
- state = DatabaseState.FAILED;
- //immediately try to reconnect the tunnel
- //DBConnectionWatchdogAgent should take further care of this
- FredBoat.executor.submit(this::reconnectSSH);
- return false;
+ @Nullable //may return null of no cache db has been configured
+ public static DatabaseConnection cache() throws DatabaseException {
+ String cacheJdbc = Config.CONFIG.getCacheJdbcUrl();
+ if (cacheJdbc == null) {
+ return null;
}
- return state == DatabaseState.READY;
- }
-
- /**
- * Avoid multiple threads calling a close on the factory by wrapping it into this synchronized method
- */
- private synchronized void closeEntityManagerFactory() {
- if (emf != null && emf.isOpen()) {
- try {
- emf.close();
- } catch (IllegalStateException ignored) {
- //it has already been closed, nothing to catch here
+ Flyway flyway = new Flyway();
+ flyway.setBaselineOnMigrate(true);
+ flyway.setBaselineVersion(MigrationVersion.fromVersion("0"));
+ flyway.setBaselineDescription("Base Migration");
+ flyway.setLocations("classpath:fredboat/db/migrations/cache");
+
+ HikariConfig hikariConfig = DatabaseConnection.Builder.getDefaultHikariConfig();
+ hikariConfig.setMaximumPoolSize(Config.CONFIG.getHikariPoolSize());
+
+ Properties hibernateProps = DatabaseConnection.Builder.getDefaultHibernateProps();
+ hibernateProps.put("hibernate.cache.use_second_level_cache", "true");
+ hibernateProps.put("hibernate.cache.use_query_cache", "true");
+ hibernateProps.put("net.sf.ehcache.configurationResourceName", "/ehcache_cache.xml");
+ hibernateProps.put("hibernate.cache.provider_configuration_file_resource_path", "ehcache_cache.xml");
+ hibernateProps.put("hibernate.cache.region.factory_class", "org.hibernate.cache.ehcache.EhCacheRegionFactory");
+ //we use flyway db now for migrations, hibernate shall only run validations
+ hibernateProps.put("hibernate.hbm2ddl.auto", "validate");
+
+ DatabaseConnection databaseConnection = new DatabaseConnection.Builder(CACHE_PERSISTENCE_UNIT_NAME, cacheJdbc)
+ .setHikariConfig(hikariConfig)
+ .setHibernateProps(hibernateProps)
+ .setDialect("org.hibernate.dialect.PostgreSQL95Dialect")
+ .addEntityPackage("fredboat.db.entity.cache")
+ .setAppName("FredBoat_" + Config.CONFIG.getDistribution())
+ .setSshDetails(Config.CONFIG.getCacheSshTunnelConfig())
+ .setHikariStats(Metrics.instance().hikariStats)
+ .setHibernateStats(Metrics.instance().hibernateStats)
+ .setFlyway(flyway)
+ .build();
+
+ //adjusting the ehcache config
+ if (Config.CONFIG.getMainSshTunnelConfig() == null) {
+ //local database: turn off overflow to disk of the cache
+ CacheManager cacheManager = CacheManager.getCacheManager("CACHE_CACHEMANAGER");
+ for (String cacheName : cacheManager.getCacheNames()) {
+ CacheConfiguration cacheConfig = cacheManager.getCache(cacheName).getCacheConfiguration();
+ cacheConfig.getPersistenceConfiguration().strategy(PersistenceConfiguration.Strategy.NONE);
}
}
- }
-
- public DatabaseState getState() {
- return state;
- }
-
- public enum DatabaseState {
- UNINITIALIZED,
- INITIALIZING,
- FAILED,
- READY,
- SHUTDOWN
- }
-
- /**
- * Shutdown, close, stop, halt, burn down all resources this object has been using
- */
- public void shutdown() {
- log.info("DatabaseManager shutdown call received, shutting down");
- state = DatabaseState.SHUTDOWN;
- closeEntityManagerFactory();
-
- if (sshTunnel != null)
- sshTunnel.disconnect();
- }
-
- private static class JSchLogger implements com.jcraft.jsch.Logger {
-
- private static final Logger logger = LoggerFactory.getLogger("JSch");
-
- @Override
- public boolean isEnabled(int level) {
- return true;
- }
+ log.debug(CacheManager.getCacheManager("CACHE_CACHEMANAGER").getActiveConfigurationText());
- @Override
- public void log(int level, String message) {
- switch (level) {
- case com.jcraft.jsch.Logger.DEBUG:
- logger.debug(message);
- break;
- case com.jcraft.jsch.Logger.INFO:
- logger.info(message);
- break;
- case com.jcraft.jsch.Logger.WARN:
- logger.warn(message);
- break;
- case com.jcraft.jsch.Logger.ERROR:
- case com.jcraft.jsch.Logger.FATAL:
- logger.error(message);
- break;
- default:
- throw new RuntimeException("Invalid log level");
- }
- }
+ return databaseConnection;
}
-
}
diff --git a/FredBoat/src/main/java/fredboat/db/EntityReader.java b/FredBoat/src/main/java/fredboat/db/EntityReader.java
index 82c75a3b5..d3151bbc9 100644
--- a/FredBoat/src/main/java/fredboat/db/EntityReader.java
+++ b/FredBoat/src/main/java/fredboat/db/EntityReader.java
@@ -27,14 +27,14 @@
import fredboat.FredBoat;
-import fredboat.db.entity.BlacklistEntry;
-import fredboat.db.entity.GuildConfig;
-import fredboat.db.entity.GuildPermissions;
import fredboat.db.entity.IEntity;
-import fredboat.db.entity.UConfig;
+import fredboat.db.entity.main.BlacklistEntry;
+import fredboat.db.entity.main.GuildConfig;
+import fredboat.db.entity.main.GuildPermissions;
import net.dv8tion.jda.core.entities.Guild;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import space.npstr.sqlsauce.DatabaseException;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceException;
@@ -44,10 +44,6 @@ public class EntityReader {
private static final Logger log = LoggerFactory.getLogger(EntityReader.class);
- public static UConfig getUConfig(String id) {
- return getEntity(id, UConfig.class);
- }
-
public static GuildConfig getGuildConfig(String id) {
return getEntity(id, GuildConfig.class);
}
@@ -57,22 +53,20 @@ public static GuildPermissions getGuildPermissions(Guild guild) {
}
private static E getEntity(String id, Class clazz) throws DatabaseNotReadyException {
- DatabaseManager dbManager = FredBoat.getDbManager();
- if (dbManager == null || !dbManager.isAvailable()) {
- throw new DatabaseNotReadyException();
- }
-
- EntityManager em = dbManager.getEntityManager();
- E config = null;
+ EntityManager em = null;
+ E config;
try {
+ em = FredBoat.getMainDbConnection().getEntityManager();
em.getTransaction().begin();
config = em.find(clazz, id);
em.getTransaction().commit();
- } catch (PersistenceException e) {
- log.error("Error while trying to find entity of class {} from DB for id {}", clazz.getName(), id, e);
+ } catch (DatabaseException | PersistenceException e) {
+ log.error("Failed to find entity of class {} from DB for id {}", clazz.getName(), id, e);
throw new DatabaseNotReadyException(e);
} finally {
- em.close();
+ if (em != null) {
+ em.close();
+ }
}
//return a fresh object if we didn't find the one we were looking for
if (config == null) config = newInstance(id, clazz);
@@ -90,18 +84,20 @@ private static E newInstance(String id, Class clazz) {
}
public static List loadBlacklist() {
- DatabaseManager dbManager = FredBoat.getDbManager();
- if (dbManager == null || !dbManager.isAvailable()) {
- throw new DatabaseNotReadyException("The database is not available currently. Please try again later.");
- }
- EntityManager em = dbManager.getEntityManager();
+ EntityManager em = null;
List result;
try {
+ em = FredBoat.getMainDbConnection().getEntityManager();
em.getTransaction().begin();
result = em.createQuery("SELECT b FROM BlacklistEntry b", BlacklistEntry.class).getResultList();
em.getTransaction().commit();
+ } catch (DatabaseException | PersistenceException e) {
+ log.error("Failed to load blacklist", e);
+ throw new DatabaseNotReadyException(e);
} finally {
- em.close();
+ if (em != null) {
+ em.close();
+ }
}
return result;
}
diff --git a/FredBoat/src/main/java/fredboat/db/EntityWriter.java b/FredBoat/src/main/java/fredboat/db/EntityWriter.java
index 4b69b4dc2..725e2080b 100644
--- a/FredBoat/src/main/java/fredboat/db/EntityWriter.java
+++ b/FredBoat/src/main/java/fredboat/db/EntityWriter.java
@@ -26,25 +26,21 @@
package fredboat.db;
import fredboat.FredBoat;
-import fredboat.db.entity.BlacklistEntry;
-import fredboat.db.entity.GuildConfig;
-import fredboat.db.entity.GuildPermissions;
import fredboat.db.entity.IEntity;
-import fredboat.db.entity.UConfig;
-import org.hibernate.exception.JDBCConnectionException;
+import fredboat.db.entity.main.BlacklistEntry;
+import fredboat.db.entity.main.GuildConfig;
+import fredboat.db.entity.main.GuildPermissions;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import space.npstr.sqlsauce.DatabaseException;
import javax.persistence.EntityManager;
+import javax.persistence.PersistenceException;
public class EntityWriter {
private static final Logger log = LoggerFactory.getLogger(EntityWriter.class);
- public static void mergeUConfig(UConfig config) {
- merge(config);
- }
-
public static void mergeGuildConfig(GuildConfig config) {
merge(config);
}
@@ -58,32 +54,26 @@ public static void mergeGuildPermissions(GuildPermissions guildPermissions) {
}
private static void merge(IEntity entity) {
- DatabaseManager dbManager = FredBoat.getDbManager();
- if (dbManager == null || !dbManager.isAvailable()) {
- throw new DatabaseNotReadyException();
- }
-
- EntityManager em = dbManager.getEntityManager();
+ EntityManager em = null;
try {
+ em = FredBoat.getMainDbConnection().getEntityManager();
em.getTransaction().begin();
em.merge(entity);
em.getTransaction().commit();
- } catch (JDBCConnectionException e) {
+ } catch (PersistenceException | DatabaseException e) {
log.error("Failed to merge entity {}", entity, e);
throw new DatabaseNotReadyException(e);
} finally {
- em.close();
+ if (em != null) {
+ em.close();
+ }
}
}
public static void deleteBlacklistEntry(long id) {
- DatabaseManager dbManager = FredBoat.getDbManager();
- if (dbManager == null || !dbManager.isAvailable()) {
- throw new DatabaseNotReadyException("The database is not available currently. Please try again later.");
- }
-
- EntityManager em = dbManager.getEntityManager();
+ EntityManager em = null;
try {
+ em = FredBoat.getMainDbConnection().getEntityManager();
em.getTransaction().begin();
BlacklistEntry ble = em.find(BlacklistEntry.class, id);
em.getTransaction().commit();
@@ -93,8 +83,13 @@ public static void deleteBlacklistEntry(long id) {
em.remove(ble);
em.getTransaction().commit();
}
+ } catch (DatabaseException | PersistenceException e) {
+ log.error("Db blew up while deleting black list entry for id {}", id, e);
+ throw new DatabaseNotReadyException("The database is not available currently. Please try again later.");
} finally {
- em.close();
+ if (em != null) {
+ em.close();
+ }
}
}
}
diff --git a/FredBoat/src/main/java/fredboat/db/entity/SearchResult.java b/FredBoat/src/main/java/fredboat/db/entity/cache/SearchResult.java
similarity index 91%
rename from FredBoat/src/main/java/fredboat/db/entity/SearchResult.java
rename to FredBoat/src/main/java/fredboat/db/entity/cache/SearchResult.java
index 355010a65..29921d257 100644
--- a/FredBoat/src/main/java/fredboat/db/entity/SearchResult.java
+++ b/FredBoat/src/main/java/fredboat/db/entity/cache/SearchResult.java
@@ -23,7 +23,7 @@
* SOFTWARE.
*/
-package fredboat.db.entity;
+package fredboat.db.entity.cache;
import com.sedmelluq.discord.lavaplayer.player.AudioPlayerManager;
import com.sedmelluq.discord.lavaplayer.tools.io.MessageInput;
@@ -32,7 +32,6 @@
import com.sedmelluq.discord.lavaplayer.track.AudioTrack;
import com.sedmelluq.discord.lavaplayer.track.BasicAudioPlaylist;
import fredboat.FredBoat;
-import fredboat.db.DatabaseManager;
import fredboat.db.DatabaseNotReadyException;
import fredboat.util.rest.SearchUtil;
import org.apache.commons.lang3.SerializationUtils;
@@ -40,16 +39,11 @@
import org.hibernate.annotations.CacheConcurrencyStrategy;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import space.npstr.sqlsauce.DatabaseConnection;
+import space.npstr.sqlsauce.DatabaseException;
-import javax.persistence.Cacheable;
-import javax.persistence.Column;
-import javax.persistence.Embeddable;
-import javax.persistence.Entity;
-import javax.persistence.EntityManager;
-import javax.persistence.Id;
-import javax.persistence.Lob;
-import javax.persistence.PersistenceException;
-import javax.persistence.Table;
+import javax.annotation.Nullable;
+import javax.persistence.*;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
@@ -102,27 +96,31 @@ public SearchResult(AudioPlayerManager playerManager, SearchUtil.SearchProvider
* @param provider the search provider that shall be used for this search
* @param searchTerm the query to search for
* @param maxAgeMillis the maximum age of the cached search result; provide a negative value for eternal cache
- * @return the cached search result; may return null for a non-existing or outdated search
+ * @return the cached search result; may return null for a non-existing or outdated search, or when there is no
+ * cache database
*/
+ @Nullable
public static AudioPlaylist load(AudioPlayerManager playerManager, SearchUtil.SearchProvider provider,
String searchTerm, long maxAgeMillis) throws DatabaseNotReadyException {
- DatabaseManager dbManager = FredBoat.getDbManager();
- if (dbManager == null || !dbManager.isAvailable()) {
- throw new DatabaseNotReadyException();
- }
-
- EntityManager em = dbManager.getEntityManager();
+ EntityManager em = null;
SearchResult sr;
SearchResultId sId = new SearchResultId(provider, searchTerm);
+ DatabaseConnection cacheDbConn = FredBoat.getCacheDbConnection();
+ if (cacheDbConn == null) {
+ return null;
+ }
try {
+ em = cacheDbConn.getEntityManager();
em.getTransaction().begin();
sr = em.find(SearchResult.class, sId);
em.getTransaction().commit();
- } catch (PersistenceException e) {
+ } catch (DatabaseException | PersistenceException e) {
log.error("Unexpected error while trying to look up a search result for provider {} and search term {}", provider.name(), searchTerm, e);
throw new DatabaseNotReadyException(e);
} finally {
- em.close();
+ if (em != null) {
+ em.close();
+ }
}
if (sr != null && (maxAgeMillis < 0 || System.currentTimeMillis() < sr.timestamp + maxAgeMillis)) {
@@ -135,26 +133,29 @@ public static AudioPlaylist load(AudioPlayerManager playerManager, SearchUtil.Se
/**
* Persist a search in the database.
*
- * @return the merged SearchResult object
+ * @return the merged SearchResult object, or null when there is no cache database
*/
+ @Nullable
public SearchResult save() {
- DatabaseManager dbManager = FredBoat.getDbManager();
- if (dbManager == null || !dbManager.isAvailable()) {
- throw new DatabaseNotReadyException();
+ DatabaseConnection cacheDbConn = FredBoat.getCacheDbConnection();
+ if (cacheDbConn == null) {
+ return null;
}
-
- EntityManager em = dbManager.getEntityManager();
+ EntityManager em = null;
try {
+ em = cacheDbConn.getEntityManager();
em.getTransaction().begin();
SearchResult managed = em.merge(this);
em.getTransaction().commit();
return managed;
- } catch (PersistenceException e) {
+ } catch (DatabaseException | PersistenceException e) {
log.error("Unexpected error while saving a search result for provider {} and search term {}",
searchResultId.provider, searchResultId.searchTerm, e);
throw new DatabaseNotReadyException(e);
} finally {
- em.close();
+ if (em != null) {
+ em.close();
+ }
}
}
diff --git a/FredBoat/src/main/java/fredboat/db/entity/BlacklistEntry.java b/FredBoat/src/main/java/fredboat/db/entity/main/BlacklistEntry.java
similarity index 95%
rename from FredBoat/src/main/java/fredboat/db/entity/BlacklistEntry.java
rename to FredBoat/src/main/java/fredboat/db/entity/main/BlacklistEntry.java
index 295fc2f83..a09e61837 100644
--- a/FredBoat/src/main/java/fredboat/db/entity/BlacklistEntry.java
+++ b/FredBoat/src/main/java/fredboat/db/entity/main/BlacklistEntry.java
@@ -1,4 +1,5 @@
/*
+ *
* MIT License
*
* Copyright (c) 2017 Frederik Ar. Mikkelsen
@@ -22,9 +23,9 @@
* SOFTWARE.
*/
-package fredboat.db.entity;
+package fredboat.db.entity.main;
-import org.hibernate.annotations.ColumnDefault;
+import fredboat.db.entity.IEntity;
import javax.persistence.Column;
import javax.persistence.Entity;
@@ -42,6 +43,7 @@ public class BlacklistEntry implements IEntity {
//id of the user or guild that this blacklist entry belongs to
@Id
+ @Column(name = "id", nullable = false)
public long id;
//blacklist level that the user or guild is on
@@ -55,7 +57,6 @@ public class BlacklistEntry implements IEntity {
//when was the ratelimit hit the last time?
@Column(name = "rate_limit_timestamp", nullable = false)
- @ColumnDefault("0") //tells hibernate ddl how to fill this by default with a zero
public long rateLimitReachedTimestamp;
//time when the id was blacklisted
diff --git a/FredBoat/src/main/java/fredboat/db/entity/GuildConfig.java b/FredBoat/src/main/java/fredboat/db/entity/main/GuildConfig.java
similarity index 89%
rename from FredBoat/src/main/java/fredboat/db/entity/GuildConfig.java
rename to FredBoat/src/main/java/fredboat/db/entity/main/GuildConfig.java
index 8c1ec9d2a..3d916f8f8 100644
--- a/FredBoat/src/main/java/fredboat/db/entity/GuildConfig.java
+++ b/FredBoat/src/main/java/fredboat/db/entity/main/GuildConfig.java
@@ -23,24 +23,19 @@
*
*/
-package fredboat.db.entity;
+package fredboat.db.entity.main;
import fredboat.FredBoat;
-import fredboat.db.DatabaseManager;
import fredboat.db.DatabaseNotReadyException;
+import fredboat.db.entity.IEntity;
import org.hibernate.annotations.Cache;
import org.hibernate.annotations.CacheConcurrencyStrategy;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import space.npstr.sqlsauce.DatabaseException;
import javax.annotation.Nullable;
-import javax.persistence.Cacheable;
-import javax.persistence.Column;
-import javax.persistence.Entity;
-import javax.persistence.EntityManager;
-import javax.persistence.Id;
-import javax.persistence.PersistenceException;
-import javax.persistence.Table;
+import javax.persistence.*;
import java.io.Serializable;
import java.util.List;
import java.util.Optional;
@@ -56,6 +51,7 @@ public class GuildConfig implements IEntity, Serializable {
private static final long serialVersionUID = 5055243002380106205L;
@Id
+ @Column(name = "guildid", nullable = false)
private String guildId;
@Column(name = "track_announce", nullable = false)
@@ -161,14 +157,11 @@ public long getGuildId() {
@Nullable
public static Optional getPrefix(long guildId) {
log.debug("loading prefix for guild {}", guildId);
- DatabaseManager dbManager = FredBoat.getDbManager();
- if (dbManager == null || !dbManager.isAvailable()) {
- throw new DatabaseNotReadyException();
- }
//language=JPAQL
String query = "SELECT gf.prefix FROM GuildConfig gf WHERE gf.guildId = :guildId";
- EntityManager em = dbManager.getEntityManager();
+ EntityManager em = null;
try {
+ em = FredBoat.getMainDbConnection().getEntityManager();
em.getTransaction().begin();
List result = em.createQuery(query, String.class)
.setParameter("guildId", Long.toString(guildId))
@@ -179,11 +172,13 @@ public static Optional getPrefix(long guildId) {
} else {
return Optional.ofNullable(result.get(0));
}
- } catch (PersistenceException e) {
+ } catch (DatabaseException | PersistenceException e) {
log.error("Failed to load prefix for guild {}", guildId, e);
throw new DatabaseNotReadyException(e);
} finally {
- em.close();
+ if (em != null) {
+ em.close();
+ }
}
}
}
diff --git a/FredBoat/src/main/java/fredboat/db/entity/GuildPermissions.java b/FredBoat/src/main/java/fredboat/db/entity/main/GuildPermissions.java
similarity index 97%
rename from FredBoat/src/main/java/fredboat/db/entity/GuildPermissions.java
rename to FredBoat/src/main/java/fredboat/db/entity/main/GuildPermissions.java
index 7336db097..fcd91f1d4 100644
--- a/FredBoat/src/main/java/fredboat/db/entity/GuildPermissions.java
+++ b/FredBoat/src/main/java/fredboat/db/entity/main/GuildPermissions.java
@@ -23,8 +23,9 @@
*
*/
-package fredboat.db.entity;
+package fredboat.db.entity.main;
+import fredboat.db.entity.IEntity;
import fredboat.perms.PermissionLevel;
import org.hibernate.annotations.Cache;
import org.hibernate.annotations.CacheConcurrencyStrategy;
@@ -49,6 +50,7 @@ public class GuildPermissions implements IEntity, Serializable {
// Guild ID
@Id
+ @Column(name = "id")
private String id;
public GuildPermissions() {}
diff --git a/FredBoat/src/main/java/fredboat/db/migrations/cache/V1__InitialSchema.java b/FredBoat/src/main/java/fredboat/db/migrations/cache/V1__InitialSchema.java
new file mode 100644
index 000000000..75cd1d33f
--- /dev/null
+++ b/FredBoat/src/main/java/fredboat/db/migrations/cache/V1__InitialSchema.java
@@ -0,0 +1,66 @@
+/*
+ *
+ * MIT License
+ *
+ * Copyright (c) 2017 Frederik Ar. Mikkelsen
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in all
+ * copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+package fredboat.db.migrations.cache;
+
+import org.flywaydb.core.api.migration.jdbc.JdbcMigration;
+
+import java.sql.Connection;
+import java.sql.Statement;
+
+/**
+ * Created by napster on 23.12.17.
+ */
+public class V1__InitialSchema implements JdbcMigration {
+ @Override
+ public void migrate(Connection connection) throws Exception {
+
+ //SearchResult
+ String createSearchResultsSql
+ = "CREATE TABLE IF NOT EXISTS public.search_results "
+ + "( "
+ + " provider CHARACTER VARYING(255) COLLATE pg_catalog.\"default\" NOT NULL, "
+ + " search_term TEXT COLLATE pg_catalog.\"default\" NOT NULL, "
+ + " search_result OID, "
+ + " \"timestamp\" BIGINT, "
+ + " CONSTRAINT search_results_pkey PRIMARY KEY (provider, search_term) "
+ + ");";
+ try (Statement createSearchResults = connection.createStatement()) {
+ createSearchResults.execute(createSearchResultsSql);
+ }
+
+ //HStorex (from sqlsauce, requires hstore extension to be enabled)
+ String createHstorexSql
+ = "CREATE TABLE IF NOT EXISTS public.hstorex "
+ + "( "
+ + " name TEXT COLLATE pg_catalog.\"default\" NOT NULL, "
+ + " hstorex HSTORE, "
+ + " CONSTRAINT hstorex_pkey PRIMARY KEY (name) "
+ + ")";
+ try (Statement createHstorex = connection.createStatement()) {
+ createHstorex.execute(createHstorexSql);
+ }
+ }
+}
diff --git a/FredBoat/src/main/java/fredboat/db/migrations/main/V1__InitialSchema.java b/FredBoat/src/main/java/fredboat/db/migrations/main/V1__InitialSchema.java
new file mode 100644
index 000000000..1068c19b4
--- /dev/null
+++ b/FredBoat/src/main/java/fredboat/db/migrations/main/V1__InitialSchema.java
@@ -0,0 +1,106 @@
+/*
+ *
+ * MIT License
+ *
+ * Copyright (c) 2017 Frederik Ar. Mikkelsen
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in all
+ * copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+package fredboat.db.migrations.main;
+
+import org.flywaydb.core.api.migration.jdbc.JdbcMigration;
+
+import java.sql.Connection;
+import java.sql.Statement;
+
+/**
+ * Created by napster on 23.12.17.
+ *
+ * This initializes our schema at the point where we turned off hibernate-auto-ddl
+ */
+public class V1__InitialSchema implements JdbcMigration {
+
+ @Override
+ public void migrate(Connection connection) throws Exception {
+
+ //UConfig
+ //drop UConfig if exists; it was never used anyways, and can be readded later if we actually use it
+ String dropUConfigSql = "DROP TABLE IF EXISTS public.user_config;";
+ try (Statement dropUConfig = connection.createStatement()) {
+ dropUConfig.execute(dropUConfigSql);
+ }
+
+ //BlacklistEntry
+ String createBlacklistSql
+ = "CREATE TABLE IF NOT EXISTS public.blacklist "
+ + "( "
+ + " id BIGINT NOT NULL, "
+ + " level INTEGER NOT NULL, "
+ + " rate_limit_reached INTEGER NOT NULL, "
+ + " rate_limit_timestamp BIGINT NOT NULL, "
+ + " blacklisted_timestamp BIGINT NOT NULL, "
+ + " CONSTRAINT blacklist_pkey PRIMARY KEY (id) "
+ + ");";
+ try (Statement createBlacklist = connection.createStatement()) {
+ createBlacklist.execute(createBlacklistSql);
+ }
+
+ //GuildConfig
+ String createGuildConfigSql
+ = "CREATE TABLE IF NOT EXISTS public.guild_config "
+ + "( "
+ + " guildid CHARACTER VARYING(255) COLLATE pg_catalog.\"default\" NOT NULL, "
+ + " track_announce BOOLEAN NOT NULL, "
+ + " auto_resume BOOLEAN NOT NULL, "
+ + " lang CHARACTER VARYING(255) COLLATE pg_catalog.\"default\" NOT NULL, "
+ + " prefix TEXT COLLATE pg_catalog.\"default\", "
+ + " CONSTRAINT guild_config_pkey PRIMARY KEY(guildid) "
+ + ");";
+ try (Statement createGuildConfig = connection.createStatement()) {
+ createGuildConfig.execute(createGuildConfigSql);
+ }
+
+ //GuildPermissions
+ String createGuildPermissionsSql
+ = "CREATE TABLE IF NOT EXISTS public.guild_permissions "
+ + "( "
+ + " id CHARACTER VARYING(255) COLLATE pg_catalog.\"default\" NOT NULL, "
+ + " list_admin TEXT COLLATE pg_catalog.\"default\" NOT NULL, "
+ + " list_dj TEXT COLLATE pg_catalog.\"default\" NOT NULL, "
+ + " list_user TEXT COLLATE pg_catalog.\"default\" NOT NULL, "
+ + " CONSTRAINT guild_permissions_pkey PRIMARY KEY (id) "
+ + ");";
+ try (Statement createGuildPermissions = connection.createStatement()) {
+ createGuildPermissions.execute(createGuildPermissionsSql);
+ }
+
+ //HStorex (from sqlsauce, requires hstore extension to be enabled)
+ String createHstorexSql
+ = "CREATE TABLE IF NOT EXISTS public.hstorex "
+ + "( "
+ + " name TEXT COLLATE pg_catalog.\"default\" NOT NULL, "
+ + " hstorex HSTORE, "
+ + " CONSTRAINT hstorex_pkey PRIMARY KEY (name) "
+ + ")";
+ try (Statement createHstorex = connection.createStatement()) {
+ createHstorex.execute(createHstorexSql);
+ }
+ }
+}
diff --git a/FredBoat/src/main/java/fredboat/event/EventListenerBoat.java b/FredBoat/src/main/java/fredboat/event/EventListenerBoat.java
index 8e5b365a2..797f27256 100644
--- a/FredBoat/src/main/java/fredboat/event/EventListenerBoat.java
+++ b/FredBoat/src/main/java/fredboat/event/EventListenerBoat.java
@@ -60,6 +60,7 @@
import net.dv8tion.jda.core.events.message.priv.PrivateMessageReceivedEvent;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import org.slf4j.MDC;
import java.util.concurrent.TimeUnit;
@@ -81,7 +82,17 @@ public EventListenerBoat() {
@Override
public void onMessageReceived(MessageReceivedEvent event) {
+ try (// before execution set some variables that can help with finding traces that belong to each other
+ MDC.MDCCloseable _guild = MDC.putCloseable("guild", event.getGuild() != null ? event.getGuild().getId() : "PRIVATE");
+ MDC.MDCCloseable _channel = MDC.putCloseable("channel", event.getChannel().getId());
+ MDC.MDCCloseable _invoker = MDC.putCloseable("invoker", event.getAuthor().getId());
+ ) {
+
+ doOnMessageReceived(event);
+ }
+ }
+ private void doOnMessageReceived(MessageReceivedEvent event) {
if (FeatureFlags.RATE_LIMITER.isActive()) {
if (Ratelimiter.getRatelimiter().isBlacklisted(event.getAuthor().getIdLong())) {
Metrics.blacklistedMessagesReceived.inc();
@@ -95,7 +106,7 @@ public void onMessageReceived(MessageReceivedEvent event) {
}
if (event.getAuthor().equals(event.getJDA().getSelfUser())) {
- log.info(event.getGuild().getName() + " \t " + event.getAuthor().getName() + " \t " + event.getMessage().getRawContent());
+ log.info(event.getMessage().getRawContent());
return;
}
@@ -116,7 +127,7 @@ public void onMessageReceived(MessageReceivedEvent event) {
if (context == null) {
return;
}
- log.info(event.getGuild().getName() + " \t " + event.getAuthor().getName() + " \t " + event.getMessage().getRawContent());
+ log.info(event.getMessage().getRawContent());
//ignore all commands in channels where we can't write, except for the help command
if (!channel.canTalk() && !(context.command instanceof HelpCommand)) {
diff --git a/FredBoat/src/main/java/fredboat/event/EventLogger.java b/FredBoat/src/main/java/fredboat/event/EventLogger.java
index 410bf6167..44ab3bb81 100644
--- a/FredBoat/src/main/java/fredboat/event/EventLogger.java
+++ b/FredBoat/src/main/java/fredboat/event/EventLogger.java
@@ -25,18 +25,15 @@
package fredboat.event;
+import fredboat.Config;
import fredboat.FredBoat;
import fredboat.messaging.CentralMessaging;
import fredboat.util.Emojis;
import fredboat.util.TextUtils;
-import net.dv8tion.jda.core.MessageBuilder;
+import net.dv8tion.jda.core.EmbedBuilder;
import net.dv8tion.jda.core.entities.Message;
-import net.dv8tion.jda.core.entities.MessageEmbed;
-import net.dv8tion.jda.core.events.DisconnectEvent;
-import net.dv8tion.jda.core.events.ReadyEvent;
-import net.dv8tion.jda.core.events.ReconnectedEvent;
-import net.dv8tion.jda.core.events.ResumedEvent;
-import net.dv8tion.jda.core.events.ShutdownEvent;
+import net.dv8tion.jda.core.entities.User;
+import net.dv8tion.jda.core.events.*;
import net.dv8tion.jda.core.events.guild.GuildJoinEvent;
import net.dv8tion.jda.core.events.guild.GuildLeaveEvent;
import net.dv8tion.jda.core.hooks.ListenerAdapter;
@@ -45,19 +42,15 @@
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import javax.annotation.Nonnull;
import javax.annotation.Nullable;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
import java.util.Queue;
-import java.util.concurrent.ConcurrentLinkedQueue;
-import java.util.concurrent.CopyOnWriteArrayList;
-import java.util.concurrent.Executors;
-import java.util.concurrent.ScheduledExecutorService;
-import java.util.concurrent.TimeUnit;
+import java.util.concurrent.*;
import java.util.concurrent.atomic.AtomicInteger;
-import java.util.stream.Collectors;
/**
* This overengineered class logs some events via a webhook into Discord.
@@ -71,53 +64,57 @@ public class EventLogger extends ListenerAdapter {
public static final Logger log = LoggerFactory.getLogger(EventLogger.class);
- private final static int MAX_MESSAGE_QUEUE_SIZE = 30;
-
private final ScheduledExecutorService scheduler = Executors.newSingleThreadScheduledExecutor(
runnable -> new Thread(runnable, "eventlogger"));
@Nullable
- private WebhookClient eventLoggerWebhook;
+ private WebhookClient eventLogWebhook;
+ @Nullable
+ private WebhookClient guildStatsWebhook;
//saves some messages, so that in case we run into occasional connection issues we dont just drop them due to the webhook timing out
- private final Queue toBeSent = new ConcurrentLinkedQueue<>();
+ private final Queue toBeSentEventLog = new ConcurrentLinkedQueue<>();
+ private final Queue toBeSentGuildStats = new ConcurrentLinkedQueue<>();
private final List statusStats = new CopyOnWriteArrayList<>();
private final AtomicInteger guildsJoinedEvents = new AtomicInteger(0);
private final AtomicInteger guildsLeftEvents = new AtomicInteger(0);
- public EventLogger(long id, String token) {
- this(new WebhookClientBuilder(id, token).build());
+ public EventLogger() {
+ this(new WebhookClientBuilder(Config.CONFIG.getEventLogWebhook()).build(),
+ new WebhookClientBuilder(Config.CONFIG.getGuildStatsWebhook()).build());
}
- // this relies on https://github.com/DV8FromTheWorld/JDA/pull/530 being merged into master
-// public EventLogger(String eventLogWebhookUrl) {
-// this(new WebhookClientBuilder(eventLogWebhookUrl).build());
-// }
-
@Override
public void onReady(ReadyEvent event) {
- statusStats.add(new ShardStatusEvent(event.getJDA().getShardInfo().getShardId(), ShardStatusEvent.StatusEvent.READY));
+ statusStats.add(new ShardStatusEvent(event.getJDA().getShardInfo().getShardId(),
+ ShardStatusEvent.StatusEvent.READY, ""));
}
@Override
public void onResume(ResumedEvent event) {
- statusStats.add(new ShardStatusEvent(event.getJDA().getShardInfo().getShardId(), ShardStatusEvent.StatusEvent.RESUME));
+ statusStats.add(new ShardStatusEvent(event.getJDA().getShardInfo().getShardId(),
+ ShardStatusEvent.StatusEvent.RESUME, ""));
}
@Override
public void onReconnect(ReconnectedEvent event) {
- statusStats.add(new ShardStatusEvent(event.getJDA().getShardInfo().getShardId(), ShardStatusEvent.StatusEvent.RECONNECT));
+ statusStats.add(new ShardStatusEvent(event.getJDA().getShardInfo().getShardId(),
+ ShardStatusEvent.StatusEvent.RECONNECT, ""));
}
@Override
public void onDisconnect(DisconnectEvent event) {
- statusStats.add(new ShardStatusEvent(event.getJDA().getShardInfo().getShardId(), ShardStatusEvent.StatusEvent.DISCONNECT));
+ String closeCodeStr = "close code " + (event.getCloseCode() == null ? "null" : event.getCloseCode().getCode());
+ statusStats.add(new ShardStatusEvent(event.getJDA().getShardInfo().getShardId(),
+ ShardStatusEvent.StatusEvent.DISCONNECT, "with " + closeCodeStr));
}
@Override
public void onShutdown(ShutdownEvent event) {
- statusStats.add(new ShardStatusEvent(event.getJDA().getShardInfo().getShardId(), ShardStatusEvent.StatusEvent.SHUTDOWN));
+ String closeCodeStr = "close code " + (event.getCloseCode() == null ? "null" : event.getCloseCode().getCode());
+ statusStats.add(new ShardStatusEvent(event.getJDA().getShardInfo().getShardId(),
+ ShardStatusEvent.StatusEvent.SHUTDOWN, "with " + closeCodeStr));
}
@Override
@@ -140,20 +137,26 @@ public void onGuildLeave(GuildLeaveEvent event) {
message = Emojis.DOOR + "Exiting with unknown code.";
}
log.info(message);
- if (eventLoggerWebhook != null) {
- eventLoggerWebhook.send(message);
+ Future elw = null;
+ Future gsw = null;
+ if (eventLogWebhook != null) elw = eventLogWebhook.send(message);
+ if (guildStatsWebhook != null) gsw = guildStatsWebhook.send(message);
+ try {
+ if (elw != null) elw.get();
+ if (gsw != null) gsw.get();
+ } catch (ExecutionException | InterruptedException ignored) {
}
};
//actual constructor
- private EventLogger(WebhookClient eventLoggerWebhook) {
+ private EventLogger(@Nonnull WebhookClient eventLoggerWebhook, @Nonnull WebhookClient guildStatsWebhook) {
Runtime.getRuntime().addShutdownHook(new Thread(ON_SHUTDOWN, EventLogger.class.getSimpleName() + " shutdownhook"));
- //test the provided webhook before assigning it, otherwise it will spam our logs with exceptions
+ //test the provided webhooks before assigning them, otherwise they will spam our logs with exceptions
WebhookClient workingWebhook = null;
if (eventLoggerWebhook.getIdLong() > 0) { //id is 0 when there is no webhookid configured in the config; skip this in that case
try {
- eventLoggerWebhook.send(Emojis.PENCIL + "Eventlogger started.")
+ eventLoggerWebhook.send(Emojis.PENCIL + "Event logger started.")
.get();
workingWebhook = eventLoggerWebhook; //webhook test was successful; FIXME occasionally this might fail during the start due to connection issues, while the provided values are actually valid
} catch (Exception e) {
@@ -163,39 +166,70 @@ private EventLogger(WebhookClient eventLoggerWebhook) {
} else {
eventLoggerWebhook.close();
}
+ this.eventLogWebhook = workingWebhook;
+
+ if (eventLogWebhook != null) {
+ scheduler.scheduleAtFixedRate(() -> {
+ try {
+ sendEventLogs();
+ } catch (Exception e) {
+ log.error("Failed to send shard status summary to event log webhook", e);
+ }
+ }, 0, Math.max(Config.CONFIG.getEventLogInterval(), 1), TimeUnit.MINUTES);
+ }
- this.eventLoggerWebhook = workingWebhook;
-
- scheduler.scheduleAtFixedRate(() -> {
- try {
- sendShardStatusSummary();
- } catch (Exception e) {
- log.error("Failed to send shard status summary to event log webhook", e);
- }
- }, 0, 1, TimeUnit.MINUTES);
-
- scheduler.scheduleAtFixedRate(() -> {
+ workingWebhook = null;
+ if (guildStatsWebhook.getIdLong() > 0) { //id is 0 when there is no webhookid configured in the config; skip this in that case
try {
- sendGuildsSummary();
+ guildStatsWebhook.send(Emojis.PENCIL + "Guild stats logger started.")
+ .get();
+ workingWebhook = guildStatsWebhook; //webhook test was successful; FIXME occasionally this might fail during the start due to connection issues, while the provided values are actually valid
} catch (Exception e) {
- log.error("Failed to send guilds summary to event log webhook", e);
+ log.error("Failed to create guild stats webhook. Guild stats will not be available. Doublecheck your configuration values.");
+ guildStatsWebhook.close();
}
- }, 0, 1, TimeUnit.HOURS);
+ } else {
+ guildStatsWebhook.close();
+ }
+ this.guildStatsWebhook = workingWebhook;
+
+ int interval = Math.max(Config.CONFIG.getGuildStatsInterval(), 1);
+ if (this.guildStatsWebhook != null) {
+ scheduler.scheduleAtFixedRate(() -> {
+ try {
+ sendGuildStats();
+ } catch (Exception e) {
+ log.error("Failed to send guilds summary to guild stats webhook", e);
+ }
+ }, interval, interval, TimeUnit.MINUTES);
+ }
}
- private void sendGuildsSummary() {
- MessageEmbed embed = CentralMessaging.getColoredEmbedBuilder()
+ private void sendGuildStats() {
+ if (guildStatsWebhook == null) {
+ return;
+ }
+
+ EmbedBuilder eb = CentralMessaging.getColoredEmbedBuilder()
.setTimestamp(LocalDateTime.now())
.setTitle("Joins and Leaves since the last update")
.addField("Guilds joined", Integer.toString(guildsJoinedEvents.getAndSet(0)), true)
- .addField("Guilds left", Integer.toString(guildsLeftEvents.getAndSet(0)), true)
- .build();
+ .addField("Guilds left", Integer.toString(guildsLeftEvents.getAndSet(0)), true);
+
+ if (!FredBoat.getShards().isEmpty()) {
+ FredBoat anyShard = FredBoat.getShards().get(0);
+ User self = anyShard.getJda().getSelfUser();
+ eb.setFooter(self.getName(), self.getEffectiveAvatarUrl());
+ }
- addMessageToWebhookQueue(CentralMessaging.getClearThreadLocalMessageBuilder().setEmbed(embed).build());
- drainMessageQueue();
+ toBeSentGuildStats.add(CentralMessaging.from(eb.build()));
+ drainMessageQueue(toBeSentGuildStats, guildStatsWebhook);
}
- private void sendShardStatusSummary() {
+ private void sendEventLogs() {
+ if (eventLogWebhook == null) {
+ return;
+ }
List events = new ArrayList<>(statusStats);
statusStats.removeAll(events);
@@ -203,112 +237,49 @@ private void sendShardStatusSummary() {
return;//nothing to report
}
- //~35 lines fit into a 2k char message, if we can get away with a max of 5 messages, post those, otherwise post a summary
- if (events.size() <= 35 * 5) {
- List sublist = new ArrayList<>();
- for (int i = 0; i < events.size(); i++) {
- sublist.add(events.get(i));
- if (i != 0 && (i % 35 == 0 || i == events.size() - 1)) {
- addMessageToWebhookQueue(CentralMessaging.getClearThreadLocalMessageBuilder()
- .appendCodeBlock(String.join("\n", sublist.stream().map(ShardStatusEvent::toString).collect(Collectors.toList())),
- "diff")
- .build());
- sublist.clear();
- }
- }
- drainMessageQueue();
- return;
- }
-
- //too many events in a short time. sum them up
- List readied = new ArrayList<>();
- List resumed = new ArrayList<>();
- List reconnected = new ArrayList<>();
- List disconnected = new ArrayList<>();
- List shutdown = new ArrayList<>();
-
+ //split into messages of acceptable size (2k chars max)
+ StringBuilder msg = new StringBuilder();
for (ShardStatusEvent event : events) {
- switch (event.event) {
- case READY:
- readied.add(event.shardId);
- break;
- case RESUME:
- resumed.add(event.shardId);
- break;
- case RECONNECT:
- reconnected.add(event.shardId);
- break;
- case DISCONNECT:
- disconnected.add(event.shardId);
- break;
- case SHUTDOWN:
- shutdown.add(event.shardId);
- break;
- default:
- log.error("Unexpected status event type: {}", event.event.name());
+ String eventStr = event.toString();
+ if (msg.length() + eventStr.length() > 1900) {
+ toBeSentEventLog.add(CentralMessaging.getClearThreadLocalMessageBuilder()
+ .appendCodeBlock(msg.toString(), "diff").build());
+ msg = new StringBuilder();
}
+ msg.append("\n").append(eventStr);
}
-
- String output = TextUtils.getTimeInCentralEurope() + " **Shard Events Summary:**\n";
- if (!readied.isEmpty()) {
- String shards = String.join(", ", readied.stream().map(i -> Integer.toString(i)).collect(Collectors.toList()));
- output += TextUtils.asCodeBlock("+ " + readied.size() + " shard ready events:\n+ " + shards, "diff") + "\n";
- }
- if (!resumed.isEmpty()) {
- String shards = String.join(", ", resumed.stream().map(i -> Integer.toString(i)).collect(Collectors.toList()));
- output += TextUtils.asCodeBlock("+ " + resumed.size() + " shard resume events:\n+ " + shards, "diff") + "\n";
- }
- if (!reconnected.isEmpty()) {
- String shards = String.join(", ", reconnected.stream().map(i -> Integer.toString(i)).collect(Collectors.toList()));
- output += TextUtils.asCodeBlock("+" + reconnected.size() + " shard reconnect events:\n+ " + shards, "diff") + "\n";
- }
- if (!disconnected.isEmpty()) {
- String shards = String.join(", ", disconnected.stream().map(i -> Integer.toString(i)).collect(Collectors.toList()));
- output += TextUtils.asCodeBlock("-" + disconnected.size() + " shard disconnect events:\n- " + shards, "diff") + "\n";
+ if (msg.length() > 0) {//any leftovers?
+ toBeSentEventLog.add(CentralMessaging.getClearThreadLocalMessageBuilder()
+ .appendCodeBlock(msg.toString(), "diff").build());
}
- if (!shutdown.isEmpty()) {
- String shards = String.join(", ", shutdown.stream().map(i -> Integer.toString(i)).collect(Collectors.toList()));
- output += TextUtils.asCodeBlock("- " + shutdown.size() + " shard shutdown events:\n- " + shards, "diff") + "\n";
- }
-
- CentralMessaging.getClearThreadLocalMessageBuilder()
- .append(output)
- .buildAll(MessageBuilder.SplitPolicy.NEWLINE)
- .forEach(this::addMessageToWebhookQueue);
- drainMessageQueue();
+ drainMessageQueue(toBeSentEventLog, eventLogWebhook);
}
- private synchronized void drainMessageQueue() {
- if (eventLoggerWebhook == null) {
- return;
- }
+ private static void drainMessageQueue(@Nonnull Queue queue, @Nonnull WebhookClient webhook) {
try {
- while (!toBeSent.isEmpty()) {
- Message message = toBeSent.peek();
- eventLoggerWebhook.send(message).get();
- toBeSent.poll();
+ while (!queue.isEmpty()) {
+ Message message = queue.peek();
+ webhook.send(message).get();
+ queue.poll();
}
} catch (Exception e) {
- log.warn("Event log webhook failed to send a message. Will try again later.", e);
- }
- }
-
- private void addMessageToWebhookQueue(Message message) {
- while (toBeSent.size() > MAX_MESSAGE_QUEUE_SIZE) {
- toBeSent.poll(); //drop messages above max size
+ log.warn("Webhook failed to send a message. Will try again next time.", e);
}
- toBeSent.add(message);
}
private static class ShardStatusEvent {
final int shardId;
+ @Nonnull
final StatusEvent event;
+ @Nonnull
+ final String additionalInfo;
final long timestamp;
- private ShardStatusEvent(int shardId, StatusEvent event) {
+ private ShardStatusEvent(int shardId, @Nonnull StatusEvent event, @Nonnull String additionalInfo) {
this.shardId = shardId;
this.event = event;
+ this.additionalInfo = additionalInfo;
this.timestamp = System.currentTimeMillis();
}
@@ -330,8 +301,9 @@ enum StatusEvent {
@Override
public String toString() {
- return String.format("%s [%s] Shard %s %s", //NOTE when changing this, make sure the max message size is still respected in those place using this method
- event.diff, TextUtils.asTimeInCentralEurope(timestamp), TextUtils.forceNDigits(shardId, 3), event.str);
+ return String.format("%s [%s] Shard %s %s %s",
+ event.diff, TextUtils.asTimeInCentralEurope(timestamp),
+ TextUtils.forceNDigits(shardId, 3), event.str, additionalInfo);
}
@Override
diff --git a/FredBoat/src/main/java/fredboat/feature/I18n.java b/FredBoat/src/main/java/fredboat/feature/I18n.java
index 07d4bc5b5..88ec78f9b 100644
--- a/FredBoat/src/main/java/fredboat/feature/I18n.java
+++ b/FredBoat/src/main/java/fredboat/feature/I18n.java
@@ -28,7 +28,7 @@
import fredboat.db.DatabaseNotReadyException;
import fredboat.db.EntityReader;
import fredboat.db.EntityWriter;
-import fredboat.db.entity.GuildConfig;
+import fredboat.db.entity.main.GuildConfig;
import net.dv8tion.jda.core.entities.Guild;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -50,6 +50,7 @@ public class I18n {
public static void start() {
LANGS.put("en_US", DEFAULT);
LANGS.put("af_ZA", new FredBoatLocale(new Locale("af", "ZA"), "af_ZA", "Afrikaans"));
+ LANGS.put("ar_SA", new FredBoatLocale(new Locale("ar", "SA"), "ar_SA", "ﺔﻴﺐﺮﻌﻠﺍ"));
LANGS.put("bg_BG", new FredBoatLocale(new Locale("bg", "BG"), "bg_BG", "български език"));
LANGS.put("ca_ES", new FredBoatLocale(new Locale("ca", "ES"), "ca_ES", "Catalan"));
LANGS.put("zh_CN", new FredBoatLocale(new Locale("zh", "CN"), "zh_CN", "简体中文"));
@@ -58,11 +59,15 @@ public static void start() {
LANGS.put("hr_HR", new FredBoatLocale(new Locale("hr", "HR"), "hr_HR", "Hrvatski"));
LANGS.put("da_DK", new FredBoatLocale(new Locale("da", "DK"), "da_DK", "Dansk"));
LANGS.put("nl_NL", new FredBoatLocale(new Locale("nl", "NL"), "nl_NL", "Nederlands"));
+ LANGS.put("fi_FI", new FredBoatLocale(new Locale("fi", "FI"), "fi_FI", "suomi"));
LANGS.put("fr_FR", new FredBoatLocale(new Locale("fr", "FR"), "fr_FR", "Français"));
LANGS.put("de_DE", new FredBoatLocale(new Locale("de", "DE"), "de_DE", "Deutsch"));
+ LANGS.put("el_GR", new FredBoatLocale(new Locale("el", "GR"), "el_GR", "ελληνικά"));
LANGS.put("he_IL", new FredBoatLocale(new Locale("he", "IL"), "he_IL", "עברית"));
+ LANGS.put("hu_HU", new FredBoatLocale(new Locale("hu", "HU"), "hu_HU", "magyar"));
LANGS.put("id_ID", new FredBoatLocale(new Locale("id", "ID"), "id_ID", "Bahasa Indonesia"));
LANGS.put("it_IT", new FredBoatLocale(new Locale("it", "IT"), "it_IT", "Italiano"));
+ LANGS.put("ja_JP", new FredBoatLocale(new Locale("ja", "JP"), "ja_JP", "日本語"));
LANGS.put("ko_KR", new FredBoatLocale(new Locale("ko", "KR"), "ko_KR", "한국어"));
LANGS.put("pl_PL", new FredBoatLocale(new Locale("pl", "PL"), "pl_PL", "Polski"));
LANGS.put("pt_BR", new FredBoatLocale(new Locale("pt", "BR"), "pt_BR", "Português (Brazil)"));
@@ -71,6 +76,7 @@ public static void start() {
LANGS.put("ru_RU", new FredBoatLocale(new Locale("ru", "RU"), "ru_RU", "Русский"));
LANGS.put("es_ES", new FredBoatLocale(new Locale("es", "ES"), "es_ES", "Español"));
LANGS.put("sv_SE", new FredBoatLocale(new Locale("sv", "SE"), "sv_SE", "Svenska"));
+ LANGS.put("th_TH", new FredBoatLocale(new Locale("th", "TH"), "th_TH", "ไทย"));
LANGS.put("tr_TR", new FredBoatLocale(new Locale("tr", "TR"), "tr_TR", "Türkçe"));
LANGS.put("vi_VN", new FredBoatLocale(new Locale("vi", "VN"), "vi_VN", "Tiếng Việt"));
LANGS.put("cy_GB", new FredBoatLocale(new Locale("cy", "GB"), "cy_GB", "Cymraeg"));
diff --git a/FredBoat/src/main/java/fredboat/feature/metrics/collectors/ThreadPoolCollector.java b/FredBoat/src/main/java/fredboat/feature/metrics/collectors/ThreadPoolCollector.java
index 8ed9199dc..ca6b2691c 100644
--- a/FredBoat/src/main/java/fredboat/feature/metrics/collectors/ThreadPoolCollector.java
+++ b/FredBoat/src/main/java/fredboat/feature/metrics/collectors/ThreadPoolCollector.java
@@ -87,6 +87,10 @@ public List collect() {
"Amount of active threads in a thread pool", labelNames);
mfs.add(activeThreads);
+ GaugeMetricFamily queueSize = new GaugeMetricFamily("fredboat_threadpool_queue_size_current",
+ "Size of queue of a thread pool (including scheduled tasks)", labelNames);
+ mfs.add(queueSize);
+
CounterMetricFamily completedTasks = new CounterMetricFamily("fredboat_threadpool_completed_tasks_total",
"Total completed tasks by a thread pool", labelNames);
mfs.add(completedTasks);
@@ -97,6 +101,7 @@ public List collect() {
List labels = Collections.singletonList(poolName);
activeThreads.addMetric(labels, pool.getActiveCount());
+ queueSize.addMetric(labels, pool.getQueue().size());
completedTasks.addMetric(labels, pool.getCompletedTaskCount()); //guaranteed to always increase, ergo good fit for a counter
}
diff --git a/FredBoat/src/main/java/fredboat/messaging/CentralMessaging.java b/FredBoat/src/main/java/fredboat/messaging/CentralMessaging.java
index c71a91b9c..73691e534 100644
--- a/FredBoat/src/main/java/fredboat/messaging/CentralMessaging.java
+++ b/FredBoat/src/main/java/fredboat/messaging/CentralMessaging.java
@@ -57,20 +57,24 @@
/**
* Created by napster on 10.09.17.
*
- * Everything related to sending things out from FredBoat
+ * Everything related to sending RestActions from FredBoat
*/
+@SuppressWarnings("UnusedReturnValue")
public class CentralMessaging {
+ @Nonnull
private static final Logger log = LoggerFactory.getLogger(CentralMessaging.class);
//this is needed for when we absolutely don't care about a rest action failing (use this only after good consideration!)
// because if we pass null for a failure handler to JDA it uses a default handler that results in a warning/error level log
+ @Nonnull
public static final Consumer NOOP_EXCEPTION_HANDLER = __ -> {
};
//use this to schedule rest actions whenever queueAfter() or similar JDA methods would be used
// this makes it way easier to track stats + handle failures of such delayed RestActions
// instead of implementing a ton of overloaded methods in this class
+ @Nonnull
public static final ScheduledExecutorService restService = Executors.newScheduledThreadPool(10,
runnable -> new Thread(runnable, "central-messaging-scheduler"));
@@ -83,19 +87,24 @@ public class CentralMessaging {
// a per-thread scope
// this makes sense since the vast majority of message processing in FredBoat is happening in the main JDA threads
+ @Nonnull
private static ThreadLocal threadLocalMessageBuilder = ThreadLocal.withInitial(MessageBuilder::new);
+ @Nonnull
private static ThreadLocal threadLocalEmbedBuilder = ThreadLocal.withInitial(EmbedBuilder::new);
+ @Nonnull
public static MessageBuilder getClearThreadLocalMessageBuilder() {
return threadLocalMessageBuilder.get().clear();
}
//presets fredboat color on a clear embed
+ @Nonnull
public static EmbedBuilder getColoredEmbedBuilder() {
return getClearThreadLocalEmbedBuilder()
.setColor(BotConstants.FREDBOAT_COLOR);
}
+ @Nonnull
public static EmbedBuilder getClearThreadLocalEmbedBuilder() {
return threadLocalEmbedBuilder.get()
.clearFields()
@@ -110,11 +119,13 @@ public static EmbedBuilder getClearThreadLocalEmbedBuilder() {
}
//May not be an empty string, as MessageBuilder#build() will throw an exception
- public static Message from(String string) {
+ @Nonnull
+ public static Message from(@Nonnull String string) {
return getClearThreadLocalMessageBuilder().append(string).build();
}
- public static Message from(MessageEmbed embed) {
+ @Nonnull
+ public static Message from(@Nonnull MessageEmbed embed) {
return getClearThreadLocalMessageBuilder().setEmbed(embed).build();
}
@@ -133,6 +144,7 @@ public static Message from(MessageEmbed embed) {
* @return Future that can be waited on in case the code requires completion. Similar to JDA's RestAction#complete,
* avoid usage where not absolutely needed.
*/
+ @Nonnull
public static MessageFuture sendMessage(@Nonnull MessageChannel channel, @Nonnull Message message,
@Nullable Consumer onSuccess, @Nullable Consumer onFail) {
return sendMessage0(
@@ -144,6 +156,7 @@ public static MessageFuture sendMessage(@Nonnull MessageChannel channel, @Nonnul
}
// Message
+ @Nonnull
public static MessageFuture sendMessage(@Nonnull MessageChannel channel, @Nonnull Message message,
@Nullable Consumer onSuccess) {
return sendMessage0(
@@ -155,6 +168,7 @@ public static MessageFuture sendMessage(@Nonnull MessageChannel channel, @Nonnul
}
// Message
+ @Nonnull
public static MessageFuture sendMessage(@Nonnull MessageChannel channel, @Nonnull Message message) {
return sendMessage0(
channel,
@@ -165,6 +179,7 @@ public static MessageFuture sendMessage(@Nonnull MessageChannel channel, @Nonnul
}
// Embed
+ @Nonnull
public static MessageFuture sendMessage(@Nonnull MessageChannel channel, @Nonnull MessageEmbed embed,
@Nullable Consumer onSuccess, @Nullable Consumer onFail) {
return sendMessage0(
@@ -176,6 +191,7 @@ public static MessageFuture sendMessage(@Nonnull MessageChannel channel, @Nonnul
}
// Embed
+ @Nonnull
public static MessageFuture sendMessage(@Nonnull MessageChannel channel, @Nonnull MessageEmbed embed,
@Nullable Consumer onSuccess) {
return sendMessage0(
@@ -187,6 +203,7 @@ public static MessageFuture sendMessage(@Nonnull MessageChannel channel, @Nonnul
}
// Embed
+ @Nonnull
public static MessageFuture sendMessage(@Nonnull MessageChannel channel, @Nonnull MessageEmbed embed) {
return sendMessage0(
channel,
@@ -197,6 +214,7 @@ public static MessageFuture sendMessage(@Nonnull MessageChannel channel, @Nonnul
}
// String
+ @Nonnull
public static MessageFuture sendMessage(@Nonnull MessageChannel channel, @Nonnull String content,
@Nullable Consumer onSuccess, @Nullable Consumer onFail) {
return sendMessage0(
@@ -208,6 +226,7 @@ public static MessageFuture sendMessage(@Nonnull MessageChannel channel, @Nonnul
}
// String
+ @Nonnull
public static MessageFuture sendMessage(@Nonnull MessageChannel channel, @Nonnull String content,
@Nullable Consumer onSuccess) {
return sendMessage0(
@@ -219,6 +238,7 @@ public static MessageFuture sendMessage(@Nonnull MessageChannel channel, @Nonnul
}
// String
+ @Nonnull
public static MessageFuture sendMessage(@Nonnull MessageChannel channel, @Nonnull String content) {
return sendMessage0(
channel,
@@ -243,6 +263,7 @@ public static MessageFuture sendMessage(@Nonnull MessageChannel channel, @Nonnul
* @return Future that can be waited on in case the code requires completion. Similar to JDA's RestAction#complete,
* avoid usage where not absolutely needed.
*/
+ @Nonnull
public static MessageFuture sendFile(@Nonnull MessageChannel channel, @Nonnull File file, @Nullable Message message,
@Nullable Consumer onSuccess, @Nullable Consumer onFail) {
return sendFile0(
@@ -254,6 +275,7 @@ public static MessageFuture sendFile(@Nonnull MessageChannel channel, @Nonnull F
);
}
+ @Nonnull
public static MessageFuture sendFile(@Nonnull MessageChannel channel, @Nonnull File file, @Nullable Message message,
@Nullable Consumer onSuccess) {
return sendFile0(
@@ -265,6 +287,7 @@ public static MessageFuture sendFile(@Nonnull MessageChannel channel, @Nonnull F
);
}
+ @Nonnull
public static MessageFuture sendFile(@Nonnull MessageChannel channel, @Nonnull File file, @Nullable Message message) {
return sendFile0(
channel,
@@ -275,6 +298,7 @@ public static MessageFuture sendFile(@Nonnull MessageChannel channel, @Nonnull F
);
}
+ @Nonnull
public static MessageFuture sendFile(@Nonnull MessageChannel channel, @Nonnull File file,
@Nullable Consumer onSuccess, @Nullable Consumer onFail) {
return sendFile0(
@@ -286,6 +310,7 @@ public static MessageFuture sendFile(@Nonnull MessageChannel channel, @Nonnull F
);
}
+ @Nonnull
public static MessageFuture sendFile(@Nonnull MessageChannel channel, @Nonnull File file,
@Nullable Consumer onSuccess) {
return sendFile0(
@@ -297,6 +322,7 @@ public static MessageFuture sendFile(@Nonnull MessageChannel channel, @Nonnull F
);
}
+ @Nonnull
public static MessageFuture sendFile(@Nonnull MessageChannel channel, @Nonnull File file) {
return sendFile0(
channel,
@@ -322,6 +348,7 @@ public static MessageFuture sendFile(@Nonnull MessageChannel channel, @Nonnull F
* @return Future that can be waited on in case the code requires completion. Similar to JDA's RestAction#complete,
* avoid usage where not absolutely needed.
*/
+ @Nonnull
public static MessageFuture editMessage(@Nonnull Message oldMessage, @Nonnull Message newMessage,
@Nullable Consumer onSuccess, @Nullable Consumer onFail) {
return editMessage0(
@@ -333,6 +360,7 @@ public static MessageFuture editMessage(@Nonnull Message oldMessage, @Nonnull Me
);
}
+ @Nonnull
public static MessageFuture editMessage(@Nonnull Message oldMessage, @Nonnull Message newMessage) {
return editMessage0(
oldMessage.getChannel(),
@@ -343,6 +371,7 @@ public static MessageFuture editMessage(@Nonnull Message oldMessage, @Nonnull Me
);
}
+ @Nonnull
public static MessageFuture editMessage(@Nonnull Message oldMessage, @Nonnull String newContent) {
return editMessage0(
oldMessage.getChannel(),
@@ -353,7 +382,7 @@ public static MessageFuture editMessage(@Nonnull Message oldMessage, @Nonnull St
);
}
-
+ @Nonnull
public static MessageFuture editMessage(@Nonnull MessageChannel channel, long oldMessageId, @Nonnull Message newMessage,
@Nullable Consumer onSuccess, @Nullable Consumer onFail) {
return editMessage0(
@@ -365,6 +394,7 @@ public static MessageFuture editMessage(@Nonnull MessageChannel channel, long ol
);
}
+ @Nonnull
public static MessageFuture editMessage(@Nonnull MessageChannel channel, long oldMessageId, @Nonnull Message newMessage) {
return editMessage0(
channel,
@@ -375,6 +405,7 @@ public static MessageFuture editMessage(@Nonnull MessageChannel channel, long ol
);
}
+ @Nonnull
public static MessageFuture editMessage(@Nonnull MessageChannel channel, long oldMessageId, @Nonnull String newContent) {
return editMessage0(
channel,
@@ -389,7 +420,7 @@ public static MessageFuture editMessage(@Nonnull MessageChannel channel, long ol
// Miscellaneous messaging related methods
// ********************************************************************************
- public static void sendTyping(MessageChannel channel) {
+ public static void sendTyping(@Nonnull MessageChannel channel) {
try {
channel.sendTyping().queue(
__ -> Metrics.successfulRestActions.labels("sendTyping").inc(),
@@ -459,15 +490,9 @@ public static EmbedBuilder addNpFooter(@Nonnull EmbedBuilder eb, @Nonnull Member
// ********************************************************************************
//class internal message sending method
+ @Nonnull
private static MessageFuture sendMessage0(@Nonnull MessageChannel channel, @Nonnull Message message,
@Nullable Consumer onSuccess, @Nullable Consumer onFail) {
- if (channel == null) {
- throw new IllegalArgumentException("Channel is null");
- }
- if (message == null) {
- throw new IllegalArgumentException("Message is null");
- }
-
MessageFuture result = new MessageFuture();
Consumer successWrapper = m -> {
result.complete(m);
@@ -491,7 +516,9 @@ private static MessageFuture sendMessage0(@Nonnull MessageChannel channel, @Nonn
try {
channel.sendMessage(message).queue(successWrapper, failureWrapper);
} catch (InsufficientPermissionException e) {
- failureWrapper.accept(e);
+ if (onFail != null) {
+ onFail.accept(e);
+ }
if (e.getPermission() == Permission.MESSAGE_EMBED_LINKS) {
handleInsufficientPermissionsException(channel, e);
} else {
@@ -503,14 +530,9 @@ private static MessageFuture sendMessage0(@Nonnull MessageChannel channel, @Nonn
}
//class internal file sending method
+ @Nonnull
private static MessageFuture sendFile0(@Nonnull MessageChannel channel, @Nonnull File file, @Nullable Message message,
@Nullable Consumer onSuccess, @Nullable Consumer onFail) {
- if (channel == null) {
- throw new IllegalArgumentException("Channel is null");
- }
- if (file == null) {
- throw new IllegalArgumentException("File is null");
- }
MessageFuture result = new MessageFuture();
Consumer successWrapper = m -> {
@@ -538,7 +560,9 @@ private static MessageFuture sendFile0(@Nonnull MessageChannel channel, @Nonnull
// this is scheduled to be fixed through JDA's message-rw branch
channel.sendFile(FileUtils.readFileToByteArray(file), file.getName(), message).queue(successWrapper, failureWrapper);
} catch (InsufficientPermissionException e) {
- failureWrapper.accept(e);
+ if (onFail != null) {
+ onFail.accept(e);
+ }
handleInsufficientPermissionsException(channel, e);
} catch (IOException e) {
log.error("Could not send file {}, it appears to be borked", file.getAbsolutePath(), e);
@@ -547,14 +571,9 @@ private static MessageFuture sendFile0(@Nonnull MessageChannel channel, @Nonnull
}
//class internal editing method
+ @Nonnull
private static MessageFuture editMessage0(@Nonnull MessageChannel channel, long oldMessageId, @Nonnull Message newMessage,
@Nullable Consumer onSuccess, @Nullable Consumer onFail) {
- if (channel == null) {
- throw new IllegalArgumentException("Channel is null");
- }
- if (newMessage == null) {
- throw new IllegalArgumentException("New message is null");
- }
MessageFuture result = new MessageFuture();
Consumer successWrapper = m -> {
@@ -580,7 +599,9 @@ private static MessageFuture editMessage0(@Nonnull MessageChannel channel, long
try {
channel.editMessageById(oldMessageId, newMessage).queue(successWrapper, failureWrapper);
} catch (InsufficientPermissionException e) {
- failureWrapper.accept(e);
+ if (onFail != null) {
+ onFail.accept(e);
+ }
handleInsufficientPermissionsException(channel, e);
}
return result;
@@ -600,7 +621,8 @@ private static void handleInsufficientPermissionsException(@Nonnull MessageChann
//handles failed JDA rest actions by logging them with an informational string and optionally ignoring some error response codes
- public static Consumer getJdaRestActionFailureHandler(String info, ErrorResponse... ignored) {
+ @Nonnull
+ public static Consumer getJdaRestActionFailureHandler(@Nonnull String info, ErrorResponse... ignored) {
return t -> {
if (t instanceof ErrorResponseException) {
ErrorResponseException e = (ErrorResponseException) t;
diff --git a/FredBoat/src/main/java/fredboat/messaging/internal/Context.java b/FredBoat/src/main/java/fredboat/messaging/internal/Context.java
index e5776c73d..236d4f790 100644
--- a/FredBoat/src/main/java/fredboat/messaging/internal/Context.java
+++ b/FredBoat/src/main/java/fredboat/messaging/internal/Context.java
@@ -188,7 +188,14 @@ public String i18nFormat(@Nonnull String key, Object... params) {
log.warn("Context#i18nFormat() called with empty or null params, this is likely a bug.",
new MessagingException("a stack trace to help find the source"));
}
- return MessageFormat.format(this.i18n(key), params);
+ try {
+ return MessageFormat.format(this.i18n(key), params);
+ } catch (IllegalArgumentException e) {
+ log.warn("Failed to format key '{}' for language '{}' with following parameters: {}",
+ key, getI18n().getBaseBundleName(), params, e);
+ //fall back to default props
+ return MessageFormat.format(I18n.DEFAULT.getProps().getString(key), params);
+ }
}
diff --git a/FredBoat/src/main/java/fredboat/perms/PermsUtil.java b/FredBoat/src/main/java/fredboat/perms/PermsUtil.java
index d666c9d45..8b07b3146 100644
--- a/FredBoat/src/main/java/fredboat/perms/PermsUtil.java
+++ b/FredBoat/src/main/java/fredboat/perms/PermsUtil.java
@@ -28,7 +28,7 @@
import fredboat.Config;
import fredboat.commandmeta.abs.CommandContext;
import fredboat.db.EntityReader;
-import fredboat.db.entity.GuildPermissions;
+import fredboat.db.entity.main.GuildPermissions;
import fredboat.feature.togglz.FeatureFlags;
import fredboat.util.DiscordUtil;
import net.dv8tion.jda.core.Permission;
diff --git a/FredBoat/src/main/java/fredboat/util/AsciiArtConstant.java b/FredBoat/src/main/java/fredboat/util/AsciiArtConstant.java
index 7be3bd351..f79ef11b1 100644
--- a/FredBoat/src/main/java/fredboat/util/AsciiArtConstant.java
+++ b/FredBoat/src/main/java/fredboat/util/AsciiArtConstant.java
@@ -13,7 +13,7 @@ public final class AsciiArtConstant {
"⊂ ノ ・゜+.",
" しーJ °。+ ´¨)",
" .· ´¸.·´¨) ¸.·*¨)",
- " (¸.·´ (¸.·' ☆ ABRA KADABRA..."
+ " (¸.·´ (¸.·' ☆ "
);
public static final String EAGLE_OF_LENNY = String.join("\n",
diff --git a/FredBoat/src/main/java/fredboat/util/BrainfuckException.java b/FredBoat/src/main/java/fredboat/util/BrainfuckException.java
index bb248cc39..016671cff 100644
--- a/FredBoat/src/main/java/fredboat/util/BrainfuckException.java
+++ b/FredBoat/src/main/java/fredboat/util/BrainfuckException.java
@@ -25,11 +25,12 @@
package fredboat.util;
-public class BrainfuckException extends RuntimeException {
+import fredboat.commandmeta.MessagingException;
+
+public class BrainfuckException extends MessagingException {
+
+ private static final long serialVersionUID = -8343893398101119524L;
- private BrainfuckException() {
- }
-
public BrainfuckException(String string, Throwable thrwbl) {
super(string, thrwbl);
}
diff --git a/FredBoat/src/main/java/fredboat/util/DiscordUtil.java b/FredBoat/src/main/java/fredboat/util/DiscordUtil.java
index 54790c356..1c85e3714 100644
--- a/FredBoat/src/main/java/fredboat/util/DiscordUtil.java
+++ b/FredBoat/src/main/java/fredboat/util/DiscordUtil.java
@@ -25,6 +25,11 @@
package fredboat.util;
+import com.google.common.cache.CacheBuilder;
+import com.google.common.cache.CacheLoader;
+import com.google.common.cache.LoadingCache;
+import fredboat.Config;
+import fredboat.FredBoat;
import fredboat.commandmeta.abs.CommandContext;
import fredboat.feature.I18n;
import fredboat.feature.metrics.Metrics;
@@ -53,7 +58,8 @@
public class DiscordUtil {
private static final Logger log = LoggerFactory.getLogger(DiscordUtil.class);
- private static final String USER_AGENT = "FredBoat DiscordBot (https://github.com/Frederikam/FredBoat, 1.0)";
+ private static final String USER_AGENT = String.format("DiscordBot (https://github.com/Frederikam/FredBoat, %s)",
+ AppInfo.getAppInfo().getVersionBuild());
private static volatile DiscordAppInfo selfDiscordAppInfo; //access this object through getApplicationInfo(jda)
private static final Object selfDiscordAppInfoLock = new Object();
@@ -132,8 +138,18 @@ public static DiscordAppInfo getApplicationInfo(@Nonnull JDA jda) {
return info;
}
+ //token <-> botid
@Nonnull
- public static String getUserId(@Nonnull String token) {
+ public static final LoadingCache BOT_ID = CacheBuilder.newBuilder()
+ .build(CacheLoader.asyncReloading(CacheLoader.from(DiscordUtil::getUserId), FredBoat.executor));
+
+
+ //uses our configured bot token to retrieve our own userid
+ public static long getBotId() {
+ return BOT_ID.getUnchecked(Config.CONFIG.getBotToken());
+ }
+
+ private static long getUserId(@Nonnull String token) {
Http.SimpleRequest request = Http.get(Requester.DISCORD_API_PREFIX + "/users/@me")
.auth("Bot " + token)
.header("User-agent", USER_AGENT);
@@ -153,9 +169,19 @@ public static String getUserId(@Nonnull String token) {
}
}
if (result.isEmpty()) {
- throw new RuntimeException("Failed to retrieve my own userId from Discord");
+ throw new RuntimeException("Failed to retrieve my own userId from Discord, the result is empty");
}
- return result;
+
+ long botId;
+ try {
+ botId = Long.parseUnsignedLong(result);
+ } catch (NumberFormatException e) {
+ //logging the error and rethrowing a new one, because it might expose information that we dont want users to see
+ log.error("Failed to retrieve my own userId from Discord", e);
+ throw new RuntimeException("Failed to retrieve my own userId from Discord, see error log for more information.");
+ }
+
+ return botId;
}
// ########## Moderation related helper functions
@@ -198,7 +224,7 @@ public DiscordAppInfo(ApplicationInfo applicationInfo) {
// when rightclick -> copy Id or mentioning, but a different one, an application id. due to risks of
// introducing bugs on the public boat when using this (as happened with the mention prefix) it has been
// commented out and shall stay this way as a warning to not use it. Usually the JDA#getSelfUser() method is
- // accessible to gain access to our own bot id
+ // accessible to gain access to our own bot id, otherwise use DiscordUtil.getDefaultBotId()
//this.botIdLong = applicationInfo.getIdLong();
//this.botId = applicationInfo.getId();
this.iconId = applicationInfo.getIconId();
diff --git a/FredBoat/src/main/java/fredboat/util/TextUtils.java b/FredBoat/src/main/java/fredboat/util/TextUtils.java
index bb897b352..9a0fc0070 100644
--- a/FredBoat/src/main/java/fredboat/util/TextUtils.java
+++ b/FredBoat/src/main/java/fredboat/util/TextUtils.java
@@ -25,6 +25,9 @@
package fredboat.util;
+import com.google.common.base.CharMatcher;
+import com.google.common.base.Splitter;
+import com.google.common.collect.Streams;
import fredboat.Config;
import fredboat.commandmeta.MessagingException;
import fredboat.messaging.CentralMessaging;
@@ -33,6 +36,8 @@
import net.dv8tion.jda.core.MessageBuilder;
import net.dv8tion.jda.core.entities.Member;
import net.dv8tion.jda.core.entities.Message;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.commons.lang3.math.NumberUtils;
import org.json.JSONException;
import org.slf4j.LoggerFactory;
@@ -44,9 +49,14 @@
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;
import java.util.Arrays;
+import java.util.Collection;
+import java.util.LinkedHashSet;
import java.util.List;
+import java.util.concurrent.atomic.AtomicBoolean;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
public class TextUtils {
@@ -54,6 +64,18 @@ public class TextUtils {
private static final List markdownChars = Arrays.asList('*', '`', '~', '_');
+ public static final CharMatcher SPLIT_SELECT_SEPARATOR =
+ CharMatcher.whitespace().or(CharMatcher.is(','))
+ .precomputed();
+
+ public static final CharMatcher SPLIT_SELECT_ALLOWED =
+ SPLIT_SELECT_SEPARATOR.or(CharMatcher.inRange('0', '9'))
+ .precomputed();
+
+ public static final Splitter COMMA_OR_WHITESPACE = Splitter.on(SPLIT_SELECT_SEPARATOR)
+ .omitEmptyStrings() // 1,,2 doesn't sound right
+ .trimResults();// have it nice and trim
+
public static final DateTimeFormatter TIME_IN_CENTRAL_EUROPE = DateTimeFormatter.ofPattern("dd.MM.yyyy HH:mm:ss z")
.withZone(ZoneId.of("Europe/Copenhagen"));
@@ -283,17 +305,48 @@ public static String padWithSpaces(@Nullable String str, int totalLength, boolea
}
/**
- * Helper method to check for string that matches ONLY contain digit(s), comma(s) or space(s).
+ * Helper method to check for string that matches ONLY a comma-separated string of numeric values.
*
- * @param arg String of the argument.
- * @return True if it matches, false if empty string or not match.
+ * @param arg the string to test.
+ * @return whether the string matches
*/
public static boolean isSplitSelect(@Nonnull String arg) {
- String temp = arg.replaceAll(" +", " ");
+ String cleaned = SPLIT_SELECT_ALLOWED.negate().collapseFrom(arg, ' ');
+ int numberOfCollapsed = arg.length() - cleaned.length();
+ if (numberOfCollapsed >= 5) {
+ // rationale: prefix will be collapsed to 1 char, won't matter that much
+ // small typos (1q 2 3 4) will be collapsed in place, won't matter that much
+ // longer strings will be collapsed, words reduced to 1 char
+ // when enough changes happen, it's not a split select
+ return false;
+ }
+ AtomicBoolean empty = new AtomicBoolean(true);
+ boolean allDigits = splitSelectStream(arg)
+ .peek(__ -> empty.set(false))
+ .allMatch(NumberUtils::isDigits);
+ return !empty.get() && allDigits;
+ }
- return arg.length() > 0 && temp.matches("(\\d*,*\\s*)*");
+ /**
+ * Helper method that decodes a split select string, as identified by {@link #isSplitSelect(String)}.
+ *
+ * NOTE: an empty string produces an empty Collection.
+ *
+ * @param arg the string to decode
+ * @return the split select
+ */
+ public static Collection getSplitSelect(@Nonnull String arg) {
+ return splitSelectStream(arg)
+ .map(Integer::valueOf)
+ .collect(Collectors.toCollection(LinkedHashSet::new));
+ }
+
+ private static Stream splitSelectStream(@Nonnull String arg) {
+ return Streams.stream(COMMA_OR_WHITESPACE.split(arg))
+ .map(SPLIT_SELECT_ALLOWED::retainFrom)
+ .filter(StringUtils::isNotEmpty);
}
-
+
public static String getTimeInCentralEurope() {
return asTimeInCentralEurope(System.currentTimeMillis());
}
@@ -323,4 +376,11 @@ public static String shorten(@Nonnull String input, int size) {
}
return shortened.toString();
}
+
+ //put a zero width space between any @ and "here" and "everyone" in the input string
+ @Nonnull
+ public static String defuseMentions(@Nonnull String input) {
+ return input.replaceAll("@here", "@" + ZERO_WIDTH_CHAR + "here")
+ .replaceAll("@everyone", "@" + ZERO_WIDTH_CHAR + "everyone");
+ }
}
diff --git a/FredBoat/src/main/java/fredboat/util/ratelimit/Blacklist.java b/FredBoat/src/main/java/fredboat/util/ratelimit/Blacklist.java
index 812788975..377dbaae0 100644
--- a/FredBoat/src/main/java/fredboat/util/ratelimit/Blacklist.java
+++ b/FredBoat/src/main/java/fredboat/util/ratelimit/Blacklist.java
@@ -26,7 +26,7 @@
import fredboat.db.EntityReader;
import fredboat.db.EntityWriter;
-import fredboat.db.entity.BlacklistEntry;
+import fredboat.db.entity.main.BlacklistEntry;
import fredboat.feature.metrics.Metrics;
import it.unimi.dsi.fastutil.longs.Long2ObjectOpenHashMap;
diff --git a/FredBoat/src/main/java/fredboat/util/ratelimit/Ratelimiter.java b/FredBoat/src/main/java/fredboat/util/ratelimit/Ratelimiter.java
index e65ae8e85..445c623d1 100644
--- a/FredBoat/src/main/java/fredboat/util/ratelimit/Ratelimiter.java
+++ b/FredBoat/src/main/java/fredboat/util/ratelimit/Ratelimiter.java
@@ -36,11 +36,11 @@
import fredboat.util.DiscordUtil;
import fredboat.util.Tuple2;
import net.dv8tion.jda.core.JDA;
-import org.eclipse.jetty.util.ConcurrentHashSet;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
+import java.util.concurrent.ConcurrentHashMap;
/**
* Created by napster on 17.04.17.
@@ -76,7 +76,7 @@ public static Ratelimiter getRatelimiter() {
private Blacklist autoBlacklist = null;
private Ratelimiter() {
- Set whitelist = new ConcurrentHashSet<>();
+ Set whitelist = ConcurrentHashMap.newKeySet();
//it is ok to use the jda of any shard as long as we aren't using it for guild specific stuff
JDA jda = FredBoat.getShard(0).getJda();
diff --git a/FredBoat/src/main/java/fredboat/util/rest/SearchUtil.java b/FredBoat/src/main/java/fredboat/util/rest/SearchUtil.java
index 2aafd47f0..13fda1298 100644
--- a/FredBoat/src/main/java/fredboat/util/rest/SearchUtil.java
+++ b/FredBoat/src/main/java/fredboat/util/rest/SearchUtil.java
@@ -37,7 +37,7 @@
import fredboat.Config;
import fredboat.FredBoat;
import fredboat.db.DatabaseNotReadyException;
-import fredboat.db.entity.SearchResult;
+import fredboat.db.entity.cache.SearchResult;
import fredboat.feature.metrics.Metrics;
import fredboat.feature.togglz.FeatureFlags;
import org.apache.http.client.config.CookieSpecs;
@@ -57,7 +57,7 @@ public class SearchUtil {
public static final int MAX_RESULTS = 5;
- public static final long DEFAULT_CACHE_MAX_AGE = TimeUnit.HOURS.toMillis(24); //24 hours
+ public static final long DEFAULT_CACHE_MAX_AGE = TimeUnit.HOURS.toMillis(48);
public static final String PUNCTUATION_REGEX = "[.,/#!$%^&*;:{}=\\-_`~()\"\']";
private static final Logger log = LoggerFactory.getLogger(SearchUtil.class);
@@ -86,7 +86,7 @@ public static AudioPlaylist searchForTracks(String query, List p
/**
* @param query The search term
- * @param cacheMaxAge Age of acceptable results from cache. See {@link fredboat.db.entity.SearchResult#load} for details.
+ * @param cacheMaxAge Age of acceptable results from cache. See {@link SearchResult#load} for details.
* @param timeoutMillis How long to wait for each lavaplayer search to answer
* @param providers Providers that shall be used for the search. They will be used in the order they are provided, the
* result of the first successful one will be returned
diff --git a/FredBoat/src/main/resources/ehcache_cache.xml b/FredBoat/src/main/resources/ehcache_cache.xml
new file mode 100644
index 000000000..b71010032
--- /dev/null
+++ b/FredBoat/src/main/resources/ehcache_cache.xml
@@ -0,0 +1,63 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/FredBoat/src/main/resources/ehcache.xml b/FredBoat/src/main/resources/ehcache_main.xml
similarity index 90%
rename from FredBoat/src/main/resources/ehcache.xml
rename to FredBoat/src/main/resources/ehcache_main.xml
index f9b8a22f8..d8de7cc93 100644
--- a/FredBoat/src/main/resources/ehcache.xml
+++ b/FredBoat/src/main/resources/ehcache_main.xml
@@ -26,9 +26,9 @@
+ monitoring="autodetect" dynamicConfig="true" name="MAIN_CACHEMANAGER">
-
+
-
-
-
-
-
-
-
-
-
-
- true
- true
- /ehcache.xml
- org.hibernate.cache.ehcache.EhCacheRegionFactory
-
-
\ No newline at end of file
diff --git a/FredBoat/src/main/resources/lang/README.md b/FredBoat/src/main/resources/lang/README.md
index b10533074..edf38103a 100644
--- a/FredBoat/src/main/resources/lang/README.md
+++ b/FredBoat/src/main/resources/lang/README.md
@@ -1,4 +1,4 @@
-# FredBoat-i13n
+# FredBoat-i18n
Localization for FredBoat
See https://crowdin.com/project/fredboat
diff --git a/FredBoat/src/main/resources/lang/af_ZA.properties b/FredBoat/src/main/resources/lang/af_ZA.properties
index 7e485a852..33d4b21bb 100644
--- a/FredBoat/src/main/resources/lang/af_ZA.properties
+++ b/FredBoat/src/main/resources/lang/af_ZA.properties
@@ -183,7 +183,7 @@ ratelimitedGeneralInfo=Jy is koers beperk word\! Asseblief vertraag.
ratelimitedSkipCommand=Jy kan meer as een liedjie slaan deur die gebruik van hierdie opdrag\: {0}
ratelimitedGuildSlowLoadingPlaylist=Hierdie bediener is nie toegelaat om by te voeg meer speellyste op hierdie oomblik. Asseblief Moenie lang speellyste spam.
unblacklisted=Verwyder {0} uit die swartlys.
-serverinfoTitle=Inligting oor * *{0} * *\:
+serverinfoTitle=Info about {0}\:
serverinfoOnlineUsers=Gebruikers aanlyn\:
serverinfoTotalUsers=Totale gebruikers\:
serverinfoRoles=Rolle\:
@@ -193,7 +193,7 @@ serverinfoGuildID=Gilde ID\:
serverinfoCreationDate=Skepping datum\:
serverinfoOwner=Eienaar\:
serverinfoVLv=Verifikasie vlak\:
-userinfoTitle=Inligting oor * *{0} * *\:
+userinfoTitle=Information about {0}\:
userinfoUsername=Gebruikersnaam\:
userinfoId=ID\:
userinfoNick=Bynaam\:
@@ -212,7 +212,11 @@ commandsMaintenance=Onderhoud
commandsBotOwner=Bot eienaar
commandsMoreHelp=S\u00ea {0} om meer inligting oor ''n spesifieke opdrag te kry.
helpUnknownCommand=Onbekende bevel.
-helpDM=Documentation can be found at\:\nhttps\://fredboat.com/docs\n\nWant to add FredBoat to your server? If you have Manage Server permissions for your guild, you can invite it here\:\n*This one doesn''t play music*\n\n\nIf you want to add the music bot, you will want to invite this bot\:\n\n\nNeed help or have any ideas for the bot? Perhaps you just want to hang out? Come on over to FredBoat hangout\!\n{0}\n\nYou cannot send this bot commands through DM.\nBot created by Fre_d
+helpDocsLocation=Documentation can be found at\:
+helpBotInvite=Want to add FredBoat to your server? If you have Manage Server permissions for your guild, you can invite FredBoat\:
+helpHangoutInvite=Need help or have any ideas for FredBoat? Perhaps you just want to hang out? Join the FredBoat community\!
+helpNoDmCommands=You cannot send FredBoat commands through DMs.
+helpCredits=Created by Fre_d and open source contributors
helpSent=Dokumentasie is aan jou DMs gestuur\!
helpProperUsage=Behoorlike gebruik\:
helpCommandOwnerRestricted=Hierdie bevel is beperk tot die eienaar van die bot.
diff --git a/FredBoat/src/main/resources/lang/ar_SA.properties b/FredBoat/src/main/resources/lang/ar_SA.properties
index cfe6587b8..0151e0d27 100644
--- a/FredBoat/src/main/resources/lang/ar_SA.properties
+++ b/FredBoat/src/main/resources/lang/ar_SA.properties
@@ -14,7 +14,7 @@ pauseSuccess=\u062a\u0645 \u0625\u064a\u0642\u0627\u0641 \u0644\u0644\u0627\u063
repeatOnSingle=\u0627\u0644\u0645\u0648\u0633\u064a\u0642\u0627\u0631 \u0633\u0648\u0641 \u064a\u0642\u0648\u0645 \u0628\u062a\u0643\u0631\u0627\u0631 \u0627\u0644\u0623\u063a\u0646\u064a\u0629 \u0627\u0644\u062d\u0627\u0644\u064a\u0629.
repeatOnAll=\u0627\u0644\u0645\u0648\u0633\u064a\u0642\u0627\u0631 \u0633\u0648\u0641 \u064a\u0642\u0648\u0645 \u0628\u062a\u0643\u0631\u0627\u0631 \u0642\u0627\u0626\u0645\u0629 \u0627\u0644\u0627\u0646\u062a\u0638\u0627\u0631.
repeatOff=\u0627\u0644\u0644\u0627\u0639\u0628 \u0644\u0646 \u064a\u0643\u0631\u0631 \u0627\u0644\u0623\u063a\u0646\u064a\u0629.
-selectSuccess=\u0642\u062f \u062a\u0645 \u0627\u062e\u062a\u064a\u0627\u0631\: * *{1} * * ({2}) \u0623\u063a\u0646\u064a\u0629 * * \#{0} * *
+selectSuccess=\u0642\u062f \u062a\u0645 \u0627\u062e\u062a\u064a\u0627\u0631\: **{1}** ({2}) \u0623\u063a\u0646\u064a\u0629 **\#{0} **
selectInterval=\u064a\u062c\u0628 \u0623\u0646 \u064a\u0643\u0648\u0646 \u0631\u0642\u0645 1-{0}.
selectSelectionNotGiven=\ \u064a\u062c\u0628 \u0623\u0646 \u062a\u0639\u0637\u0649 \u0645\u062c\u0645\u0648\u0639\u0629 \u0644\u0644\u0627\u062e\u062a\u064a\u0627\u0631 \u0645\u0646\u0647\u0627.
shuffleOn=\u062a\u0645 \u062e\u0644\u0637 \u0627\u0644\u0644\u0627\u0639\u0628.
@@ -45,7 +45,7 @@ exportPlaylistFail=\u0641\u0634\u0644 \u0641\u064a \u062a\u062d\u0645\u064a\u064
listShowShuffled=\u0639\u0631\u0636 \u062a\u0639\u062f\u064a\u0644\u0627\u064b \u0642\u0627\u0626\u0645\u0629 \u0627\u0644\u062a\u0634\u063a\u064a\u0644.
listShowRepeatSingle=\u0625\u0639\u0627\u062f\u0629 \u0627\u0644\u0623\u063a\u0646\u064a\u0629 \u0627\u0644\u062d\u0627\u0644\u064a\u0629.
listShowRepeatAll=\u062a\u0643\u0631\u0627\u0631 \u0642\u0627\u0626\u0645\u0629 \u0627\u0644\u0627\u0646\u062a\u0638\u0627\u0631 \u0627\u0644\u062d\u0627\u0644\u064a\u0629.
-listShowHistory=Showing tracks in history.
+listShowHistory=\u0639\u0631\u0636 \u0627\u0644\u0645\u0633\u0627\u0631\u0627\u062a \u0641\u064a \u0627\u0644\u0645\u0634\u063a\u0644.
listAddedBy=* *{0} * * \u0625\u0636\u0627\u0641\u062a\u0647\u0627 \u0628\u0648\u0627\u0633\u0637\u0629 * *{1} * * ''[{2}]''
listStreamsOnlySingle=\u0647\u0646\u0627\u0643 * *{0} * * {1} \u064a\u0639\u064a\u0634 \u0641\u064a \u0642\u0627\u0626\u0645\u0629 \u0627\u0644\u0627\u0646\u062a\u0638\u0627\u0631.
listStreamsOnlyMultiple=\u0648\u0647\u0646\u0627\u0643 * *{0} * * {1} \u064a\u0639\u064a\u0634 \u0641\u064a \u0642\u0627\u0626\u0645\u0629 \u0627\u0644\u0627\u0646\u062a\u0638\u0627\u0631.
@@ -57,7 +57,7 @@ listAsWellAsLiveStreams=\u060c \u0643\u0630\u0644\u0643 * *{0} * * {1} \u0644\u0
trackSingular=\u0645\u0633\u0627\u0631
trackPlural=\u0627\u0644\u0645\u0633\u0627\u0631\u0627\u062a
npNotPlaying=\u0644\u0627 \u062d\u0627\u0644\u064a\u0627 \u062a\u0634\u063a\u064a\u0644 \u0623\u064a \u0634\u064a\u0621.
-npNotInHistory=Currently no tracks in history.
+npNotInHistory=\u0644\u0627 \u062a\u0648\u062c\u062f \u0627\u064a \u0645\u0633\u0627\u0631\u0627\u062a \u0641\u064a \u0627\u0644\u0633\u062c\u0644.
npDescription=\u0627\u0644\u0648\u0635\u0641
npLoadedSoundcloud=[{0}/{1}] \u062a\u062d\u0645\u064a\u0644 \u0645\u0646 \u0633\u0648\u0646\u062f\u0643\u0644\u0648\u062f
npLoadedBandcamp={0} \u062a\u062d\u0645\u064a\u0644 \u0645\u0646 Bandcamp
@@ -79,7 +79,7 @@ restartSuccess=**{0}** \u062a\u0645 \u0625\u0639\u0627\u062f\u0629 \u0627\u0644\
queueEmpty=\u0627\u0644\u0642\u0627\u0626\u0645\u0629 \u0641\u0627\u0631\u063a\u0629.
rewSuccess=\u0625\u0639\u0627\u062f\u0629 \u062a\u0648\u062c\u064a\u0647 **{0}** \u0628 {1}.
seekSuccess=\u062a\u0633\u0639\u0649 * *{0} * * \u0625\u0644\u0649 {1}.
-seekDeniedLiveTrack=You can't seek a live track.
+seekDeniedLiveTrack=\u0644\u0627 \u064a\u0645\u0643\u0646 \u0628\u062d\u062b \u0627\u0644\u0645\u0633\u0627\u0631 \u0645\u0628\u0627\u0634\u0631.
loadPlaySplitListFail=\u064a\u0624\u062f\u064a \u0647\u0630\u0627 \u0627\u0644\u0627\u0631\u062a\u0628\u0627\u0637 \u0625\u0644\u0649 \u0642\u0627\u0626\u0645\u0629 \u062a\u0634\u063a\u064a\u0644\u060c \u0644\u0627 \u0639\u0644\u0649 \u0645\u0633\u0627\u0631. \u062d\u0627\u0648\u0644 '\u061b\u061b \u0627\u0644\u0644\u0639\u0628 ' \u0628\u062f\u0644\u0627\u064b \u0645\u0646 \u0630\u0644\u0643.
loadListSuccess=\u0627\u0644\u0639\u062b\u0648\u0631 \u0639\u0644\u0649 \u0648\u0625\u0636\u0627\u0641\u0629 \u0627\u0644\u0623\u063a\u0627\u0646\u064a ''{0}'' \u0645\u0646 \u0642\u0627\u0626\u0645\u0629 \u0627\u0644\u062a\u0634\u063a\u064a\u0644 * *{1} * *.
loadNoMatches=\u062a\u0639\u0630\u0631 \u0627\u0644\u062d\u0636\u0644 \u0639\u0644\u0649 \u0627\u064a \u0635\u0648\u062a \u0644`{0}`.
@@ -125,15 +125,15 @@ luaError=\ \u062d\u062f\u062b \u062e\u0637\u0623 \u0641\u064a \u0644\u0648\u0627
luaErrorOutputTooBig=\ \u0627\u0644\u0645\u062e\u0632\u0646 \u0627\u0644\u0645\u0624\u0642\u062a \u0644\u0644\u0625\u062e\u0631\u0627\u062c \u0647\u0648 \:anger\: \u0643\u0628\u064a\u0631 \u062c\u062f\u0627\u064b \u0627\u0644\u0634\u0642\u0627\u0642 \u064a\u0633\u0645\u062d \u0641\u0642\u0637 \u0627\u0644\u0623\u062d\u0631\u0641 2000 \u0643\u0644 \u0631\u0633\u0627\u0644\u0629\u060c \u062d\u0635\u0644\u062a \u0639\u0644\u0649 {0}
luaTimeout=\ \u0645\u0647\u0644\u0629 \u062f\u0627\u0644\u0629 \:anger\: \u064a\u0633\u0645\u062d \u0628\u062d\u0633\u0627\u0628 \u0627\u0644\u0648\u0642\u062a {0} \u062b\u0627\u0646\u064a\u0629.
helpSuccess=\u062a\u0645 \u0625\u0631\u0633\u0627\u0644 \u0627\u0644\u0648\u062b\u0627\u0626\u0642 \u0625\u0644\u0649 \u0631\u0633\u0627\u0626\u0644\u0643 \u0627\u0644\u0645\u0628\u0627\u0634\u0631\u0629\!\n \n\u0627\u0644\u0633\u064a\u0627\u0642 | \u0633\u064a\u0627\u0642 \u0627\u0644\u0637\u0644\u0628\!
-helpDmFailed=Could not send documentation to your DMs. Please check that you don't have them disabled\!
+helpDmFailed=\u062a\u0639\u0630\u0631 \u0625\u0631\u0633\u0627\u0644 \u0627\u0644\u0645\u0633\u062a\u0646\u062f \u0641\u064a \u0627\u0644 \u062f\u0645 \u0627\u0644\u062e\u0627\u0635 \u0628\u0643. \u064a\u0631\u062c\u0649 \u0627\u0644\u062a\u062d\u0642\u0642 \u0645\u0646 \u0639\u062f\u0645 \u062a\u0639\u0637\u064a\u0644\u0647\u0627\!
helpCommandsPromotion=\u0642\u0648\u0644 {0} \u0644\u0645\u0639\u0631\u0641\u0629 \u0645\u0627 \u064a\u0645\u0643\u0646 \u0627\u0644\u0642\u064a\u0627\u0645 \u0628\u0647 \u0647\u0630\u0627 \u0628\u0648\u062a\!
fuzzyNoResults=\u0644\u0627 \u064a\u0648\u062c\u062f \u0645\u0633\u062a\u062e\u062f\u0645 \u0628\u0627\u0633\u0645 %s
brainfuckCycleLimit=\u0627\u0644\u0628\u0631\u0646\u0627\u0645\u062c \u062a\u062c\u0627\u0648\u0632 \u062f\u0648\u0631\u0629 \u0643\u062d\u062f \u0623\u0642\u0635\u0649 \u0627\u0644\u0639\u062f\u062f \u0645\u0646 {0}
brainfuckDataPointerOutOfBounds=\u0645\u0624\u0634\u0631 \u0627\u0644\u0628\u064a\u0627\u0646\u0627\u062a \u062e\u0627\u0631\u062c \u0627\u0644\u062d\u062f\u0648\u062f\: {0}
brainfuckInputOOB=\u0627\u0644\u0625\u062f\u062e\u0627\u0644 \u062e\u0627\u0631\u062c \u0627\u0644\u062d\u062f\u0648\u062f \u0641\u064a \u0627\u0644\u0645\u0648\u0636\u0639\: {0}
brainfuckNoOutput=\ \u0648\u0643\u0627\u0646 \u0647\u0646\u0627\u0643 \u0623\u064a\u0629 \u0627\u0644\u0625\u062e\u0631\u0627\u062c
-weatherLocationNotFound=Unable to find location, please check your input {0}.
-weatherError=Error retrieving weather for {0}
+weatherLocationNotFound=\u062a\u0639\u0630\u0631 \u0639\u0644\u0649 \u0625\u064a\u062c\u0627\u062f \u0627\u0644\u0645\u0648\u0642\u0639. \u064a\u0631\u062c\u0649 \u0627\u0644\u062a\u062d\u0642\u0642 \u0639\u0646 \u0627\u0644\u0627\u062f\u062e\u0627\u0644.
+weatherError=\u062d\u062f\u062b \u062e\u0637\u0623 \u0623\u062b\u0646\u0627\u0621 \u0627\u0633\u062a\u0631\u062f\u0627\u062f \u0627\u0644\u0637\u0642\u0633 \u0644
avatarSuccess=\ \u0648\u062c\u062a\u0647
configNoArgs=\u0627\u0644\u062a\u0643\u0648\u064a\u0646 \u0644 * *{0} * *\: '''' ''
configSetTo=\u064a\u062a\u0645 \u0627\u0644\u0622\u0646 \u062a\u0639\u064a\u064a\u0646 \u0625\u0644\u0649 ''{0}''.
@@ -171,7 +171,7 @@ hugSuccess=\u0627\u0644\u0639\u0646\u0627\u0642 {0}.
patBot=\u0634\u0643\u0631\u0627 \u0639\u0644\u0649 \:blush\: \u0627\u0644\u0631\u0628\u062a\u0627\u062a\:
patSuccess={0} \u0627\u0644\u0631\u0628\u062a\u0627\u062a.
rollSuccess=\u062d\u0648\u0644 \u0627\u0644\u0642\u0648\u0627\u0626\u0645 {0} \u0639\u0644\u0649 \u0627\u0644\u0623\u0631\u0636.
-facedeskSuccess={0} facedesks.
+facedeskSuccess=\u0645\u062d\u0637 \u0648\u062c\u0647\u0647.
langInvalidCode={0} \u0631\u0645\u0632 \u0627\u0644\u0644\u063a\u0629 \u063a\u064a\u0631 \u0645\u0648\u062c\u0648\u062f \u0623\u0648 \u0623\u0646\u0647 \u063a\u064a\u0631 \u0645\u0639\u062a\u0645\u062f.
langSuccess=\u062a\u062d\u0648\u0644\u062a \u0625\u0644\u0649\: \u062a\u0643\u0644\u0645 {0}.
langInfo=\u0641\u0631\u064a\u062f\u0628\u0648\u0627\u062a \u064a\u062f\u0639\u0645 \u0639\u062f\u0629 \u0644\u063a\u0627\u062a \u0633\u0627\u0647\u0645 \u0627\u0644\u0645\u0633\u062a\u062e\u062f\u0645 \u0627\u0644\u062a\u064a \u064a\u0645\u0643\u0646\u0643 \u062a\u062d\u062f\u064a\u062f\u0647\u0627 \u0645\u0639 \u0647\u0630\u0627 \u0627\u0644\u0623\u0645\u0631. \u0627\u0644\u0645\u0634\u0631\u0641\u0648\u0646 \u0639\u0644\u0649 \u0647\u0630\u0627 \u0627\u0644\u0645\u0644\u0642\u0645 \u064a\u0645\u0643\u0646 \u062a\u062d\u062f\u064a\u062f \u0644\u063a\u0629 \u0645\u0639 '\u061b\u061b \u0644\u0627\u0646\u062c ' \u0625\u0644\u064a\u0643 \u0627\u0644\u0642\u0627\u0626\u0645\u0629 \u0627\u0644\u0643\u0627\u0645\u0644\u0629 \u0644\u0644\u063a\u0627\u062a \u0627\u0644\u0645\u062f\u0639\u0648\u0645\u0629\:
@@ -200,10 +200,10 @@ userinfoNick=\u0644\u0642\u0628\:
userinfoKnownServer=\u0645\u0644\u0642\u0645\u0627\u062a \u0645\u0639\u0631\u0648\u0641\u0629\:
userinfoJoinDate=\u062a\u0627\u0631\u064a\u062e \u0627\u0644\u0627\u0646\u062a\u062f\u0627\u0628\:
userinfoCreationTime=\u062a\u0627\u0631\u064a\u062e \u0627\u0644\u0625\u0646\u0634\u0627\u0621\:
-userinfoBlacklisted=Blacklisted\:
-skipDeniedTooManyTracks=You can't skip someone else's tracks if you are not a DJ.\nConsider using the Voteskip command.
+userinfoBlacklisted=\u0627\u0644\u0642\u0627\u0621\u0645\u0629 \u0627\u0644\u0633\u0648\u062f\u0627\u0621\:
+skipDeniedTooManyTracks=\u0644\u0627 \u064a\u0645\u0643\u0646\u0643 \u062a\u062e\u0637\u064a \u0645\u0633\u0627\u0631\u0627\u062a \u0634\u062e\u0635 \u0623\u062e\u0631 \u0625\u0630\u0627 \u0644\u0645 \u062a\u0643\u0646 DJ. \u0641\u0643\u0631 \u0641\u064a \u0627\u0633\u062a\u062e\u062f\u0627\u0645 \u0627\u0644\u0627\u0645\u0631 Voteskip.
eventUsersLeftVC=\u0648\u062a\u0631\u0643\u062a \u062c\u0645\u064a\u0639 \u0645\u0633\u062a\u062e\u062f\u0645\u064a \u0642\u0646\u0627\u0629 \u0635\u0648\u062a. \u062a\u0645 \u0625\u064a\u0642\u0627\u0641 \u0627\u0644\u0644\u0627\u0639\u0628.
-eventAutoResumed=User presence detected, automatically resuming the player.
+eventAutoResumed=\u062a\u0645 \u0623\u0643\u062a\u0634\u0627\u0641 \u0648\u062c\u0648\u062f \u0627\u0644\u0645\u0633\u062a\u062e\u062f\u0645\u060c \u0633\u064a\u0643\u0645\u0644 \u0627\u0644\u0645\u0634\u063a\u0644 \u062a\u0644\u0642\u0627\u0621\u064a\u0627.
commandsFun=\u0645\u062a\u0639\u0629
commandsMemes=Memes
commandsUtility=\u0627\u0644\u0623\u062f\u0648\u0627\u062a
@@ -212,7 +212,11 @@ commandsMaintenance=\u0627\u0644\u0635\u064a\u0627\u0646\u0629
commandsBotOwner=\u0645\u0627\u0644\u0643 \u0628\u0648\u062a
commandsMoreHelp=\u0648\u064a\u0642\u0648\u0644 {0} \u0644\u0644\u062d\u0635\u0648\u0644 \u0639\u0644\u0649 \u0645\u0632\u064a\u062f \u0645\u0646 \u0627\u0644\u0645\u0639\u0644\u0648\u0645\u0627\u062a \u062d\u0648\u0644 \u0623\u0645\u0631 \u0645\u0639\u064a\u0646.
helpUnknownCommand=\u0623\u0645\u0631 \u063a\u064a\u0631 \u0645\u0639\u0631\u0648\u0641.
-helpDM=\u0648\u064a\u0645\u0643\u0646 \u0627\u0644\u0627\u0637\u0644\u0627\u0639 \u0639\u0644\u0649 \u0627\u0644\u0648\u062b\u0627\u0626\u0642 \u0639\u0644\u0649 \u0627\u0644\u0639\u0646\u0648\u0627\u0646 \u0627\u0644\u062a\u0627\u0644\u064a\:\nhttps\://fredboat.com/docs\n\n\u062a\u0631\u064a\u062f \u0625\u0636\u0627\u0641\u0629 \u0641\u0631\u064a\u062f\u0628\u0648\u0627\u062a \u0625\u0644\u0649 \u0627\u0644\u062e\u0627\u062f\u0645 \u0627\u0644\u062e\u0627\u0635 \u0628\u0643\u061f \u0625\u0630\u0627 \u0643\u0627\u0646 \u0644\u062f\u064a\u0643 \u0623\u0630\u0648\u0646\u0627\u062a \u0625\u062f\u0627\u0631\u0629 \u0627\u0644\u062e\u0627\u062f\u0645 \u0644\u0646\u0642\u064a\u0628\u062a\u0643\u060c \u0641\u064a\u0645\u0643\u0646\u0643 \u062f\u0639\u0648\u062a\u0647\u0627 \u0647\u0646\u0627\:\n* \u0647\u0630\u0627 \u0648\u0627\u062d\u062f \u0644\u0627 \u062a\u0644\u0639\u0628 \u0627\u0644\u0645\u0648\u0633\u064a\u0642\u0649 *\n\n\n\u0625\u0630\u0627 \u0643\u0646\u062a \u062a\u0631\u063a\u0628 \u0641\u064a \u0625\u0636\u0627\u0641\u0629 \u0628\u0648\u062a \u0627\u0644\u0645\u0648\u0633\u064a\u0642\u0649\u060c \u0648\u0633\u0648\u0641 \u062a\u062d\u062a\u0627\u062c \u0625\u0644\u0649 \u062f\u0639\u0648\u0629 \u0647\u0630\u0627 \u0628\u0648\u062a\:\n\n\n\u062a\u062d\u062a\u0627\u062c \u0625\u0644\u0649 \u0645\u0633\u0627\u0639\u062f\u0629 \u0623\u0648 \u0644\u062f\u064a\u0643 \u0623\u064a \u0623\u0641\u0643\u0627\u0631 \u0644\u0644\u0628\u0648\u062a\u061f \u0631\u0628\u0645\u0627 \u0643\u0646\u062a \u062a\u0631\u063a\u0628 \u0641\u0642\u0637 \u0641\u064a \u0634\u0646\u0642\u061f \u0647\u064a\u0627 \u0625\u0644\u0649 \u0641\u0631\u064a\u062f\u0628\u0648\u062a \u0647\u0646\u063a\u0648\u062a\!\n{0}\n\n\u0644\u0627 \u064a\u0645\u0643\u0646\u0643 \u0625\u0631\u0633\u0627\u0644 \u0647\u0630\u0647 \u0627\u0644\u0623\u0648\u0627\u0645\u0631 \u0628\u0648\u062a \u0645\u0646 \u062e\u0644\u0627\u0644 \u062f\u0645.\n\u0628\u0648\u062a \u0627\u0644\u062a\u064a \u0623\u0646\u0634\u0623\u062a\u0647\u0627 Fre_d
+helpDocsLocation=\u064a\u0645\u0643\u0646 \u0627\u0644\u0627\u0637\u0644\u0627\u0639 \u0639\u0644\u0649 \u0627\u0644\u0648\u062b\u0627\u0626\u0642 \u0641\u064a\:
+helpBotInvite=\u0647\u0644 \u062a\u0631\u064a\u062f \u0625\u0636\u0627\u0641\u0629 \u0641\u0631\u064a\u062f\u0628\u0648\u0627\u062a \u0625\u0644\u0649 \u0627\u0644\u062e\u0627\u062f\u0645 \u0627\u0644\u062e\u0627\u0635 \u0628\u0643\u061f \u0625\u0630\u0627 \u0643\u0627\u0646 \u0644\u062f\u064a\u0643 \u0623\u0630\u0648\u0646\u0627\u062a "\u0625\u062f\u0627\u0631\u0629 \u0627\u0644\u0645\u0644\u0642\u0645" \u0644\u0644\u0646\u0642\u0627\u0628\u0629 \u0627\u0644\u062e\u0627\u0635\u0629 \u0628\u0643\u060c \u064a\u0645\u0643\u0646\u0643 \u062f\u0639\u0648\u0629 \u0641\u0631\u064a\u062f\u0628\u0648\u0627\u062a\:
+helpHangoutInvite=\u0628\u062d\u0627\u062c\u0629 \u0625\u0644\u0649 \u0645\u0633\u0627\u0639\u062f\u0629 \u0623\u0648 \u0644\u062f\u064a\u0643 \u0623\u064a \u0623\u0641\u0643\u0627\u0631 \u0641\u0631\u064a\u062f\u0628\u0648\u0627\u062a\u061f \u0631\u0628\u0645\u0627 \u0643\u0646\u062a \u062a\u0631\u063a\u0628 \u0641\u0642\u0637 \u0634\u0646\u0642\u061f \u0627\u0644\u0627\u0646\u0636\u0645\u0627\u0645 \u0625\u0644\u0649 \u0627\u0644\u0645\u062c\u062a\u0645\u0639 \u0641\u0631\u064a\u062f\u0628\u0648\u0627\u062a\!
+helpNoDmCommands=\u0644\u0627 \u064a\u0645\u0643\u0646\u0643 \u0625\u0631\u0633\u0627\u0644 \u0623\u0648\u0627\u0645\u0631 \u0641\u0631\u064a\u062f\u0628\u0648\u0627\u062a \u0645\u0646 \u062e\u0644\u0627\u0644 \u0646\u0638\u0627\u0645 \u0625\u062f\u0627\u0631\u0629 \u0627\u0644\u0648\u062c\u0647\u0627\u062a \u0627\u0644\u0633\u064a\u0627\u062d\u064a\u0629.
+helpCredits=\u062a\u0645 \u0625\u0646\u0634\u0627\u0624\u0647\u0627 \u0628\u0648\u0627\u0633\u0637\u0629 Fre_d \u0648\u0627\u0644\u0645\u0633\u0627\u0647\u0645\u064a\u0646 \u0645\u0641\u062a\u0648\u062d\u0629 \u0627\u0644\u0645\u0635\u062f\u0631
helpSent=\u062a\u0645 \u0625\u0631\u0633\u0627\u0644 \u0627\u0644\u0648\u062b\u0627\u0626\u0642 \u0625\u0644\u0649 \u0625\u062f\u0627\u0631\u0629 \u0627\u0644\u0648\u062c\u0647\u0627\u062a \u0627\u0644\u0633\u064a\u0627\u062d\u064a\u0629 \u0627\u0644\u062e\u0627\u0635\u0629 \u0628\u0643\!
helpProperUsage=\u0627\u0644\u0627\u0633\u062a\u062e\u062f\u0627\u0645 \u0627\u0644\u0635\u062d\u064a\u062d\:
helpCommandOwnerRestricted=\u064a\u0642\u062a\u0635\u0631 \u0647\u0630\u0627 \u0627\u0644\u0623\u0645\u0631 \u0639\u0644\u0649 \u0645\u0627\u0644\u0643 \u0627\u0644\u0628\u0648\u062a.
@@ -225,20 +229,20 @@ helpMusicCommandsHeader=\u0623\u0648\u0627\u0645\u0631 \u0627\u0644\u0645\u0648\
helpJoinCommand=\u062c\u0639\u0644 \u0628\u0648\u062a \u0627\u0644\u0627\u0646\u0636\u0645\u0627\u0645 \u0625\u0644\u0649 \u0642\u0646\u0627\u0629 \u0627\u0644\u0635\u0648\u062a \u0627\u0644\u062d\u0627\u0644\u064a \u0627\u0644\u062e\u0627\u0635 \u0628\u0643.
helpLeaveCommand=\u062c\u0639\u0644 \u0628\u0648\u062a \u0645\u063a\u0627\u062f\u0631\u0629 \u0627\u0644\u0642\u0646\u0627\u0629 \u0627\u0644\u0635\u0648\u062a\u064a\u0629 \u0627\u0644\u062d\u0627\u0644\u064a\u0629.
helpPauseCommand=\u0625\u064a\u0642\u0627\u0641 \u0627\u0644\u0644\u0627\u0639\u0628.
-helpPlayCommand=Play music from the given URL or search for a track. For a full list of sources please visit {0}
+helpPlayCommand=\u062a\u0634\u063a\u064a\u0644 \u0627\u0644\u0645\u0648\u0633\u064a\u0642\u0649 \u0645\u0646 \u0639\u0646\u0648\u0627\u0646 URL \u0645\u0639\u064a\u0646 \u0623\u0648 \u0627\u0644\u0628\u062d\u062b \u0639\u0646 \u0645\u0633\u0627\u0631. \u0644\u0644\u062d\u0635\u0648\u0644 \u0639\u0644\u0649 \u0642\u0627\u0626\u0645\u0629 \u0643\u0627\u0645\u0644\u0629 \u0645\u0646 \u0627\u0644\u0645\u0635\u0627\u062f\u0631 \u064a\u0631\u062c\u0649 \u0632\u064a\u0627\u0631\u0629
helpPlaySplitCommand=\u062a\u0642\u0633\u064a\u0645 \u0641\u064a\u062f\u064a\u0648 \u064a\u0648\u062a\u064a\u0648\u0628 \u0625\u0644\u0649 \u0627\u0644\u062a\u0633\u0637\u064a\u0628 \u0627\u0644\u0645\u0646\u0635\u0648\u0635 \u0639\u0644\u064a\u0647\u0627 \u0641\u064a \u0648\u0635\u0641 \u0623\u0646\u0647\u0627.
helpRepeatCommand=\u0627\u0644\u062a\u0628\u062f\u064a\u0644 \u0628\u064a\u0646 \u0648\u0636\u0639\u064a \u062a\u0643\u0631\u0627\u0631.
helpReshuffleCommand=\u062a\u0639\u062f\u064a\u0644 \u0642\u0627\u0626\u0645\u0629 \u0627\u0644\u0627\u0646\u062a\u0638\u0627\u0631 \u0627\u0644\u062d\u0627\u0644\u064a\u0629.
helpSelectCommand=\u062d\u062f\u062f \u0623\u062d\u062f \u0627\u0644\u0645\u0633\u0627\u0631\u0627\u062a \u0627\u0644\u0645\u0642\u062f\u0645\u0629 \u0628\u0639\u062f \u0628\u062d\u062b \u0644\u0644\u0639\u0628.
helpShuffleCommand=\u062a\u0628\u062f\u064a\u0644 \u0648\u0636\u0639 \u0627\u0644\u0645\u0631\u0627\u0648\u063a\u0629 \u0644\u0642\u0627\u0626\u0645\u0629 \u0627\u0644\u0627\u0646\u062a\u0638\u0627\u0631 \u0627\u0644\u062d\u0627\u0644\u064a\u0629.
-helpSkipCommand=Skip the current song, the n'th song in the queue, all songs from n to m, or all songs from mentioned users. Please use in moderation.
+helpSkipCommand=\u062a\u062e\u0637\u064a \u0627\u0644\u0623\u063a\u0646\u064a\u0629 \u0627\u0644\u062d\u0627\u0644\u064a\u0629\u060c \u0623\u063a\u0646\u064a\u0629 n&\#39; th \u0641\u064a \u0642\u0627\u0626\u0645\u0629 \u0627\u0644\u0627\u0646\u062a\u0638\u0627\u0631\u060c \u062c\u0645\u064a\u0639 \u0627\u0644\u0623\u063a\u0627\u0646\u064a \u0645\u0646 n \u0625\u0644\u0649 m\u060c \u0623\u0648 \u062c\u0645\u064a\u0639 \u0627\u0644\u0623\u063a\u0627\u0646\u064a \u0645\u0646 \u0627\u0644\u0645\u0633\u062a\u062e\u062f\u0645\u064a\u0646 \u0627\u0644\u0645\u0630\u0643\u0648\u0631\u0629. \u0627\u0644\u0631\u062c\u0627\u0621 \u0627\u0633\u062a\u062e\u062f\u0627\u0645 \u0644\u0644\u0627\u0639\u062a\u062f\u0627\u0644.
helpStopCommand=\u0625\u064a\u0642\u0627\u0641 \u0627\u0644\u0644\u0627\u0639\u0628 \u0648\u0645\u0633\u062d \u0642\u0627\u0626\u0645\u0629 \u0627\u0644\u062a\u0634\u063a\u064a\u0644. \u0645\u062d\u0641\u0648\u0638\u0629 \u0644\u0644\u0645\u0634\u0631\u0641\u064a\u0646 \u0645\u0639 "\u0625\u062f\u0627\u0631\u0629 \u0631\u0633\u0627\u0626\u0644" \u0627\u0644\u0625\u0630\u0646.
helpUnpauseCommand=\u0625\u0644\u063a\u0627\u0621 \u0627\u0644\u0625\u064a\u0642\u0627\u0641 \u0627\u0644\u0645\u0624\u0642\u062a \u0644\u0644\u0627\u0639\u0628.
helpVolumeCommand=\u062a\u063a\u064a\u064a\u0631 \u0648\u062d\u062f\u0629 \u0627\u0644\u062a\u062e\u0632\u064a\u0646. \u062a\u0643\u0648\u0646 \u0627\u0644\u0642\u064a\u0645 0-150 \u0648 100 \u0647\u0648 \u0627\u0644\u0625\u0639\u062f\u0627\u062f \u0627\u0644\u0627\u0641\u062a\u0631\u0627\u0636\u064a. \u062a\u0645 \u0625\u0647\u0645\u0627\u0644 \u0647\u0630\u0627 \u0627\u0644\u0623\u0645\u0631 \u0648\u062d\u062f\u0629 \u0627\u0644\u062a\u062e\u0632\u064a\u0646 \u0639\u0644\u0649 \u0628\u0648\u062a \u0627\u0644\u0639\u0627\u0645\u0629.
helpExportCommand=\u062a\u0635\u062f\u064a\u0631 \u0642\u0627\u0626\u0645\u0629 \u0627\u0644\u0627\u0646\u062a\u0638\u0627\u0631 \u0627\u0644\u062d\u0627\u0644\u064a\u0629 \u0625\u0644\u0649 \u0627\u0631\u062a\u0628\u0627\u0637 \u0647\u0627\u0633\u062a\u064a\u0628\u064a\u0646\u060c \u0648\u064a\u0645\u0643\u0646 \u0627\u0633\u062a\u062e\u062f\u0627\u0645\u0647\u0627 \u0641\u064a \u0648\u0642\u062a \u0644\u0627\u062d\u0642 \u0643\u0642\u0627\u0626\u0645\u0629 \u062a\u0634\u063a\u064a\u0644.
helpGensokyoRadioCommand=\u0625\u0638\u0647\u0627\u0631 \u0627\u0644\u0623\u063a\u0646\u064a\u0629 \u0627\u0644\u062d\u0627\u0644\u064a\u0629 \u0644\u0639\u0628\u062a \u0639\u0644\u0649 gensokyoradio.net
helpListCommand=\u0639\u0631\u0636 \u0642\u0627\u0626\u0645\u0629 \u0627\u0644\u0623\u063a\u0627\u0646\u064a \u0627\u0644\u062d\u0627\u0644\u064a\u0629 \u0641\u064a \u0642\u0627\u0626\u0645\u0629 \u0627\u0644\u062a\u0634\u063a\u064a\u0644.
-helpHistoryCommand=Display a list of the songs in playlist history.
+helpHistoryCommand=\u0639\u0631\u0636 \u0642\u0627\u0626\u0645\u0629 \u0628\u0627\u0644\u0623\u063a\u0627\u0646\u064a \u0641\u064a \u0633\u062c\u0644 \u0642\u0648\u0627\u0626\u0645 \u0627\u0644\u062a\u0634\u063a\u064a\u0644.
helpNowplayingCommand=\u0639\u0631\u0636 \u0627\u0644\u0623\u063a\u0646\u064a\u0629 \u0642\u064a\u062f \u0627\u0644\u062a\u0634\u063a\u064a\u0644 \u062d\u0627\u0644\u064a\u0627.
helpForwardCommand=\u0625\u0644\u0649 \u0627\u0644\u0623\u0645\u0627\u0645 \u0639\u0644\u0649 \u0627\u0644\u0645\u0633\u0627\u0631 \u0628\u0645\u0642\u062f\u0627\u0631 \u0645\u0639\u064a\u0646 \u0645\u0646 \u0627\u0644\u0648\u0642\u062a. \u0639\u0644\u0649 \u0633\u0628\u064a\u0644 \u0627\u0644\u0645\u062b\u0627\u0644\:
helpRestartCommand=\u0642\u0645 \u0628\u0625\u0639\u0627\u062f\u0629 \u062a\u0634\u063a\u064a\u0644 \u0627\u0644\u0645\u0633\u0627\u0631 \u0642\u064a\u062f \u0627\u0644\u062a\u0634\u063a\u064a\u0644 \u062d\u0627\u0644\u064a\u0627.
@@ -246,7 +250,7 @@ helpRewindCommand=\u0625\u0631\u062c\u0627\u0639 \u0627\u0644\u0645\u0633\u0627\
helpSeekCommand=\u062a\u0639\u064a\u064a\u0646 \u0645\u0648\u0636\u0639 \u0627\u0644\u0645\u0633\u0627\u0631 \u0644\u0648\u0642\u062a \u0645\u0639\u064a\u0646. \u0639\u0644\u0649 \u0633\u0628\u064a\u0644 \u0627\u0644\u0645\u062b\u0627\u0644\:
helpAvatarCommand=\u0639\u0631\u0636 \u0627\u0644\u0635\u0648\u0631\u0629 \u0627\u0644\u0631\u0645\u0632\u064a\u0629 \u0644\u0644\u0645\u0633\u062a\u062e\u062f\u0645.
helpBrainfuckCommand=\u064a\u0646\u0641\u0630 \u0627\u0644\u062a\u0639\u0644\u064a\u0645\u0627\u062a \u0627\u0644\u0628\u0631\u0645\u062c\u064a\u0629 \u0628\u0631\u064a\u0646\u0641\u0648\u0643. \u0639\u0644\u0649 \u0633\u0628\u064a\u0644 \u0627\u0644\u0645\u062b\u0627\u0644\:
-helpWeatherCommand=Display current weather by location.
+helpWeatherCommand=\u0639\u0631\u0636 \u0627\u0644\u0637\u0642\u0635 \u0627\u0644\u062d\u0627\u0644\u064a \u0645\u0646 \u0645\u0648\u0642\u0639\u0643.
helpClearCommand=\u062d\u0630\u0641 \u0643\u0627\u0641\u0629 \u0627\u0644\u0631\u0633\u0627\u0626\u0644 \u0628\u0647\u0630\u0627 \u0628\u0648\u062a \u0641\u064a \u0622\u062e\u0631 50 \u0631\u0633\u0627\u0626\u0644 \u0647\u0630\u0647 \u0627\u0644\u0642\u0646\u0627\u0629.
helpCommandsCommand=\u062a\u0638\u0647\u0631 \u0627\u0644\u0623\u0648\u0627\u0645\u0631 \u0627\u0644\u0645\u062a\u0648\u0641\u0631\u0629.
helpHelpCommand=\u0627\u0644\u062d\u0635\u0648\u0644 \u0639\u0644\u0649 \u062a\u0639\u0644\u064a\u0645\u0627\u062a \u062d\u0648\u0644 \u0647\u0630\u0627 \u0628\u0648\u062a \u0623\u0648 \u0645\u0633\u0627\u0639\u062f\u0629 \u0644\u0623\u064a \u0623\u0645\u0631.
@@ -257,16 +261,16 @@ helpSayCommand=\u062c\u0639\u0644 \u0628\u0648\u062a \u0635\u062f\u0649 \u0634\u
helpServerInfoCommand=\u0639\u0631\u0636 \u0628\u0639\u0636 \u0627\u0644\u0625\u062d\u0635\u0627\u0626\u064a\u0627\u062a \u062d\u0648\u0644 \u0647\u0630\u0647 \u0627\u0644\u0646\u0642\u0627\u0628\u0629.
helpUserInfoCommand=\u0639\u0631\u0636 \u0645\u0639\u0644\u0648\u0645\u0627\u062a \u062d\u0648\u0644 \u0646\u0641\u0633\u0643 \u0623\u0648 \u0645\u0633\u062a\u062e\u062f\u0645 \u0645\u0639\u0631\u0648\u0641 \u0627\u0644\u0628\u0648\u062a.
helpPerms=\u0644\u0627\u0644\u0633\u0645\u0627\u062d \u0644\u0623\u0639\u0636\u0627\u0621 \u0627\u0644\u0642\u0627\u0626\u0645\u0629 \u0627\u0644\u0628\u064a\u0636\u0627\u0621 \u0648\u0627\u0644\u0623\u062f\u0648\u0627\u0631 \u0644\u0631\u062a\u0628\u0629 {0}.
-helpPrefixCommand=Set the prefix for this guild.
-helpVoteSkip=Vote to skip the current song. Needs 50% of all users in the voice chat to vote.
-helpMathOperationAdd=Print the sum of num1 and num2.
-helpMathOperationSub=Print the difference of subtracting num2 from num1.
-helpMathOperationMult=Print the product of num1*num2.
-helpMathOperationDiv=Print the quotient of dividing num1 by num2.
-helpMathOperationMod=Print the remainder of dividing num1 by num2.
-helpMathOperationPerc=Print the percentage represented by num1 in num2.
-helpMathOperationSqrt=Print the square root of num.
-helpMathOperationPow=Print the result of num1^num2.
+helpPrefixCommand=\u0642\u0645 \u0628\u062a\u0639\u064a\u064a\u0646 \u0627\u0644\u0628\u0627\u062f\u0626\u0629 \u0644\u0647\u0630\u0647 \u0627\u0644\u0646\u0642\u0627\u0628\u0629.
+helpVoteSkip=\u0627\u0644\u062a\u0635\u0648\u064a\u062a \u0644\u062a\u062e\u0637\u064a \u0627\u0644\u0623\u063a\u0646\u064a\u0629 \u0627\u0644\u062d\u0627\u0644\u064a\u0629. \u064a\u062d\u062a\u0627\u062c \u0625\u0644\u0649 50 \u0641\u064a \u0627\u0644\u0645\u0627\u0626\u0629 \u0645\u0646 \u0643\u0627\u0641\u0629 \u0627\u0644\u0645\u0633\u062a\u062e\u062f\u0645\u064a\u0646 \u0641\u064a \u0627\u0644\u0645\u062d\u0627\u062f\u062b\u0629 \u0627\u0644\u0635\u0648\u062a\u064a\u0629 \u0627\u0644\u062a\u0635\u0648\u064a\u062a.
+helpMathOperationAdd=\u0627\u0637\u0628\u0639 \u0645\u062c\u0645\u0648\u0639 num1 \u0648 num2.
+helpMathOperationSub=\u0627\u0637\u0628\u0639 \u0627\u0644\u0641\u0631\u0642 \u0645\u0646 \u0637\u0631\u062d num2 \u0645\u0646 num1.
+helpMathOperationMult=\u0627\u0637\u0628\u0639 \u0627\u0644\u0636\u0631\u0628 num1 * num2.
+helpMathOperationDiv=\u0627\u0637\u0628\u0639 \u062d\u0627\u0635\u0644 \u0642\u0633\u0645\u0629 num1 / num2.
+helpMathOperationMod=\u0627\u0637\u0628\u0639 \u0645\u0627 \u062a\u0628\u0642\u0649 \u0645\u0646 \u0642\u0633\u0645\u0629 num1 / num2.
+helpMathOperationPerc=\u0627\u0637\u0628\u0639 \u0627\u0644\u0646\u0633\u0628\u0629 \u0627\u0644\u0645\u0626\u0648\u064a\u0629 \u0627\u0644\u062a\u064a \u064a\u0645\u062b\u0644\u0647\u0627 num1 \u0641\u064a num2.
+helpMathOperationSqrt=\u0637\u0628\u0627\u0639\u0629 \u0627\u0644\u062c\u0630\u0631 \u0627\u0644\u062a\u0631\u0628\u064a\u0639\u064a \u0644num.
+helpMathOperationPow=\u0627\u0637\u0628\u0639 \u0646\u062a\u064a\u062c\u0629 num1 \u0645\u0631\u0641\u0648\u0639 \u0628 num2. \u0627\u0648 num1^num2.
destroyDenied=\u064a\u062c\u0628 \u0623\u0646 \u064a\u0643\u0648\u0646 \u0644\u062f\u064a\u0643 \u0627\u0644\u0625\u0630\u0646 \u0631\u0633\u0627\u0626\u0644 \u0625\u062f\u0627\u0631\u0629 \u0644\u0625\u0639\u0627\u062f\u0629 \u0627\u0644\u0644\u0627\u0639\u0628.
destroyHelp=\u0625\u0639\u0627\u062f\u0629 \u062a\u0639\u064a\u064a\u0646 \u0627\u0644\u0644\u0627\u0639\u0628 \u0648\u0645\u0633\u062d \u0642\u0627\u0626\u0645\u0629 \u0627\u0644\u062a\u0634\u063a\u064a\u0644. \u0645\u062d\u0641\u0648\u0638\u0629 \u0644\u0644\u0645\u0634\u0631\u0641\u064a\u0646 \u0645\u0639 "\u0625\u062f\u0627\u0631\u0629 \u0631\u0633\u0627\u0626\u0644" \u0627\u0644\u0625\u0630\u0646.
destroySucc=\u0625\u0639\u0627\u062f\u0629 \u062a\u0639\u064a\u064a\u0646 \u0627\u0644\u0644\u0627\u0639\u0628 \u0648\u0645\u0633\u062d \u0642\u0627\u0626\u0645\u0629 \u0627\u0644\u0627\u0646\u062a\u0638\u0627\u0631.
@@ -275,27 +279,27 @@ permsListTitle=\u0627\u0644\u0645\u0633\u062a\u062e\u062f\u0645\u064a\u0646 \u06
permsAdded=\u0648\u0623\u0636\u0627\u0641 ''{0}'' \u0625\u0644\u0649 ''{1}''.
permsRemoved=\u0625\u0632\u0627\u0644\u0629 ''{0}'' \u0645\u0646 ''{1}''.
permsFailSelfDemotion=\u0644\u0627 \u064a\u0645\u0643\u0646\u0643 \u0625\u0632\u0627\u0644\u0629 \u0647\u0630\u0627 \u0643\u0645\u0627 \u0623\u0646\u0647 \u0633\u064a\u062c\u0639\u0644 \u0644\u0643 \u062f\u0648\u0646 \u0623\u0630\u0648\u0646\u0627\u062a \u0627\u0644\u0645\u0633\u0624\u0648\u0644\!
-permsAlreadyAdded={0} already added to {1}
-permsNotAdded={0} is not in {1}
+permsAlreadyAdded=\u062a\u0645\u062a \u0627\u0644\u0625\u0636\u0627\u0641\u0629 \u0627\u0644\u0649
+permsNotAdded=\u0644\u064a\u0633\u062a \u0641\u064a
fuzzyMultiple=\u062a\u0645 \u0627\u0644\u0639\u062b\u0648\u0631 \u0639\u0644\u0649 \u0639\u0646\u0627\u0635\u0631 \u0645\u062a\u0639\u062f\u062f\u0629. \u0647\u0644 \u062a\u0642\u0635\u062f \u0623\u064a \u0645\u0646 \u0647\u0630\u0647\u061f
fuzzyNothingFound=\u0644\u0645 \u064a\u062a\u0645 \u0627\u0644\u0639\u062b\u0648\u0631 \u0639\u0644\u0649 \u0623\u064a \u0634\u064a\u0621 \u0639\u0646 ''{0}''.
cmdPermsTooLow=\u0644\u064a\u0633 \u0644\u062f\u064a\u0643 \u0627\u0644\u0625\u0630\u0646 \u0644\u062a\u0634\u063a\u064a\u0644 \u0647\u0630\u0627 \u0627\u0644\u0623\u0645\u0631\! \u0648\u064a\u062a\u0637\u0644\u0628 \u0647\u0630\u0627 \u0627\u0644\u0623\u0645\u0631 ''{0}'' \u0648\u0644\u0643\u0646 \u0644\u062f\u064a\u0643 \u0641\u0642\u0637 ''{1}''.
playersLimited=\u0641\u0631\u064a\u062f\u0628\u0648\u0627\u062a \u062d\u0627\u0644\u064a\u0627 \u0628\u0623\u0642\u0635\u0649 \u0637\u0627\u0642\u062a\u0647\u0627\! \u064a\u062a\u0645 \u062d\u0627\u0644\u064a\u0627 \u0625\u0635\u0644\u0627\u062d \u0627\u0644\u0628\u0648\u062a \u0644\u0644\u0639\u0628 \u0641\u0642\u0637 \u0644\u062a\u064a\u0627\u0631\u0627\u062a ''{0}''\u060c \u0648\u0625\u0644\u0627 \u0633\u0648\u0641 \u0646\u062e\u0627\u0637\u0631 \u0628\u0642\u0637\u0639 \u0627\u0644\u0634\u0642\u0627\u0642 \u062a\u062d\u062a \u062a\u062d\u0645\u064a\u0644 \u0627\u0644\u0634\u0628\u0643\u0629. \u0625\u0630\u0627 \u0623\u0631\u062f\u062a \u0623\u0646 \u062a\u0633\u0627\u0639\u062f\u0646\u0627 \u0639\u0644\u0649 \u0632\u064a\u0627\u062f\u0629 \u0627\u0644\u062d\u062f \u0623\u0648 \u062a\u0631\u064a\u062f \u0627\u0633\u062a\u062e\u062f\u0627\u0645 \u0644\u062f\u064a\u0646\u0627 \u0628\u0648\u062a \u063a\u064a\u0631 \u0645\u0643\u062a\u0638\u0629\u060c \u064a\u0631\u062c\u0649 \u062f\u0639\u0645 \u0639\u0645\u0644\u0646\u0627 \u0641\u064a \u0628\u062a\u0631\u0648\u0646\:{1} \u0639\u0630\u0631\u0627\u064b \u0644\u0644\u0625\u0632\u0639\u0627\u062c\! \u0642\u062f \u062a\u0631\u063a\u0628 \u0641\u064a \u0627\u0644\u0645\u062d\u0627\u0648\u0644\u0629 \u0645\u0631\u0629 \u0623\u062e\u0631\u0649 \u0644\u0627\u062d\u0642\u0627\u064b. \u0648\u0639\u0627\u062f\u0629 \u0645\u0627 \u062a\u0638\u0647\u0631 \u0647\u0630\u0647 \u0627\u0644\u0631\u0633\u0627\u0644\u0629 \u0641\u0642\u0637 \u0641\u064a \u0648\u0642\u062a \u0627\u0644\u0630\u0631\u0648\u0629.
-tryLater=Please try again later.
-skipUserSingle=Skipped {0} added by {1}.
-skipUserMultiple=Skipped {0} tracks added by {1}.
-skipUsersMultiple=Skipped {0} tracks added by {1} users.
-skipUserNoTracks=None of the mentioned users have any tracks queued.
-voteSkipAdded=Your vote has been added\!
-voteSkipAlreadyVoted=You already voted to skip this track\!
-voteSkipSkipping={0} have voted to skip. Skipping track {1}.
-voteSkipNotEnough={0} have voted to skip. At least {1} needed.
-voteSkipEmbedNoVotes=No votes to skip this track yet.
-voteSkipEmbedVoters={0} out of {1} have voted to skip the current track
-mathOperationResult=The result is
-mathOperationDivisionByZeroError=I cannot divide by zero.
-mathOperationInfinity=The number is too big to be displayed\!
-prefix=Prefix
-prefixGuild=The prefix for this guild is {0}
-prefixShowAgain=You can show the prefix anytime again by mentioning me.
+tryLater=\u064a\u0631\u062c\u0649 \u0627\u0644\u0645\u062d\u0648\u0644\u0629 \u0645\u0631\u0629 \u0623\u062e\u0631\u0649 \u0644\u0627\u062d\u0642\u0627.
+skipUserSingle=\u062a\u0645 \u062a\u062e\u0637 0 \u062a\u0645\u062a \u0625\u0636\u0627\u0641\u062a\u0647 \u0628\u0648\u0627\u0633\u0637\u0629 1.
+skipUserMultiple=\u062a\u0645 \u062a\u062e\u0637\u064a 0 \u0645\u0633\u0627\u0631 \u062a\u0645\u062a \u0625\u0636\u0627\u0641\u062a\u0647 \u0628\u0648\u0627\u0633\u0637\u0629 1.
+skipUsersMultiple=\u062a\u0645 \u062a\u062e\u0637\u064a 0 \u0645\u0633\u0627\u0631 \u062a\u0645\u062a \u0625\u0636\u0627\u0641\u062a\u0647 \u0628\u0648\u0627\u0633\u0637\u0629 1 \u0645\u0633\u062a\u062e\u062f\u0645\u064a\u0646.
+skipUserNoTracks=\u0644\u064a\u0633 \u0644\u062f\u0649 \u0623\u064a \u0645\u0646 \u0627\u0644\u0645\u0633\u062a\u062e\u062f\u0645\u064a\u0646 \u0627\u0644\u0645\u0630\u0643\u0648\u0631\u064a\u0646 \u0623\u064a \u0645\u0633\u0627\u0631\u0627\u062a \u0641\u064a \u0642\u0627\u0626\u0645\u0629 \u0627\u0644\u0627\u0646\u062a\u0638\u0627\u0631.
+voteSkipAdded=\u062a\u0645\u062a \u0625\u0636\u0627\u0641\u0629 \u062a\u0635\u0648\u064a\u062a\u0643\!
+voteSkipAlreadyVoted=\u0644\u0642\u062f \u0635\u0648\u062a\u062a \u0628\u0627\u0644\u0641\u0639\u0644 \u0644\u062a\u062e\u0637\u064a \u0647\u0630\u0627 \u0627\u0644\u0645\u0633\u0627\u0631\!
+voteSkipSkipping={0} \u0635\u0648\u062a\u0648\u0627 \u0644\u0644\u062a\u062e\u0637\u064a. \u062a\u062e\u0637\u064a \u0627\u0644\u0645\u0633\u0627\u0631 {1}.
+voteSkipNotEnough={0} \u0635\u0648\u062a\u0648\u0627 \u0644\u0644\u062a\u062e\u0637\u064a. \u062a\u062d\u062a\u0627\u062c {1} \u0639\u0644\u0649 \u0627\u0644\u0623\u0642\u0644.
+voteSkipEmbedNoVotes=\u0644\u0627 \u062a\u0648\u062c\u062f \u0627\u0635\u0648\u0627\u062a \u0644\u062a\u062e\u0637\u064a \u0647\u0630\u0627 \u0627\u0644\u0645\u0633\u0627\u0631 \u0628\u0639\u062f.
+voteSkipEmbedVoters={0} \u0645\u0646 {1} \u0635\u0648\u062a\u0648\u0627 \u0644\u062a\u062e\u0637\u064a \u0627\u0644\u0645\u0633\u0627\u0631 \u0627\u0644\u062d\u0627\u0644\u064a
+mathOperationResult=\u0648\u0627\u0644\u0646\u062a\u064a\u062c\u0629 \u0647\u064a
+mathOperationDivisionByZeroError=\u0644\u0627 \u0627\u0633\u062a\u0637\u064a\u0639 \u0627\u0644\u0642\u0633\u0645\u0629 \u0639\u0644\u0649 \u0635\u0641\u0631.
+mathOperationInfinity=\u0627\u0644\u0631\u0642\u0645 \u0643\u0628\u064a\u0631 \u062c\u062f\u0627 \u0644\u064a\u062a\u0645 \u0639\u0631\u0636\u0647\!
+prefix=\u0627\u0644\u0628\u0627\u062f\u0626\u0629
+prefixGuild=\u0627\u0644\u0628\u0627\u062f\u0626\u0629 \u0644\u0647\u0630\u0647 \u0627\u0644\u0646\u0642\u0627\u0628\u0629 \u0647\u064a {0}
+prefixShowAgain=\u064a\u0645\u0643\u0646\u0643 \u0625\u0638\u0647\u0627\u0631 \u0627\u0644\u0628\u0627\u062f\u0626\u0629 \u0641\u064a \u0623\u064a \u0648\u0642\u062a \u0645\u0631\u0629 \u0623\u062e\u0631\u0649 \u0645\u0646 \u062e\u0644\u0627\u0644 \u0630\u0643\u0631 \u0644\u064a.
diff --git a/FredBoat/src/main/resources/lang/bg_BG.properties b/FredBoat/src/main/resources/lang/bg_BG.properties
index 8be48b3ed..33cd5e1df 100644
--- a/FredBoat/src/main/resources/lang/bg_BG.properties
+++ b/FredBoat/src/main/resources/lang/bg_BG.properties
@@ -183,7 +183,7 @@ ratelimitedGeneralInfo=\u0412\u0438\u0435 \u0441\u0442\u0435 \u043e\u0433\u0440\
ratelimitedSkipCommand=\u041c\u043e\u0436\u0435\u0442\u0435 \u0434\u0430 \u043f\u0440\u043e\u043f\u0443\u0441\u043d\u0435\u0442\u0435 \u043f\u043e\u0432\u0435\u0447\u0435 \u043e\u0442 \u0435\u0434\u043d\u0430 \u043f\u0435\u0441\u0435\u043d \u0441 \u0442\u0430\u0437\u0438 \u043a\u043e\u043c\u0430\u043d\u0434\u0430\: {0}
ratelimitedGuildSlowLoadingPlaylist=\u0422\u043e\u0437\u0438 \u0441\u044a\u0440\u0432\u044a\u0440 \u043d\u0435 \u0435 \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d \u0434\u0430 \u0434\u043e\u0431\u0430\u0432\u044f \u043f\u043e\u0432\u0435\u0447\u0435 playlists \u0432 \u0442\u043e\u0437\u0438 \u043c\u043e\u043c\u0435\u043d\u0442. \u041c\u043e\u043b\u044f \u043d\u0435 \u0441\u043f\u0430\u043c\u0435\u0442\u0435 \u0434\u044a\u043b\u0433\u0438 playlists.
unblacklisted=\u041f\u0440\u0435\u043c\u0430\u0445\u043d\u0430\u0442 {0} \u043e\u0442 \u0447\u0435\u0440\u043d\u0438\u044f \u0441\u043f\u0438\u0441\u044a\u043a.
-serverinfoTitle=\u0418\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u0437\u0430 **{0} **\:
+serverinfoTitle=Info about {0}\:
serverinfoOnlineUsers=\u041e\u043d\u043b\u0430\u0439\u043d \u043f\u043e\u0442\u0440\u0435\u0431\u0438\u0442\u0435\u043b\u0438\:
serverinfoTotalUsers=\u041e\u0431\u0449\u0438 \u043f\u043e\u0442\u0440\u0435\u0431\u0438\u0442\u0435\u043b\u0438\:
serverinfoRoles=\u0420\u043e\u043b\u0438\:
@@ -193,7 +193,7 @@ serverinfoGuildID=\u0413\u0438\u043b\u0434\u0438\u044f\u0442\u0430 \u0418\u0414\
serverinfoCreationDate=\u0414\u0430\u0442\u0430 \u043d\u0430 \u0441\u044a\u0437\u0434\u0430\u0432\u0430\u043d\u0435\:
serverinfoOwner=\u0421\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u0438\u043a\:
serverinfoVLv=\u041a\u043e\u0434 \u0437\u0430 \u043f\u043e\u0442\u0432\u044a\u0440\u0436\u0434\u0430\u0432\u0430\u043d\u0435\:
-userinfoTitle=\u0418\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u0437\u0430 **{0} **\:
+userinfoTitle=Information about {0}\:
userinfoUsername=\u041f\u043e\u0442\u0440\u0435\u0431\u0438\u0442\u0435\u043b\u0441\u043a\u043e \u0438\u043c\u0435\:
userinfoId=ID\:
userinfoNick=\u041f\u0440\u044f\u043a\u043e\u0440\:
@@ -212,7 +212,11 @@ commandsMaintenance=\u0422\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u0430
commandsBotOwner=\u0421\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u0438\u043a \u043d\u0430 \u0431\u043e\u0442\u0430
commandsMoreHelp=\u041a\u0430\u0436\u0430 {0} \u0434\u0430 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0435 \u043f\u043e\u0432\u0435\u0447\u0435 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u0437\u0430 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u0430 \u043a\u043e\u043c\u0430\u043d\u0434\u0430.
helpUnknownCommand=Unknown command.
-helpDM=Documentation can be found at\:\nhttps\://fredboat.com/docs\n\nWant to add FredBoat to your server? If you have Manage Server permissions for your guild, you can invite it here\:\n*This one doesn''t play music*\n\n\nIf you want to add the music bot, you will want to invite this bot\:\n\n\nNeed help or have any ideas for the bot? Perhaps you just want to hang out? Come on over to FredBoat hangout\!\n{0}\n\nYou cannot send this bot commands through DM.\nBot created by Fre_d
+helpDocsLocation=Documentation can be found at\:
+helpBotInvite=Want to add FredBoat to your server? If you have Manage Server permissions for your guild, you can invite FredBoat\:
+helpHangoutInvite=Need help or have any ideas for FredBoat? Perhaps you just want to hang out? Join the FredBoat community\!
+helpNoDmCommands=You cannot send FredBoat commands through DMs.
+helpCredits=Created by Fre_d and open source contributors
helpSent={0}\: \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f \u0435 \u0438\u0437\u043f\u0440\u0430\u0442\u0435\u043d\u0430 \u0434\u043e \u0432\u0430\u0448\u0438\u0442\u0435 \u043b\u0438\u0447\u043d\u0438 \u0441\u044a\u043e\u0431\u0449\u0435\u043d\u0438\u044f\!
helpProperUsage=\u041f\u0440\u0430\u0432\u0438\u043b\u043d\u043e\u0442\u043e \u043f\u043e\u043b\u0437\u0432\u0430\u043d\u0435\:
helpCommandOwnerRestricted=\u0422\u0430\u0437\u0438 \u043a\u043e\u043c\u0430\u043d\u0434\u0430 \u0441\u0435 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0430\u0432\u0430 \u0434\u043e \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u0438\u043a\u0430 \u043d\u0430 \u0431\u043e\u0442\u0430.
diff --git a/FredBoat/src/main/resources/lang/bn_BD.properties b/FredBoat/src/main/resources/lang/bn_BD.properties
new file mode 100644
index 000000000..a2e81a5a2
--- /dev/null
+++ b/FredBoat/src/main/resources/lang/bn_BD.properties
@@ -0,0 +1,305 @@
+#X-Generator: crowdin.com
+playQueueEmpty=\u0996\u09c7\u09b2\u09cb\u09af\u09bc\u09be\u09a1\u09bc \u09ac\u09b0\u09cd\u09a4\u09ae\u09be\u09a8\u09c7 \u0995\u09cb\u09a8 \u0996\u09c7\u09b2\u09be \u09a8\u09af\u09bc\u0964 \u0997\u09be\u09a8 \u09af\u09cb\u0997 \u0995\u09b0\u09c1\u09a8 \u09a8\u09bf\u09ae\u09cd\u09a8\u09c7\u09b0 \u09ac\u09be\u0995\u09cd\u09af\u09b0\u09c0\u09a4\u09bf \u09ac\u09cd\u09af\u09ac\u09b9\u09be\u09b0 \u0995\u09b0\u09c1\u09a8\u0964\u0964\u0964\: ;;\u0996\u09c7\u09b2\u09be
+playAlreadyPlaying=\u0987\u099f \u0987\u09b8 \u0985\u09b2\u09b0\u09c7\u09a1\u09bf \u09aa\u09cd\u09b2\u09c7\u09df\u09bf\u0982.
+playVCEmpty=\u09ad\u09af\u09bc\u09c7\u09b8 \u099a\u09cd\u09af\u09be\u099f\u09c7 \u0995\u09cb\u09a8 \u09ac\u09cd\u09af\u09ac\u09b9\u09be\u09b0\u0995\u09be\u09b0\u09c0.
+playWillNowPlay=\u09aa\u09cd\u09b2\u09c7\u09af\u09bc\u09be\u09b0 \u098f\u0996\u09a8 \u0996\u09c7\u09b2\u09be \u09b9\u09ac\u09c7.
+playSearching=\u09b2\u09c1\u0995\u09bf\u0982 \u09ab\u09b0 `{q}`\u0987\u09a8 YouTube...
+playYoutubeSearchError=\u0987\u0989\u099f\u09bf\u0989\u09ac \u09b8\u09a8\u09cd\u09a7\u09be\u09a8 \u0995\u09b0\u09be\u09b0 \u09b8\u09ae\u09af\u09bc \u098f\u0995\u099f\u09bf \u09a4\u09cd\u09b0\u09c1\u099f\u09bf \u09b8\u0982\u0998\u099f\u09bf\u09a4 \u09b9\u09af\u09bc\u09c7\u099b\u09c7\u0964 \u098f\u09b0 \u09aa\u09b0\u09bf\u09ac\u09b0\u09cd\u09a4\u09c7 \u09b8\u09b0\u09be\u09b8\u09b0\u09bf \u0985\u09a1\u09bf\u0993 \u0989\u09ce\u09b8\u09c7\u09b0 \u09b8\u09be\u09a5\u09c7 \u09ac\u09bf\u09ac\u09c7\u099a\u09a8\u09be \u0995\u09b0\u09ac\u09cb\u0964 ``` ;; \u0996\u09c7\u09b2\u09be "\u0964
+playSearchNoResults=''{q}''-\u098f\u09b0 \u099c\u09a8\u09cd\u09af \u0995\u09cb\u09a8\u09cb \u09ab\u09b2\u09be\u09ab\u09b2 \u09a8\u09c7\u0987
+playSelectVideo=* * \u09a6\u09af\u09bc\u09be \u0995\u09b0\u09c7 \u099f\u09cd\u09b0\u09cd\u09af\u09be\u0995 \u09a6\u09bf\u09af\u09bc\u09c7 \u09a8\u09bf\u09b0\u09cd\u09ac\u09be\u099a\u09a8 ''{0}play 1-5'' \u0995\u09ae\u09be\u09a8\u09cd\u09a1\: * *
+joinJoining=\u098f\u09a8\u09cd\u099f\u09be\u09b0\u09bf\u0982 {0}
+joinErrorAlreadyJoining=\u098f\u0995\u099f\u09bf \u09a4\u09cd\u09b0\u09c1\u099f\u09bf \u09b8\u0982\u0998\u099f\u09bf\u09a4 \u09b9\u09af\u09bc\u09c7\u099b\u09c7\u0964 {0} \u09af\u09cb\u0997 \u09a6\u09bf\u09a4\u09c7 \u09aa\u09be\u09b0\u09b2\u09be\u09ae \u09a8\u09be \u0995\u09be\u09b0\u09a8 \u0986\u09ae\u09bf \u0987\u09a4\u09bf\u09ae\u09a7\u09cd\u09af\u09c7\u0987 \u0993\u0987 \u099a\u09cd\u09af\u09be\u09a8\u09c7\u09b2\u09c7\u09b0 \u09b8\u09be\u09a5\u09c7 \u09b8\u0982\u09af\u09cb\u0997 \u0995\u09b0\u09be\u09b0 \u099a\u09c7\u09b7\u09cd\u099f\u09be \u0995\u09b0\u099b\u09bf\u0964 \u0985\u09a8\u09c1\u0997\u09cd\u09b0\u09b9 \u0995\u09b0\u09c7 \u0986\u09ac\u09be\u09b0 \u099a\u09c7\u09b7\u09cd\u099f\u09be \u0995\u09b0\u09c1\u09a8\u0964.
+pauseAlreadyPaused=\u09aa\u09cd\u09b2\u09c7\u09af\u09bc\u09be\u09b0 \u0987\u09a4\u09bf\u09ae\u09a7\u09cd\u09af\u09c7 \u09a5\u09be\u09ae\u09be\u09a8\u09cb \u09b9\u09af\u09bc\u09c7\u099b\u09c7.
+pauseSuccess=\u0996\u09c7\u09b2\u09cb\u09af\u09bc\u09be\u09a1\u09bc \u098f\u0996\u09a8 \u09b9\u09a4\u09c7 \u09ac\u09bf\u09b0\u09a4 \u09b0\u09be\u0996\u09be \u09b9\u09af\u09bc\u09c7\u099b\u09c7\u0964 \u0986\u09aa\u09a8\u09bf \u098f\u099f\u09bf{0}unpause \u09b8\u09be\u09a5\u09c7 unpause \u0995\u09b0\u09a4\u09c7 \u09aa\u09be\u09b0\u09c7\u09a8\u0964.
+repeatOnSingle=\u09ac\u09b0\u09cd\u09a4\u09ae\u09be\u09a8 \u099f\u09cd\u09b0\u09cd\u09af\u09be\u0995 \u0996\u09c7\u09b2\u09cb\u09af\u09bc\u09be\u09a1\u09bc \u098f\u0996\u09a8 \u09aa\u09c1\u09a8\u09b0\u09be\u09ac\u09c3\u09a4\u09cd\u09a4\u09bf \u09b9\u09ac\u09c7\u0964.
+repeatOnAll=\u09a8\u09be\u0989 \u09b0\u09bf\u09aa\u09bf\u099f\u09bf\u0982.
+repeatOff=\u09b0\u09bf\u09aa\u09bf\u099f\u09bf\u0982 \u09b8\u09cd\u099f\u09aa\u09c7\u09a1.
+selectSuccess=\u09b8\u0982 **\#{0}** \u09b8\u09bf\u09b2\u09c7\u0995\u09cd\u099f\u09c7\u09a1\: **{1}** ({2})
+selectInterval=\u09b8\u0982\u0996\u09cd\u09af\u09be\u099f\u09bf \u09b9\u09b2 1-{0}.
+selectSelectionNotGiven=\u0986\u09aa\u09a8\u09bf \u09aa\u09cd\u09b0\u09a5\u09ae \u09a5\u09c7\u0995\u09c7 \u09aa\u099b\u09a8\u09cd\u09a6 \u0995\u09b0\u09c7 \u09a8\u09bf\u09a8 \u09a8\u09bf\u09b0\u09cd\u09ac\u09be\u099a\u09a8 \u09a6\u09c7\u0993\u09af\u09bc\u09be \u0989\u099a\u09bf\u09a4\u0964
+shuffleOn=\u09b8\u09cd\u09ac\u09aa \u0995\u09ae\u09aa\u09cd\u09b2\u09bf\u099f
+shuffleOff=\u09b8\u09cd\u09ac\u09aa \u0995\u09ae\u09aa\u09cd\u09b2\u09bf\u099f.
+reshufflePlaylist=\u09b8\u09be\u09b0\u09bf \u09b8\u09cd\u09a5\u09b2\u09c7\u0964.
+reshufflePlayerNotShuffling=\u0986\u09aa\u09a8\u09bf \u09aa\u09cd\u09b0\u09a5\u09ae\u09c7 \u0993\u09b2\u099f\u09aa\u09be\u09b2\u099f \u0995\u09b0\u09be\u09b0 \u09ae\u09cb\u09a1 \u098f \u099a\u09be\u09b2\u09c1 \u0995\u09b0\u09a4\u09c7 \u09b9\u09ac\u09c7\u0964.
+skipEmpty=\u0987\u099f \u0987\u099c \u098f\u09ae\u09cd\u09aa\u099f\u09bf\!
+skipOutOfBounds=\u099f\u09cd\u09b0\u09cd\u09af\u09be\u0995 \u09a8\u09ae\u09cd\u09ac\u09b0 {0} \u09af\u0996\u09a8 {1} \u099f\u09cd\u09b0\u09be\u0995 \u098f\u0995\u09ae\u09be\u09a4\u09cd\u09b0 \u0985\u09aa\u09b8\u09be\u09b0\u09a3 \u0995\u09b0\u09a4\u09c7 \u09aa\u09be\u09b0\u099b\u09bf \u09a8\u09be\u0964.
+skipNumberTooLow=\u09a8\u09ae\u09cd\u09ac\u09b0 \u09a6\u09c7\u0993\u09af\u09bc\u09be 0 \u099a\u09c7\u09af\u09bc\u09c7 \u09ac\u09c7\u09b6\u09bf \u09b9\u09ac\u09c7\u0964\!
+skipSuccess=\u099f\u09cd\u09b0\u09cd\u09af\u09be\u0995 \#{0} \u098f\u09a1\u09bc\u09bf\u09af\u09bc\u09c7 \u09af\u09be\u0993\u09af\u09bc\u09be, * *{1} * *
+skipRangeInvalid=Specified track range is invalid.
+skipRangeSuccess=Tracks \#{0} to \#{1} have been removed.
+skipTrackNotFound=Couldn't find track to skip.
+stopAlreadyEmpty=The queue was already empty.
+stopEmptyOne=The queue has been emptied, `1` track has been removed.
+stopEmptySeveral=The queue has been emptied, `{0}` tracks have been removed.
+stopAccessDenied=In order to prevent abuse, this command is only available to those who can manage messages.
+unpauseQueueEmpty=The queue is empty.
+unpausePlayerNotPaused=The player is not paused.
+unpauseNoUsers=There are no users in the voice chat.
+unpauseSuccess=The player is now unpaused.
+volumeApology=Sorry\! The ;;volume command has now been deprecated on the public music bot. This is because of how it causes the bot to spend a lot more time processing audio, some tracks up to 5 times more, causing everyone to hear stutter. By disabling this feature FredBoat can play much more music without lag.\nI recommend setting the bot's volume via the dropdown menu https\://fred.moe/1vD.png
+volumeSyntax=Use `;;volume <0-150>`. {0}% is the default.\nThe player is currently at **{1}%**.
+volumeSuccess=Changed volume from **{0}%** to **{1}%**.
+exportEmpty=Nothing to export, the queue is empty.
+exportPlaylistResulted=Exported playlist\: {0}\nYou can provide this URL to play the current playlist later.
+exportPlaylistFail=Failed to upload playlist to hastebin.com
+listShowShuffled=Showing shuffled playlist.
+listShowRepeatSingle=Repeating current track.
+listShowRepeatAll=Repeating current queue.
+listShowHistory=Showing tracks in history.
+listAddedBy=**{0}** added by **{1}** `[{2}]`
+listStreamsOnlySingle=There is **{0}** live {1} in the queue.
+listStreamsOnlyMultiple=There are **{0}** live {1} in the queue.
+listStreamsOrTracksSingle=There is **{0}** {1} with a remaining length of **[{2}]**{3} in the queue.
+listStreamsOrTracksMultiple=There are **{0}** {1} with a remaining length of **[{2}]**{3} in the queue.
+streamSingular=stream
+streamPlural=streams
+listAsWellAsLiveStreams=, as well as **{0}** live {1}
+trackSingular=track
+trackPlural=tracks
+npNotPlaying=Not currently playing anything.
+npNotInHistory=Currently no tracks in history.
+npDescription=Description
+npLoadedSoundcloud=[{0}/{1}]\n\nLoaded from Soundcloud
+npLoadedBandcamp={0}\n\nLoaded from Bandcamp
+npLoadedTwitch=Loaded from Twitch
+permissionMissingBot=I need the following permission to perform that action\:
+permissionEmbedLinks=Embed Links
+rating=Rating
+listeners=Listeners
+year=Year
+album=Album
+artist=Artist
+circle=Circle
+npLoadedFromHTTP={0}\n\nLoaded from {1}
+npLoadedDefault={0}\n\nLoaded from {1}
+noneYet=None yet
+npRatingRange={0}/5 from {1} vote(s)
+fwdSuccess=Forwarding **{0}** by {1}.
+restartSuccess=**{0}** has been restarted.
+queueEmpty=The queue is empty.
+rewSuccess=Rewinding **{0}** by {1}.
+seekSuccess=Seeking **{0}** to {1}.
+seekDeniedLiveTrack=You can't seek a live track.
+loadPlaySplitListFail=That link leads to a playlist, not a track. Try `;;play` instead.
+loadListSuccess=Found and added `{0}` songs from playlist **{1}**.
+loadNoMatches=No audio could be found for `{0}`.
+loadSplitNotYouTube=This is not a YouTube track. Only YouTube tracks are supported with the `;;split` command. Try using `;;play` instead.
+loadSplitNotResolves=Couldn't resolve that video's tracklist. Try using `;;play` instead.
+loadFollowingTracksAdded=The following tracks were added\:
+loadPlaylistTooMany=Added {0} tracks. Found too many tracks to display.
+loadErrorCommon=Error occurred when loading info for `{0}`\:\n{1}
+loadErrorSusp=Suspicious error when loading info for `{0}`.
+loadQueueTrackLimit=You can''t add tracks to a queue with more than {0} tracks\! This is to prevent abuse.
+loadAnnouncePlaylist=About to load playlist **{0}** with up to `{1}` tracks. This may take a while, please be patient.
+playerUserNotInChannel=You must join a voice channel first.
+playerJoinConnectDenied=I am not permitted to connect to that voice channel.
+playerJoinSpeakDenied=I am not permitted to play music in that voice channel.
+playerNotInChannel=Not currently in a channel.
+playerLeftChannel=Left channel {0}.
+shutdownUpdating=FredBoat\u266a\u266a is updating. This should only take a minute and will reload the current playlist.
+shutdownRestarting=FredBoat\u266a\u266a is restarting. This should only take a minute and will reload the current playlist.
+shutdownIndef=FredBoat\u266a\u266a is shutting down. Once the bot comes back the current playlist will reload.
+shutdownPersistenceFail=Error occurred when saving persistence file\: {0}
+reloadSuccess=Reloading playlist. `{0}` tracks found.
+trackAnnounce=Now playing **{0}**.
+cmdAccessDenied=You are not allowed to use that command\!
+utilErrorOccurred=\ an error occured \:anger\: ```java\n{0}\n
+errorOccurredTooLong=An error occurred \:anger\: Error was too long to display.\n{0}.txt
+errorOccurredTooLongAndUnirestException=An error occurred \:anger\: Was too long and was unable to post to Hastebin\!
+malRevealAnime={0}\: Search revealed an anime.\n
+malTitle={0}**Title\: **{1}\n
+malEnglishTitle={0}**English\: **{1}\n
+malSynonyms={0}**Synonyms\: **{1}\n
+malEpisodes={0}**Episodes\: **{1}\n
+malScore={0}**Score\: **{1}\n
+malType={0}**Type\: **{1}\n
+malStatus={0}**Status\: **{1}\n
+malStartDate={0}**Start date\: **{1}\n
+malEndDate={0}**End date\: **{1}
+malSynopsis={0}**Synopsis\: **"{1}"\n
+malUserReveal={0}\: Search revealed a user.\n
+malNoResults={0}\: No results.
+malUserName={0}**Name\: **{1}\n
+malUrl={0}**URL\: **{1}\n
+luaError=\ A Lua error occured \:anger\:\n```{0}```
+luaErrorOutputTooBig=\ Output buffer is too large \:anger\: Discord only allows 2000 characters per message, got {0}
+luaTimeout=\ Function timed out \:anger\: allowed computation time is {0} seconds.
+helpSuccess=Documentation has been sent to your direct messages\!
+helpDmFailed=Could not send documentation to your DMs. Please check that you don't have them disabled\!
+helpCommandsPromotion=Say {0} to learn what this bot can do\!
+fuzzyNoResults=No such users
+brainfuckCycleLimit=Program exceeded the maximum cycle count of {0}
+brainfuckDataPointerOutOfBounds=Data pointer out of bounds\: {0}
+brainfuckInputOOB=Input out of bounds at position\: {0}
+brainfuckNoOutput=\ There was no output
+weatherLocationNotFound=Unable to find location, please check your input {0}.
+weatherError=Error retrieving weather for {0}
+avatarSuccess=\ found it\n{0}
+configNoArgs=Configuration for **{0}**\:```
+configSetTo=is now set to `{0}`.
+configUnknownKey={0}\: Unknown key.
+configMustBeBoolean={0}\: Value must be true or false.
+modReason=Reason
+modAuditLogMessage=Action issued by {0}\#{1} [{2}]
+modFailUserHierarchy=You do not have a higher role than {0}.
+modFailBotHierarchy=I need to have a higher role than {0}.
+modBanFail=Failed to ban {0}
+modKickBanFailUserPerms=You must have permission to kick and ban to be able to use this command.
+modBanBotPerms=I need to have permission to ban members.
+modKickBotPerms=I need to have permission to kick members.
+kickSuccess=User {0}\#{1} [{2}] has been kicked.
+kickFail=Failed to kick {0}
+kickFailSelf=You can't kick yourself.
+kickFailOwner=You can't kick the server owner.
+kickFailMyself=I can't kick myself.
+kickFailUserPerms=You must have permission to kick to be able to use this command.
+softbanSuccess=User {0}\#{1} [{2}] has been softbanned.
+softbanFailSelf=You can't softban yourself.
+softbanFailOwner=You can't softban the server owner.
+softbanFailMyself=I can't softban myself.
+hardbanSuccess=User {0}\#{1} [{2}] has been banned.
+hardbanFailSelf=You can't ban yourself.
+hardbanFailOwner=You can't ban the server owner.
+hardbanFailMyself=I can't ban myself.
+getidSuccess=The id of this guild is {0}. The id of this text channel is {1}.
+statsParagraph=\ This bot has been running for {0} days, {1} hours, {2} minutes and {3} seconds.\nThis bot has executed {4} commands this session.
+statsRate={0}That''s a rate of {1} commands per hour
+catgirlFail=Failed to extract image from {0}
+catgirlFailConn=Failed to connect to {0}
+hugBot=Thanks for the hugs \:blush\:
+hugSuccess=Hugs {0}.
+patBot=Thanks for the pats \:blush\:
+patSuccess=Pats {0}.
+rollSuccess={0} rolls around on the floor.
+facedeskSuccess={0} facedesks.
+langInvalidCode=The language code {0} doesn''t exist or is unsupported.
+langSuccess=Switched to speaking {0}.
+langInfo=FredBoat supports several user-contributed languages that you can select with this command. Admins on this server can select a language with `;;lang ` Here is the full list of supported languages\:
+langDisclaimer=Translations may not be 100% accurate or complete. Missing translations may be contributed at .
+loadSingleTrack=**{0}** has been added to the queue.
+loadSingleTrackAndPlay=**{0}** will now play.
+invite=Invite link for **{0}**\:
+ratelimitedGeneralInfo=You are being rate limited\! Please slow down.
+ratelimitedSkipCommand=You can skip more than one song by using this command\: {0}
+ratelimitedGuildSlowLoadingPlaylist=This server is not allowed to add more playlists at this moment. Please don't spam long playlists.
+unblacklisted=Removed {0} from the blacklist.
+serverinfoTitle=Info about {0}\:
+serverinfoOnlineUsers=Online Users\:
+serverinfoTotalUsers=Total Users\:
+serverinfoRoles=Roles\:
+serverinfoText=Text Channels\:
+serverinfoVoice=Voice Channels\:
+serverinfoGuildID=Guild ID\:
+serverinfoCreationDate=Creation Date\:
+serverinfoOwner=Owner\:
+serverinfoVLv=Verification Level\:
+userinfoTitle=Information about {0}\:
+userinfoUsername=Username\:
+userinfoId=ID\:
+userinfoNick=Nickname\:
+userinfoKnownServer=Known Servers\:
+userinfoJoinDate=Join Date\:
+userinfoCreationTime=Creation Date\:
+userinfoBlacklisted=Blacklisted\:
+skipDeniedTooManyTracks=You can't skip someone else's tracks if you are not a DJ.\nConsider using the Voteskip command.
+eventUsersLeftVC=All users have left the voice channel. The player has been paused.
+eventAutoResumed=User presence detected, automatically resuming the player.
+commandsFun=Fun
+commandsMemes=Memes
+commandsUtility=Utility
+commandsModeration=Moderation
+commandsMaintenance=Maintenance
+commandsBotOwner=Bot owner
+commandsMoreHelp=Say {0} to get more information on a specific command.
+helpUnknownCommand=Unknown command.
+helpDocsLocation=Documentation can be found at\:
+helpBotInvite=Want to add FredBoat to your server? If you have Manage Server permissions for your guild, you can invite FredBoat\:
+helpHangoutInvite=Need help or have any ideas for FredBoat? Perhaps you just want to hang out? Join the FredBoat community\!
+helpNoDmCommands=You cannot send FredBoat commands through DMs.
+helpCredits=Created by Fre_d and open source contributors
+helpSent=Documentation has been sent to your DMs\!
+helpProperUsage=Proper usage\:
+helpCommandOwnerRestricted=This command is restricted to the owner of the bot.
+helpConfigCommand=Show the config of this guild or adjust settings.
+helpLanguageCommand=Show available languages or set a language for this guild.
+helpHardbanCommand=Ban a user and delete his messages from the last 7 days.
+helpKickCommand=Kick a user from this guild.
+helpSoftbanCommand=Softban a user by kicking him and deleting his messages from the last 7 days.
+helpMusicCommandsHeader=FredBoat Music Commands
+helpJoinCommand=Make the bot join your current voice channel.
+helpLeaveCommand=Make the bot leave the current voice channel.
+helpPauseCommand=Pause the player.
+helpPlayCommand=Play music from the given URL or search for a track. For a full list of sources please visit {0}
+helpPlaySplitCommand=Split a YouTube video into a tracklist provided in it's description.
+helpRepeatCommand=Toggle between repeat modes.
+helpReshuffleCommand=Reshuffle the current queue.
+helpSelectCommand=Select one of the offered tracks after a search to play.
+helpShuffleCommand=Toggle shuffle mode for the current queue.
+helpSkipCommand=Skip the current song, the n'th song in the queue, all songs from n to m, or all songs from mentioned users. Please use in moderation.
+helpStopCommand=Stop the player and clear the playlist. Reserved for moderators with Manage Messages permission.
+helpUnpauseCommand=Unpause the player.
+helpVolumeCommand=Changes the volume. Values are 0-150 and 100 is the default. The volume command is deprecated on the public bot.
+helpExportCommand=Export the current queue to a hastebin link, can be later used as a playlist.
+helpGensokyoRadioCommand=Show the current song played on gensokyoradio.net
+helpListCommand=Display a list of the current songs in the playlist.
+helpHistoryCommand=Display a list of the songs in playlist history.
+helpNowplayingCommand=Display the currently playing song.
+helpForwardCommand=Forward the track by a given amount of time. Example\:
+helpRestartCommand=Restart the currently playing track.
+helpRewindCommand=Rewind the track by a given amount of time. Example\:
+helpSeekCommand=Set the position of the track to the given time. Example\:
+helpAvatarCommand=Display the avatar of a user.
+helpBrainfuckCommand=Executes Brainfuck code. Example\:
+helpWeatherCommand=Display current weather by location.
+helpClearCommand=Delete all messages by this bot in the last 50 messages of this channel.
+helpCommandsCommand=Show available commands.
+helpHelpCommand=Receive help for this bot or help for any command.
+helpInviteCommand=Post invite link for this bot.
+helpMALCommand=Search MyAnimeList and display an anime or profile of a user.
+helpMusicHelpCommand=Show music commands and their usage.
+helpSayCommand=Make the bot echo something.
+helpServerInfoCommand=Display some stats about this guild.
+helpUserInfoCommand=Display information about yourself or a user known to the bot.
+helpPerms=Allows whitelisting members and roles for the {0} rank.
+helpPrefixCommand=Set the prefix for this guild.
+helpVoteSkip=Vote to skip the current song. Needs 50% of all users in the voice chat to vote.
+helpMathOperationAdd=Print the sum of num1 and num2.
+helpMathOperationSub=Print the difference of subtracting num2 from num1.
+helpMathOperationMult=Print the product of num1*num2.
+helpMathOperationDiv=Print the quotient of dividing num1 by num2.
+helpMathOperationMod=Print the remainder of dividing num1 by num2.
+helpMathOperationPerc=Print the percentage represented by num1 in num2.
+helpMathOperationSqrt=Print the square root of num.
+helpMathOperationPow=Print the result of num1^num2.
+destroyDenied=You must have the manage messages permission to reset the player.
+destroyHelp=Reset the player and clear the playlist. Reserved for moderators with Manage Messages permission.
+destroySucc=Reset the player and cleared the queue.
+listPageNum=Page **{0}** of **{1}**.
+permsListTitle=Users and roles with the {0} permissions
+permsAdded=Added `{0}` to `{1}`.
+permsRemoved=Removed `{0}` from `{1}`.
+permsFailSelfDemotion=You cannot remove this as it would render you without admin permissions\!
+permsAlreadyAdded={0} already added to {1}
+permsNotAdded={0} is not in {1}
+fuzzyMultiple=Multiple items were found. Did you mean any of these?
+fuzzyNothingFound=Nothing found for `{0}`.
+cmdPermsTooLow=You don''t have permission to run this command\! This command requires `{0}` but you only have `{1}`.
+playersLimited=FredBoat is currently at maximum capacity\! The bot is currently fixed to only play up to `{0}` streams, otherwise we would risk disconnecting from Discord under the network load.\nIf you want to help us increase the limit or you want to use our non-overcrowded bot, please support our work on Patreon\:\n{1}\n\nSorry for the inconvenience\! You might want to try again later. This message usually only appears at peak time.
+tryLater=Please try again later.
+skipUserSingle=Skipped {0} added by {1}.
+skipUserMultiple=Skipped {0} tracks added by {1}.
+skipUsersMultiple=Skipped {0} tracks added by {1} users.
+skipUserNoTracks=None of the mentioned users have any tracks queued.
+voteSkipAdded=Your vote has been added\!
+voteSkipAlreadyVoted=You already voted to skip this track\!
+voteSkipSkipping={0} have voted to skip. Skipping track {1}.
+voteSkipNotEnough={0} have voted to skip. At least {1} needed.
+voteSkipEmbedNoVotes=No votes to skip this track yet.
+voteSkipEmbedVoters={0} out of {1} have voted to skip the current track
+mathOperationResult=The result is
+mathOperationDivisionByZeroError=I cannot divide by zero.
+mathOperationInfinity=The number is too big to be displayed\!
+prefix=Prefix
+prefixGuild=The prefix for this guild is {0}
+prefixShowAgain=You can show the prefix anytime again by mentioning me.
+
diff --git a/FredBoat/src/main/resources/lang/ca_ES.properties b/FredBoat/src/main/resources/lang/ca_ES.properties
index 4de1033a1..a437e2251 100644
--- a/FredBoat/src/main/resources/lang/ca_ES.properties
+++ b/FredBoat/src/main/resources/lang/ca_ES.properties
@@ -183,7 +183,7 @@ ratelimitedGeneralInfo=You are being rate limited\! Please slow down.
ratelimitedSkipCommand=You can skip more than one song by using this command\: {0}
ratelimitedGuildSlowLoadingPlaylist=This server is not allowed to add more playlists at this moment. Please don't spam long playlists.
unblacklisted=Removed {0} from the blacklist.
-serverinfoTitle=Informaci\u00f3 sobre ''{0}''\:
+serverinfoTitle=Info about {0}\:
serverinfoOnlineUsers=Usuaris en l\u00ednia\:
serverinfoTotalUsers=Usuaris totals
serverinfoRoles=Rols\:
@@ -193,7 +193,7 @@ serverinfoGuildID=Guild ID\:
serverinfoCreationDate=Data de Creaci\u00f3\:
serverinfoOwner=Propietari\:
serverinfoVLv=Verification Level\:
-userinfoTitle=Informaci\u00f3 sobre ''{0}''\:
+userinfoTitle=Information about {0}\:
userinfoUsername=Nom d'usuari/a\:
userinfoId=ID\:
userinfoNick=\u00c0lies\:
@@ -212,7 +212,11 @@ commandsMaintenance=Maintenance
commandsBotOwner=Bot owner
commandsMoreHelp=Say {0} to get more information on a specific command.
helpUnknownCommand=Unknown command.
-helpDM=Documentation can be found at\:\nhttps\://fredboat.com/docs\n\nWant to add FredBoat to your server? If you have Manage Server permissions for your guild, you can invite it here\:\n*This one doesn''t play music*\n\n\nIf you want to add the music bot, you will want to invite this bot\:\n\n\nNeed help or have any ideas for the bot? Perhaps you just want to hang out? Come on over to FredBoat hangout\!\n{0}\n\nYou cannot send this bot commands through DM.\nBot created by Fre_d
+helpDocsLocation=Documentation can be found at\:
+helpBotInvite=Want to add FredBoat to your server? If you have Manage Server permissions for your guild, you can invite FredBoat\:
+helpHangoutInvite=Need help or have any ideas for FredBoat? Perhaps you just want to hang out? Join the FredBoat community\!
+helpNoDmCommands=You cannot send FredBoat commands through DMs.
+helpCredits=Created by Fre_d and open source contributors
helpSent=Documentation has been sent to your DMs\!
helpProperUsage=Proper usage\:
helpCommandOwnerRestricted=This command is restricted to the owner of the bot.
diff --git a/FredBoat/src/main/resources/lang/cs_CZ.properties b/FredBoat/src/main/resources/lang/cs_CZ.properties
index 7504fa382..66167e045 100644
--- a/FredBoat/src/main/resources/lang/cs_CZ.properties
+++ b/FredBoat/src/main/resources/lang/cs_CZ.properties
@@ -183,7 +183,7 @@ ratelimitedGeneralInfo=You are being rate limited\! Please slow down.
ratelimitedSkipCommand=You can skip more than one song by using this command\: {0}
ratelimitedGuildSlowLoadingPlaylist=This server is not allowed to add more playlists at this moment. Please don't spam long playlists.
unblacklisted=Removed {0} from the blacklist.
-serverinfoTitle=Informace o **{0}**\:
+serverinfoTitle=Info about {0}\:
serverinfoOnlineUsers=Online u\u017eivatel\u016f\:
serverinfoTotalUsers=Celkem u\u017eivatel\u016f\:
serverinfoRoles=Role\:
@@ -193,7 +193,7 @@ serverinfoGuildID=Guild ID\:
serverinfoCreationDate=Datum vytvo\u0159en\u00ed\:
serverinfoOwner=Vlastn\u00edk\:
serverinfoVLv=Verification Level\:
-userinfoTitle=Informace o **{0}**\:
+userinfoTitle=Information about {0}\:
userinfoUsername=U\u017eivatelsk\u00e9 jm\u00e9no\:
userinfoId=ID\:
userinfoNick=P\u0159ezd\u00edvka\:
@@ -212,7 +212,11 @@ commandsMaintenance=\u00dadr\u017eba
commandsBotOwner=Vlastn\u00edk bota
commandsMoreHelp=Say {0} to get more information on a specific command.
helpUnknownCommand=Nezn\u00e1m\u00fd p\u0159\u00edkaz.
-helpDM=Documentation can be found at\:\nhttps\://fredboat.com/docs\n\nWant to add FredBoat to your server? If you have Manage Server permissions for your guild, you can invite it here\:\n*This one doesn''t play music*\n\n\nIf you want to add the music bot, you will want to invite this bot\:\n\n\nNeed help or have any ideas for the bot? Perhaps you just want to hang out? Come on over to FredBoat hangout\!\n{0}\n\nYou cannot send this bot commands through DM.\nBot created by Fre_d
+helpDocsLocation=Documentation can be found at\:
+helpBotInvite=Want to add FredBoat to your server? If you have Manage Server permissions for your guild, you can invite FredBoat\:
+helpHangoutInvite=Need help or have any ideas for FredBoat? Perhaps you just want to hang out? Join the FredBoat community\!
+helpNoDmCommands=You cannot send FredBoat commands through DMs.
+helpCredits=Created by Fre_d and open source contributors
helpSent=Documentation has been sent to your DMs\!
helpProperUsage=Spr\u00e1vn\u00e9 pou\u017eit\u00ed\:
helpCommandOwnerRestricted=This command is restricted to the owner of the bot.
diff --git a/FredBoat/src/main/resources/lang/cy_GB.properties b/FredBoat/src/main/resources/lang/cy_GB.properties
index 1d9a22deb..eff733512 100644
--- a/FredBoat/src/main/resources/lang/cy_GB.properties
+++ b/FredBoat/src/main/resources/lang/cy_GB.properties
@@ -183,7 +183,7 @@ ratelimitedGeneralInfo=Yr ydych yn gyfradd cyfyngedig\! Os gwelwch yn dda yn ara
ratelimitedSkipCommand=Gall anwybyddu''r mwy nag un g\u00e2n gan ddefnyddio Gorchymyn hwn\: {0}
ratelimitedGuildSlowLoadingPlaylist=Ni chaiff y gweinydd hwn i ychwanegu rhestri chwarae mwy ar hyn o bryd. Os gwelwch yn dda Peidiwch \u00e2 sbam rhestri chwarae hir.
unblacklisted={0} wedi ei dynnu oddi wrth y chynaliadwy.
-serverinfoTitle=Gwybodaeth am **{0} **\:
+serverinfoTitle=Info about {0}\:
serverinfoOnlineUsers=Defnyddwyr ar-lein\:
serverinfoTotalUsers=Cyfanswm defnyddwyr\:
serverinfoRoles=Swyddogaethau\:
@@ -193,7 +193,7 @@ serverinfoGuildID=Urdd ID\:
serverinfoCreationDate=Dyddiad creu\:
serverinfoOwner=Perchennog\:
serverinfoVLv=Gwirio lefel\:
-userinfoTitle=Gwybodaeth am **{0} **\:
+userinfoTitle=Information about {0}\:
userinfoUsername=Enw defnyddiwr\:
userinfoId=ID\:
userinfoNick=Llysenw\:
@@ -212,7 +212,11 @@ commandsMaintenance=Cynnal
commandsBotOwner=Perchennog bot
commandsMoreHelp=Dweud {0} i gael rhagor o wybodaeth ar Gorchymyn penodol.
helpUnknownCommand=Gorchymyn anhysbys.
-helpDM=Gellir dod o hyd i ddogfennau yn\:\nhttps\://fredboat.com/docs\n\nYdych chi eisiau ychwanegu FredBoat at eich gweinydd? Os oes gennych ganiat\u00e2d Rheoli Gweinyddwr ar gyfer eich urdd, gallwch ei wahodd yma\:\n* Nid yw hyn yn chwarae cerddoriaeth *\n\n\nOs ydych chi am ychwanegu''r bot cerddoriaeth, byddwch am wahodd y bot hwn\:\n\n\nAngen help neu a oes gennych unrhyw syniadau ar gyfer y bot? Efallai eich bod chi eisiau hongian allan? Dewch draw i FredBoat hangout\!\n{0}\n\nNi allwch chi anfon y gorchmynion bot yma trwy DM.\nBot wedi''i greu gan Fre_d
+helpDocsLocation=Documentation can be found at\:
+helpBotInvite=Want to add FredBoat to your server? If you have Manage Server permissions for your guild, you can invite FredBoat\:
+helpHangoutInvite=Need help or have any ideas for FredBoat? Perhaps you just want to hang out? Join the FredBoat community\!
+helpNoDmCommands=You cannot send FredBoat commands through DMs.
+helpCredits=Created by Fre_d and open source contributors
helpSent=Mae dogfennaeth wedi'i anfon at eich negeseuon uniongyrchol\!
helpProperUsage=Defnydd priodol\:
helpCommandOwnerRestricted=Gorchymyn hwn wedi'i gyfyngu i berchennog y bot.
diff --git a/FredBoat/src/main/resources/lang/da_DK.properties b/FredBoat/src/main/resources/lang/da_DK.properties
index 616da3de4..fdc5db773 100644
--- a/FredBoat/src/main/resources/lang/da_DK.properties
+++ b/FredBoat/src/main/resources/lang/da_DK.properties
@@ -45,7 +45,7 @@ exportPlaylistFail=Fejlede at uploade playlist til hastebin.com
listShowShuffled=Viser blandet playlist.\n\n
listShowRepeatSingle=Gentager aktuelle sang.
listShowRepeatAll=Gentager nuv\u00e6rende k\u00f8.
-listShowHistory=Showing tracks in history.
+listShowHistory=Viser spor i historien.
listAddedBy=**{0} ** tilf\u00f8jet af **{1} ** ''[{2}]''
listStreamsOnlySingle=Der er **{0}** live {1} i k\u00f8en.
listStreamsOnlyMultiple=Der er **{0}** live {1} i k\u00f8en.
@@ -57,7 +57,7 @@ listAsWellAsLiveStreams=, s\u00e5 vel som **{0}** live {1}
trackSingular=track
trackPlural=tracks
npNotPlaying=Spiller i \u00f8jeblikket ikke noget.
-npNotInHistory=Currently no tracks in history.
+npNotInHistory=I \u00f8jeblikket ingen spor i historien.
npDescription=Beskrivelse
npLoadedSoundcloud=[{0}/{1}]\nIndl\u00e6st fra Soundcloud
npLoadedBandcamp={0}\n\nIndl\u00e6st fra Bandcamp
@@ -79,7 +79,7 @@ restartSuccess=**{0}** er blevet genstartet.
queueEmpty=K\u00f8en er tom.
rewSuccess=Tilbagespoler **{0}** med {1}.
seekSuccess=Spoler **{0}** til {1}.
-seekDeniedLiveTrack=You can't seek a live track.
+seekDeniedLiveTrack=Du kan ikke s\u00f8ge et live spor.
loadPlaySplitListFail=Dette link f\u00f8rer til en afspilningsliste, ikke et spor. Pr\u00f8v `;;play` i stedet.
loadListSuccess=Fandt og tilf\u00f8jede ''{0}'' sange fra playlisten **{1} **.
loadNoMatches=Ingen lyd kunne findes for ''{0}''.
@@ -125,15 +125,15 @@ luaError=\ Opstod en fejl i Lua \:anger\: ''''''{0} ''''''
luaErrorOutputTooBig=\ Outputbuffer er for stor \:anger\: Discord tillader kun 2000 tegn pr. besked, fik {0}
luaTimeout=\ Funktionen timeout \:anger\: tilladt computation tid er {0} sekunder.
helpSuccess=Dokumentation er blevet sendt til dine direkte meddelelser\!
-helpDmFailed=Could not send documentation to your DMs. Please check that you don't have them disabled\!
+helpDmFailed=Kunne ikke sende dokumentationen til DMs. Kontroller, at du ikke har deaktiveret dem\!
helpCommandsPromotion=Sig {0} for at f\u00e5 at vide hvad denne bot kan g\u00f8re\!
fuzzyNoResults=Ingen s\u00e5danne brugere
brainfuckCycleLimit=Programet overskrev det maksimale antal cyklusser af {0}
brainfuckDataPointerOutOfBounds=Data pointer out of bounds\: {0}
brainfuckInputOOB=Input out of bounds p\u00e5 position\: {0}
brainfuckNoOutput=\ Der var ingen output
-weatherLocationNotFound=Unable to find location, please check your input {0}.
-weatherError=Error retrieving weather for {0}
+weatherLocationNotFound=Kan ikke finde lokation, tjek venligst dit input {0}.
+weatherError=Fejl under hentning af vejret for {0}
avatarSuccess=\ fandt den\n{0}
configNoArgs=Konfiguration for **{0} **\:'''' ''
configSetTo=er nu sat til ''{0}''.
@@ -183,7 +183,7 @@ ratelimitedGeneralInfo=Du bliver bredb\u00e5nds begr\u00e6nset\! S\u00e6t venlig
ratelimitedSkipCommand=Du kan springe over flere sange ved hj\u00e6lp af kommandoen\: {0}
ratelimitedGuildSlowLoadingPlaylist=Denne server har ikke tilladelse til at tilf\u00f8je flere spillelister p\u00e5 dette tidspunkt. Venligst, ikke spam lange spillelister.
unblacklisted=Fjernede {0} fra blacklist.
-serverinfoTitle=Info om **{0} **\:
+serverinfoTitle=Info about {0}\:
serverinfoOnlineUsers=Online brugere\:
serverinfoTotalUsers=Antal brugere\:
serverinfoRoles=Roller\:
@@ -193,7 +193,7 @@ serverinfoGuildID=Guild ID\:
serverinfoCreationDate=Oprettelsesdato\:
serverinfoOwner=Ejer\:
serverinfoVLv=Verifikation niveau\:
-userinfoTitle=Oplysninger om **{0} **\:
+userinfoTitle=Information about {0}\:
userinfoUsername=Brugernavn\:
userinfoId=ID\:
userinfoNick=Kaldenavn\:
@@ -201,9 +201,9 @@ userinfoKnownServer=Kendte servere\:
userinfoJoinDate=Join dato\:
userinfoCreationTime=Oprettelsesdato\:
userinfoBlacklisted=sortlisted"\:
-skipDeniedTooManyTracks=You can't skip someone else's tracks if you are not a DJ.\nConsider using the Voteskip command.
+skipDeniedTooManyTracks=Du kan ikke springe en andens spor, hvis du ikke er en DJ. Overvej at bruge kommandoen Voteskip.
eventUsersLeftVC=Alle brugere har forladt tale kanalen. Musikken er midlertidigt afbrudt.
-eventAutoResumed=User presence detected, automatically resuming the player.
+eventAutoResumed=Bruger tilstedev\u00e6relse opdaget, automatisk genoptagelse.
commandsFun=Sjov
commandsMemes=Memes
commandsUtility=Nytte
@@ -212,7 +212,11 @@ commandsMaintenance=Vedligeholdelse
commandsBotOwner=Bot ejeren
commandsMoreHelp=Sig {0} for at f\u00e5 flere oplysninger om en bestemt kommando.
helpUnknownCommand=Ukendt kommando.
-helpDM=Documentation can be found at\:\nhttps\://fredboat.com/docs\n\nWant to add FredBoat to your server? If you have Manage Server permissions for your guild, you can invite it here\:\n*This one doesn''t play music*\n\n\nIf you want to add the music bot, you will want to invite this bot\:\n\n\nNeed help or have any ideas for the bot? Perhaps you just want to hang out? Come on over to FredBoat hangout\!\n{0}\n\nYou cannot send this bot commands through DM.\nBot created by Fre_d
+helpDocsLocation=Documentation can be found at\:
+helpBotInvite=Want to add FredBoat to your server? If you have Manage Server permissions for your guild, you can invite FredBoat\:
+helpHangoutInvite=Need help or have any ideas for FredBoat? Perhaps you just want to hang out? Join the FredBoat community\!
+helpNoDmCommands=You cannot send FredBoat commands through DMs.
+helpCredits=Created by Fre_d and open source contributors
helpSent=Dokumentation er blevet sendt til dine DMs\!
helpProperUsage=Korrekt anvendelse\:
helpCommandOwnerRestricted=Denne kommando er begr\u00e6nset til ejeren af botten.
@@ -225,28 +229,28 @@ helpMusicCommandsHeader=FredBoat musik kommandoer
helpJoinCommand=F\u00e5 botten til at joine din tale kanal.
helpLeaveCommand=F\u00e5 botten til at leave din tale kanal.
helpPauseCommand=Pause musikken.
-helpPlayCommand=Play music from the given URL or search for a track. For a full list of sources please visit {0}
+helpPlayCommand=Afspil musik fra den givne URL eller S\u00f8g efter et spor. For en komplet liste over kilder kan du bes\u00f8ge {0}
helpPlaySplitCommand=Opdele en YouTube-video i en playliste i sin beskrivelse.
helpRepeatCommand=Skift mellem gentagelsesfunktioner.
helpReshuffleCommand=Shuffle nuv\u00e6rende k\u00f8en.
helpSelectCommand=V\u00e6lg en af de tilbudte sange efter en s\u00f8gning for at spille.
helpShuffleCommand=Skift shuffle tilstand for den aktuelle k\u00f8.
-helpSkipCommand=Skip the current song, the n'th song in the queue, all songs from n to m, or all songs from mentioned users. Please use in moderation.
+helpSkipCommand=Springe den aktuelle sang, n'th sang i k\u00f8en, alle sange fra n til m eller alle sange fra n\u00e6vnte brugere. Brug i moderation.
helpStopCommand=Stop spilleren og fjern afspilningslisten. Forbeholdt redakt\u00f8rer med Administrer meddelelser om tilladelse.
helpUnpauseCommand=Genoptag spilleren.
helpVolumeCommand=\u00c6ndr lydstyrken. V\u00e6rdierne er 0-150 og 100 er standard. Kommandoen volumen frar\u00e5des p\u00e5 det offentlige bot.
helpExportCommand=Eksportere den aktuelle k\u00f8 til en hastebin link, kan bruges senere som en afspilningsliste.
helpGensokyoRadioCommand=Vis den aktuelle sang spillet p\u00e5 gensokyoradio.net
helpListCommand=F\u00e5 vist en liste over de aktuelle sange i afspilningslisten.
-helpHistoryCommand=Display a list of the songs in playlist history.
+helpHistoryCommand=Vis en liste over sangene i afspilningslisten historie.
helpNowplayingCommand=F\u00e5 vist den sang, der aktuelt afspilles.
helpForwardCommand=Fremad banen af en given m\u00e6ngde tid. Eksempel\:
helpRestartCommand=Genstart den aktuelle sang.
helpRewindCommand=Spol frem i sangen med en given m\u00e6ngde tid. Eksempel\:
-helpSeekCommand=Set the position of the track to the given time. Example\:
+helpSeekCommand=Angiv placeringen af sporet til den givne tid. Eksempel\:
helpAvatarCommand=Vis en brugers avatar.
helpBrainfuckCommand=Udf\u00f8rer Brainfuck kode. Eksempel\:
-helpWeatherCommand=Display current weather by location.
+helpWeatherCommand=F\u00e5 vist aktuelt vejr ved placering.
helpClearCommand=Slet bottens seneste 50 beskeder i denne kanal.
helpCommandsCommand=Vis tilg\u00e6ngelige kommandoer.
helpHelpCommand=Modtag hj\u00e6lp til denne bot eller hj\u00e6lp til en kommando.
@@ -256,46 +260,46 @@ helpMusicHelpCommand=Vis kommandoer til musik og deres anvendelse.
helpSayCommand=F\u00e5 botten til at gentage noget.
helpServerInfoCommand=F\u00e5 vist nogle stats om denne guild.
helpUserInfoCommand=Vis oplysninger om dig selv eller en bruger, der er kendt til botten.
-helpPerms=Allows whitelisting members and roles for the {0} rank.
-helpPrefixCommand=Set the prefix for this guild.
-helpVoteSkip=Vote to skip the current song. Needs 50% of all users in the voice chat to vote.
-helpMathOperationAdd=Print the sum of num1 and num2.
-helpMathOperationSub=Print the difference of subtracting num2 from num1.
-helpMathOperationMult=Print the product of num1*num2.
-helpMathOperationDiv=Print the quotient of dividing num1 by num2.
-helpMathOperationMod=Print the remainder of dividing num1 by num2.
-helpMathOperationPerc=Print the percentage represented by num1 in num2.
-helpMathOperationSqrt=Print the square root of num.
-helpMathOperationPow=Print the result of num1^num2.
-destroyDenied=You must have the manage messages permission to reset the player.
-destroyHelp=Reset the player and clear the playlist. Reserved for moderators with Manage Messages permission.
-destroySucc=Reset the player and cleared the queue.
-listPageNum=Page **{0}** of **{1}**.
-permsListTitle=Users and roles with the {0} permissions
-permsAdded=Added `{0}` to `{1}`.
-permsRemoved=Removed `{0}` from `{1}`.
-permsFailSelfDemotion=You cannot remove this as it would render you without admin permissions\!
-permsAlreadyAdded={0} already added to {1}
-permsNotAdded={0} is not in {1}
-fuzzyMultiple=Multiple items were found. Did you mean any of these?
-fuzzyNothingFound=Nothing found for `{0}`.
-cmdPermsTooLow=You don''t have permission to run this command\! This command requires `{0}` but you only have `{1}`.
-playersLimited=FredBoat is currently at maximum capacity\! The bot is currently fixed to only play up to `{0}` streams, otherwise we would risk disconnecting from Discord under the network load.\nIf you want to help us increase the limit or you want to use our non-overcrowded bot, please support our work on Patreon\:\n{1}\n\nSorry for the inconvenience\! You might want to try again later. This message usually only appears at peak time.
-tryLater=Please try again later.
-skipUserSingle=Skipped {0} added by {1}.
-skipUserMultiple=Skipped {0} tracks added by {1}.
-skipUsersMultiple=Skipped {0} tracks added by {1} users.
-skipUserNoTracks=None of the mentioned users have any tracks queued.
+helpPerms=Tillader whitelisting medlemmer og roller for {0} rang.
+helpPrefixCommand=Angiv pr\u00e6fiks for denne guild.
+helpVoteSkip=Stem for at springe den aktuelle sang over. Har brug for 50% af alle brugere i tale-chat til at stemme.
+helpMathOperationAdd=Udskriv summen af num1 og num2.
+helpMathOperationSub=Udskriv forskellen p\u00e5 at fratr\u00e6kke num2 fra num1.
+helpMathOperationMult=Udskriv produktet af num1 * num2.
+helpMathOperationDiv=Udskriv kvotienten af at dividere num1 med num2.
+helpMathOperationMod=Udskriv resten fra at dividere num1 med num2.
+helpMathOperationPerc=Udskriv den procentdel, der er repr\u00e6senteret ved num1 i num2.
+helpMathOperationSqrt=Udskriv kvadratroden af num.
+helpMathOperationPow=Udskriv resultatet af num1 ^ num2.
+destroyDenied=Du skal have tilladelsen administrer beskeder for at nulstille afspilleren.
+destroyHelp=Nulstil afspilleren og fjern p\u00e5 afspilningslisten. Forbeholdt redakt\u00f8rer med Administrer meddelelsers tilladelse.
+destroySucc=Nulstillede afspilleren og ryddede k\u00f8en.
+listPageNum=Side **{0} ** af **{1} **.
+permsListTitle=Brugere og roller med {0} tilladelser
+permsAdded=Tilf\u00f8jet ''{0}'' til ''{1}''.
+permsRemoved=Fjernede ''{0}'' fra ''{1}''.
+permsFailSelfDemotion=Du kan ikke fjerne dette, da det ville g\u00f8re dig uden admin-tilladelser\!
+permsAlreadyAdded={0} allerede f\u00f8jet til {1}
+permsNotAdded={0} er ikke i {1}
+fuzzyMultiple=Der blev fundet flere elementer. Mente du nogen af disse?
+fuzzyNothingFound=Intet fundet for ''{0}''.
+cmdPermsTooLow=Du har ikke tilladelse til at k\u00f8re denne kommando\! Denne kommando kr\u00e6ver ''{0}'' men du kun har ''{1}''.
+playersLimited=FredBoat er i \u00f8jeblikket p\u00e5 maksimal kapacitet\! Botten er i \u00f8jeblikket fastsat til at kun spille til \u00ab{0}\u00bb streams, ellers ville vi risikerer frakobling fra Discord under netv\u00e6rksbelastning. Hvis du \u00f8nsker at hj\u00e6lpe os med at \u00f8ge gr\u00e6nsen eller du \u00f8nsker at bruge vores ikke-overfyldte bot, st\u00f8t vores arbejde p\u00e5 Patreon\:\n{1} \nBeklager ulejligheden\! Du kan pr\u00f8ve igen senere. Denne besked vises normalt kun i spidsbelastningen.
+tryLater=Pr\u00f8v venligst igen senere.
+skipUserSingle=Oversprunget {0} tilf\u00f8jet af {1}.
+skipUserMultiple=Oversprunget {0} spor, tilf\u00f8jet af {1}.
+skipUsersMultiple=Oversprunget {0} spor, tilf\u00f8jet af {1} brugere.
+skipUserNoTracks=Ingen af de n\u00e6vnte brugere har nogen spor i k\u00f8.
voteSkipAdded=Dit valg er tilf\u00f8jet\!
-voteSkipAlreadyVoted=You already voted to skip this track\!
-voteSkipSkipping={0} have voted to skip. Skipping track {1}.
-voteSkipNotEnough={0} have voted to skip. At least {1} needed.
-voteSkipEmbedNoVotes=No votes to skip this track yet.
-voteSkipEmbedVoters={0} out of {1} have voted to skip the current track
-mathOperationResult=The result is
-mathOperationDivisionByZeroError=I cannot divide by zero.
-mathOperationInfinity=The number is too big to be displayed\!
-prefix=Prefix
-prefixGuild=The prefix for this guild is {0}
-prefixShowAgain=You can show the prefix anytime again by mentioning me.
+voteSkipAlreadyVoted=Du har allerede stemt for at springe dette spor over\!
+voteSkipSkipping={0} har stemt for at springe. Spring spor {1}.
+voteSkipNotEnough={0} har stemt for at springe. Mindst {1} behov.
+voteSkipEmbedNoVotes=Ingen stemmer for at springe dette spor over endnu.
+voteSkipEmbedVoters={0} ud af {1} har stemt at overspringe det aktuelle spor
+mathOperationResult=Resultatet er
+mathOperationDivisionByZeroError=Jeg kan ikke dividere med nul.
+mathOperationInfinity=Antallet er for stort til at blive vist\!
+prefix=Pr\u00e6fiks
+prefixGuild=Pr\u00e6fikset for denne guild er {0}
+prefixShowAgain=Du kan vise pr\u00e6fikset igen til en hver tid ved at n\u00e6vne mig.
diff --git a/FredBoat/src/main/resources/lang/de_DE.properties b/FredBoat/src/main/resources/lang/de_DE.properties
index f57800d96..8995a7e05 100644
--- a/FredBoat/src/main/resources/lang/de_DE.properties
+++ b/FredBoat/src/main/resources/lang/de_DE.properties
@@ -125,7 +125,7 @@ luaError=\ Ein Lua-Fehler ist aufgetreten \:anger\:\n```{0}```
luaErrorOutputTooBig=\ Ausgabepuffer ist zu gro\u00df \:anger\: Discord erlaubt nur 2000 Zeichen pro Nachricht, statt **{0}**
luaTimeout=\ Zeit\u00fcberschreitung der Funktion. \:anger\: erlaubte Berechnungszeit betr\u00e4gt {0} Sekunden.
helpSuccess=Dokumentation wurde zu Deinen Direktnachrichten gesendet\!
-helpDmFailed=Konnte Dokumentation nicht senden. Bitte schaue ob du DM's aktiviert hast\!
+helpDmFailed=Konnte Dokumentation nicht senden. Bitte \u00fcberpr\u00fcfe ob du DMs aktiviert hast\!
helpCommandsPromotion=Sag {0}, um zu erfahren, was dieser Bot machen kann\!
fuzzyNoResults=Besagter Nutzer existiert nicht
brainfuckCycleLimit=Programm \u00fcberschritt die maximale Zyklenzahl von {0}
@@ -183,7 +183,7 @@ ratelimitedGeneralInfo=Du benutzt diesen Command zu schnell\! Bitte warte einen
ratelimitedSkipCommand=Du kannst mehr als einen Titel mit diesem Befehl \u00fcberspringen\: {0}
ratelimitedGuildSlowLoadingPlaylist=Diesem Server ist es zur Zeit nicht mehr gestattet, weitere Playlists zu laden. Bitte spamme keine langen Playlists.
unblacklisted={0} wurde von der Blacklist entfernt.
-serverinfoTitle=Informationen \u00fcber **{0}**\:
+serverinfoTitle=Infos \u00fcber {0}\:
serverinfoOnlineUsers=Nutzer online\:
serverinfoTotalUsers=Nutzer gesamt\:
serverinfoRoles=Rollen\:
@@ -193,7 +193,7 @@ serverinfoGuildID=Gilden-ID\:
serverinfoCreationDate=Erstellungsdatum\:
serverinfoOwner=Eigent\u00fcmer\:
serverinfoVLv=Verifizierungslevel\:
-userinfoTitle=Informationen \u00fcber **{0}**\:
+userinfoTitle=Infos \u00fcber {0}\:
userinfoUsername=Benutzername\:
userinfoId=ID\:
userinfoNick=Spitzname\:
@@ -212,7 +212,11 @@ commandsMaintenance=Wartung
commandsBotOwner=Boteigent\u00fcmer
commandsMoreHelp=Sag {0}, um mehr Informationen zu einem bestimmten Befehl zu erhalten.
helpUnknownCommand=Unbekannter Befehl.
-helpDM=Dokumentationen findest du auf\: https\://fredboat.com/docs\n\nM\u00f6chtest du FredBoat zu deinem Server hinzuf\u00fcgen? Wenn du die Berechtigung zum Verwalten des Servers hast, kannst du FredBoat von hier aus hinzuf\u00fcgen\:\n*Dieser spielt keine Musik*\n\n\nWenn du jedoch den Musik Bot hinzuf\u00fcgen willst, solltest du diesen hier nehmen\:\n\n\nBrauchst du Hilfe oder hast Ideen f\u00fcr den Bot? Vielleicht m\u00f6chtest du auch nur mit uns abh\u00e4ngen? Dann h\u00fcpf doch r\u00fcber zu FredBoat Hangout\!\n{0}\n\nDu kannst diesem Bot keine Befehle im privaten Chat schicken.\nBot entwickelt von Fre_d
+helpDocsLocation=Die Dokumentation befindet sich hier\:
+helpBotInvite=Willst du FredBoat zu deinem Server hinzuf\u00fcgen? Wenn du die "Server verwalten"-Berechtigung f\u00fcr deine Gilde hast, kannst du FredBoat einladen\:
+helpHangoutInvite=Brauchst du Hilfe oder hast du irgendwelche Ideen f\u00fcr FredBoat? Vielleicht willst du nur abh\u00e4ngen? Tritt der FredBoat-Community bei\!
+helpNoDmCommands=Du kannst FredBoat keine Befehle per DM senden.
+helpCredits=Erstellt von Fre_d und Open-Source-Mitwirkenden
helpSent=Die Dokumentation wurde dir privat zugesendet\!
helpProperUsage=Ordnungsgem\u00e4\u00dfe Verwendung\:
helpCommandOwnerRestricted=Dieser Befehl beschr\u00e4nkt sich auf den Besitzer des Bots.
@@ -257,16 +261,16 @@ helpSayCommand=L\u00e4sst den Bot Deine Nachricht wiederholen.
helpServerInfoCommand=Zeigen Sie einige Statistiken \u00fcber diese Gilde an.
helpUserInfoCommand=Zeigen Sie Informationen \u00fcber sich selbst oder einen Benutzer an, der dem Bot bekannt ist.
helpPerms=Erm\u00f6glicht das whitelisten von Mitgliedern und Rollen f\u00fcr den {0} Rang.
-helpPrefixCommand=Set the prefix for this guild.
-helpVoteSkip=Voten um Song zu \u00fcberspringen. Es m\u00fcssen mindestens 50% von allen Usern gevotet haben um den Song zu \u00fcberspringen.
+helpPrefixCommand=Legt einen Pr\u00e4fix f\u00fcr diese Gilde fest.
+helpVoteSkip=Abstimmen um den aktuellen Track zu \u00fcberspringen. Es m\u00fcssen mindestens 50% aller Benutzern abgestimmt haben, um einen Track zu \u00fcberspringen.
helpMathOperationAdd=Ergibt die Summe von Num1 und Num2.
-helpMathOperationSub=Gebe die Differenz von num1-num2 aus.
+helpMathOperationSub=Gibt die Differenz von num1-num2 aus.
helpMathOperationMult=Gebe das Produkt von num1*num2 aus.
helpMathOperationDiv=Gebe den Quotienten von num1/num2 aus.
helpMathOperationMod=Gebe den Restwert von num1/num2 aus.
helpMathOperationPerc=Gebe den Prozentsatz num1 in num2 aus.
helpMathOperationSqrt=Gebe die Quadratwurzel von num aus.
-helpMathOperationPow=Print the result of num1^num2.
+helpMathOperationPow=Gebe das Ergebnis von num1^num2 aus.
destroyDenied=Du ben\u00f6tigst die Nachrichten-Verwalten Berechtigung um den Spieler zur\u00fcckzusetzen.
destroyHelp=Setzt den Player zur\u00fcck und leert die Playlist. Nur f\u00fcr Moderatoren mit Berechtigung zum Verwalten von Nachrichten.
destroySucc=Setzt den Player zur\u00fcck und leert die Wiedergabeliste.
@@ -294,8 +298,8 @@ voteSkipEmbedNoVotes=Aktuell gibt es keine stimmen um das Lied zu \u00fcbersprin
voteSkipEmbedVoters={0} von {1} haben f\u00fcr das \u00dcberspringen des aktuellen Liedes abgestimmt.
mathOperationResult=Das Ergebnis ist
mathOperationDivisionByZeroError=Ich kann keine Zahl durch Null dividieren.
-mathOperationInfinity=Dieese Zahl ist zu gro\u00df, um angezeigt zu werden\!
-prefix=Prefix
-prefixGuild=The prefix for this guild is {0}
-prefixShowAgain=You can show the prefix anytime again by mentioning me.
+mathOperationInfinity=Diese Zahl ist zu gro\u00df, um angezeigt zu werden\!
+prefix=Pr\u00e4fix
+prefixGuild=Das Pr\u00e4fix f\u00fcr diese Gilde ist {0}
+prefixShowAgain=Du kannst das Pr\u00e4fix jederzeit wieder anzeigen indem du mich erw\u00e4hnst.
diff --git a/FredBoat/src/main/resources/lang/el_GR.properties b/FredBoat/src/main/resources/lang/el_GR.properties
index 433b805d0..21be1d880 100644
--- a/FredBoat/src/main/resources/lang/el_GR.properties
+++ b/FredBoat/src/main/resources/lang/el_GR.properties
@@ -212,7 +212,11 @@ commandsMaintenance=\u03a3\u03c5\u03bd\u03c4\u03ae\u03c1\u03b7\u03c3\u03b7
commandsBotOwner=\u0399\u03b4\u03b9\u03bf\u03ba\u03c4\u03ae\u03c4\u03b7\u03c2 bot
commandsMoreHelp=\u03a0\u03b5\u03af\u03c4\u03b5 {0} \u03b3\u03b9\u03b1 \u03bd\u03b1 \u03c0\u03ac\u03c1\u03b5\u03c4\u03b5 \u03c0\u03b5\u03c1\u03b9\u03c3\u03c3\u03cc\u03c4\u03b5\u03c1\u03b5\u03c2 \u03c0\u03bb\u03b7\u03c1\u03bf\u03c6\u03bf\u03c1\u03af\u03b5\u03c2 \u03c3\u03c7\u03b5\u03c4\u03b9\u03ba\u03ac \u03bc\u03b5 \u03bc\u03b9\u03b1 \u03c3\u03c5\u03b3\u03ba\u03b5\u03ba\u03c1\u03b9\u03bc\u03ad\u03bd\u03b7 \u03b5\u03bd\u03c4\u03bf\u03bb\u03ae.
helpUnknownCommand=\u0386\u03b3\u03bd\u03c9\u03c3\u03c4\u03b7 \u0395\u03bd\u03c4\u03bf\u03bb\u03ae.
-helpDM=\u0397 \u03c4\u03b5\u03ba\u03bc\u03b7\u03c1\u03af\u03c9\u03c3\u03b7 \u03bc\u03c0\u03bf\u03c1\u03b5\u03af \u03bd\u03b1 \u03b2\u03c1\u03b5\u03b8\u03b5\u03af \u03c3\u03c4\u03b9\u03c2 GitHub \u03c3\u03b5\u03bb\u03af\u03b4\u03b5\u03c2 \u03c4\u03bf\u03c5 bot\: \nhttp\://docs.frederikam.com\n\n\u0398\u03ad\u03bb\u03b5\u03c4\u03b5 \u03bd\u03b1 \u03c0\u03c1\u03bf\u03c3\u03b8\u03ad\u03c3\u03b5\u03c4\u03b5 \u03c4\u03bf FredBoat \u03c3\u03c4\u03bf \u03c3\u03ad\u03c1\u03b2\u03b5\u03c1 \u03c3\u03b1\u03c2; \u0395\u03ac\u03bd \u03ad\u03c7\u03b5\u03c4\u03b5 \u03b4\u03b9\u03ba\u03b1\u03b9\u03ce\u03bc\u03b1\u03c4\u03b1 \u03b4\u03b9\u03b1\u03c7\u03b5\u03af\u03c1\u03b9\u03c3\u03b7\u03c2 \u03c3\u03b5\u03c1\u03b2\u03b5\u03c1 \u03b3\u03b9\u03b1 \u03c4\u03b7\u03bd \u03bf\u03bc\u03ac\u03b4\u03b1 \u03c3\u03b1\u03c2, \u03bc\u03c0\u03bf\u03c1\u03b5\u03af\u03c4\u03b5 \u03bd\u03b1 \u03c0\u03c1\u03bf\u03c3\u03ba\u03b1\u03bb\u03ad\u03c3\u03b5\u03c4\u03b5 \u03b1\u03c5\u03c4\u03cc \u03b5\u03b4\u03ce\:\n *\u03b1\u03c5\u03c4\u03cc \u03b4\u03b5\u03bd \u03c0\u03b1\u03af\u03b6\u03b5\u03b9 \u03bc\u03bf\u03c5\u03c3\u03b9\u03ba\u03ae *\nhttps\://discordapp.com/oauth2/authorize?&client_id\=168686772216135681&scope\=bot\n\n\u0391\u03bd \u03b8\u03ad\u03bb\u03b5\u03c4\u03b5 \u03bd\u03b1 \u03c0\u03c1\u03bf\u03c3\u03b8\u03ad\u03c3\u03b5\u03c4\u03b5 \u03c4\u03bf bot \u03b3\u03b9\u03b1 \u03bc\u03bf\u03c5\u03c3\u03b9\u03ba\u03ae\:\nhttps\://discordapp.com/oauth2/authorize?&client_id\=184405253028970496&scope\=bot \n\n\u03a7\u03c1\u03b5\u03b9\u03ac\u03b6\u03b5\u03c3\u03c4\u03b5 \u03b2\u03bf\u03ae\u03b8\u03b5\u03b9\u03b1 \u03ae \u03ad\u03c7\u03b5\u03c4\u03b5 \u03ba\u03ac\u03c0\u03bf\u03b9\u03b1 \u03b9\u03b4\u03ad\u03b1 \u03b3\u03b9\u03b1 \u03c4\u03bf bot; \u0388\u03bb\u03ac\u03c4\u03b5 \u03c3\u03c4\u03bf \u03c3\u03c4\u03ad\u03ba\u03b9 \u03c4\u03bf\u03c5 FredBoat\!{0} \n\n\u0394\u03b5\u03bd \u03bc\u03c0\u03bf\u03c1\u03b5\u03af\u03c4\u03b5 \u03bd\u03b1 \u03c3\u03c4\u03b5\u03af\u03bb\u03b5\u03c4\u03b5 \u03c3\u03b5 \u03b1\u03c5\u03c4\u03cc \u03c4\u03bf bot \u03b5\u03bd\u03c4\u03bf\u03bb\u03ad\u03c2 \u03bc\u03ad\u03c3\u03c9 DM. \n\u03a4\u03bf Bot \u03b4\u03b7\u03bc\u03b9\u03bf\u03c5\u03c1\u03b3\u03ae\u03b8\u03b7\u03ba\u03b5 \u03b1\u03c0\u03cc Fre_d
+helpDocsLocation=\u03a4\u03b5\u03ba\u03bc\u03b7\u03c1\u03af\u03c9\u03c3\u03b7 \u03bc\u03c0\u03bf\u03c1\u03b5\u03af \u03bd\u03b1 \u03b2\u03c1\u03b5\u03b8\u03b5\u03af \u03c3\u03b5\:
+helpBotInvite=\u0398\u03ad\u03bb\u03b5\u03c4\u03b5 \u03bd\u03b1 \u03c0\u03c1\u03bf\u03c3\u03b8\u03ad\u03c3\u03b5\u03c4\u03b5 FredBoat \u03c3\u03c4\u03bf \u03b4\u03b9\u03b1\u03ba\u03bf\u03bc\u03b9\u03c3\u03c4\u03ae \u03c3\u03b1\u03c2; \u0395\u03ac\u03bd \u03ad\u03c7\u03b5\u03c4\u03b5 \u03b4\u03b9\u03ba\u03b1\u03b9\u03ce\u03bc\u03b1\u03c4\u03b1 \u03b4\u03b9\u03b1\u03c7\u03b5\u03af\u03c1\u03b9\u03c3\u03b7\u03c2 \u03b4\u03b9\u03b1\u03ba\u03bf\u03bc\u03b9\u03c3\u03c4\u03ae \u03b3\u03b9\u03b1 \u03c4\u03b7\u03bd \u03c3\u03c5\u03bd\u03c4\u03b5\u03c7\u03bd\u03af\u03b1 \u03c3\u03b1\u03c2, \u03bc\u03c0\u03bf\u03c1\u03b5\u03af\u03c4\u03b5 \u03bd\u03b1 \u03c0\u03c1\u03bf\u03c3\u03ba\u03b1\u03bb\u03ad\u03c3\u03b5\u03c4\u03b5 FredBoat\:
+helpHangoutInvite=\u03a7\u03c1\u03b5\u03b9\u03ac\u03b6\u03b5\u03c3\u03c4\u03b5 \u03b2\u03bf\u03ae\u03b8\u03b5\u03b9\u03b1 \u03ae \u03ad\u03c7\u03b5\u03c4\u03b5 \u03bf\u03c0\u03bf\u03b9\u03b5\u03c3\u03b4\u03ae\u03c0\u03bf\u03c4\u03b5 \u03b9\u03b4\u03ad\u03b5\u03c2 \u03b3\u03b9\u03b1 FredBoat; \u038a\u03c3\u03c9\u03c2 \u03b8\u03ad\u03bb\u03b5\u03c4\u03b5 \u03b1\u03ba\u03c1\u03b9\u03b2\u03ce\u03c2 \u03bd\u03b1 \u03ba\u03c1\u03b5\u03bc\u03ac\u03c3\u03b5\u03b9 \u03ad\u03be\u03c9; \u0393\u03af\u03bd\u03b5\u03c4\u03b5 \u03bc\u03ad\u03bb\u03bf\u03c2 \u03c4\u03b7\u03c2 \u039a\u03bf\u03b9\u03bd\u03cc\u03c4\u03b7\u03c4\u03b1\u03c2 FredBoat\!
+helpNoDmCommands=\u0394\u03b5\u03bd \u03bc\u03c0\u03bf\u03c1\u03b5\u03af\u03c4\u03b5 \u03bd\u03b1 \u03c3\u03c4\u03b5\u03af\u03bb\u03b5\u03c4\u03b5 FredBoat \u03b5\u03bd\u03c4\u03bf\u03bb\u03ad\u03c2 \u03bc\u03ad\u03c3\u03c9 DMs.
+helpCredits=\u0394\u03b7\u03bc\u03b9\u03bf\u03c5\u03c1\u03b3\u03ae\u03b8\u03b7\u03ba\u03b5 \u03b1\u03c0\u03cc Fre_d \u03ba\u03b1\u03b9 \u03b1\u03bd\u03bf\u03b9\u03ba\u03c4\u03bf\u03cd\u03c2 \u03c0\u03b7\u03b3\u03b1\u03af\u03bf\u03c5\u03c2
helpSent=\u0397 \u03c4\u03b5\u03ba\u03bc\u03b7\u03c1\u03af\u03c9\u03c3\u03b7 \u03ad\u03c7\u03b5\u03b9 \u03b1\u03c0\u03bf\u03c3\u03c4\u03b1\u03bb\u03b5\u03af \u03c3\u03c4\u03bf DM \u03c3\u03b1\u03c2\!
helpProperUsage=\u03a3\u03c9\u03c3\u03c4\u03ae \u03c7\u03c1\u03ae\u03c3\u03b7\:
helpCommandOwnerRestricted=\u0391\u03c5\u03c4\u03ae \u03b7 \u03b5\u03bd\u03c4\u03bf\u03bb\u03ae \u03b5\u03af\u03bd\u03b1\u03b9 \u03c0\u03b5\u03c1\u03b9\u03bf\u03c1\u03b9\u03c3\u03bc\u03ad\u03bd\u03b7 \u03c3\u03c4\u03bf\u03bd \u03b9\u03b4\u03b9\u03bf\u03ba\u03c4\u03ae\u03c4\u03b7 \u03c4\u03bf\u03c5 bot.
@@ -257,7 +261,7 @@ helpSayCommand=\u039a\u03ac\u03bd\u03b5\u03b9 \u03c4\u03bf bot \u03bd\u03b1 \u03
helpServerInfoCommand=\u0395\u03bc\u03c6\u03b1\u03bd\u03af\u03b6\u03b5\u03b9 \u03ba\u03ac\u03c0\u03bf\u03b9\u03b1 \u03c3\u03c4\u03b1\u03c4\u03b9\u03c3\u03c4\u03b9\u03ba\u03ac \u03c3\u03c7\u03b5\u03c4\u03b9\u03ba\u03ac \u03bc\u03b5 \u03b1\u03c5\u03c4\u03cc \u03c4\u03bf guild.
helpUserInfoCommand=\u0395\u03bc\u03c6\u03b1\u03bd\u03af\u03b6\u03b5\u03b9 \u03c0\u03bb\u03b7\u03c1\u03bf\u03c6\u03bf\u03c1\u03af\u03b5\u03c2 \u03c3\u03c7\u03b5\u03c4\u03b9\u03ba\u03ac \u03bc\u03b5 \u03c4\u03bf\u03bd \u03b5\u03b1\u03c5\u03c4\u03cc \u03c3\u03b1\u03c2 \u03ae \u03ad\u03bd\u03b1 \u03c7\u03c1\u03ae\u03c3\u03c4\u03b7 \u03c0\u03bf\u03c5 \u03b5\u03af\u03bd\u03b1\u03b9 \u03b3\u03bd\u03c9\u03c3\u03c4\u03cc\u03c2 \u03c3\u03c4\u03bf bot.
helpPerms=\u0395\u03c0\u03b9\u03c4\u03c1\u03ad\u03c0\u03b5\u03b9 \u03c4\u03bf whitelisting \u03bc\u03b5\u03bb\u03ce\u03bd \u03ba\u03b1\u03b9 \u03c1\u03cc\u03bb\u03c9\u03bd \u03b3\u03b9\u03b1 \u03c4\u03bf \u03b2\u03b1\u03b8\u03bc\u03cc \u03c4\u03bf\u03c5 {0}.
-helpPrefixCommand=Set the prefix for this guild.
+helpPrefixCommand=\u039f\u03c1\u03af\u03c3\u03c4\u03b5 \u03c4\u03b7 prefix \u03b3\u03b9\u03b1 \u03b1\u03c5\u03c4\u03cc \u03c4\u03bf guild.
helpVoteSkip=\u03a8\u03b7\u03c6\u03af\u03b6\u03b5\u03b9 \u03b3\u03b9\u03b1 \u03bd\u03b1 \u03c0\u03b1\u03c1\u03b1\u03ba\u03ac\u03bc\u03c8\u03b5\u03b9 \u03c4\u03bf \u03c4\u03c1\u03ad\u03c7\u03bf\u03bd \u03c4\u03c1\u03b1\u03b3\u03bf\u03cd\u03b4\u03b9. \u03a7\u03c1\u03b5\u03b9\u03ac\u03b6\u03b5\u03c4\u03b1\u03b9 \u03c4\u03bf 50% \u03cc\u03bb\u03c9\u03bd \u03c4\u03c9\u03bd \u03c7\u03c1\u03b7\u03c3\u03c4\u03ce\u03bd \u03bc\u03b5 \u03c4\u03b7 \u03b4\u03c5\u03bd\u03b1\u03c4\u03cc\u03c4\u03b7\u03c4\u03b1 \u03c6\u03c9\u03bd\u03b7\u03c4\u03b9\u03ba\u03ae\u03c2 \u03c3\u03c5\u03bd\u03bf\u03bc\u03b9\u03bb\u03af\u03b1\u03c2 \u03bd\u03b1 \u03c8\u03b7\u03c6\u03af\u03c3\u03bf\u03c5\u03bd.
helpMathOperationAdd=\u0395\u03ba\u03c4\u03c5\u03c0\u03ce\u03bd\u03b5\u03b9 \u03c4\u03bf \u03ac\u03b8\u03c1\u03bf\u03b9\u03c3\u03bc\u03b1 \u03c4\u03c9\u03bd num1 \u03ba\u03b1\u03b9 num2.
helpMathOperationSub=\u0395\u03ba\u03c4\u03c5\u03c0\u03ce\u03bd\u03b5\u03b9 \u03c4\u03b7 \u03b4\u03b9\u03b1\u03c6\u03bf\u03c1\u03ac \u03c4\u03b7\u03c2 \u03b1\u03c6\u03b1\u03af\u03c1\u03b5\u03c3\u03b7\u03c2 \u03c4\u03bf\u03c5 num2 \u03b1\u03c0\u03cc \u03c4\u03bf num1.
@@ -295,7 +299,7 @@ voteSkipEmbedVoters={0} \u03b1\u03c0\u03cc {1} \u03c8\u03ae\u03c6\u03b9\u03c3\u0
mathOperationResult=\u03a4\u03bf \u03b1\u03c0\u03bf\u03c4\u03ad\u03bb\u03b5\u03c3\u03bc\u03b1 \u03b5\u03af\u03bd\u03b1\u03b9
mathOperationDivisionByZeroError=\u0394\u03b5\u03bd \u03bc\u03c0\u03bf\u03c1\u03ce \u03bd\u03b1 \u03c7\u03c9\u03c1\u03af\u03c3\u03c9 \u03bc\u03b5 \u03c4\u03bf \u03bc\u03b7\u03b4\u03ad\u03bd.
mathOperationInfinity=\u039f \u03b1\u03c1\u03b9\u03b8\u03bc\u03cc\u03c2 \u03b5\u03af\u03bd\u03b1\u03b9 \u03c0\u03ac\u03c1\u03b1 \u03c0\u03bf\u03bb\u03cd \u03bc\u03b5\u03b3\u03ac\u03bb\u03bf\u03c2 \u03b3\u03b9\u03b1 \u03bd\u03b1 \u03b5\u03bc\u03c6\u03b1\u03bd\u03b9\u03c3\u03c4\u03b5\u03af\!
-prefix=Prefix
-prefixGuild=The prefix for this guild is {0}
-prefixShowAgain=You can show the prefix anytime again by mentioning me.
+prefix=\u03a0\u03c1\u03cc\u03b8\u03b5\u03bc\u03b1
+prefixGuild=H prefix \u03b3\u03b9\u03b1 \u03b1\u03c5\u03c4\u03cc \u03c4\u03bf guild \u03b5\u03af\u03bd\u03b1\u03b9 {0}
+prefixShowAgain=\u039c\u03c0\u03bf\u03c1\u03b5\u03af\u03c4\u03b5 \u03bd\u03b1 \u03b5\u03bc\u03c6\u03b1\u03bd\u03af\u03c3\u03b5\u03c4\u03b5 \u03c4\u03bf prefix \u03b1\u03bd\u03ac \u03c0\u03ac\u03c3\u03b1 \u03c3\u03c4\u03b9\u03b3\u03bc\u03ae \u03b1\u03bd\u03b1\u03c6\u03ad\u03c1\u03bf\u03bd\u03c4\u03ac\u03c2 \u03bc\u03b5.
diff --git a/FredBoat/src/main/resources/lang/en_PT.properties b/FredBoat/src/main/resources/lang/en_PT.properties
index 2b0b82ee7..f92062410 100644
--- a/FredBoat/src/main/resources/lang/en_PT.properties
+++ b/FredBoat/src/main/resources/lang/en_PT.properties
@@ -183,7 +183,7 @@ ratelimitedGeneralInfo=You are being rate limited\! Please slow down.
ratelimitedSkipCommand=You can skip more than one song by using this command\: {0}
ratelimitedGuildSlowLoadingPlaylist=This server is not allowed to add more playlists at this moment. Please don't spam long playlists.
unblacklisted=Removed {0} from the blacklist.
-serverinfoTitle=Tales ''bout **{0}**\:
+serverinfoTitle=Tales ''bout {0}\:
serverinfoOnlineUsers=Lively hands\:
serverinfoTotalUsers=All ye mates\:
serverinfoRoles=Ranks\:
@@ -193,7 +193,7 @@ serverinfoGuildID=Guild ID\:
serverinfoCreationDate='Tis made on\:
serverinfoOwner=Captain\:
serverinfoVLv=Verification Level\:
-userinfoTitle=Tales ''bout **{0}**\:
+userinfoTitle=Information about {0}\:
userinfoUsername=Ye name\:
userinfoId=Flag\:
userinfoNick=How we call ye\:
@@ -211,8 +211,12 @@ commandsModeration=Captains
commandsMaintenance=Maintenance
commandsBotOwner=Bot owner
commandsMoreHelp=Say {0} to get more information on a specific command.
-helpUnknownCommand=Unknown command.
-helpDM=Documentation can be found at\:\nhttps\://fredboat.com/docs\n\nWant to add FredBoat to your server? If you have Manage Server permissions for your guild, you can invite it here\:\n*This one doesn''t play music*\n\n\nIf you want to add the music bot, you will want to invite this bot\:\n\n\nNeed help or have any ideas for the bot? Perhaps you just want to hang out? Come on over to FredBoat hangout\!\n{0}\n\nYou cannot send this bot commands through DM.\nBot created by Fre_d
+helpUnknownCommand=The crew dunno yer order.
+helpDocsLocation=Documentation can be found at\:
+helpBotInvite=Want to add FredBoat to your server? If you have Manage Server permissions for your guild, you can invite FredBoat\:
+helpHangoutInvite=Need help or have any ideas for FredBoat? Perhaps you just want to hang out? Join the FredBoat community\!
+helpNoDmCommands=You cannot send FredBoat commands through DMs.
+helpCredits=Created by Fre_d and open source contributors
helpSent=Documentation has been sent to your DMs\!
helpProperUsage=Proper usage\:
helpCommandOwnerRestricted=This command is restricted to the owner of the bot.
diff --git a/FredBoat/src/main/resources/lang/en_TS.properties b/FredBoat/src/main/resources/lang/en_TS.properties
index 995b7dc23..7006118d0 100644
--- a/FredBoat/src/main/resources/lang/en_TS.properties
+++ b/FredBoat/src/main/resources/lang/en_TS.properties
@@ -19,7 +19,7 @@ selectInterval=Must be a number 1-{0} you dummy.
selectSelectionNotGiven=I haven't given you any choices yet, you can't just ask on your own\!
shuffleOn=I'll mix the song list for you... but only once\!
shuffleOff=But I just shuffled it\! Now you want me to sort it... Fine\! This is so labor intensive... I hate you\!
-reshufflePlaylist=Queue reshuffled.
+reshufflePlaylist=I put your stupid playlist back in order, it was tough FYI\!
reshufflePlayerNotShuffling=You big dummy\! If you want me to shuffle the queue you have to tun it on\! Type {0}shuffle.
skipEmpty=Why would you even want to empty a queue when it is already empty? Call me again when you've figured out how to actually add tracks.
skipOutOfBounds=Are you blind\! Track {0} doesn''t exist\! chose between 1-{1} idiot\!
@@ -87,9 +87,9 @@ loadSplitNotYouTube=This is not from YouTube\! You can't use `;;split` with that
loadSplitNotResolves=I can't resolve that video's tracklist. Use `;;play` silly.
loadFollowingTracksAdded=I've added some tracks\:
loadPlaylistTooMany=I added {0} tracks... But, there''s too many. No way am I typing that out.
-loadErrorCommon=Error occurred when loading info for `{0}`\:\n{1}
+loadErrorCommon=Something''s not right\! I couldn''t load the info for `{0}`\: \n{1}\nMust be your fault.. m-mostly.
loadErrorSusp=That''s.. weird. It''s strange and I don''t like it\! I couldn''t load the info for '' {0} ''.
-loadQueueTrackLimit=You can''t add tracks to a queue with more than {0} tracks\! This is to prevent abuse.
+loadQueueTrackLimit=Why should I add something when there''s already {0} tracks? Anyone (like you) trying to do that would be naughty.
loadAnnouncePlaylist=About to load playlist **{0}** with up to `{1}` tracks. This may take a while, please be patient.
playerUserNotInChannel=You're not in a voice channel, it's rude if you're asking for a song and not gonna listen to it idiot\!
playerJoinConnectDenied=I won't go into that voice channel because you want me to\!
@@ -183,7 +183,7 @@ ratelimitedGeneralInfo=Jeez, would you cool it? I'm going to have to rate limit
ratelimitedSkipCommand=You can skip more than one song by using this command\: {0}
ratelimitedGuildSlowLoadingPlaylist=This server is not allowed to add more playlists at this moment. Please don't spam long playlists.
unblacklisted=Removed {0} from the blacklist.
-serverinfoTitle=This should tell you more about {0}
+serverinfoTitle=Info about {0}\:
serverinfoOnlineUsers=Users Online right now\:
serverinfoTotalUsers=Everyone here\:
serverinfoRoles=Roles\:
@@ -193,7 +193,7 @@ serverinfoGuildID=Guild ID\:
serverinfoCreationDate=I was created on\:
serverinfoOwner=The Owner is\:
serverinfoVLv=Verification Level\:
-userinfoTitle=This should tell you more about {0}
+userinfoTitle=Information about {0}\:
userinfoUsername=Username\:
userinfoId=ID\:
userinfoNick=Nickname\:
@@ -212,7 +212,11 @@ commandsMaintenance=Maintenance
commandsBotOwner=Bot owner
commandsMoreHelp=Say {0} to get more information on a specific command.
helpUnknownCommand=I don't even know what you want from me. That command makes no sense.
-helpDM=Documentation can be found at\:\nhttps\://fredboat.com/docs\n\nWant to add FredBoat to your server? If you have Manage Server permissions for your guild, you can invite it here\:\n*This one doesn''t play music*\n\n\nIf you want to add the music bot, you will want to invite this bot\:\n\n\nNeed help or have any ideas for the bot? Perhaps you just want to hang out? Come on over to FredBoat hangout\!\n{0}\n\nYou cannot send this bot commands through DM.\nBot created by Fre_d
+helpDocsLocation=Documentation can be found at\:
+helpBotInvite=Want to add FredBoat to your server? If you have Manage Server permissions for your guild, you can invite FredBoat\:
+helpHangoutInvite=Need help or have any ideas for FredBoat? Perhaps you just want to hang out? Join the FredBoat community\!
+helpNoDmCommands=You cannot send FredBoat commands through DMs.
+helpCredits=Created by Fre_d and open source contributors
helpSent=Documentation has been sent to your DMs\!
helpProperUsage=This is how you do it b-baka\:
helpCommandOwnerRestricted=This command is restricted to the owner of the bot.
diff --git a/FredBoat/src/main/resources/lang/en_US.properties b/FredBoat/src/main/resources/lang/en_US.properties
index 79b315c68..f711baa10 100644
--- a/FredBoat/src/main/resources/lang/en_US.properties
+++ b/FredBoat/src/main/resources/lang/en_US.properties
@@ -215,7 +215,11 @@ commandsMaintenance=Maintenance
commandsBotOwner=Bot owner
commandsMoreHelp=Say {0} to get more information on a specific command.
helpUnknownCommand=Unknown command.
-helpDM=Documentation can be found at\:\nhttps\://fredboat.com/docs\n\nWant to add FredBoat to your server? If you have Manage Server permissions for your guild, you can invite it here\:\n*This one doesn''t play music*\n\n\nIf you want to add the music bot, you will want to invite this bot\:\n\n\nNeed help or have any ideas for the bot? Perhaps you just want to hang out? Come on over to FredBoat hangout!\n{0}\n\nYou cannot send this bot commands through DM.\nBot created by Fre_d
+helpDocsLocation=Documentation can be found at:
+helpBotInvite=Want to add FredBoat to your server? If you have Manage Server permissions for your guild, you can invite FredBoat:
+helpHangoutInvite=Need help or have any ideas for FredBoat? Perhaps you just want to hang out? Join the FredBoat community!
+helpNoDmCommands=You cannot send FredBoat commands through DMs.
+helpCredits=Created by Fre_d and open source contributors
helpSent=Documentation has been sent to your DMs!
helpProperUsage=Proper usage:
helpCommandOwnerRestricted=This command is restricted to the owner of the bot.
diff --git a/FredBoat/src/main/resources/lang/es_ES.properties b/FredBoat/src/main/resources/lang/es_ES.properties
index e59015399..5a9da4dd2 100644
--- a/FredBoat/src/main/resources/lang/es_ES.properties
+++ b/FredBoat/src/main/resources/lang/es_ES.properties
@@ -183,7 +183,7 @@ ratelimitedGeneralInfo=\u00a1Estas llegando al limite\! Por favor, c\u00e1lmate.
ratelimitedSkipCommand=Puedes omitir m\u00e1s de una canci\u00f3n usando este comando\: {0}
ratelimitedGuildSlowLoadingPlaylist=Este servidor no est\u00e1 permitido a\u00f1adir m\u00e1s listas en este momento. Por favor no a\u00f1adas largas listas de reproducci\u00f3n.
unblacklisted={0} fue eliminado de la lista negra.
-serverinfoTitle=Informaci\u00f3n sobre **{0}**\:
+serverinfoTitle=informaci\u00f3n sobre {0}\:
serverinfoOnlineUsers=Usuarios en l\u00ednea\:
serverinfoTotalUsers=Usuarios totales\:
serverinfoRoles=Roles\:
@@ -193,7 +193,7 @@ serverinfoGuildID=ID del servidor\:
serverinfoCreationDate=Fecha de creaci\u00f3n\:
serverinfoOwner=Due\u00f1o\:
serverinfoVLv=Nivel de verificaci\u00f3n\:
-userinfoTitle=Informaci\u00f3n sobre **{0}**\:
+userinfoTitle=Informaci\u00f3n sobre {0}\:
userinfoUsername=Nombre de usuario\:
userinfoId=ID\:
userinfoNick=Apodo\:
@@ -212,7 +212,11 @@ commandsMaintenance=Mantenimiento
commandsBotOwner=Due\u00f1o del bot
commandsMoreHelp=Di {0} para obtener m\u00e1s informaci\u00f3n sobre un comando espec\u00edfico.
helpUnknownCommand=Comando desconocido.
-helpDM=La documentaci\u00f3n se puede encontrar en\:\n https\://fredboat.com/docs\n\u00bfQuieres a\u00f1adir FredBoat a tu servidor? Si tienes permisos de Manage Server para tu gremio, puedes invitarlo aqu\u00ed\:\n* Este no reproduce m\u00fasica *\n\n\nSi quieres a\u00f1adir el bot musical, deber\u00e1s invitar Este bot\:\n \n\n\u00bfNecesita ayuda o tiene alguna idea para el bot? Tal vez usted s\u00f3lo quiere salir? \u00a1Venga al hangout de FredBoat\!\n{0}\n\nNo puedes enviar este bot comandos a trav\u00e9s de DM.\nBot creado por Fre_d
+helpDocsLocation=Documentaci\u00f3n se puede contrar en\:
+helpBotInvite="Quieres agregar FredBoat a tu servidor? Si tienes permisos administrativos en tu servidor, puedes invitar a FredBoat"\:
+helpHangoutInvite=Necesitas ayuda o tienes algun idea para FredBoat? Ta vez s\u00f3lo quieres pasar el rato? \u00danete a la communidad de FredBoat\!
+helpNoDmCommands=Usted no puede mandar FredBoat commandos a trav\u00e9s de DMs.
+helpCredits=Creado por Fr_ed y de abierto c\u00f3digo colaboradores
helpSent=\u00a1La documentaci\u00f3n ha sido enviada a tus mensajes privados\!
helpProperUsage=Uso correcto\:
helpCommandOwnerRestricted=Este comando se limita al due\u00f1o del bot.
@@ -257,7 +261,7 @@ helpSayCommand=Hacer que el bot haga eco de algo.
helpServerInfoCommand=Mostrar algunas estad\u00edsticas sobre este servidor.
helpUserInfoCommand=Mostrar informaci\u00f3n acerca de usted o un usuario conocido por el bot.
helpPerms=Permite la inclusi\u00f3n de miembros y roles para el rango {0}.
-helpPrefixCommand=Set the prefix for this guild.
+helpPrefixCommand=Configura el prefijo para este gremio.
helpVoteSkip=Vota para saltar la canci\u00f3n. Se requiere que el 50% de los usuarios vote.
helpMathOperationAdd=Muesta la suma de n\u00famero 1 y n\u00famero 2.
helpMathOperationSub=Muestra el resultado de n\u00famero 2 menos n\u00famero 1.
@@ -295,7 +299,7 @@ voteSkipEmbedVoters={0} de {1} han votado para saltar la canci\u00f3n actual
mathOperationResult=El resultado es
mathOperationDivisionByZeroError=No puedo dividir entre cero.
mathOperationInfinity=\u00a1Este n\u00famero es muy grande para mostrarse\!
-prefix=Prefix
-prefixGuild=The prefix for this guild is {0}
-prefixShowAgain=You can show the prefix anytime again by mentioning me.
+prefix=Prefijo
+prefixGuild=El prefijo para el gremio es {0}
+prefixShowAgain=Usted puede mostrar el prefijo de cualquier momento de nuevo por mencion\u00e1ndome.
diff --git a/FredBoat/src/main/resources/lang/et_EE.properties b/FredBoat/src/main/resources/lang/et_EE.properties
index 7ed9f697a..b07cfdd26 100644
--- a/FredBoat/src/main/resources/lang/et_EE.properties
+++ b/FredBoat/src/main/resources/lang/et_EE.properties
@@ -183,7 +183,7 @@ ratelimitedGeneralInfo=You are being rate limited\! Please slow down.
ratelimitedSkipCommand=You can skip more than one song by using this command\: {0}
ratelimitedGuildSlowLoadingPlaylist=This server is not allowed to add more playlists at this moment. Please don't spam long playlists.
unblacklisted=Removed {0} from the blacklist.
-serverinfoTitle=Info about **{0}**\:
+serverinfoTitle=Info about {0}\:
serverinfoOnlineUsers=Online Users\:
serverinfoTotalUsers=Total Users\:
serverinfoRoles=Roles\:
@@ -193,7 +193,7 @@ serverinfoGuildID=Guild ID\:
serverinfoCreationDate=Creation Date\:
serverinfoOwner=Owner\:
serverinfoVLv=Verification Level\:
-userinfoTitle=Information about **{0}**\:
+userinfoTitle=Information about {0}\:
userinfoUsername=Username\:
userinfoId=ID\:
userinfoNick=Nickname\:
@@ -212,7 +212,11 @@ commandsMaintenance=Maintenance
commandsBotOwner=Bot owner
commandsMoreHelp=Say {0} to get more information on a specific command.
helpUnknownCommand=Unknown command.
-helpDM=Documentation can be found at\:\nhttps\://fredboat.com/docs\n\nWant to add FredBoat to your server? If you have Manage Server permissions for your guild, you can invite it here\:\n*This one doesn''t play music*\n\n\nIf you want to add the music bot, you will want to invite this bot\:\n\n\nNeed help or have any ideas for the bot? Perhaps you just want to hang out? Come on over to FredBoat hangout\!\n{0}\n\nYou cannot send this bot commands through DM.\nBot created by Fre_d
+helpDocsLocation=Documentation can be found at\:
+helpBotInvite=Want to add FredBoat to your server? If you have Manage Server permissions for your guild, you can invite FredBoat\:
+helpHangoutInvite=Need help or have any ideas for FredBoat? Perhaps you just want to hang out? Join the FredBoat community\!
+helpNoDmCommands=You cannot send FredBoat commands through DMs.
+helpCredits=Created by Fre_d and open source contributors
helpSent=Documentation has been sent to your DMs\!
helpProperUsage=Proper usage\:
helpCommandOwnerRestricted=This command is restricted to the owner of the bot.
diff --git a/FredBoat/src/main/resources/lang/fa_IR.properties b/FredBoat/src/main/resources/lang/fa_IR.properties
index d1a7c5093..2a9fc9828 100644
--- a/FredBoat/src/main/resources/lang/fa_IR.properties
+++ b/FredBoat/src/main/resources/lang/fa_IR.properties
@@ -183,7 +183,7 @@ ratelimitedGeneralInfo=You are being rate limited\! Please slow down.
ratelimitedSkipCommand=You can skip more than one song by using this command\: {0}
ratelimitedGuildSlowLoadingPlaylist=This server is not allowed to add more playlists at this moment. Please don't spam long playlists.
unblacklisted=Removed {0} from the blacklist.
-serverinfoTitle=Info about **{0}**\:
+serverinfoTitle=Info about {0}\:
serverinfoOnlineUsers=Online Users\:
serverinfoTotalUsers=Total Users\:
serverinfoRoles=Roles\:
@@ -193,7 +193,7 @@ serverinfoGuildID=Guild ID\:
serverinfoCreationDate=Creation Date\:
serverinfoOwner=Owner\:
serverinfoVLv=Verification Level\:
-userinfoTitle=Information about **{0}**\:
+userinfoTitle=Information about {0}\:
userinfoUsername=Username\:
userinfoId=ID\:
userinfoNick=Nickname\:
@@ -212,7 +212,11 @@ commandsMaintenance=\u062a\u0639\u0645\u06cc\u0631\u0627\u062a
commandsBotOwner=\u0635\u0627\u062d\u0628 \u0631\u0628\u0627\u062a
commandsMoreHelp=\u0628\u0627 \u06af\u0641\u062a\u0646 {0} \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0628\u06cc\u0634\u062a\u0631\u06cc \u062f\u0631\u0628\u0627\u0631\u0647 \u06cc\u06a9 \u0641\u0631\u0645\u0627\u0646 \u06a9\u0633\u0628 \u0645\u06cc\u06a9\u0646\u06cc\u062f.
helpUnknownCommand=Unknown command.
-helpDM=Documentation can be found at\:\nhttps\://fredboat.com/docs\n\nWant to add FredBoat to your server? If you have Manage Server permissions for your guild, you can invite it here\:\n*This one doesn''t play music*\n\n\nIf you want to add the music bot, you will want to invite this bot\:\n\n\nNeed help or have any ideas for the bot? Perhaps you just want to hang out? Come on over to FredBoat hangout\!\n{0}\n\nYou cannot send this bot commands through DM.\nBot created by Fre_d
+helpDocsLocation=Documentation can be found at\:
+helpBotInvite=Want to add FredBoat to your server? If you have Manage Server permissions for your guild, you can invite FredBoat\:
+helpHangoutInvite=Need help or have any ideas for FredBoat? Perhaps you just want to hang out? Join the FredBoat community\!
+helpNoDmCommands=You cannot send FredBoat commands through DMs.
+helpCredits=Created by Fre_d and open source contributors
helpSent=Documentation has been sent to your DMs\!
helpProperUsage=\u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0635\u062d\u06cc\u062d\:
helpCommandOwnerRestricted=This command is restricted to the owner of the bot.
diff --git a/FredBoat/src/main/resources/lang/fi_FI.properties b/FredBoat/src/main/resources/lang/fi_FI.properties
index eafdef9fb..73f78187b 100644
--- a/FredBoat/src/main/resources/lang/fi_FI.properties
+++ b/FredBoat/src/main/resources/lang/fi_FI.properties
@@ -183,7 +183,7 @@ ratelimitedGeneralInfo=Sinut on rajoitettu k\u00e4ytt\u00e4m\u00e4st\u00e4 liika
ratelimitedSkipCommand=Voit ohittaa useamman kuin yhden kappaleen k\u00e4ytt\u00e4m\u00e4ll\u00e4 t\u00e4t\u00e4 komentoa\: {0}
ratelimitedGuildSlowLoadingPlaylist=T\u00e4m\u00e4 serveri ei saa lis\u00e4t\u00e4 yht\u00e4\u00e4n enemp\u00e4\u00e4 soittolistaa t\u00e4ll\u00e4 hetkell\u00e4. \u00c4l\u00e4 lis\u00e4\u00e4 ylti\u00f6m\u00e4\u00e4r\u00e4\u00e4 pitki\u00e4 soittolistoja.
unblacklisted={0} poistettiin mustalta listalta.
-serverinfoTitle=Tietoja t\u00e4st\u00e4 serverist\u00e4 **{0}**\:
+serverinfoTitle=Tietoja t\u00e4st\u00e4 serverist\u00e4 {0}\:
serverinfoOnlineUsers=K\u00e4ytt\u00e4ji\u00e4 paikalla\:
serverinfoTotalUsers=K\u00e4ytt\u00e4ji\u00e4 yhteens\u00e4\:
serverinfoRoles=Roolit\:
@@ -193,7 +193,7 @@ serverinfoGuildID=Palvelimen tunniste\:
serverinfoCreationDate=Luontip\u00e4iv\u00e4m\u00e4\u00e4r\u00e4\:
serverinfoOwner=Omistaja\:
serverinfoVLv=Vahvistustaso\:
-userinfoTitle=Tietoja t\u00e4st\u00e4 henkil\u00f6st\u00e4 **{0}**\:
+userinfoTitle=Informaatio {0}\:
userinfoUsername=K\u00e4ytt\u00e4j\u00e4nimi\:
userinfoId=Tunnus\:
userinfoNick=Nimimerkki\:
@@ -212,7 +212,11 @@ commandsMaintenance=Huolto
commandsBotOwner=Botin omistaja
commandsMoreHelp=Sano {0} saadaksesi lis\u00e4tietoa tietyst\u00e4 komennosta.
helpUnknownCommand=Tuntematon komento.
-helpDM=Haluatko lis\u00e4t\u00e4 Fredboardin serverillesi? Jos sinulla on manage servers permissionit serverill\u00e4, voit lis\u00e4t\u00e4 sen t\u00e4ll\u00e4 linkill\u00e4 (t\u00e4m\u00e4 ei soita musiikkia)\: \n\nJos haluat lis\u00e4t\u00e4 musiikki botin, lis\u00e4\u00e4 t\u00e4m\u00e4\: \n\nTarvitsetko apua tai sinulla on ideoita bottia varten? Tai haluat vain olla jossain? Tule FredBoat hangouttiin\: {0}\n\nEt voi l\u00e4hett\u00e4\u00e4 t\u00e4lle botilla viestej\u00e4 yksityisesti\!\n\nBotin teki Fre_d
+helpDocsLocation=Dokumentit l\u00f6yt\u00e4\u00e4\:
+helpBotInvite=Haluatko lis\u00e4t\u00e4 FredBoatin serverillesi? Jos sinulla on Serverin Muutto oikeudet, voit lis\u00e4t\u00e4 FredBoatin\:
+helpHangoutInvite=Tarvitko apua tai ideoita FredBoattia varten? Vai haluatko vain hengailla? Liity FredBoatin ryhm\u00e4\u00e4n\!
+helpNoDmCommands=Et voi l\u00e4hett\u00e4\u00e4 FredBoatille komentoja yksityisviestill\u00e4.
+helpCredits=Tekij\u00e4\: Fre_d ja avoimenl\u00e4hteen avustajat
helpSent=Dokumentaatio on l\u00e4hetetty sinun yksityisviesteihisi\!
helpProperUsage=Asianmukainen k\u00e4ytt\u00f6\:
helpCommandOwnerRestricted=T\u00e4m\u00e4 komento on rajoitettu vain botin omistajalle.
@@ -231,14 +235,14 @@ helpRepeatCommand=Vaihda toistomuotojen v\u00e4lill\u00e4.
helpReshuffleCommand=Sekoita nykyinen soittolista.
helpSelectCommand=Valitse yksi tarjotuista kappaleista haun j\u00e4lkeen soittaaksesi sen.
helpShuffleCommand=Vaihda sekoitustila p\u00e4\u00e4lle nykyiselle soittolistalle.
-helpSkipCommand=Skip the current song, the n'th song in the queue, all songs from n to m, or all songs from mentioned users. Please use in moderation.
+helpSkipCommand=Ohita nykyinen laulu, Muut laulut jonosta, tai kaikki laulut. K\u00e4yt\u00e4 moderaattorina.
helpStopCommand=Pys\u00e4yt\u00e4 soitin ja raivaa t\u00e4m\u00e4nhetkinen soittolista. K\u00e4yt\u00f6ss\u00e4 moderaattoreille jotka pystyv\u00e4t hallitsemaan viestej\u00e4.
helpUnpauseCommand=Anna soittimen jatkaa.
helpVolumeCommand=S\u00e4\u00e4t\u00e4 \u00e4\u00e4nenvoimakkuutta. Arvot ovat 0-150 ja 100 on oletusarvo. \u00c4\u00e4nenvoimakkuus komento on poistettu k\u00e4yt\u00f6st\u00e4 julkisella botilla.
helpExportCommand=Vie t\u00e4m\u00e4nhetkinen soittolista hastebin linkkiin, jotta voit k\u00e4ytt\u00e4\u00e4 sit\u00e4 my\u00f6hemmin soittolistana.
helpGensokyoRadioCommand=N\u00e4yt\u00e4 t\u00e4m\u00e4nhetkinen kappale gensokyoradio.netiss\u00e4
helpListCommand=N\u00e4yt\u00e4 luettelo t\u00e4m\u00e4nhetkisist\u00e4 kappaleista soittolistassa.
-helpHistoryCommand=Display a list of the songs in playlist history.
+helpHistoryCommand=N\u00e4yt\u00e4 lista musiikeista soittohistoriassa.
helpNowplayingCommand=N\u00e4yt\u00e4 parhaillaan toistettava kappale.
helpForwardCommand=Vie kappaletta eteenp\u00e4in tietyll\u00e4 m\u00e4\u00e4r\u00e4ll\u00e4 aikaa. Esimerkiksi\:
helpRestartCommand=K\u00e4ynnist\u00e4 parhaillaan soiva kappale uudelleen.
@@ -257,16 +261,16 @@ helpSayCommand=Laita botti toistamaan jotain kaikuna.
helpServerInfoCommand=N\u00e4yt\u00e4 joitakin tilastoja t\u00e4st\u00e4 killasta.
helpUserInfoCommand=N\u00e4yt\u00e4 tietoja itsest\u00e4si tai botin tiedossa olevista k\u00e4ytt\u00e4jist\u00e4.
helpPerms=Sallii k\u00e4ytt\u00e4jien ja roolien valkolistaamisen {0} arvolle.
-helpPrefixCommand=Set the prefix for this guild.
+helpPrefixCommand=Aseta etuliite t\u00e4lle ryhm\u00e4lle.
helpVoteSkip=\u00c4\u00e4nest\u00e4 skipataksesi biisi. 50% k\u00e4ytt\u00e4jist\u00e4 puhekanavalle t\u00e4ytyy \u00e4\u00e4nest\u00e4\u00e4.
helpMathOperationAdd=Laske numero 1 + numero 2.
-helpMathOperationSub=Print the difference of subtracting num2 from num1.
-helpMathOperationMult=Print the product of num1*num2.
-helpMathOperationDiv=Print the quotient of dividing num1 by num2.
-helpMathOperationMod=Print the remainder of dividing num1 by num2.
-helpMathOperationPerc=Print the percentage represented by num1 in num2.
-helpMathOperationSqrt=Print the square root of num.
-helpMathOperationPow=Print the result of num1^num2.
+helpMathOperationSub=Muuta ero numero 2\:n v\u00e4henemisest\u00e4 numero 1\:seen
+helpMathOperationMult=Muunna numero 1\: sen ja numero 2\: sen ero.
+helpMathOperationDiv=Munna numero 1\: sen ja numero 2\: sen jakautuminen.
+helpMathOperationMod=Muunna nykyinen tulos jaetun kanssa.
+helpMathOperationPerc=Muunna numeron 1 ja 2 prosenttiosuus.
+helpMathOperationSqrt=Muunna numeroiden neli\u00f6juuri.
+helpMathOperationPow=Muunna numero 1\: sen ja 2\: sen ero.
destroyDenied=Sinulla pit\u00e4\u00e4 olla hallitse viestej\u00e4 oikeus nollataksesi soittimen.
destroyHelp=Nollaa soitin ja tyhjenn\u00e4 jono. Tarkoitettu yll\u00e4pit\u00e4jille joilla on hallitse viestej\u00e4 oikeus.
destroySucc=Soitin on nollattu ja jono tyhjennetty.
@@ -275,27 +279,27 @@ permsListTitle=K\u00e4ytt\u00e4j\u00e4t ja roolit joilla on oikeus\: {0}
permsAdded=Lis\u00e4ttiin `{0}` kohteeseen `{1}`.
permsRemoved=Poistettiin `{0}`kohteesta `{1}`.
permsFailSelfDemotion=Et voi poistaa t\u00e4t\u00e4, koska se poistaisi sinulta j\u00e4rjestelm\u00e4valvojan oikeuden\!
-permsAlreadyAdded={0} already added to {1}
-permsNotAdded={0} is not in {1}
+permsAlreadyAdded={0} on jo lis\u00e4tty {1}
+permsNotAdded={0} ei ole {1}
fuzzyMultiple=L\u00f6ydettiin useita kohteita. Tarkoititko mit\u00e4\u00e4n n\u00e4ist\u00e4?
fuzzyNothingFound=Ei tuloksia haulla `{0}`.
cmdPermsTooLow=Sinulla ei ole tarvittavia oikeuksia kyseisen komennon k\u00e4ytt\u00e4miseen\! T\u00e4m\u00e4 komento vaatii `{0}`, mutta sinulla on vain `{1}`.
-playersLimited=FredBoat is currently at maximum capacity\! The bot is currently fixed to only play up to `{0}` streams, otherwise we would risk disconnecting from Discord under the network load.\nIf you want to help us increase the limit or you want to use our non-overcrowded bot, please support our work on Patreon\:\n{1}\n\nSorry for the inconvenience\! You might want to try again later. This message usually only appears at peak time.
+playersLimited=FredBoat on t\u00e4ll\u00e4 hetkell\u00e4 t\u00e4ynn\u00e4. Botti on t\u00e4ll\u00e4 hetkell\u00e4 korjattavana ja voi toistaa yli `{0}`\nStriimi\u00e4, muuten se voi menett\u00e4\u00e4 yhteytens\u00e4 discordiin netti loadin alla. Jos haluat meid\u00e4n lis\u00e4\u00e4v\u00e4n maksimim\u00e4\u00e4r\u00e4\u00e4 tai haluat k\u00e4ytt\u00e4\u00e4 loputonta m\u00e4\u00e4r\u00e4\u00e4, Ota yhteytt\u00e4 Patreoniin\:\n{1}\n\nAnteeksi h\u00e4iri\u00f6st\u00e4\! Voit yritt\u00e4\u00e4 pian uudelleen. T\u00e4m\u00e4 viesti yleens\u00e4 tulee vain aikana, jolloin botti kaatuu.
tryLater=Yrit\u00e4 uudestaan my\u00f6hemmin.
-skipUserSingle=Skipped {0} added by {1}.
-skipUserMultiple=Skipped {0} tracks added by {1}.
-skipUsersMultiple=Skipped {0} tracks added by {1} users.
-skipUserNoTracks=None of the mentioned users have any tracks queued.
+skipUserSingle=Skipattu {0} ja lis\u00e4tty {1}.
+skipUserMultiple=Skipattu {0} Musiikkej\u00e4 lis\u00e4si\: {1}.
+skipUsersMultiple=Skipattu {0} Musiikkeja lis\u00e4tty {1} k\u00e4ytt\u00e4j\u00e4.
+skipUserNoTracks=Yksik\u00e4\u00e4n mainituista k\u00e4ytt\u00e4jist\u00e4 ei omista lauluja musiikkijonossa.
voteSkipAdded=\u00c4\u00e4nesi on otettu huomioon\!
voteSkipAlreadyVoted=\u00c4\u00e4nestit jo skipataksesi t\u00e4m\u00e4n biisin\!
voteSkipSkipping={0} ihmist\u00e4 on \u00e4\u00e4nest\u00e4nyt ohittamista. Ohitetaan biisi {1}.
voteSkipNotEnough={0} \u00e4\u00e4nesti ohitusta. V\u00e4hint\u00e4\u00e4n {1} tarvitaan.
voteSkipEmbedNoVotes=Ei \u00e4\u00e4ni\u00e4 ohittaa biisi\u00e4 viel\u00e4.
-voteSkipEmbedVoters={0} out of {1} have voted to skip the current track
+voteSkipEmbedVoters={0} pois {1} on ehdottanut ohittaa nykyist\u00e4 laulua
mathOperationResult=Tulos on
mathOperationDivisionByZeroError=En voi jakaa nollalla.
-mathOperationInfinity=The number is too big to be displayed\!
-prefix=Prefix
-prefixGuild=The prefix for this guild is {0}
-prefixShowAgain=You can show the prefix anytime again by mentioning me.
+mathOperationInfinity=Numero on liian iso n\u00e4ytett\u00e4v\u00e4ksi\!
+prefix=Etuliite
+prefixGuild=T\u00e4m\u00e4n ryhm\u00e4n etuliite on {0}
+prefixShowAgain=Voit n\u00e4ytt\u00e4\u00e4 etuliitteen aina, mainitsemalla minut.
diff --git a/FredBoat/src/main/resources/lang/fil_PH.properties b/FredBoat/src/main/resources/lang/fil_PH.properties
index d1fb1c530..2298dbde3 100644
--- a/FredBoat/src/main/resources/lang/fil_PH.properties
+++ b/FredBoat/src/main/resources/lang/fil_PH.properties
@@ -45,7 +45,7 @@ exportPlaylistFail=Hindi na upload ang mga tugtog sa hastebin.com
listShowShuffled=Pinapakita ang halohalong tugtogan.
listShowRepeatSingle=Uulitin ang kasalukuyang track.
listShowRepeatAll=Uulitin ang kasalukuyang mga nakalista.
-listShowHistory=Showing tracks in history.
+listShowHistory=Pagpapakita ng bakas sa kasaysayan.
listAddedBy=**{0}** idinagdag ni **{1}** `[{2}]`
listStreamsOnlySingle=Merong **{0}** live {1} sa loob ng listahan.
listStreamsOnlyMultiple=Merong mga **{0}** live {1} sa loob ng listahan.
@@ -57,7 +57,7 @@ listAsWellAsLiveStreams=, pati * *{0} * * live {1}
trackSingular=subaybayan ang
trackPlural=mga track
npNotPlaying=Kasalukuyang hindi nag plaplay ng kahit ano.
-npNotInHistory=Currently no tracks in history.
+npNotInHistory=Kasalukuyang walang bakas sa kasaysayan.
npDescription=Description
npLoadedSoundcloud=[{0}/{1}]\n\nNakuha mula sa Soundcloud
npLoadedBandcamp={0}\n\nNakuha mula sa Bandcamp
@@ -74,7 +74,7 @@ npLoadedFromHTTP={0}\n\nNakuha mula sa {1}
npLoadedDefault={0}\n\nNakuha mula sa {1}
noneYet=Wala pa
npRatingRange={0}/5 galing sa {1} boto
-fwdSuccess=Forwarding **{0}** by {1}.
+fwdSuccess=Pagpapasulong ng **{0}** sa {1}.
restartSuccess=* *{0} * * ay na-restart na.
queueEmpty=Walang nakalagay sa listahan.
rewSuccess=Ni-rerewind ang * *{0} * * ng {1}.
@@ -124,142 +124,146 @@ malUrl={0}**URL\: **{1}\n
luaError=\ Nagkaroon ng isang error ng Lua ang \:anger\: '' ''{0} '' ''
luaErrorOutputTooBig=\ Masyadong malaki ang output buffer \:anger\: Ang Discord ay nagpapahintulot lamang ng 2000 na characters kada message, mayroong {0}
luaTimeout=\ Nag-time out ang function \:anger\: Ang pinahintulutuang computation time ay {0} segundo.
-helpSuccess=Documentation has been sent to your direct messages\!
-helpDmFailed=Could not send documentation to your DMs. Please check that you don't have them disabled\!
-helpCommandsPromotion=Say {0} to learn what this bot can do\!
+helpSuccess=Ang dokumentasyon ay ipinadala direkta sa inyong mensahe\!
+helpDmFailed=Maaaring hindi kayang magpadala ng dokumentasyon sa inyong DMs. Pakiusap pakitignan na wala sa kanilang may kapansanan\!
+helpCommandsPromotion=Sabihin {0} para malaman kung anong kayang gawin ng bot na ito\!
fuzzyNoResults=Walang ganitong mga gumagamit
-brainfuckCycleLimit=Program exceeded the maximum cycle count of {0}
-brainfuckDataPointerOutOfBounds=Data pointer out of bounds\: {0}
-brainfuckInputOOB=Input out of bounds at position\: {0}
-brainfuckNoOutput=\ There was no output
-weatherLocationNotFound=Unable to find location, please check your input {0}.
-weatherError=Error retrieving weather for {0}
-avatarSuccess=\ found it\n{0}
-configNoArgs=Configuration for **{0}**\:```
-configSetTo=is now set to `{0}`.
-configUnknownKey={0}\: Unknown key.
-configMustBeBoolean={0}\: Value must be true or false.
-modReason=Reason
-modAuditLogMessage=Action issued by {0}\#{1} [{2}]
-modFailUserHierarchy=You do not have a higher role than {0}.
-modFailBotHierarchy=I need to have a higher role than {0}.
-modBanFail=Failed to ban {0}
-modKickBanFailUserPerms=You must have permission to kick and ban to be able to use this command.
-modBanBotPerms=I need to have permission to ban members.
-modKickBotPerms=I need to have permission to kick members.
-kickSuccess=User {0}\#{1} [{2}] has been kicked.
-kickFail=Failed to kick {0}
-kickFailSelf=You can't kick yourself.
-kickFailOwner=You can't kick the server owner.
-kickFailMyself=I can't kick myself.
-kickFailUserPerms=You must have permission to kick to be able to use this command.
-softbanSuccess=User {0}\#{1} [{2}] has been softbanned.
-softbanFailSelf=You can't softban yourself.
-softbanFailOwner=You can't softban the server owner.
-softbanFailMyself=I can't softban myself.
-hardbanSuccess=User {0}\#{1} [{2}] has been banned.
-hardbanFailSelf=You can't ban yourself.
-hardbanFailOwner=You can't ban the server owner.
-hardbanFailMyself=I can't ban myself.
-getidSuccess=The id of this guild is {0}. The id of this text channel is {1}.
-statsParagraph=\ This bot has been running for {0} days, {1} hours, {2} minutes and {3} seconds.\nThis bot has executed {4} commands this session.
-statsRate={0}That''s a rate of {1} commands per hour
-catgirlFail=Failed to extract image from {0}
-catgirlFailConn=Failed to connect to {0}
-hugBot=Thanks for the hugs \:blush\:
-hugSuccess=Hugs {0}.
-patBot=Thanks for the pats \:blush\:
-patSuccess=Pats {0}.
-rollSuccess={0} rolls around on the floor.
-facedeskSuccess={0} facedesks.
-langInvalidCode=The language code {0} doesn''t exist or is unsupported.
-langSuccess=Switched to speaking {0}.
-langInfo=FredBoat supports several user-contributed languages that you can select with this command. Admins on this server can select a language with `;;lang ` Here is the full list of supported languages\:
-langDisclaimer=Translations may not be 100% accurate or complete. Missing translations may be contributed at .
-loadSingleTrack=**{0}** has been added to the queue.
-loadSingleTrackAndPlay=**{0}** will now play.
-invite=Invite link for **{0}**\:
-ratelimitedGeneralInfo=You are being rate limited\! Please slow down.
-ratelimitedSkipCommand=You can skip more than one song by using this command\: {0}
-ratelimitedGuildSlowLoadingPlaylist=This server is not allowed to add more playlists at this moment. Please don't spam long playlists.
-unblacklisted=Removed {0} from the blacklist.
-serverinfoTitle=Info about **{0}**\:
-serverinfoOnlineUsers=Online Users\:
-serverinfoTotalUsers=Total Users\:
+brainfuckCycleLimit=Ang programa ay lumagpas sa pinakamataas na siklo ng pagbibilang {0}
+brainfuckDataPointerOutOfBounds=Ang panturo ng datos ay lumabas sa mga hanggan\: {0}
+brainfuckInputOOB=Mag input sa labas ng mga posisyon ng mg hangganan\: {0}
+brainfuckNoOutput=\ Diyan ay walang output
+weatherLocationNotFound=Hindi makita ang inyong lokasyon, Pakiusap pakitignan ang inyong input {0}.
+weatherError=Maling pagkuha para sa panahon {0}
+avatarSuccess=\ natagpuan ito {0}
+configNoArgs=Kompigurasyon para sa **{0}**\:```
+configSetTo=ito ay nakatakda na ngayon `{0}`.
+configUnknownKey={0}\: Hindi kilala na susi.
+configMustBeBoolean={0}\: Ang halaga ay kailangan tama or mali.
+modReason=Dahilan
+modAuditLogMessage=Mula sa aksyon na inilabas ng {0}\#{1} [{2}]
+modFailUserHierarchy=Wala ka ng mataas na tungkulin kasya sa {0}.
+modFailBotHierarchy=Kailangan kong magkaroon ng mas mataas na tungkulin kaysa sa {0}.
+modBanFail=Nabigo sa pagbabawal sa {0}
+modKickBanFailUserPerms=Kailangan mong magkaroon ng pahintulot na sipain at pagbawalan upang hindi magamit ang kautosang ito.
+modBanBotPerms=Kailangan kong magkaroon ng pahintulot para pagbawalan ang mga miyembro.
+modKickBotPerms=Kailangan kong magkaroon ng pahintulot para sipain ang mga miyembro.
+kickSuccess=Ang mga gumagamit ng {0}\#{1} [{2}] ay pinagsisipa.
+kickFail=Nabigo sa pagsipa {0}
+kickFailSelf=Hindi mo kayang sipain ang iyong sarili.
+kickFailOwner=Hindi mo kayang sipain ang may ari ng serber.
+kickFailMyself=Hindi ko kayang sipain ang aking sarili.
+kickFailUserPerms=Kailangan mong magkaroon ng pahintulot na sipain at pagbawalan upang hindi magamit ang kautosang ito.
+softbanSuccess=Ang gumagamit {0}\#{1} [{2}] ay pansamatalang pinagbawalan.
+softbanFailSelf=Hindi mo kayang pansamantalang pagbawalan ang iyong sarili.
+softbanFailOwner=Hindi mo kayang pansamantalang pagbawalan ang may ari ng serber.
+softbanFailMyself=Hindi ko kayang pagbawalan ng pansamantala ang aking sarili.
+hardbanSuccess=Ang mga gumagamit ng {0}\#{1} [{2}] ay pinagbawalan.
+hardbanFailSelf=Hindi mo kayang pagbawalan ang iyong sarili.
+hardbanFailOwner=Hindi mo kayang pagbawalan ang may ari ng serber.
+hardbanFailMyself=Hindi ko kayang pagbawalan ang aking sarili.
+getidSuccess=Ang id ng mga samahan ay {0}. Ang id ng tsanel ng tekstong ito ay {1}.
+statsParagraph=\ Ang bot na ito ay tumatakbo para sa {0} araw, {1} oras, {2} minuto at {3} segundo. Ang bot na ito ay magsasagawa ng {4} utos sa sesyong ito.
+statsRate={0} Yan ang halaga ng {1} ng utos kada oras
+catgirlFail=Nabigo sa paghugot ng larawan mula sa {0}
+catgirlFailConn=Nabigong kumoknekta sa {0}
+hugBot=Maraming salamat sa mga yakap \:blush\:
+hugSuccess=Mga yakap {0}.
+patBot=Maraming salamat sa pagtapik \:blush\:
+patSuccess=Mga tapik {0}.
+rollSuccess={0} gumulong sa palibot ng sahig.
+facedeskSuccess={0} mukhasulatan.
+langInvalidCode=Ang kowd para sa lengwahe {0} ay hindi umiiral o kaya ay hindi suportado.
+langSuccess=Lumipat para sa pagsasalit {0}.
+langInfo=Ang FredBoat ay sinusuportahan ang mga gumagamit, nag-ambag ng wikang iyong mapipili sa komandong ito. Ang taga pangasiwa sa serber na ito ay may kakayahang pumili ng wika ng `;;lang ` Ito ang kabuoang listahan ng mga suportadong wika\:
+langDisclaimer=Ang pagpapalit ay maaaring hindi 100% na tumpak o kumpleto. Ang pagpapalit na nawawala ay maaaring naiambag dito sa .
+loadSingleTrack=**{0}** ay naidagdag na sa pagpipilian.
+loadSingleTrackAndPlay=**{0}** ay tumutugtog ngayon.
+invite=Mag-imbita ng mga link para sa **{0}**\:
+ratelimitedGeneralInfo=Ang iyong halaga ay limitado lang\! Kaya pakiusap huminahon ka muna.
+ratelimitedSkipCommand=Maaaring mong laktawan ng higit sa isa ang mga awitin sa pamamagitan ng pindutang ito\: {0}
+ratelimitedGuildSlowLoadingPlaylist=Ang serber na ito ay pansamantalang hindi pwedeng mag dagdag ng maraming palatugtogan. Pakiusap huwag iispam ang mahabang palatugtogan.
+unblacklisted=Tinanggal {0} mula sa pagkakablaklist.
+serverinfoTitle=Impormasyon tungkol sa {0}\:
+serverinfoOnlineUsers=Online ang mga gumagamit\:
+serverinfoTotalUsers=Lahat ng mga gumagamit\:
serverinfoRoles=Mga tungkulin\:
serverinfoText=Text ka nya
-serverinfoVoice=Voice Channels\:
-serverinfoGuildID=Guild ID\:
-serverinfoCreationDate=Creation Date\:
-serverinfoOwner=Owner\:
-serverinfoVLv=Verification Level\:
-userinfoTitle=Information about **{0}**\:
+serverinfoVoice=Tsanel ng boses\:
+serverinfoGuildID=ID ng kapisanan\:
+serverinfoCreationDate=Petsa ng pagkakagawa\:
+serverinfoOwner=Nagmamay-ari\:
+serverinfoVLv=Antas ng pagpapatunay\:
+userinfoTitle=Impormasyon tungkol sa {0}\:
userinfoUsername=Username\:
userinfoId=ID\:
-userinfoNick=Nickname\:
-userinfoKnownServer=Known Servers\:
-userinfoJoinDate=Join Date\:
-userinfoCreationTime=Creation Date\:
+userinfoNick=Palayaw\:
+userinfoKnownServer=Kilalang mga serber\:
+userinfoJoinDate=Petsa ng pagsali\:
+userinfoCreationTime=Petsa ng pagkakagawa\:
userinfoBlacklisted=Blacklisted\:
-skipDeniedTooManyTracks=You can't skip someone else's tracks if you are not a DJ.\nConsider using the Voteskip command.
-eventUsersLeftVC=All users have left the voice channel. The player has been paused.
-eventAutoResumed=User presence detected, automatically resuming the player.
-commandsFun=Fun
+skipDeniedTooManyTracks=Hindi mo pwedeng laktawan ang traks ng iba kung hindi ka isang DJ. Konsindera na gamitin ang Voteskip na pindutan.
+eventUsersLeftVC=Nagsi-alisan ang lahat ng gumagamit sa stanel ng mga boses. Inihinto ang pagpapatugtog.
+eventAutoResumed=Natukoy ang kinaroroonan ng mga gumagamit, awtomatiko ang pagpapatutog muli.
+commandsFun=Masaya
commandsMemes=Memes
-commandsUtility=Utility
-commandsModeration=Moderation
-commandsMaintenance=Maintenance
-commandsBotOwner=Bot owner
-commandsMoreHelp=Say {0} to get more information on a specific command.
-helpUnknownCommand=Unknown command.
-helpDM=Documentation can be found at\:\nhttps\://fredboat.com/docs\n\nWant to add FredBoat to your server? If you have Manage Server permissions for your guild, you can invite it here\:\n*This one doesn''t play music*\n\n\nIf you want to add the music bot, you will want to invite this bot\:\n\n\nNeed help or have any ideas for the bot? Perhaps you just want to hang out? Come on over to FredBoat hangout\!\n{0}\n\nYou cannot send this bot commands through DM.\nBot created by Fre_d
-helpSent=Documentation has been sent to your DMs\!
-helpProperUsage=Proper usage\:
-helpCommandOwnerRestricted=This command is restricted to the owner of the bot.
-helpConfigCommand=Show the config of this guild or adjust settings.
-helpLanguageCommand=Show available languages or set a language for this guild.
-helpHardbanCommand=Ban a user and delete his messages from the last 7 days.
-helpKickCommand=Kick a user from this guild.
-helpSoftbanCommand=Softban a user by kicking him and deleting his messages from the last 7 days.
-helpMusicCommandsHeader=FredBoat Music Commands
-helpJoinCommand=Make the bot join your current voice channel.
-helpLeaveCommand=Make the bot leave the current voice channel.
-helpPauseCommand=Pause the player.
-helpPlayCommand=Play music from the given URL or search for a track. For a full list of sources please visit {0}
-helpPlaySplitCommand=Split a YouTube video into a tracklist provided in it's description.
-helpRepeatCommand=Toggle between repeat modes.
-helpReshuffleCommand=Reshuffle the current queue.
-helpSelectCommand=Select one of the offered tracks after a search to play.
-helpShuffleCommand=Toggle shuffle mode for the current queue.
-helpSkipCommand=Skip the current song, the n'th song in the queue, all songs from n to m, or all songs from mentioned users. Please use in moderation.
-helpStopCommand=Stop the player and clear the playlist. Reserved for moderators with Manage Messages permission.
-helpUnpauseCommand=Unpause the player.
-helpVolumeCommand=Changes the volume. Values are 0-150 and 100 is the default. The volume command is deprecated on the public bot.
-helpExportCommand=Export the current queue to a hastebin link, can be later used as a playlist.
-helpGensokyoRadioCommand=Show the current song played on gensokyoradio.net
-helpListCommand=Display a list of the current songs in the playlist.
-helpHistoryCommand=Display a list of the songs in playlist history.
-helpNowplayingCommand=Display the currently playing song.
-helpForwardCommand=Forward the track by a given amount of time. Example\:
-helpRestartCommand=Restart the currently playing track.
-helpRewindCommand=Rewind the track by a given amount of time. Example\:
-helpSeekCommand=Set the position of the track to the given time. Example\:
-helpAvatarCommand=Display the avatar of a user.
-helpBrainfuckCommand=Executes Brainfuck code. Example\:
-helpWeatherCommand=Display current weather by location.
-helpClearCommand=Delete all messages by this bot in the last 50 messages of this channel.
-helpCommandsCommand=Show available commands.
-helpHelpCommand=Receive help for this bot or help for any command.
-helpInviteCommand=Post invite link for this bot.
-helpMALCommand=Search MyAnimeList and display an anime or profile of a user.
-helpMusicHelpCommand=Show music commands and their usage.
-helpSayCommand=Make the bot echo something.
-helpServerInfoCommand=Display some stats about this guild.
-helpUserInfoCommand=Display information about yourself or a user known to the bot.
-helpPerms=Allows whitelisting members and roles for the {0} rank.
-helpPrefixCommand=Set the prefix for this guild.
-helpVoteSkip=Vote to skip the current song. Needs 50% of all users in the voice chat to vote.
-helpMathOperationAdd=Print the sum of num1 and num2.
+commandsUtility=Kagamitan
+commandsModeration=Moderasyon
+commandsMaintenance=Pagpapanatili
+commandsBotOwner=May-ari ng bot
+commandsMoreHelp=Sabihin na {0} kumuha ng maraming impormasyon sa partikular na pindutan.
+helpUnknownCommand=Di-matukoy na pindutan.
+helpDocsLocation=Ang dokumento ay matatagpuan sa\:
+helpBotInvite=Gusto mong bang magdagdag ng FredBoat sa iyong serber? Kung pinapangasiwaan mo ang pahintulot ng seber para sa iyong guild, Maaaring mong maimbita ang FredBoat\:
+helpHangoutInvite=Kailangan ng tulong o mayroong kahit anong ideya para sa FredBoat? Marahil ay guto mong umistambay? Sumali sa kominidad ng FredBoat\!
+helpNoDmCommands=Hindi ka pwedeng magpadala ng FredBoat na mga utos sa pamamagitan ng DMs.
+helpCredits=Ginawa sa pamamagitan ni Fre_d at sa mga nagambag ng open source
+helpSent=Ang dokumentasyon ay ipinadala sa inyong DMs\!
+helpProperUsage=Wastong paggamit\:
+helpCommandOwnerRestricted=Ang pindutan na ito ay takda ng may ari ng mga bot.
+helpConfigCommand=Ipakita ang kumpig ng guild na ito o kaya ay ayosin ang mga setings.
+helpLanguageCommand=Ipakita ang mga wikang pwede or magtakda ng mga wika sa guild na ito.
+helpHardbanCommand=Pagbawalan ang gumagami na burahin ang mga mensahe sa nakalipas na pitong araw.
+helpKickCommand=Patalsikin ang mga gumgamit sa guild na ito.
+helpSoftbanCommand=Pansamantalang pagbabawal sa mga gumagamit na pagsipa sa kanya at pagbubura ng mga mensahe mula sa nakalipas na pitong 7 araw.
+helpMusicCommandsHeader=FredBoat Direksyon ng Musika
+helpJoinCommand=Gumawa ang bot para sumali sa inyong kasalukuyang tsanel ng tinig.
+helpLeaveCommand=Nagawa na bot na iwanan ang kasalukuyang tsanel ng tinig.
+helpPauseCommand=Ihinto ang musiko.
+helpPlayCommand=Magpatugtog ng musika mula sa ibinigay na URL o kaya ay humanap sa trak. Para sa kabuong listahan ng mapagkukunan mangyaring bisitahin ang {0}
+helpPlaySplitCommand=Nahati ang bidyo sa YouTube sa traklis na inilalalaan sa paglalarawan.
+helpRepeatCommand=Magpaulit-ulit sa pagitan ng inulit na modes.
+helpReshuffleCommand=Pag-aayos sa kasalukuyang pila.
+helpSelectCommand=Pumili ng isa sa mga inaalok ng traks pagkatapos ng paghahanap para patutugin.
+helpShuffleCommand=Toggle ayusin ang mode para sa kasalukuyang pila.
+helpSkipCommand=Laktawan ang kasalukuyang awitin, ang n'th na awitin sa mga pagpipilian, ang lahat ng awitin mula sa n to m, o kaya ang lahat ng awitin mula sa nabanggit ng mga gumagamit. Pakiusap gamitin lamang sa kahinahunan.
+helpStopCommand=Ihinto ang pagpapatugtutog at linisin ang listahan. Nakareserba para sa moderators sa pahintulot ng pangangasiwa ng mga mensahe.
+helpUnpauseCommand=Alisin sa pagkakahinto ang tugtog.
+helpVolumeCommand=Hinaan ang tunog. Ang halaga ay 0-150 at 100 ang pangunahin. Ang tunog ay naririnig sa publiko ng bot.
+helpExportCommand=I-eksport ang kasulukuyang pagpipilian para sa hastebin link, Kalaunan ay magagamit bilang isang palatugtugan.
+helpGensokyoRadioCommand=Ipakita ang kasalukuyang awiting tumutugtog sa gensokyoradio.net
+helpListCommand=Ihayag ang kasalukuyang listahan ng mga kana sa palagtugtugan.
+helpHistoryCommand=Ihayag ang listahan ng mga awitin sa kasaysayan ng palatugtugan.
+helpNowplayingCommand=Ihayag ang kasalukuyang awiting pinapatugtog.
+helpForwardCommand=Madaliin ang trak na nagbibigay ng maraming oras. Halimbawa\:
+helpRestartCommand=Ulitin ang kasalukuyang trak ng tugtog.
+helpRewindCommand=Madaliin ang trak na nagbibigay ng maraming oras. Halimbawa\:
+helpSeekCommand=Ayosin ang posisyon ng mga trak sa ibinigay na oras. Halimbawa\:
+helpAvatarCommand=Ipakita ang hitsura ng mga gumagamit.
+helpBrainfuckCommand=Patayin ang kowd ng brainfuck. Halimbawa\:
+helpWeatherCommand=Ihayag ang kasalukuyang lokasyon ng panahon.
+helpClearCommand=Burahin ang lahat ng mensahe sa bot na ito sa nakalipas na 50 na mensahe sa tsanel na ito.
+helpCommandsCommand=Ipakita ang mga pwedeng pindutan.
+helpHelpCommand=Tanggapin ang tulong mula sa bot na ito o kaya ay tulongan ang anumang gawain.
+helpInviteCommand=I-post ang link ng mga imbitado sa bot na ito.
+helpMALCommand=Hanapin ang listahan ng aking anime at ihayag ang anime o kaya ay propayl ng mga gumagamit.
+helpMusicHelpCommand=Ipakita ang pindutang ng musika at ang kanilang gamit.
+helpSayCommand=Gumagawa ng bot na alingawngaw.
+helpServerInfoCommand=Ihayag ang ilang estadistika tungkol sa guild na ito.
+helpUserInfoCommand=Ihayag ang imporsyon tungkol sa iyong sarili o kaya ay mga gumagamit na kilala ang bot.
+helpPerms=Payagan ang mga miyembro ng putinglistahan at gampanan para sa {0} ranggo.
+helpPrefixCommand=Itakda ang unlapit para sa guild na ito.
+helpVoteSkip=Bumoto para malaktawan ang kasalukuyang awitin. Kailangan ang 50% ng lahat ng gumagamit ng tinig sa usapan upang bumoto.
+helpMathOperationAdd=I-print ang kabuuan ng num1 at num2.
helpMathOperationSub=Print the difference of subtracting num2 from num1.
helpMathOperationMult=Print the product of num1*num2.
helpMathOperationDiv=Print the quotient of dividing num1 by num2.
@@ -291,11 +295,11 @@ voteSkipAlreadyVoted=You already voted to skip this track\!
voteSkipSkipping={0} have voted to skip. Skipping track {1}.
voteSkipNotEnough={0} have voted to skip. At least {1} needed.
voteSkipEmbedNoVotes=No votes to skip this track yet.
-voteSkipEmbedVoters={0} out of {1} have voted to skip the current track
-mathOperationResult=The result is
-mathOperationDivisionByZeroError=I cannot divide by zero.
-mathOperationInfinity=The number is too big to be displayed\!
-prefix=Prefix
-prefixGuild=The prefix for this guild is {0}
-prefixShowAgain=You can show the prefix anytime again by mentioning me.
+voteSkipEmbedVoters={0} mula sa {1} ay bumuto upang laktawan ang kasalukuyang trak
+mathOperationResult=Ang resulta ay
+mathOperationDivisionByZeroError=Hindi ko kayang hatiin mula sa sero.
+mathOperationInfinity=Ang bilang ay masyadong malaki para maipakita\!
+prefix=Unlapi
+prefixGuild=Ang unlapi para sa guild na ito ay {0}
+prefixShowAgain=Muli maaaring mong maipakita ang unlapi anomang oras sa pamamagitan ng pagbanggit sakin.
diff --git a/FredBoat/src/main/resources/lang/fr_FR.properties b/FredBoat/src/main/resources/lang/fr_FR.properties
index cc6c60495..3142d4a7e 100644
--- a/FredBoat/src/main/resources/lang/fr_FR.properties
+++ b/FredBoat/src/main/resources/lang/fr_FR.properties
@@ -183,7 +183,7 @@ ratelimitedGeneralInfo=Vous \u00eates en taux limit\u00e9\u00a0\! S\u2019il vous
ratelimitedSkipCommand=Vous pouvez passer plus d''une chanson en utilisant la commande suivante \: {0}
ratelimitedGuildSlowLoadingPlaylist=Ce serveur ne peut pas charger plus de listes de lecture pour le moment. S'il vous pla\u00eet, ne spammez pas de longues listes de lecture.
unblacklisted={0} a \u00e9t\u00e9 retir\u00e9 de la liste noire.
-serverinfoTitle=Informations sur **{0}** \:
+serverinfoTitle=Infos \u00e0 propos de {0} \:
serverinfoOnlineUsers=Utilisateurs en ligne \:
serverinfoTotalUsers=Nombre total d'utilisateurs \:
serverinfoRoles=R\u00f4les \:
@@ -193,7 +193,7 @@ serverinfoGuildID=Identifiant de la guilde \:
serverinfoCreationDate=Date de cr\u00e9ation \:
serverinfoOwner=Propri\u00e9taire \:
serverinfoVLv=Niveau de v\u00e9rification\u00a0\:
-userinfoTitle=Informations sur **{0}** \:
+userinfoTitle=Informations \u00e0 propos de {0} \:
userinfoUsername=Nom d'utilisateur \:
userinfoId=Identifiant \:
userinfoNick=Pseudonyme \:
@@ -212,7 +212,11 @@ commandsMaintenance=Maintenance
commandsBotOwner=Propri\u00e9taire du bot
commandsMoreHelp=Dites {0} pour obtenir plus d\u2019informations sur une commande sp\u00e9cifique.
helpUnknownCommand=Commande inconnue.
-helpDM=Vous pouvez acc\u00e9der \u00e0 la documentation du bot via ce lien \:\nhttp\://docs.frederikam.com\n\nEnvie d''ajouter FredBoat \u00e0 votre serveur ? Si vous avez les permissions requises pour g\u00e9rer le serveur, vous pouvez l''inviter via ce lien \:\n*Celui-ci ne joue pas de musique*\n\n\nSi vous recherchez plut\u00f4t un bot musical, invitez ce bot \:\n\n\nVous avez besoin d''aide ou souhaitez contribuer \u00e0 l''am\u00e9lioration du bot ? Ou vous voulez juste passer le temps ? Venez donc faire un tour dans le repaire de FredBoat \!\n{0}\n\nVous ne pouvez pas utiliser les commandes de ce bot via MP.\nBot cr\u00e9\u00e9 par Fre_d
+helpDocsLocation=La documentation peut \u00eatre trouv\u00e9e ici \:
+helpBotInvite=Vous voulez ajouter FredBoat \u00e0 votre serveur ? Si vous avez la permission de g\u00e9rer cette guilde, vous pouvez inviter FredBoat \:
+helpHangoutInvite=Vous avez besoin d'aide ou avez des id\u00e9es pour FredBoat ? Ou vous voulez juste passer le temps ? Rejoignez la communaut\u00e9 FredBoat \!
+helpNoDmCommands=Vous ne pouvez pas envoyer de commandes via la messagerie priv\u00e9e.
+helpCredits=Cr\u00e9\u00e9 par Fre_d et ses contributeurs en open-source
helpSent=La documentation a \u00e9t\u00e9 envoy\u00e9 dans votre messagerie priv\u00e9e \!
helpProperUsage=Utilisation ad\u00e9quate \:
helpCommandOwnerRestricted=Cette commande est r\u00e9serv\u00e9e au propri\u00e9taire du bot.
@@ -225,7 +229,7 @@ helpMusicCommandsHeader=Commandes musicales de Fredboat
helpJoinCommand=Fait venir le bot dans votre canal vocal actuel.
helpLeaveCommand=Fait partir le bot de votre canal vocal actuel.
helpPauseCommand=Met le lecteur en pause.
-helpPlayCommand=Play music from the given URL or search for a track. For a full list of sources please visit {0}
+helpPlayCommand=Joue de la musique \u00e0 partir d''un lien ou recherche une piste. Pour une liste compl\u00e8te des sources, veuillez visiter {0}
helpPlaySplitCommand=Divise une vid\u00e9o YouTube en une liste de lecture fournie depuis sa description.
helpRepeatCommand=Bascule entre les modes de r\u00e9p\u00e9tition.
helpReshuffleCommand=Remet en mode al\u00e9atoire la file d'attente actuelle.
@@ -257,7 +261,7 @@ helpSayCommand=Faire dire quelque chose au bot.
helpServerInfoCommand=Affiche les statistiques sur cette guilde.
helpUserInfoCommand=Affiche les informations sur vous ou un autre utilisateur connu du bot.
helpPerms=Permet d''ajouter les membres et les r\u00f4les \u00e0 la liste blanche pour le grade {0}.
-helpPrefixCommand=Set the prefix for this guild.
+helpPrefixCommand=Configure le pr\u00e9fixe pour le serveur.
helpVoteSkip=Vote pour passer la musique en cours. A besoin de 50 % de tous les d'utilisateurs dans le salon vocal pour voter.
helpMathOperationAdd=\u00c9crit la somme de num1 et num2.
helpMathOperationSub=\u00c9crit le r\u00e9sultat de la soustraction de num1 moins num2.
@@ -295,7 +299,7 @@ voteSkipEmbedVoters={0} sur {1} ont vot\u00e9 pour passer la musique en cours
mathOperationResult=Le r\u00e9sultat est
mathOperationDivisionByZeroError=Je ne peux pas diviser par z\u00e9ro.
mathOperationInfinity=Le nombre est trop grand pour \u00eatre affich\u00e9 \!
-prefix=Prefix
-prefixGuild=The prefix for this guild is {0}
-prefixShowAgain=You can show the prefix anytime again by mentioning me.
+prefix=Pr\u00e9fixe
+prefixGuild=Le pr\u00e9fixe pour cette guilde est {0}
+prefixShowAgain=Vous pouvez montrer le pr\u00e9fixe quand vous le voulez en me mentionnant.
diff --git a/FredBoat/src/main/resources/lang/he_IL.properties b/FredBoat/src/main/resources/lang/he_IL.properties
index 2b4cd07e8..e2b5ad103 100644
--- a/FredBoat/src/main/resources/lang/he_IL.properties
+++ b/FredBoat/src/main/resources/lang/he_IL.properties
@@ -11,8 +11,8 @@ joinJoining=\u05de\u05e6\u05d8\u05e8\u05e3 \u05d0\u05dc {0}
joinErrorAlreadyJoining=\u05d0\u05d9\u05e8\u05e2\u05d4 \u05e9\u05d2\u05d9\u05d0\u05d4. \u05dc\u05d0 \u05d9\u05db\u05d5\u05dc\u05ea\u05d9 \u05dc\u05d4\u05e6\u05d8\u05e8\u05e3 \u05d0\u05dc {0} \u05de\u05db\u05d9\u05d5\u05d5\u05df \u05e9\u05d0\u05e0\u05d9 \u05db\u05d1\u05e8 \u05de\u05e0\u05e1\u05d4 \u05dc\u05d4\u05ea\u05d7\u05d1\u05e8 \u05dc\u05e2\u05e8\u05d5\u05e5 \u05d6\u05d4. \u05d0\u05e0\u05d0 \u05e0\u05e1\u05d4 \u05e9\u05e0\u05d9\u05ea.
pauseAlreadyPaused=\u05d4\u05e0\u05d2\u05df \u05db\u05d1\u05e8 \u05d1\u05d4\u05e9\u05d4\u05d9\u05d4.
pauseSuccess=\u05d4\u05e0\u05d2\u05df \u05de\u05d5\u05e9\u05d4\u05d4 \u05db\u05e8\u05d2\u05e2. \u05d0\u05ea\u05d4 \u05d9\u05db\u05d5\u05dc \u05dc\u05d1\u05d8\u05dc \u05d0\u05ea \u05d4\u05d4\u05e9\u05e2\u05d9\u05d9\u05d4 \u05d1\u05d0\u05de\u05e6\u05e2\u05d5\u05ea `{0}unpause`.
-repeatOnSingle=The player will now repeat the current track.
-repeatOnAll=The player will now repeat the queue.
+repeatOnSingle=\u05d4\u05e0\u05d2\u05df \u05d9\u05d7\u05d6\u05d5\u05e8 \u05db\u05e8\u05d2\u05e2 \u05e2\u05dc \u05d4\u05e9\u05d9\u05e8 \u05d4\u05e0\u05d5\u05db\u05d7\u05d9.
+repeatOnAll=\u05d4\u05e0\u05d2\u05df \u05d9\u05d7\u05d6\u05d5\u05e8 \u05db\u05e8\u05d2\u05e2 \u05e2\u05dc \u05e8\u05e9\u05d9\u05de\u05ea \u05d4\u05d4\u05e9\u05de\u05e2\u05d4.
repeatOff=\u05d4\u05e0\u05d2\u05df \u05dc\u05d0 \u05d9\u05d7\u05d6\u05d5\u05e8 \u05e2\u05dc \u05e2\u05e6\u05de\u05d5.
selectSuccess=\u05e9\u05d9\u05e8 **\#{0}** \u05e0\u05d1\u05d7\u05e8\: **{1}** ({2})
selectInterval=\u05d7\u05d9\u05d9\u05d1 \u05dc\u05d4\u05d9\u05d5\u05ea \u05de\u05e1\u05e4\u05e8 \u05d1\u05d9\u05df 1-{0}.
@@ -20,7 +20,7 @@ selectSelectionNotGiven=\u05d0\u05ea\u05d4 \u05e7\u05d5\u05d3\u05dd \u05e6\u05e8
shuffleOn=\u05d4\u05e0\u05d2\u05df \u05e2\u05db\u05e9\u05d9\u05d5 \u05de\u05e2\u05d5\u05e8\u05d1\u05d1.
shuffleOff=\u05d4\u05e0\u05d2\u05df \u05d0\u05d9\u05e0\u05d5 \u05de\u05e2\u05d5\u05e8\u05d1\u05d1.
reshufflePlaylist=\u05d4\u05ea\u05d5\u05e8 \u05d4\u05ea\u05e2\u05e8\u05d1\u05d1.
-reshufflePlayerNotShuffling=You must first turn on shuffle mode.
+reshufflePlayerNotShuffling=\u05d0\u05ea\u05d4 \u05d7\u05d9\u05d9\u05d1 \u05dc\u05d4\u05e4\u05e2\u05d9\u05dc \u05d0\u05ea \u05e8\u05e9\u05d9\u05de\u05ea \u05d4\u05d4\u05e9\u05de\u05e2\u05d4 \u05d1\u05e1\u05d3\u05e8 \u05e8\u05e0\u05d3\u05d5\u05de\u05dc\u05d9.
skipEmpty=\u05e8\u05e9\u05d9\u05de\u05ea \u05d4\u05e9\u05d9\u05e8\u05d9\u05dd \u05e8\u05d9\u05e7\u05d4\!
skipOutOfBounds=\u05d0\u05d9\u05df \u05d0\u05e4\u05e9\u05e8\u05d5\u05ea \u05dc\u05d4\u05e1\u05d9\u05e8 \u05d0\u05ea \u05e9\u05d9\u05e8 \u05de\u05e1\u05e4\u05e8 {0} \u05db\u05d0\u05e9\u05e8 \u05d9\u05e9 \u05e8\u05e7 {1} \u05e9\u05d9\u05e8\u05d9\u05dd.
skipNumberTooLow=\u05d4\u05de\u05e1\u05e4\u05e8 \u05d4\u05e0\u05ea\u05d5\u05df \u05d7\u05d9\u05d9\u05d1 \u05dc\u05d4\u05d9\u05d5\u05ea \u05d2\u05d3\u05d5\u05dc \u05de-0.
@@ -43,7 +43,7 @@ exportEmpty=\u05d0\u05d9\u05df \u05de\u05d4 \u05dc\u05d9\u05d9\u05e6\u05d0, \u05
exportPlaylistResulted=\u05e4\u05dc\u05d9\u05d9\u05dc\u05d9\u05e1\u05d8 \u05de\u05d9\u05d5\u05e6\u05d0\: {0}\n\u05d0\u05ea\u05d4 \u05d9\u05db\u05d5\u05dc \u05dc\u05ea\u05ea \u05db\u05ea\u05d5\u05d1\u05ea \u05d0\u05ea\u05e8 \u05e2\u05dc \u05de\u05e0\u05ea \u05dc\u05d3\u05d7\u05d5\u05ea \u05d0\u05ea \u05d4\u05e4\u05dc\u05d9\u05d9\u05dc\u05d9\u05d8\u05e1 \u05d4\u05e0\u05d5\u05db\u05d7\u05d9 \u05dc\u05d0\u05d7\u05e8 \u05db\u05da.
exportPlaylistFail=\u05d4\u05e2\u05dc\u05d0\u05ea \u05d4\u05e4\u05dc\u05d9\u05d9\u05dc\u05d9\u05e1\u05d8 \u05dchastebin.com \u05e0\u05db\u05e9\u05dc\u05d4
listShowShuffled=\u05de\u05e6\u05d9\u05d2 \u05e4\u05dc\u05d9\u05d9\u05dc\u05d9\u05e1\u05d8 \u05de\u05e2\u05d5\u05e8\u05d1\u05d1.\n\n
-listShowRepeatSingle=Repeating current track.
+listShowRepeatSingle=\u05d7\u05d5\u05d6\u05e8 \u05e2\u05dc \u05d4\u05e9\u05d9\u05e8 \u05d4\u05e0\u05d5\u05db\u05d7\u05d9.
listShowRepeatAll=Repeating current queue.
listShowHistory=Showing tracks in history.
listAddedBy=**{0}** added by **{1}** `[{2}]`
@@ -183,7 +183,7 @@ ratelimitedGeneralInfo=You are being rate limited\! Please slow down.
ratelimitedSkipCommand=You can skip more than one song by using this command\: {0}
ratelimitedGuildSlowLoadingPlaylist=This server is not allowed to add more playlists at this moment. Please don't spam long playlists.
unblacklisted=Removed {0} from the blacklist.
-serverinfoTitle=Info about **{0}**\:
+serverinfoTitle=Info about {0}\:
serverinfoOnlineUsers=\u05de\u05e9\u05ea\u05de\u05e9\u05d9\u05dd \u05de\u05d7\u05d5\u05d1\u05e8\u05d9\u05dd\:
serverinfoTotalUsers=\u05e1\u05da \u05d4\u05db\u05dc \u05de\u05e9\u05ea\u05de\u05e9\u05d9\u05dd\:
serverinfoRoles=\u05ea\u05e4\u05e7\u05d9\u05d3\u05d9\u05dd\:
@@ -193,7 +193,7 @@ serverinfoGuildID=Guild ID\:
serverinfoCreationDate=Creation Date\:
serverinfoOwner=\u05d1\u05e2\u05dc\u05d9\u05dd\:
serverinfoVLv=Verification Level\:
-userinfoTitle=Information about **{0}**\:
+userinfoTitle=Information about {0}\:
userinfoUsername=\u05e9\u05dd \u05de\u05e9\u05ea\u05de\u05e9\:
userinfoId=ID\:
userinfoNick=Nickname\:
@@ -212,7 +212,11 @@ commandsMaintenance=Maintenance
commandsBotOwner=Bot owner
commandsMoreHelp=Say {0} to get more information on a specific command.
helpUnknownCommand=Unknown command.
-helpDM=Documentation can be found at\:\nhttps\://fredboat.com/docs\n\nWant to add FredBoat to your server? If you have Manage Server permissions for your guild, you can invite it here\:\n*This one doesn''t play music*\n\n\nIf you want to add the music bot, you will want to invite this bot\:\n\n\nNeed help or have any ideas for the bot? Perhaps you just want to hang out? Come on over to FredBoat hangout\!\n{0}\n\nYou cannot send this bot commands through DM.\nBot created by Fre_d
+helpDocsLocation=Documentation can be found at\:
+helpBotInvite=Want to add FredBoat to your server? If you have Manage Server permissions for your guild, you can invite FredBoat\:
+helpHangoutInvite=Need help or have any ideas for FredBoat? Perhaps you just want to hang out? Join the FredBoat community\!
+helpNoDmCommands=You cannot send FredBoat commands through DMs.
+helpCredits=Created by Fre_d and open source contributors
helpSent=Documentation has been sent to your DMs\!
helpProperUsage=Proper usage\:
helpCommandOwnerRestricted=This command is restricted to the owner of the bot.
diff --git a/FredBoat/src/main/resources/lang/hr_HR.properties b/FredBoat/src/main/resources/lang/hr_HR.properties
index 458b71ce4..b8e1b56c7 100644
--- a/FredBoat/src/main/resources/lang/hr_HR.properties
+++ b/FredBoat/src/main/resources/lang/hr_HR.properties
@@ -183,7 +183,7 @@ ratelimitedGeneralInfo=You are being rate limited\! Please slow down.
ratelimitedSkipCommand=You can skip more than one song by using this command\: {0}
ratelimitedGuildSlowLoadingPlaylist=This server is not allowed to add more playlists at this moment. Please don't spam long playlists.
unblacklisted=Removed {0} from the blacklist.
-serverinfoTitle=Informacije o **{0} **\:
+serverinfoTitle=Info about {0}\:
serverinfoOnlineUsers=Online korisnika\:
serverinfoTotalUsers=Ukupno korisnika\:
serverinfoRoles=Uloge\:
@@ -193,7 +193,7 @@ serverinfoGuildID=ID guilda\:
serverinfoCreationDate=Datum kreiranja\:
serverinfoOwner=Vlasnik\:
serverinfoVLv=Provjera razine\:
-userinfoTitle=Informacije o **{0} **\:
+userinfoTitle=Information about {0}\:
userinfoUsername=Korisni\u010dko ime\:
userinfoId=ID\:
userinfoNick=Nadimak\:
@@ -212,7 +212,11 @@ commandsMaintenance=Odr\u017eavanje
commandsBotOwner=Vlasnik bota
commandsMoreHelp=Napi\u0161ite {0} da biste dobili vi\u0161e informacija o odre\u0111enoj naredbi.
helpUnknownCommand=Unknown command.
-helpDM=Documentation can be found at\:\nhttps\://fredboat.com/docs\n\nWant to add FredBoat to your server? If you have Manage Server permissions for your guild, you can invite it here\:\n*This one doesn''t play music*\n\n\nIf you want to add the music bot, you will want to invite this bot\:\n\n\nNeed help or have any ideas for the bot? Perhaps you just want to hang out? Come on over to FredBoat hangout\!\n{0}\n\nYou cannot send this bot commands through DM.\nBot created by Fre_d
+helpDocsLocation=Documentation can be found at\:
+helpBotInvite=Want to add FredBoat to your server? If you have Manage Server permissions for your guild, you can invite FredBoat\:
+helpHangoutInvite=Need help or have any ideas for FredBoat? Perhaps you just want to hang out? Join the FredBoat community\!
+helpNoDmCommands=You cannot send FredBoat commands through DMs.
+helpCredits=Created by Fre_d and open source contributors
helpSent=Upute su poslane u va\u0161 sandu\u010di\u0107 s porukama\!
helpProperUsage=Pravilno kori\u0161tenje\:
helpCommandOwnerRestricted=Ova naredba je ograni\u010dena na vlasnika bota.
diff --git a/FredBoat/src/main/resources/lang/hu_HU.properties b/FredBoat/src/main/resources/lang/hu_HU.properties
index 7fd848139..2279835ce 100644
--- a/FredBoat/src/main/resources/lang/hu_HU.properties
+++ b/FredBoat/src/main/resources/lang/hu_HU.properties
@@ -36,7 +36,7 @@ unpauseQueueEmpty=A lista \u00fcres.
unpausePlayerNotPaused=A lej\u00e1tsz\u00f3 nem le\u00e1ll\u00edtott.
unpauseNoUsers=Nincsenek felhaszn\u00e1l\u00f3k a voice chat-en.
unpauseSuccess=A lej\u00e1tsz\u00f3 most elindult.
-volumeApology=Bocsi\! A ;;volume parancs le\u00e1llt a publikus bot-on. Ez az\u00e9rt van mert id\u00f6 kell az audio feldolgoz\u00e1s\u00e1ra, csak 5 zen\u00e9t tud lej\u00e1tszani egyszerre, nehogy mindenkinek megzavarja a f\u00fcl\u00e9t. A FredBot kikapcsol\u00e1s\u00e1val t\u00f6bb zen\u00e9t tudsz j\u00e1tszani kevesebb lagg-al. Aj\u00e1nlom a bot be\u00e1ll\u00edt\u00e1s\u00e1t a dropdown men\u00fc-n\u00e9l https\://fred.moe/1vD.png
+volumeApology=Bocsi\! A ;;volume parancs le\u00e1llt a publikus bot-on. Ez az\u00e9rt t\u00f6rt\u00e9nt mert id\u0151 kell a hang feldolgoz\u00e1s\u00e1ra, egy p\u00e1r sz\u00e1mn\u00e1l ak\u00e1r \u00f6tsz\u00f6r t\u00f6bb ideig, hang akad\u00e1s\u00e1t okozva mindenkin\u00e9l. Ennek a funkci\u00f3nak a kikapcsol\u00e1s\u00e1val t\u00f6bb zen\u00e9t tudsz j\u00e1tszani kevesebb lagg-al. Aj\u00e1nlom a bot hang erej\u00e9nek a be\u00e1ll\u00edt\u00e1s\u00e1t a dropdown men\u00fc-n\u00e9l https\://fred.moe/1vD.png
volumeSyntax=Haszn\u00e1ld a `;;volume <0-150>`. {0}% az alap. A lej\u00e1tsz\u00f3 most **{1}%** n\u00e1l van.
volumeSuccess=A hanger\u00f6t **{0}%** r\u00f3l **{1}%** ra v\u00e1ltoztattad.
exportEmpty=Semmi sincs hogy kibontsad, a lista \u00fcres.
@@ -45,7 +45,7 @@ exportPlaylistFail=Hiba a lej\u00e1tsz\u00e1si lista felt\u00f6lt\u00e9s\u00e9n\
listShowShuffled=\u00d6sszekevert lista mutat\u00e1sa.
listShowRepeatSingle=Mostani zene ism\u00e9tl\u00e9se.
listShowRepeatAll=Mostani sor ism\u00e9tl\u00e9se.
-listShowHistory=Showing tracks in history.
+listShowHistory=Sz\u00e1mok mutat\u00e1sa az el\u0151zm\u00e9nyekben.
listAddedBy=**{0}** hozz\u00e1 lett adva **{1}** `[{2}]`
listStreamsOnlySingle=Itt csak **{0}** \u00e9l {1} a sorban.
listStreamsOnlyMultiple=Itt **{0}** \u00e9l {1} a sor-ban.
@@ -57,7 +57,7 @@ listAsWellAsLiveStreams=, meg **{0}** \u00e9l\u00f6 {1}
trackSingular=zene
trackPlural=zen\u00e9k
npNotPlaying=Nem j\u00e1tszik semmit.
-npNotInHistory=Currently no tracks in history.
+npNotInHistory=Jelenleg nincsenek sz\u00e1mok az el\u0151zm\u00e9nyekben.
npDescription=Le\u00edr\u00e1s
npLoadedSoundcloud=[{0}/{1}]\n\nBet\u00f6lt\u00f6tt a Soundcloud-r\u00f3l
npLoadedBandcamp={0}\n\nBet\u00f6lt\u00f6tt a Bandcamp-r\u00f6l
@@ -79,7 +79,7 @@ restartSuccess=**{0}** \u00fajraindult.
queueEmpty=A lista \u00fcres.
rewSuccess=Felh\u00faz\u00e1s **{0}** {1}.
seekSuccess=Keres\u00e9s **{0}** {1}.
-seekDeniedLiveTrack=You can't seek a live track.
+seekDeniedLiveTrack=Nem kereshetsz egy \u00e9l\u0151 sz\u00e1mban.
loadPlaySplitListFail=A link egy lej\u00e1tsz\u00e1si list\u00e1hoz vezet, nem zen\u00e9hez. Pr\u00f3b\u00e1ld meg `;;play` helyett.
loadListSuccess=Tal\u00e1lt \u00e9s hozz\u00e1adott `{0}` zen\u00e9t a lej\u00e1tsz\u00e1si list\u00e1r\u00f3l **{1}**.
loadNoMatches=Nincs tal\u00e1lhat\u00f3 zene erre `{0}`.
@@ -132,8 +132,8 @@ brainfuckCycleLimit=A program meghaladta a maximum ciklus sz\u00e1m\u00e1t\n{0}
brainfuckDataPointerOutOfBounds=Adat mutat\u00f3nak nincs t\u00f6bb helye\: {0}
brainfuckInputOOB=Glm helyzete\: {0}
brainfuckNoOutput=\ Nem volt semmi
-weatherLocationNotFound=Unable to find location, please check your input {0}.
-weatherError=Error retrieving weather for {0}
+weatherLocationNotFound=Hely keres\u00e9se sikertelen, k\u00e9rj\u00fck ellen\u0151rizd a bevitelt {0}.
+weatherError=Hiba az id\u0151j\u00e1r\u00e1si adatok lek\u00e9r\u00e9s\u00e9ben {0}-hoz
avatarSuccess=\ megtal\u00e1ltam\n{0}
configNoArgs=Konfigur\u00e1ci\u00f3 ehhez **{0}**\:```
configSetTo=\u00e1llitva van erre `{0}`.
@@ -183,7 +183,7 @@ ratelimitedGeneralInfo=Lelet\u00e9l sebess\u00e9g korl\u00e1t\u00f3zva\! K\u00e9
ratelimitedSkipCommand=E parancs haszn\u00e1lat\u00e1val \u00e1tugorhat egyn\u00e9l t\u00f6bb sz\u00e1mot\: {0}
ratelimitedGuildSlowLoadingPlaylist=Ez a szerver nem enged\u00e9lyezett ahoz t\u00f6bb lej\u00e1tsz\u00e1si list\u00e1t j\u00e1tsz\u00f3n le, ebben a pillanatban. K\u00e9rj\u00fck, ne spamelj hossz\u00fa list\u00e1kat.
unblacklisted=Elt\u00e1volitva {0} a a feketelist\u00e1ra.
-serverinfoTitle=Inf\u00f3 err\u00f6l **{0}**\:
+serverinfoTitle=Info about {0}\:
serverinfoOnlineUsers=Online Felhaszn\u00e1l\u00f3k\:
serverinfoTotalUsers=\u00d6sszes Felhaszn\u00e1l\u00f3\:
serverinfoRoles=Szerepk\u00f6r\u00f6k\:
@@ -193,17 +193,17 @@ serverinfoGuildID=Guild Azonos\u00edt\u00f3\:
serverinfoCreationDate=L\u00e9trehoz\u00e1s D\u00e1tuma\:
serverinfoOwner=Tulajdonos\:
serverinfoVLv=Ellen\u00f6rz\u00e9si Szint\:
-userinfoTitle=Inf\u00f3 r\u00f3la **{0}**\:
+userinfoTitle=Information about {0}\:
userinfoUsername=Felhaszn\u00e1l\u00f3n\u00e9v\:
userinfoId=Azonos\u00edt\u00f3\:
userinfoNick=Becen\u00e9v\:
userinfoKnownServer=Ismert Szerverek\:
userinfoJoinDate=Csatlakoz\u00e1s D\u00e1tuma\:
userinfoCreationTime=L\u00e9trehoz\u00e1s D\u00e1tuma\:
-userinfoBlacklisted=Blacklisted\:
-skipDeniedTooManyTracks=You can't skip someone else's tracks if you are not a DJ.\nConsider using the Voteskip command.
+userinfoBlacklisted=Tilt\u00f3list\u00e1n\:
+skipDeniedTooManyTracks=Nem ugorhatod \u00e1t valaki m\u00e1s sz\u00e1m\u00e1t ha nem vagy DJ.\nFontold meg a Voteskip parancs haszn\u00e1lat\u00e1t.
eventUsersLeftVC=Minden felhaszn\u00e1l\u00f3 lel\u00e9pett. A lej\u00e1tsz\u00f3 meg lett \u00e1ll\u00edtva.
-eventAutoResumed=User presence detected, automatically resuming the player.
+eventAutoResumed=Felhaszn\u00e1l\u00f3 \u00e9szlelve, lej\u00e1tsz\u00f3 automatikus ind\u00edt\u00e1sa.
commandsFun=Sz\u00f3rakoz\u00e1s
commandsMemes=M\u00e9mek
commandsUtility=Seg\u00e9dprogram
@@ -212,7 +212,11 @@ commandsMaintenance=Karbantart\u00e1s alatt
commandsBotOwner=Bot tulajdonos
commandsMoreHelp=Irj {0} hogy kapj t\u00f6bb inform\u00e1ci\u00f3t.
helpUnknownCommand=Ismeretlen parancs.
-helpDM=Dokument\u00e1ci\u00f3 itt tal\u00e1lhat\u00f3\:\nhttps\://fredboat.com/docs\n\nHozz\u00e1 akarod adni FredBoat-ot a szerveredhez? Ha van Manage Server enged\u00e9lyed a sz\u00f6vets\u00e9gedhez, itt h\u00edvhatod meg\:\n*Ez nem j\u00e1tszik zen\u00e9t*\n\n\nHa a zenebotot akarod akkor itt kell megh\u00edvni\:\n\n\nKell seg\u00edts\u00e9g vagy van b\u00e1rmi \u00f6tleted a bothoz? Esetleg csak l\u00f3gni akarsz? Gyere \u00e1t a FredBoat hangout-ba\!\n{0}\n\nNem tudod elk\u00fcldeni ennek a botnak a parancsait K\u00f6zvetlen \u00dczenetben.\nBot created by Fre_d
+helpDocsLocation=Documentation can be found at\:
+helpBotInvite=Want to add FredBoat to your server? If you have Manage Server permissions for your guild, you can invite FredBoat\:
+helpHangoutInvite=Need help or have any ideas for FredBoat? Perhaps you just want to hang out? Join the FredBoat community\!
+helpNoDmCommands=You cannot send FredBoat commands through DMs.
+helpCredits=Created by Fre_d and open source contributors
helpSent=A dokumentum el lett k\u00fcldve a DM edhez\!
helpProperUsage=Megfelel\u00f6 haszn\u00e1lat\:
helpCommandOwnerRestricted=Ez a command csak a tulajdonosra \u00e9s a botra tartozik.
@@ -225,7 +229,7 @@ helpMusicCommandsHeader=FredBoat Zene Parancsok
helpJoinCommand=Csin\u00e1ld meg a botot hogy csatlakozzon a voice channelhez.
helpLeaveCommand=Csin\u00e1ld meg a botot hogy lel\u00e9pjen a voice channelr\u00f6l.
helpPauseCommand=Sz\u00fcneteld a lej\u00e1tsz\u00f3t.
-helpPlayCommand=Play music from the given URL or search for a track. For a full list of sources please visit {0}
+helpPlayCommand=J\u00e1tssz le egy zen\u00e9t a megadott URL alapj\u00e1n vagy keress egy sz\u00e1mo. A forr\u00e1sok teljes list\u00e1j\u00e1hoz k\u00e9rj\u00fck l\u00e1togasd meg a {0} oldalt
helpPlaySplitCommand=YouTube vide\u00f3 feloszt\u00e1sa a list\u00e1ba.
helpRepeatCommand=Ism\u00e9tl\u00f6 m\u00f3d k\u00f6z\u00f6tt kapcsold be.
helpReshuffleCommand=Keverd \u00f6ssze a list\u00e1t.
@@ -259,7 +263,7 @@ helpUserInfoCommand=Inform\u00e1ci\u00f3k megjelen\u00edt\u00e9se r\u00f3lad vag
helpPerms=Allows whitelisting members and roles for the {0} rank.
helpPrefixCommand=Set the prefix for this guild.
helpVoteSkip=Vote to skip the current song. Needs 50% of all users in the voice chat to vote.
-helpMathOperationAdd=Print the sum of num1 and num2.
+helpMathOperationAdd=Ki\u00edrja num1 \u00e9s num2 \u00f6sszeg\u00e9t.
helpMathOperationSub=Print the difference of subtracting num2 from num1.
helpMathOperationMult=Print the product of num1*num2.
helpMathOperationDiv=Print the quotient of dividing num1 by num2.
@@ -281,7 +285,7 @@ fuzzyMultiple=Multiple items were found. Did you mean any of these?
fuzzyNothingFound=Nem talalom ''{0}''.
cmdPermsTooLow=Ehhez nincs jogod\!
playersLimited=FredBoat \u00e9ppen maximum kapacit\u00e1son van\! A bot \u00e9ppen r\u00f6gz\u00edtett hogy csak `{0}` helyen \u00e1ramoljon, m\u00e1sk\u00e9ppen megkock\u00e1ztatn\u00e1nk, hogy lecsatlakozzon a Discord-r\u00f3l h\u00e1l\u00f3zat t\u00f6lt\u00e9se k\u00f6zben.\nHa seg\u00edteni akarsz n\u00f6velni a limitet vagy nem t\u00falzs\u00fafolt botot akarsz haszn\u00e1lni, k\u00e9rlek seg\u00edts a munk\u00e1nkon a Patreon oldalon\:\n{1}\n\nEln\u00e9z\u00e9st a k\u00e9nyelmetlens\u00e9g\u00e9rt. Tal\u00e1n pr\u00f3b\u00e1ld \u00fajra k\u00e9s\u00f6bb. Ez az \u00fczenet \u00e1ltal\u00e1ban cs\u00facsid\u0151k\u00f6n szokott megjelenni.
-tryLater=Please try again later.
+tryLater=K\u00e9rj\u00fck, pr\u00f3b\u00e1lja \u00fajra k\u00e9s\u0151bb.
skipUserSingle=Skipped {0} added by {1}.
skipUserMultiple=Skipped {0} tracks added by {1}.
skipUsersMultiple=Skipped {0} tracks added by {1} users.
diff --git a/FredBoat/src/main/resources/lang/id_ID.properties b/FredBoat/src/main/resources/lang/id_ID.properties
index 72dba6480..30d077cc3 100644
--- a/FredBoat/src/main/resources/lang/id_ID.properties
+++ b/FredBoat/src/main/resources/lang/id_ID.properties
@@ -45,8 +45,8 @@ exportPlaylistFail=Gagal mengupload Playlist ke hastebin.com
listShowShuffled=Menampilkan Playlist Acak.\n\n
listShowRepeatSingle=Mengulang trek saat ini.
listShowRepeatAll=Mengulang antrian lagu saat ini.
-listShowHistory=Showing tracks in history.
-listAddedBy=**{0}** added by **{1}** `[{2}]`
+listShowHistory=Menampilkan trek dalam sejarah.
+listAddedBy=**{0}** ditambahkan oleh **{1}** `[{2}]`
listStreamsOnlySingle=Ada **{0} ** stream {1} dalam antrian.
listStreamsOnlyMultiple=Ada **{0} ** stream {1} dalam antrian.
listStreamsOrTracksSingle=Ada **{0} ** {1} dengan waktu tersisa ** [{2}] **{3} dalam antrian.
@@ -57,7 +57,7 @@ listAsWellAsLiveStreams=serta **{0}** sedang diputar {1}
trackSingular=track
trackPlural=tracks
npNotPlaying=Tidak sedang memainkan apapun.
-npNotInHistory=Currently no tracks in history.
+npNotInHistory=Saat ini tidak ada jejak dalam sejarah.
npDescription=Deskripsi
npLoadedSoundcloud=[{0}/{1}]\n\nmengambil dari Soundcloud
npLoadedBandcamp={0}\n\nMengambil dari Bandcamp
@@ -79,7 +79,7 @@ restartSuccess=**{0}** telah di restart.
queueEmpty=Antrian lagu kosong.
rewSuccess=Memutar balik **{0}** ke {1}.
seekSuccess=Mencari **{0} ** untuk {1}.
-seekDeniedLiveTrack=You can't seek a live track.
+seekDeniedLiveTrack=Anda tidak bisa mencari lagu live.
loadPlaySplitListFail=Link tersebut mengarah ke Playlist. Bukan track. Gunakan `;;play`.
loadListSuccess=Menemukan dan menambahkan `{0}` dari playlist **{1}**.
loadNoMatches=Tidak ada Audio ditemukan dari `{0}`.
@@ -125,15 +125,15 @@ luaError=\ A Lua error occured \:anger\:\n```{0}```
luaErrorOutputTooBig=\ Output buffer terlalu besar \:anger\: Discord membatasi 2000 karakter per pesan, terdapat {0} Karakter
luaTimeout=\ Fungsi habis \:anger\: memungkinkan perhitungan waktu {0} detik.
helpSuccess=Dokumentasi telah dikirim ke pesan langsung kamu\!
-helpDmFailed=Could not send documentation to your DMs. Please check that you don't have them disabled\!
+helpDmFailed=Tidak dapat mengirim dokumentasi ke DM Anda. Harap periksa apakah Anda tidak memilikinya dinonaktifkan\!
helpCommandsPromotion=Sebut {0} untuk mempelajari apa yang dapat bot ini lakukan\!
fuzzyNoResults=Tidak ada pengguna tersebut
brainfuckCycleLimit=Program melebihi jumlah maksimum siklus {0}
brainfuckDataPointerOutOfBounds=Data pointer out of bounds\: {0}
brainfuckInputOOB=Input out of bounds at position\: {0}
brainfuckNoOutput=\ Tidak ada Output
-weatherLocationNotFound=Unable to find location, please check your input {0}.
-weatherError=Error retrieving weather for {0}
+weatherLocationNotFound=Tidak dapat menemukan lokasi, harap periksa masukan Anda {0}.
+weatherError=Terjadi kesalahan saat mengambil cuaca untuk {0}
avatarSuccess=\ aku menemukannya\n{0}
configNoArgs=Konfigurasi untuk **{0}**\:```
configSetTo=sekarang diatur ke ''{0}''.
@@ -200,10 +200,10 @@ userinfoNick=Nama Panggilan\:
userinfoKnownServer=Server yang dikenal\:
userinfoJoinDate=Tanggal Bergabung\:
userinfoCreationTime=Tanggal Pembuatan\:
-userinfoBlacklisted=Blacklisted\:
-skipDeniedTooManyTracks=You can't skip someone else's tracks if you are not a DJ.\nConsider using the Voteskip command.
+userinfoBlacklisted=Daftar hitam\:
+skipDeniedTooManyTracks=Anda tidak bisa melewati jejak orang lain jika Anda bukan seorang DJ. Pertimbangkan untuk menggunakan perintah Voteskip.
eventUsersLeftVC=Semua pengguna telah meninggalkan channel suara. Pemutar musik telah dijeda.
-eventAutoResumed=User presence detected, automatically resuming the player.
+eventAutoResumed=Kehadiran pengguna terdeteksi, otomatis melanjutkan player.
commandsFun=Kesenangan
commandsMemes=Meme
commandsUtility=Kegunaan
@@ -212,7 +212,11 @@ commandsMaintenance=Perbaikan
commandsBotOwner=Pemilik bot
commandsMoreHelp=Katakanlah {0} untuk mendapatkan informasi lebih lanjut tentang perintah tertentu
helpUnknownCommand=Perintah Tidak Ditemukan.
-helpDM=Documentation can be found at\:\nhttps\://fredboat.com/docs\n\nWant to add FredBoat to your server? If you have Manage Server permissions for your guild, you can invite it here\:\n*This one doesn''t play music*\n\n\nIf you want to add the music bot, you will want to invite this bot\:\n\n\nNeed help or have any ideas for the bot? Perhaps you just want to hang out? Come on over to FredBoat hangout\!\n{0}\n\nYou cannot send this bot commands through DM.\nBot created by Fre_d
+helpDocsLocation=Dokumentasi dapat ditemukan di\:
+helpBotInvite=Ingin menambahkan FredBoat ke server Anda? Jika Anda memiliki Server mengelola izin untuk guild, Anda dapat mengundang FredBoat\:
+helpHangoutInvite=Memerlukan bantuan atau punya ide untuk FredBoat? Mungkin Anda hanya ingin bergaul? Ikut komunitas FredBoat\!
+helpNoDmCommands=Anda tidak dapat mengirim perintah FredBoat melalui DMs.
+helpCredits=Dibuat oleh Fre_d dan sumber terbuka kontributor
helpSent=Dokumentasi telah dikirim ke DMS Anda\!
helpProperUsage=Penggunaan yang tepat\:
helpCommandOwnerRestricted=Perintah ini di ban oleh pemilik bot.
@@ -225,20 +229,20 @@ helpMusicCommandsHeader=FredBoat Perintah Musik
helpJoinCommand=Membuat bot bergabung kedalam voice channel yang Anda masuki.
helpLeaveCommand=Membuat bot meninggalkan voice channel yang telah masuki.
helpPauseCommand=Menjeda pemutar musik.
-helpPlayCommand=Play music from the given URL or search for a track. For a full list of sources please visit {0}
+helpPlayCommand=Mainkan musik dari URL yang diberikan atau cari trek. Untuk daftar lengkap sumber silakan kunjungi {0}
helpPlaySplitCommand=Membagi YouTube video ke dalam daftar lagu yang disediakan dalam deskripsi tersebut.
helpRepeatCommand=Beralih antara mode berulang.
helpReshuffleCommand=Mengacak ulang antrian lagu saat ini.
helpSelectCommand=Pilih salah satu trek yang ditawarkan setelah pencarian untuk memainkannya.
helpShuffleCommand=Beralih mode acak untuk antrian lagu saat ini.
-helpSkipCommand=Skip the current song, the n'th song in the queue, all songs from n to m, or all songs from mentioned users. Please use in moderation.
+helpSkipCommand=Lewati lagu saat ini, lagu n'th dalam antrian, semua lagu dari n ke m, atau semua lagu dari pengguna yang disebutkan di atas. Mohon gunakan secukupnya.
helpStopCommand=Menghentikan pemutar musik dan membersihkan daftar lagu. Diperuntukkan bagi moderator dengan izin mengelola pesan.
helpUnpauseCommand=Menjalankan kembali pemutar musik.
helpVolumeCommand=Mengubah volume. Nilainya dari 0-150 dan 100 adalah default. Perintah volume tidak digunakan lagi pada bot publik.
helpExportCommand=Ekspor antrian saat ini ke tautan hastebin, dapat digunakan nanti sebagai daftar putar.
helpGensokyoRadioCommand=Menampilkan lagu saat ini yang dimainkan di gensokyoradio.net
helpListCommand=Menampilkan daftar lagu saat ini dalam daftar putar.
-helpHistoryCommand=Display a list of the songs in playlist history.
+helpHistoryCommand=Tampilkan daftar lagu dalam riwayat daftar putar.
helpNowplayingCommand=Menampilkan lagu yang sedang diputar.
helpForwardCommand=Meneruskan trek dengan jumlah waktu yang ditentukan. \nContoh\:
helpRestartCommand=Restart trek yang sedang diputar.
@@ -246,7 +250,7 @@ helpRewindCommand=Memundurkan trek dengan jumlah waktu yang ditentukan.\nContoh\
helpSeekCommand=Mengatur posisi trek ke waktu yang ditentukan.\nContoh\:
helpAvatarCommand=Menampilkan avatar pengguna.
helpBrainfuckCommand=Mengeksekusi kode Brainfuck. Contoh\:
-helpWeatherCommand=Display current weather by location.
+helpWeatherCommand=Tampilkan cuaca saat ini menurut lokasi.
helpClearCommand=Menghapus semua pesan oleh bot ini dalam pesan terakhir 50 channel ini.
helpCommandsCommand=Menampilkan perintah yang tersedia.
helpHelpCommand=Menerima bantuan untuk bot ini atau bantuan untuk setiap perintah.
@@ -257,16 +261,16 @@ helpSayCommand=Membuat bot mengatakan sesuatu.
helpServerInfoCommand=Menampilkan beberapa statistik tentang server ini.
helpUserInfoCommand=Menampilkan informasi yang diketahui bot tentang diri kamu atau pengguna.
helpPerms=Membolehkan Anggota Untuk Mengakses Dan Peran Untuk Peringkat. {0}
-helpPrefixCommand=Set the prefix for this guild.
-helpVoteSkip=Vote to skip the current song. Needs 50% of all users in the voice chat to vote.
-helpMathOperationAdd=Print the sum of num1 and num2.
-helpMathOperationSub=Print the difference of subtracting num2 from num1.
-helpMathOperationMult=Print the product of num1*num2.
-helpMathOperationDiv=Print the quotient of dividing num1 by num2.
-helpMathOperationMod=Print the remainder of dividing num1 by num2.
-helpMathOperationPerc=Print the percentage represented by num1 in num2.
-helpMathOperationSqrt=Print the square root of num.
-helpMathOperationPow=Print the result of num1^num2.
+helpPrefixCommand=Tetapkan awalan untuk guild ini.
+helpVoteSkip=Pilih untuk melewatkan lagu yang sedang diputar. Membutuhkan 50% dari semua pengguna di voice chat untuk memilih.
+helpMathOperationAdd=Cetak jumlah num1 dan num2.
+helpMathOperationSub=Cetak perbedaan penguraian num2 dari num1.
+helpMathOperationMult=Cetak produk num1 * num2.
+helpMathOperationDiv=Cetak hasil bagi membagi num1 dengan num2.
+helpMathOperationMod=Cetak sisa membagi num1 dengan num2.
+helpMathOperationPerc=Cetak persentase yang ditunjukkan oleh num1 di num2.
+helpMathOperationSqrt=Cetak akar kuadrat num.
+helpMathOperationPow=Cetak hasil num1 ^ num2.
destroyDenied=Kamu Harus Memiliki Izin Pengaturan Pesan Untuk Mengatur Ulang Pemutar.
destroyHelp=Mengatur Ulang Pemutar Dan Membersihkan Daftar Lagu. Diperuntukkan Untuk Moderator Dengan Izin Mengelola Pesan.
destroySucc=Mengatur Kembali Pemutar Dan Membersihkan Antrian.
@@ -275,27 +279,27 @@ permsListTitle=Pengguna Dan Peran Dengan Izin {0}
permsAdded=Menambahkan ''{0}'' Ke ''{1}''.
permsRemoved=Menghapus ''{0}'' Dari ''{1}''.
permsFailSelfDemotion=Kamu Tidak Bisa Menghapus Ini Karena akan membuat Anda tanpa izin Admin\!
-permsAlreadyAdded={0} already added to {1}
-permsNotAdded={0} is not in {1}
+permsAlreadyAdded={0} sudah ditambahkan ke {1}
+permsNotAdded={0} tidak di {1}
fuzzyMultiple=Beberapa Lagu Yang Ditemukan. Apa Yang Kamu Cari Dengan Lagu ini?
fuzzyNothingFound=Tidak Ada Yang Ditemukan Untuk ''{0}''.
cmdPermsTooLow=Anda tidak memiliki izin untuk menjalankan perintah ini\! Perintah ini Membutuhkan ''{0}'' tetapi Anda hanya memiliki ''{1}''.
-playersLimited=FredBoat is currently at maximum capacity\! The bot is currently fixed to only play up to `{0}` streams, otherwise we would risk disconnecting from Discord under the network load.\nIf you want to help us increase the limit or you want to use our non-overcrowded bot, please support our work on Patreon\:\n{1}\n\nSorry for the inconvenience\! You might want to try again later. This message usually only appears at peak time.
+playersLimited=FredBoat saat ini kapasitas maksimal\! Bot saat ini diperbaiki hanya untuk bermain dengan aliran ` {0} `, jika tidak, kami akan mengambil risiko melepaskan diri dari Discord di bawah beban jaringan. Jika Anda ingin membantu kami meningkatkan batas atau Anda ingin menggunakan bot kami yang tidak terlalu penuh, tolong dukung pekerjaan kami di Patreon\:\n {1} \n\nMaaf atas ketidaknyamanannya\! Anda mungkin ingin mencoba lagi nanti. Pesan ini biasanya hanya muncul pada waktu puncak.
tryLater=Silakan coba sesaat lagi.
-skipUserSingle=Skipped {0} added by {1}.
-skipUserMultiple=Skipped {0} tracks added by {1}.
-skipUsersMultiple=Skipped {0} tracks added by {1} users.
-skipUserNoTracks=None of the mentioned users have any tracks queued.
-voteSkipAdded=Your vote has been added\!
-voteSkipAlreadyVoted=You already voted to skip this track\!
-voteSkipSkipping={0} have voted to skip. Skipping track {1}.
-voteSkipNotEnough={0} have voted to skip. At least {1} needed.
-voteSkipEmbedNoVotes=No votes to skip this track yet.
-voteSkipEmbedVoters={0} out of {1} have voted to skip the current track
-mathOperationResult=The result is
+skipUserSingle=Dilewati {0} ditambahkan oleh {1}.
+skipUserMultiple=Melewati {0} trek yang ditambahkan oleh {1}.
+skipUsersMultiple=Melewati {0} trek yang ditambahkan oleh {1} pengguna.
+skipUserNoTracks=Tidak satu pun pengguna yang disebutkan memiliki antrean.
+voteSkipAdded=Suara Anda telah ditambahkan\!
+voteSkipAlreadyVoted=Anda telah memilih untuk melewati jalur ini\!
+voteSkipSkipping={0} telah memilih untuk melompati Melewati lintasan {1}.
+voteSkipNotEnough={0} telah memilih untuk melompati Paling sedikit dibutuhkan {1}.
+voteSkipEmbedNoVotes=Tidak ada suara untuk melewati jalur ini.
+voteSkipEmbedVoters={0} dari {1} telah memilih untuk melewati jalur saat ini
+mathOperationResult=Hasilnya adalah
mathOperationDivisionByZeroError=Gua ga bisa bagi nol dengan nol >\:(.
mathOperationInfinity=Angkanya terlalu besar untuk ditampilkan\!
-prefix=Prefix
-prefixGuild=The prefix for this guild is {0}
-prefixShowAgain=You can show the prefix anytime again by mentioning me.
+prefix=Awalan
+prefixGuild=Awalan untuk guild ini adalah {0}
+prefixShowAgain=Anda bisa menunjukkan awalan kapan saja dengan menyebutkan saya.
diff --git a/FredBoat/src/main/resources/lang/it_IT.properties b/FredBoat/src/main/resources/lang/it_IT.properties
index f5ac79384..a03639529 100644
--- a/FredBoat/src/main/resources/lang/it_IT.properties
+++ b/FredBoat/src/main/resources/lang/it_IT.properties
@@ -183,7 +183,7 @@ ratelimitedGeneralInfo=Sei limitato\! Per favore rallenta.
ratelimitedSkipCommand=Si pu\u00f2 saltare pi\u00f9 di una canzone utilizzando questo comando\: {0}
ratelimitedGuildSlowLoadingPlaylist=A questo server non \u00e8 consentito aggiungere pi\u00f9 playlist in questo momento. Per favore, non spam le liste di gioco lunghe.
unblacklisted=Rimosso {0} dalla lista nera.
-serverinfoTitle=Info su **{0}**\:
+serverinfoTitle=Info su {0}\:
serverinfoOnlineUsers=Utenti online\:
serverinfoTotalUsers=Utenti totali\:
serverinfoRoles=Ruoli\:
@@ -193,7 +193,7 @@ serverinfoGuildID=ID della gilda\:
serverinfoCreationDate=Data di creazione\:
serverinfoOwner=Proprietario\:
serverinfoVLv=Verifica del testo\:
-userinfoTitle=Informazioni su **{0}**\:
+userinfoTitle=Informazioni su {0}\:
userinfoUsername=Nome utente\:
userinfoId=ID\:
userinfoNick=Nickname\:
@@ -212,7 +212,11 @@ commandsMaintenance=Manutenzione
commandsBotOwner=Proprietario di Bot
commandsMoreHelp=Dire {0} per ottenere ulteriori informazioni su un comando specifico.
helpUnknownCommand=Comando sconosciuto.
-helpDM=La documentazione si trova a\:\nhttps\://fredboat.com/docs\n\nVuoi aggiungere FredBoat al tuo server? Se hai le autorizzazioni di Gestione Server per la tua gilda, puoi invitarlo qui\:\n* Questo non suona musica *\n\n\nSe vuoi aggiungere il bot di musica, vuoi invitare questo bot\:\n\n\nHai bisogno di aiuto o hai qualche idea per il bot? Forse vuoi solo uscire? Vieni al hangout di FredBoat\!\n{0}\n\nNon \u00e8 possibile inviare i comandi di bot tramite DM.\nBot creato da Fre_d
+helpDocsLocation=Si puo trovare la documentazione su\:
+helpBotInvite=Vuoi aggiungere FredBoat al tuo server? se hai l'autorizzazione per aggiungere membri, puoi invitare FredBoat\:
+helpHangoutInvite=Bai bisogno di aiuto o hai qualche idea per FredBoat? Forse volete solo parlare? Unisciti alla comunit\u00e0 di FredBoat\!
+helpNoDmCommands=Non \u00e8 possibile inviare comandi di FredBoat tramite DMs.
+helpCredits=Creato da Fre_d e collaboratori open source
helpSent=La documentazione \u00e8 stata inviata ai vostri DM\!
helpProperUsage=Utilizzo corretto\:
helpCommandOwnerRestricted=Questo comando \u00e8 limitato al proprietario del bot.
@@ -257,7 +261,7 @@ helpSayCommand=Fare il bot eco qualcosa.
helpServerInfoCommand=Visualizzare alcune statistiche circa questa gilda.
helpUserInfoCommand=Visualizzare le informazioni su di te o un utente noto al bot.
helpPerms=Concedi ai ruoli e membri autorizzati il rank {0}.
-helpPrefixCommand=Set the prefix for this guild.
+helpPrefixCommand=Imposta il prefisso per questa gilda.
helpVoteSkip=Votare per saltare il brano corrente. Ha bisogno del 50% di tutti gli utenti nella chat vocale per saltare.
helpMathOperationAdd=Ti dice la somma del numero 1 e del numero 2.
helpMathOperationSub=Ti dice la differenza tra il numero 1 e il numero 2.
@@ -295,7 +299,7 @@ voteSkipEmbedVoters={0} su {1} hanno votato per saltare il brano
mathOperationResult=Il risultato \u00e8
mathOperationDivisionByZeroError=Io non posso dividere per zero.
mathOperationInfinity=Il numero \u00e8 troppo grande per essere visualizzato\!
-prefix=Prefix
-prefixGuild=The prefix for this guild is {0}
-prefixShowAgain=You can show the prefix anytime again by mentioning me.
+prefix=Prefisso
+prefixGuild=Il prefisso per questa gilda \u00e8 {0}
+prefixShowAgain=Puoi visualizzare il prefisso ogni volta menzionandomi.
diff --git a/FredBoat/src/main/resources/lang/ja_JP.properties b/FredBoat/src/main/resources/lang/ja_JP.properties
index 49cfe5ff2..d8a9e686d 100644
--- a/FredBoat/src/main/resources/lang/ja_JP.properties
+++ b/FredBoat/src/main/resources/lang/ja_JP.properties
@@ -8,7 +8,7 @@ playYoutubeSearchError=YouTube\u3092\u691c\u7d22\u3059\u308b\u3068\u304d\u306b\u
playSearchNoResults=`{q}`\u306e\u691c\u7d22\u7d50\u679c\u304c\u3042\u308a\u307e\u305b\u3093\u3067\u3057\u305f\u3002
playSelectVideo=** ` {0} play 1-5`\u30b3\u30de\u30f3\u30c9\u3067\u66f2\u3092\u9078\u629e\u3057\u3066\u304f\u3060\u3055\u3044\uff1a**
joinJoining={0} \u306b\u53c2\u52a0\u3057\u307e\u3057\u305f\u3002
-joinErrorAlreadyJoining=\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f\u3002Fredboat\u306f\u3059\u3067\u306b\u305d\u306e\u30c1\u30e3\u30cd\u30eb\u306b\u63a5\u7d9a\u3057\u3088\u3046\u3068\u3057\u3066\u3044\u308b\u306e\u3067\u3001{0} \u3092\u53c2\u52a0\u3067\u304d\u306a\u304b\u3063\u305f\u3002\u3082\u3046\u4e00\u5ea6\u3084\u308a\u76f4\u3057\u3066\u304f\u3060\u3055\u3044\u3002
+joinErrorAlreadyJoining=\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f\u3002Fredboat\u306f\u3059\u3067\u306b\u305d\u306e\u30c1\u30e3\u30cd\u30eb\u306b\u63a5\u7d9a\u3057\u3088\u3046\u3068\u3057\u3066\u3044\u308b\u306e\u3067\u3001{0} \u306b\u306f\u53c2\u52a0\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\u3002\u3082\u3046\u4e00\u5ea6\u3084\u308a\u76f4\u3057\u3066\u304f\u3060\u3055\u3044\u3002
pauseAlreadyPaused=\u30d7\u30ec\u30fc\u30e4\u30fc\u306f\u65e2\u306b\u4e00\u6642\u505c\u6b62\u3057\u3066\u3044\u307e\u3059\u3002
pauseSuccess=\u30d7\u30ec\u30a4\u30e4\u30fc\u306f\u3053\u306e\u4e00\u6642\u505c\u6b62\u3067\u3059\u3002''{0}unpause'' \u3067\u518d\u958b\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002
repeatOnSingle=\u3053\u306e\u30c8\u30e9\u30c3\u30af\u306f\u4eca\u30ea\u30d4\u30fc\u30c8\u4e2d\u3067\u3059\u3002
@@ -19,7 +19,7 @@ selectInterval=\u756a\u53f7 1-{0} \u3092\u9078\u629e\u3059\u308b\u5fc5\u8981\u30
selectSelectionNotGiven=\u6700\u521d\u306b\u9078\u629e\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002
shuffleOn=\u3053\u306e\u30d7\u30ec\u30a4\u30e4\u30fc\u306f\u30b7\u30e3\u30c3\u30d5\u30eb\u3055\u308c\u307e\u3057\u305f\u3002
shuffleOff=\u30d7\u30ec\u30a4\u30e4\u30fc\u306f\u30b7\u30e3\u30c3\u30d5\u30eb\u3055\u308c\u306a\u304f\u306a\u308a\u307e\u3057\u305f\u3002
-reshufflePlaylist=\u30ad\u30e5\u30fc\u304c\u518d\u7de8\u3055\u308c\u307e\u3057\u305f\u3002
+reshufflePlaylist=\u30ad\u30e5\u30fc\u3092\u3082\u3046\u4e00\u5ea6\u30b7\u30e3\u30c3\u30d5\u30eb\u3057\u307e\u3059\u3002
reshufflePlayerNotShuffling=\u307e\u305a\u3001\u30b7\u30e3\u30c3\u30d5\u30eb \u30e2\u30fc\u30c9\u3092\u30aa\u30f3\u306b\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002
skipEmpty=\u30ad\u30e5\u30fc\u306b\u4f55\u3082\u3042\u308a\u307e\u305b\u3093\uff01
skipOutOfBounds={1} \u30c8\u30e9\u30c3\u30af\u304c\u304c\u3042\u308b\u3068\u304d\u306f\u3001\u30c8\u30e9\u30c3\u30af\u756a\u53f7 {0} \u3092\u524a\u9664\u3067\u304d\u307e\u305b\u3093\u3002
@@ -183,7 +183,7 @@ ratelimitedGeneralInfo=\u3042\u306a\u305f\u306f\u30ec\u30fc\u30c8\u5236\u9650\u3
ratelimitedSkipCommand=\u6b21\u306e\u30b3\u30de\u30f3\u30c9\u3092\u4f7f\u7528\u3057\u3066\u8907\u6570\u306e\u66f2\u3092\u30b9\u30ad\u30c3\u30d7\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\uff1a{0}
ratelimitedGuildSlowLoadingPlaylist=\u73fe\u5728\u3001\u3053\u306e\u30b5\u30fc\u30d0\u30fc\u3067\u306f\u3001\u3053\u308c\u4ee5\u4e0a\u30d7\u30ec\u30a4\u30ea\u30b9\u30c8\u3092\u8ffd\u52a0\u3059\u308b\u3053\u3068\u306f\u8a31\u53ef\u3055\u308c\u3066\u3044\u307e\u305b\u3093\u3002\u9577\u3044\u30d7\u30ec\u30a4\u30ea\u30b9\u30c8\u3092\u30b9\u30d1\u30e0\u3057\u306a\u3044\u3067\u304f\u3060\u3055\u3044\u3002
unblacklisted={0} \u3092\u30d6\u30e9\u30c3\u30af\u30ea\u30b9\u30c8\u304b\u3089\u6d88\u53bb\u3057\u307e\u3057\u305f\u3002
-serverinfoTitle=**{0}** \u306b\u95a2\u3057\u3066\u306e\u60c5\u5831\:
+serverinfoTitle={0} \u306b\u95a2\u3059\u308b\u60c5\u5831\:
serverinfoOnlineUsers=\u30aa\u30f3\u30e9\u30a4\u30f3\u30e6\u30fc\u30b6\u30fc\:
serverinfoTotalUsers=\u5408\u8a08\u30e6\u30fc\u30b6\u30fc\u6570\uff1a
serverinfoRoles=\u5f79\u5272\:
@@ -193,7 +193,7 @@ serverinfoGuildID=\u30ae\u30eb\u30c9ID\:
serverinfoCreationDate=\u4f5c\u6210\u65e5\:
serverinfoOwner=\u30aa\u30fc\u30ca\u30fc\:
serverinfoVLv=\u8a8d\u8a3c\u30ec\u30d9\u30eb\:
-userinfoTitle=**{0}** \u306b\u95a2\u3059\u308b\u60c5\u5831\:
+userinfoTitle={0} \u306b\u95a2\u3059\u308b\u60c5\u5831\:
userinfoUsername=\u30e6\u30fc\u30b6\u30fc\u540d\uff1a
userinfoId=ID\:
userinfoNick=\u30cb\u30c3\u30af\u30cd\u30fc\u30e0\:
@@ -212,7 +212,11 @@ commandsMaintenance=\u30e1\u30f3\u30c6\u30ca\u30f3\u30b9
commandsBotOwner=bot\u306e\u30aa\u30fc\u30ca\u30fc
commandsMoreHelp={0} \u3068\u767a\u8a00\u3059\u308b\u3053\u3068\u3067\u3001\u7279\u5b9a\u306e\u30b3\u30de\u30f3\u30c9\u306b\u3064\u3044\u3066\u306e\u60c5\u5831\u3092\u8a73\u3057\u304f\u8868\u793a\u3067\u304d\u307e\u3059\u3002
helpUnknownCommand=\u4e0d\u660e\u306a\u30b3\u30de\u30f3\u30c9\u3002
-helpDM=\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u306fhttps\://fredboat.com/docs\u306b\u3042\u308a\u307e\u3059\u3002\u30b5\u30fc\u30d0\u30fc\u306bFredBoat\u3092\u8ffd\u52a0\u3057\u307e\u3059\u304b\uff1f\u3042\u306a\u305f\u306e\u30ae\u30eb\u30c9\u306e\u30b5\u30fc\u30d0\u7ba1\u7406\u6a29\u9650\u304c\u3042\u308b\u5834\u5408\u306f\u3001\u3053\u3053\u306b\u62db\u5f85\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\uff1a*\u3053\u308c\u306f\u97f3\u697d\u3092\u518d\u751f\u3057\u307e\u305b\u3093\u3002*\n \n\n\u97f3\u697d\u30dc\u30c3\u30c8\u3092\u8ffd\u52a0\u3057\u305f\u3044\u5834\u5408\u306f\u3001\u3053\u306e\u30dc\u30c3\u30c8\uff1a\u30dc\u30c3\u30c8\u306e\n \n\n\u52a9\u3051\u3084\u30a2\u30a4\u30c7\u30a2\u304c\u5fc5\u8981\u3067\u3059\u304b\uff1f\u305f\u3076\u3093\u3042\u306a\u305f\u306f\u30cf\u30f3\u30b0\u30a2\u30a6\u30c8\u3057\u305f\u3044\u306e\u3067\u3059\u304b\uff1fFredBoat\u30cf\u30f3\u30b0\u30a2\u30a6\u30c8\u306b\u6765\u3066\u304f\u3060\u3055\u3044\uff01\n{0} \n\n\u3053\u306e\u30dc\u30c3\u30c8\u30b3\u30de\u30f3\u30c9\u3092DM\u7d4c\u7531\u3067\u9001\u4fe1\u3059\u308b\u3053\u3068\u306f\u3067\u304d\u307e\u305b\u3093\u3002Fre_d\u306b\u3088\u3063\u3066\u4f5c\u6210\u3055\u308c\u305f\u30dc\u30c3\u30c8
+helpDocsLocation=\u4ed5\u69d8\u66f8\u306f\u3053\u3061\u3089\:
+helpBotInvite=Fredboat\u3092\u3042\u306a\u305f\u306e\u30b5\u30fc\u30d0\u30fc\u306b\u8ffd\u52a0\u3057\u305f\u3044\u3067\u3059\u304b\uff1f\u3082\u3057\u3042\u306a\u305f\u304c\u30b5\u30fc\u30d0\u30fc\u306e\u7ba1\u7406\u306e\u6a29\u9650\u3092\u304a\u6301\u3061\u3067\u3057\u305f\u3089\u3001\u3053\u3061\u3089\u304b\u3089Fredboat\u3092\u62db\u5f85\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\:
+helpHangoutInvite=Fredboat\u306b\u95a2\u3057\u3066\u30d8\u30eb\u30d7\u304c\u5fc5\u8981\u3067\u3059\u304b\uff1f\u305d\u308c\u3068\u3082\u30a2\u30a4\u30c7\u30a2\u304c\u3042\u308a\u307e\u3059\u304b\uff1f\u3082\u3057\u304b\u3057\u3066\u4ed6\u306e\u4eba\u3068\u96c6\u307e\u308a\u305f\u3044\u3067\u3059\u304b\uff1f\u306a\u3089\u3070\u662f\u975eFredboat\u30b3\u30df\u30e5\u30cb\u30c6\u30a3\u306b\u6765\u307e\u3057\u3087\u3046\uff01
+helpNoDmCommands=DM\u3067Fredboat\u306e\u30b3\u30de\u30f3\u30c9\u3092\u4f7f\u3046\u3053\u3068\u306f\u3067\u304d\u307e\u305b\u3093\u3002
+helpCredits=Fre_d\u3068\u30aa\u30fc\u30d7\u30f3\u30bd\u30fc\u30b9\u8ca2\u732e\u8005\u306b\u3088\u3063\u3066\u4f5c\u6210\u3055\u308c\u307e\u3057\u305f\u3002
helpSent=\u30d8\u30eb\u30d7\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u3092DM\u3067\u9001\u308a\u307e\u3057\u305f\uff01
helpProperUsage=\u9069\u5207\u306a\u4f7f\u7528\u65b9\u6cd5\:
helpCommandOwnerRestricted=\u3053\u306e\u30b3\u30de\u30f3\u30c9\u306fbot\u306e\u30aa\u30fc\u30ca\u30fc\u306b\u3088\u3063\u3066\u5236\u9650\u3055\u308c\u3066\u3044\u307e\u3059\u3002
@@ -257,7 +261,7 @@ helpSayCommand=\u30dc\u30c3\u30c8\u30a8\u30b3\u30fc\u3092\u4f55\u304b\u306b\u305
helpServerInfoCommand=\u3053\u306e\u30ae\u30eb\u30c9\u306b\u95a2\u3057\u3066\u306e\u60c5\u5831\u3092\u3001\u3044\u304f\u3064\u304b\u8868\u793a\u3002
helpUserInfoCommand=\u81ea\u5206\u307e\u305f\u306f\u30dc\u30c3\u30c8\u306b\u77e5\u3089\u308c\u3066\u3044\u308b\u30e6\u30fc\u30b6\u30fc\u306b\u95a2\u3059\u308b\u60c5\u5831\u3092\u8868\u793a\u3057\u307e\u3059\u3002
helpPerms={0} \u30e9\u30f3\u30af\u306e\u30db\u30ef\u30a4\u30c8\u30ea\u30b9\u30c8\u30e1\u30f3\u30d0\u30fc\u3068\u30ed\u30fc\u30eb\u3092\u8a31\u53ef\u3057\u307e\u3059\u3002
-helpPrefixCommand=Set the prefix for this guild.
+helpPrefixCommand=\u3053\u306e\u30ae\u30eb\u30c9\u306e\u30d7\u30ec\u30d5\u30a3\u30c3\u30af\u30b9\u3092\u8a2d\u5b9a\u3057\u307e\u3059\u3002
helpVoteSkip=\u73fe\u5728\u306e\u66f2\u3092\u30b9\u30ad\u30c3\u30d7\u3059\u308b\u305f\u3081\u306b\u6295\u7968\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u30dc\u30a4\u30b9\u30c1\u30e3\u30c3\u30c8\u306e\u5168\u30e6\u30fc\u30b6\u30fc\u306e50\uff05\u304c\u6295\u7968\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002
helpMathOperationAdd=num1\u3068num2\u306e\u5408\u8a08\u3092\u51fa\u529b\u3057\u307e\u3059\u3002
helpMathOperationSub=num2\u304b\u3089num1\u3092\u5f15\u3044\u305f\u5dee\u3092\u51fa\u529b\u3057\u307e\u3059\u3002
@@ -295,7 +299,7 @@ voteSkipEmbedVoters={0} \u304b\u3089{1} \u3001\u73fe\u5728\u306e\u30c8\u30e9\u30
mathOperationResult=\u7d50\u679c\u306f\u6b21\u306e\u3068\u304a\u308a\u3067\u3059\u3002
mathOperationDivisionByZeroError=\u79c1\u306f\u30bc\u30ed\u3067\u5272\u308b\u3053\u3068\u306f\u3067\u304d\u307e\u305b\u3093\u3002
mathOperationInfinity=\u6570\u5b57\u304c\u5927\u304d\u3059\u304e\u3066\u8868\u793a\u3067\u304d\u307e\u305b\u3093\u3002
-prefix=Prefix
-prefixGuild=The prefix for this guild is {0}
-prefixShowAgain=You can show the prefix anytime again by mentioning me.
+prefix=\u30d7\u30ec\u30d5\u30a3\u30c3\u30af\u30b9
+prefixGuild=\u3053\u306e\u30ae\u30eb\u30c9\u306e\u30d7\u30ec\u30d5\u30a3\u30c3\u30af\u30b9\u306f {0}
+prefixShowAgain=\u79c1\u306b\u8a00\u53ca\u3001\u3044\u3064\u3067\u3082\u518d\u3073\u30d7\u30ec\u30d5\u30a3\u30c3\u30af\u30b9\u3092\u8868\u793a\u3067\u304d\u307e\u3059\u3002
diff --git a/FredBoat/src/main/resources/lang/ko_KR.properties b/FredBoat/src/main/resources/lang/ko_KR.properties
index 641dfdbee..aa86db800 100644
--- a/FredBoat/src/main/resources/lang/ko_KR.properties
+++ b/FredBoat/src/main/resources/lang/ko_KR.properties
@@ -45,7 +45,7 @@ exportPlaylistFail=hastebin.com \uc5d0 \ud50c\ub808\uc774\ub9ac\uc2a4\ud2b8\ub97
listShowShuffled=\uc154\ud50c(\ub79c\ub364) \uae30\ub2a5\uc774 \uc801\uc6a9\ub41c \ud50c\ub808\uc774\ub9ac\uc2a4\ud2b8 \uc785\ub2c8\ub2e4.\n\n
listShowRepeatSingle=\ud604\uc7ac \ud2b8\ub799\uc744 \ubc18\ubcf5\ud569\ub2c8\ub2e4
listShowRepeatAll=\ud604\uc7ac \ub300\uae30 \ubaa9\ub85d\uc744 \ubc18\ubcf5 \ud569\ub2c8\ub2e4
-listShowHistory=Showing tracks in history.
+listShowHistory=\uc5ed\uc0ac\uc758 \ud754\uc801\ubcf4\uae30.
listAddedBy=**{0}**, **{1}**\uc5d0 \uc758\ud574 \ucd94\uac00\ub428. `[{2}]`
listStreamsOnlySingle=\ucd1d **{0}** \uac1c\uc758 \ub77c\uc774\ube0c {1} \uac00 \uc7ac\uc0dd \ud050\uc5d0 \uc788\uc2b5\ub2c8\ub2e4.
listStreamsOnlyMultiple=\ucd1d **{0}** \uac1c\uc758 \ub77c\uc774\ube0c {1} \uac00 \uc7ac\uc0dd \ud050\uc5d0 \uc788\uc2b5\ub2c8\ub2e4.
@@ -57,7 +57,7 @@ listAsWellAsLiveStreams=, \ucd1d **{0}** \uac1c\uc758 \ub77c\uc774\ube0c {1}
trackSingular=\ud2b8\ub799
trackPlural=\ud2b8\ub799
npNotPlaying=\ud604\uc7ac \uc7ac\uc0dd\uc911\uc778 \uc74c\uc545\uc774 \uc5c6\uc2b5\ub2c8\ub2e4.
-npNotInHistory=Currently no tracks in history.
+npNotInHistory=\uc774\uc804 \ub0a0\uc528\ub97c \ucc3e\uc2b5\ub2c8\ub2e4
npDescription=\uc124\uba85
npLoadedSoundcloud=[{0}/{1}]\n\nSoundCloud\uc5d0\uc11c \ubd88\ub7ec\uc634
npLoadedBandcamp={0}\n\nBandcamp\uc5d0\uc11c \ubd88\ub7ec\uc634
@@ -133,7 +133,7 @@ brainfuckDataPointerOutOfBounds=\ub370\uc774\ud130 \ud3ec\uc778\ud130\uac00 \ubc
brainfuckInputOOB={0} \uc704\uce58\uc5d0\uc11c \ud55c\uacc4\ub97c \ubc97\uc5b4\ub0ac\uc2b5\ub2c8\ub2e4.
brainfuckNoOutput=\ucd9c\ub825\uc774 \uc5c6\uc5c8\ub2e4.
weatherLocationNotFound=\uc704\uce58\ub97c \ucc3e\uc744 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4. \uc785\ub825\uac12 {0}\uc744 \ud655\uc778\ud558\uc2dc\uae30 \ubc14\ub78d\ub2c8\ub2e4.
-weatherError=Error retrieving weather for {0}
+weatherError={0} \uc5d0 \ub300 \ud55c \ub0a0\uc528\ub97c \uac80\uc0c9 \ud558\ub358 \ub3c4\uc911 \uc624\ub958
avatarSuccess=\uadf8\uac83\uc744 \ubc1c\uacac\n{0}
configNoArgs=** {0} **\uc5d0 \ub300\ud55c \uad6c\uc131 \:```
configSetTo=\uc774\uc81c`{0}`\uc73c\ub85c \uc124\uc815\ub429\ub2c8\ub2e4.
@@ -183,7 +183,7 @@ ratelimitedGeneralInfo=\ub2f9\uc2e0\uc740 \uc18d\ub3c4\uac00 \uc81c\ud55c\ub418\
ratelimitedSkipCommand={0} \uba85\ub839\uc5b4\ub97c \uc0ac\uc6a9\ud558\uc5ec \ud558\ub098 \uc774\uc0c1\uc758 \uace1\uc744 \uac74\ub108\ub6f8 \uc218 \uc788\uc2b5\ub2c8\ub2e4.
ratelimitedGuildSlowLoadingPlaylist=\uc774 \uc11c\ubc84\ub294 \ud604\uc7ac \uc7ac\uc0dd \ubaa9\ub85d\uc744 \ub354 \uc774\uc0c1 \ucd94\uac00\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4. \uae34 \uc7ac\uc0dd \ubaa9\ub85d\uc744 \uc7ac\uc0dd\ud558\uc9c0 \ub9c8\uc2ed\uc2dc\uc624.
unblacklisted=\ube14\ub799 \ub9ac\uc2a4\ud2b8\uc5d0\uc11c {0} \uc744(\ub97c) \uc81c\uac70\ud588\uc2b5\ub2c8\ub2e4.
-serverinfoTitle=**{0}**\uc5d0 \ub300\ud55c \uc815\ubcf4.
+serverinfoTitle={0}\uc5d0 \ub300\ud55c \uc815\ubcf4\:
serverinfoOnlineUsers=\uc628\ub77c\uc778 \uc720\uc800\ub4e4\:
serverinfoTotalUsers=\ucd1d \uc720\uc800\ub4e4\:
serverinfoRoles=\uc5ed\ud560\ub4e4\:
@@ -193,17 +193,17 @@ serverinfoGuildID=\uae38\ub4dc \uc544\uc774\ub514\:
serverinfoCreationDate=\uc0dd\uc131 \ub0a0\uc9dc\:
serverinfoOwner=\uc8fc\uc778\:
serverinfoVLv=\uc778\uc99d \ub808\ubca8\:
-userinfoTitle=**{0}**\uc5d0 \ub300\ud55c \uc815\ubcf4.
+userinfoTitle={0}\uc5d0 \ub300\ud55c \uc815\ubcf4\:
userinfoUsername=\uc720\uc800\ub124\uc784\:
userinfoId=\uc544\uc774\ub514\:
userinfoNick=\ubcc4\uba85\:
userinfoKnownServer=\uc544\ub294 \uc11c\ubc84\ub4e4\:
userinfoJoinDate=\uac00\uc785 \ub0a0\uc9dc\:
userinfoCreationTime=\uc0dd\uc131 \ub0a0\uc9dc\:
-userinfoBlacklisted=Blacklisted\:
-skipDeniedTooManyTracks=You can't skip someone else's tracks if you are not a DJ.\nConsider using the Voteskip command.
+userinfoBlacklisted=\ube14\ub799 \ub9ac\uc2a4\ud2b8\:
+skipDeniedTooManyTracks=Dj\uac00 \uc544\ub2cc\uacbd\uc6b0 \ub2e4\ub978\uc0ac\ub78c\uc758 \ub178\ub798\ub97c \uac74\ub108\ub6f8 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4. Voteskip \uba85\ub839\uc5b4\ub97c \uc0ac\uc6a9\ud558\uc2dc\ub294\uac83\uc774 \uc88b\uc2b5\ub2c8\ub2e4.
eventUsersLeftVC=\ubaa8\ub4e0 \uc720\uc800\ub4e4\uc774 \uc74c\uc131 \ucc44\ub110\uc744 \ub5a0\ub0ac\uc2b5\ub2c8\ub2e4. \uc74c\uc545 \ud50c\ub808\uc774\uc5b4\uac00 \uc77c\uc2dc\uc911\uc9c0 \ub418\uc5c8\uc2b5\ub2c8\ub2e4.
-eventAutoResumed=User presence detected, automatically resuming the player.
+eventAutoResumed=\uc74c\uc131\uccb4\ub123\uc758 \uc0ac\uc6a9\uc790 \uac10\uc9c0\! \uc790\ub3d9\uc73c\ub85c \ub178\ub798\ub97c \ub2e4\uc2dc \uc2dc\uc791 \ud569\ub2c8\ub2e4\!
commandsFun=\uc7ac\ubbf8
commandsMemes=\ubc08\ub4e4
commandsUtility=\uc720\ud2f8\ub9ac\ud2f0
@@ -212,7 +212,11 @@ commandsMaintenance=\uc810\uac80
commandsBotOwner=\ubd07 \uc8fc\uc778
commandsMoreHelp={0} \uc744 \ub9d0\ud558\uc5ec \ud2b9\uc815 \uba85\ub839\uc5b4\uc5d0 \ub300\ud55c \ub354 \ub9ce\uc740\uac83\uc744 \uc54c\uc544\ubcf4\uc138\uc694.
helpUnknownCommand=\uc54c \uc218 \uc5c6\ub294 \uba85\ub839\uc5b4\uc785\ub2c8\ub2e4.
-helpDM=\ubb38\uc11c\ub294 \uc774\uacf3\uc5d0\uc11c \ubcfc \uc218 \uc788\uc2b5\ub2c8\ub2e4.\nhttps\://fredboat.com/docs\n\n\ud504\ub808\ub4dc\ubcf4\ud2b8\ub97c \ub2f9\uc2e0\uc758 \uc11c\ubc84\uc5d0 \ucd94\uac00\ud558\uace0 \uc2f6\uc73c\uc2e0\uac00\uc694?\n\ub2f9\uc2e0\uc774 \uad00\ub9ac \uad8c\ud55c\uc744 \uac00\uc9c0\uace0 \uc788\ub2e4\uba74 \uc5ec\uae30\uc11c \ucd08\ub300\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.\n*\uc774 \ubd07\uc740 \ubba4\uc9c1 \ud50c\ub808\uc774\uc5b4 \uae30\ub2a5\uc774 \uc5c6\uc2b5\ub2c8\ub2e4.*\n\n\n\ubba4\uc9c1 \ud50c\ub808\uc774\uc5b4 \uae30\ub2a5\uc774 \uc788\ub294 \ubd07\uc740 \uc5ec\uae30\uc11c \ucd08\ub300\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.\n\n\n\ub3c4\uc6c0\uc774 \ud544\uc694\ud558\uac70\ub098, \ubd07\uc5d0 \ub300\ud55c \uc544\uc774\ub514\uc5b4\uac00 \uc788\ub098\uc694?\n\uc544\ub2c8\uba74 \uadf8\uc800 \ub180\uace0\uc2f6\uc740\uac00\uc694? \ud504\ub808\ub4dc\ubcf4\ud2b8 \ud589\uc544\uc6c3\uc73c\ub85c \uc624\uc138\uc694\!\n{0}\n\n\ubd07 \uba85\ub839\uc5b4\ub294 DM\uc73c\ub85c \ubcf4\ub0bc \uc218 \uc5c6\uc2b5\ub2c8\ub2e4.\n\uc774 \ubd07\uc740 Fre_d\uc5d0 \uc758\ud574 \uc81c\uc791\ub418\uc5c8\uc2b5\ub2c8\ub2e4.
+helpDocsLocation=\ubb38\uc11c\ub97c \uc774\uacf3\uc5d0\uc11c \ucc3e\uc744 \uc218 \uc788\uc2b5\ub2c8\ub2e4\:
+helpBotInvite=FredBoat\ub97c \ub2f9\uc2e0\uc758 \uc11c\ubc84\uc5d0 \ucd94\uac00\ud558\uae30\ub97c \uc6d0\ud558\uc2dc\ub098\uc694? \uc11c\ubc84 \uad00\ub9ac\uc790 \uad8c\ud55c\uc774 \uc788\ub2e4\uba74, FredBoat\ub97c \ucd94\uac00\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4\:
+helpHangoutInvite=FredBoat\uc5d0 \ub3c4\uc6c0\uc774 \ud544\uc694\ud558\uac70\ub098, \uc544\uc774\ub514\uc5b4\uac00 \uc788\uc73c\uc2dc\ub098\uc694? \uc544\ub2c8\uba74 \uadf8\ub0e5 \ub180\uace0 \uc2f6\ub098\uc694? FredBoat \ucee4\ubba4\ub2c8\ud2f0\uc5d0 \uac00\uc785\ud558\uc138\uc694\!
+helpNoDmCommands=\uac1c\uc778 \uba54\uc138\uc9c0\ub97c \ud1b5\ud574 FredBoat\uc5d0\uac8c \uba85\ub839\uc5b4\ub97c \ubcf4\ub0bc \uc218 \uc5c6\uc2b5\ub2c8\ub2e4.
+helpCredits=Fre_d\uc640 \uc624\ud508 \uc18c\uc2a4 \uae30\uc5ec\uc790\uc5d0 \uc758\ud574\uc11c \ub9cc\ub4e4\uc5b4\uc9d0
helpSent=\ubb38\uc11c \uadc0\ud558\uc758 DMs\ub97c \ubcf4\ub0c8\uc2b5\ub2c8\ub2e4\!
helpProperUsage=\uc815\ud655\ud55c \uc0ac\uc6a9\ubc95\:
helpCommandOwnerRestricted=\uc774 \uba85\ub839\uc5b4\ub294 \ubd07 \uc8fc\uc778\ub9cc \uc0ac\uc6a9 \ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.
@@ -225,20 +229,20 @@ helpMusicCommandsHeader=\ud504\ub808\ub4dc\ubcf4\ud2b8 \uc74c\uc545 \uba85\ub839
helpJoinCommand=\ubd07\uc744 \ub2f9\uc2e0\uc774 \ud604\uc7ac \ub4e4\uc5b4\uac00 \uc788\ub294 \uc74c\uc131 \ucc44\ub110\uc5d0 \ub4e4\uc5b4\uac00\uac8c \ud558\uc138\uc694.
helpLeaveCommand=\ubd07\uc744 \ud604\uc7ac \uc74c\uc131 \ucc44\ub110\uc5d0\uc11c \ub5a0\ub098\uac8c \ud558\uc138\uc694.
helpPauseCommand=\ud50c\ub808\uc774\uc5b4\ub97c \uc77c\uc2dc \uc911\uc9c0 \ud569\ub2c8\ub2e4.
-helpPlayCommand=Play music from the given URL or search for a track. For a full list of sources please visit {0}
+helpPlayCommand=\uc9c0\uc815\ub41c URL\uc5d0\uc11c \uc74c\uc545\uc744 \uc7ac\uc0dd\ud558\uac70\ub098 \ud2b8\ub799\uc744 \uac80\uc0c9\ud569\ub2c8\ub2e4. \uc804\uccb4 \uc18c\uc2a4 \ubaa9\ub85d\uc744 \ubcf4\ub824\uba74{0} \uc744(\ub97c) \ubc29\ubb38\ud558\uc2ed\uc2dc\uc624.
helpPlaySplitCommand=\uc720\ud29c\ube0c \uc601\uc0c1\uc744 \uc124\uba85\uc5d0 \uc81c\uacf5\ub41c \ud2b8\ub799\ubaa9\ub85d\uc73c\ub85c \ub098\ub204\uc138\uc694.
helpRepeatCommand=\ubc18\ubcf5 \ubaa8\ub4dc \uc5d0\uc11c \uc804\ud658\ud568
helpReshuffleCommand=\ud604\uc7ac \ub300\uae30 \ubaa9\ub85d\uc744 \ub2e4\uc2dc \uc154\ud50c \ud558\uc138\uc694.
helpSelectCommand=\uac80\uc0c9 \ud6c4 \uc81c\uacf5\ub41c \ud2b8\ub799\uc911\uc5d0\uc11c \uc120\ud0dd\uc744 \ud558\uc5ec \uc7ac\uc0dd\ud558\uc138\uc694.
helpShuffleCommand=\ud604\uc7ac \ub300\uae30\ubaa9\ub85d\uc744 \uc704\ud55c \uc154\ud50c \ubaa8\ub4dc\ub97c \ud0b5\ub2c8\ub2e4.
-helpSkipCommand=Skip the current song, the n'th song in the queue, all songs from n to m, or all songs from mentioned users. Please use in moderation.
+helpSkipCommand=\ud604\uc7ac \uace1, N\ubc88\uc9f8 \uace1, \ubaa8\ub4e0 \ub178\ub798, \ub610\ub294 \uc5b8\uae09\ub41c \uc0ac\uc6a9\uc790\uc758 \ubaa8\ub4e0 \ub178\ub798\ub97c \uac74\ub108\ub701\ub2c8\ub2e4. \uc801\ub2f9\ud788 \uc0ac\uc6a9\ud574 \uc8fc\uc138\uc694.
helpStopCommand=\ud50c\ub808\uc774\uc5b4\ub97c \uc911\uc9c0\ud558\uace0 \ud50c\ub808\uc774\ub9ac\uc2a4\ud2b8\ub97c \uae54\ub054\ud558\uac8c \uc0ad\uc81c\ud569\ub2c8\ub2e4. \uba54\uc2dc\uc9c0 \uad00\ub9ac \uad8c\ud55c\uc774 \uc788\ub294 \uad00\ub9ac\uc790\ub4e4\ud55c\ud14c \uad8c\ud55c\uc774 \uc788\uc2b5\ub2c8\ub2e4.
helpUnpauseCommand=\ud50c\ub808\uc774\uc5b4\ub97c \ub2e4\uc2dc \uc7ac\uc0dd \ud569\ub2c8\ub2e4.
helpVolumeCommand=\uc74c\uc545\uc758 \ubcfc\ub968\uc744 \uc870\uc808\ud569\ub2c8\ub2e4. \uc22b\uc790 0-150 \uc0ac\uc774\uc5d0\uc11c \uc870\uc808\uc774 \uac00\ub2a5\ud569\ub2c8\ub2e4 \uae30\ubcf8 \uac12\uc740 100 \uc785\ub2c8\ub2e4. \ubcfc\ub968 \uba85\ub839\uc5b4\ub294 \uc77c\ubc18\ubd07\uc5d0\uc11c\ub294 \uc0ac\uc6a9\uc744 \ud558\uc2e4 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4.
helpExportCommand=Hastebin \ub9c1\ud06c\ub85c \ud604\uc7ac \ub300\uae30 \ubaa9\ub85d\uc744 \ube7c\uac11\ub2c8\ub2e4, \ub098\uc911\uc5d0 \uc7ac\uc0dd \ubaa9\ub85d\uc73c\ub85c \uc0ac\uc6a9 \ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.
helpGensokyoRadioCommand=\uc9c0\uae08 gensokyoradio.net \uc5d0\uc11c \uc7ac\uc0dd\ub418\uace0 \uc788\ub294 \uc74c\uc545\uc744 \ubcf4\uc5ec\uc90d\ub2c8\ub2e4.
helpListCommand=\uc7ac\uc0dd \ubaa9\ub85d\uc5d0 \uc788\ub294 \ud604\uc7ac \uc74c\uc545\uc758 \ubaa9\ub85d\uc744 \ubcf4\uc5ec\uc90d\ub2c8\ub2e4.
-helpHistoryCommand=Display a list of the songs in playlist history.
+helpHistoryCommand=\uc7ac\uc0dd \ubaa9\ub85d \ubaa9\ub85d\uc5d0 \uace1 \ubaa9\ub85d\uc744 \ud45c\uc2dc\ud569\ub2c8\ub2e4.
helpNowplayingCommand=\ud604\uc7ac \uc7ac\uc0dd\ub418\uace0 \uc788\ub294 \uc74c\uc545\uc744 \ubcf4\uc5ec\uc90d\ub2c8\ub2e4.
helpForwardCommand=\ud2b8\ub799\uc744 \uc8fc\uc5b4\uc9c4 \uc2dc\uac04\uc73c\ub85c \ud2b8\ub799\uc744 \ub418\uac10\uc2b5\ub2c8\ub2e4.\n\uc608\:
helpRestartCommand=\ud604\uc7ac \ud2b8\ub799\uc744 \uc7ac\uc2dc\uc791 \ud569\ub2c8\ub2e4.
@@ -246,7 +250,7 @@ helpRewindCommand=\ud2b8\ub799\uc744 \uc8fc\uc5b4\uc9c4 \uc2dc\uac04\uc73c\ub85c
helpSeekCommand=\uc8fc\uc5b4\uc9c4 \uc2dc\uac04\uc73c\ub85c \ud2b8\ub799\uc758 \uc704\uce58\ub97c \uc124\uc815\ud569\ub2c8\ub2e4.\n\uc608\:
helpAvatarCommand=\uc720\uc800\uc758 \uc544\ubc14\ud0c0\ub97c \ud45c\uc2dc\ud569\ub2c8\ub2e4.
helpBrainfuckCommand=Brainfuck \ucf54\ub4dc\ub97c \uc2e4\ud589\ud569\ub2c8\ub2e4. \uc608\:
-helpWeatherCommand=Display current weather by location.
+helpWeatherCommand=\ud604\uc7ac \uc704\uce58\ubcc4\ub85c \ud604\uc7ac \ub0a0\uc528\ub97c \ud45c\uc2dc\ud569\ub2c8\ub2e4.
helpClearCommand=\uc774 \ubd07\uc758 50\uac1c\uc758 \uba54\uc2dc\uc9c0\ub97c \uc774 \ucc44\ub110\uc5d0\uc11c \uc0ad\uc81c \ud569\ub2c8\ub2e4.
helpCommandsCommand=\uc0ac\uc6a9\ud560 \uc218 \uc788\ub294 \uba85\ub839\uc744 \ud45c\uc2dc \ud569\ub2c8\ub2e4.
helpHelpCommand=\uc774 \ubd07\uc5d0 \ub300\ud55c \ub3c4\uc6c0\uc744 \ubc1b\uac70\ub098 \uc544\ubb34 \uba85\ub839\uc5b4\uc5d0 \ub300\ud55c \ub3c4\uc6c0\uc744 \ubc1b\uc73c\uc138\uc694.
@@ -257,16 +261,16 @@ helpSayCommand=\ubd07\uc774 \ubb34\uc5b8\uac00\ub97c \uc5d0\ucf54\ud558\uac8c \u
helpServerInfoCommand=\uc774 \uae38\ub4dc\uc5d0 \ub300\ud55c \uba87 \uac00\uc9c0 \ud1b5\uacc4\ub97c \ud45c\uc2dc\ud569\ub2c8\ub2e4.
helpUserInfoCommand=\ub2f9\uc2e0\uc758 \ub300\ud55c \uc815\ubcf4\ub098 \ubd07\uc774 \uc544\ub294 \ub2e4\ub978 \uc720\uc800\uc5d0 \ub300\ud55c \uc815\ubcf4\ub97c \ud45c\uc2dc\ud569\ub2c8\ub2e4.
helpPerms={0} \uad8c\ud55c\uc758 \uc720\uc800\uc640 \uc5ed\ud560\uc5d0 \ub300\ud55c \ud654\uc774\ud2b8\ub9ac\uc2a4\ud305\uc744 \ud5c8\uc6a9\ud569\ub2c8\ub2e4.
-helpPrefixCommand=Set the prefix for this guild.
+helpPrefixCommand=\uc774 \uc11c\ubc84\uc758 \uc811\ub450\uc0ac( prefix) \ub97c \uc124\uc815\ud558\uc138\uc694.
helpVoteSkip=\uc774 \uc74c\uc545\uc744 \uac74\ub108\ub6f0\uae30 \uc704\ud574 \ud22c\ud45c\ud558\uc2ed\uc2dc\uc624. \uc74c\uc131 \ucc44\ud305\ubc29\uc5d0 \uc788\ub294 50% \uc774\uc0c1\uc758 \uc720\uc800\uc758 \ud22c\ud45c\uac00 \ud544\uc694\ud569\ub2c8\ub2e4.
-helpMathOperationAdd=Print the sum of num1 and num2.
-helpMathOperationSub=Print the difference of subtracting num2 from num1.
-helpMathOperationMult=Print the product of num1*num2.
-helpMathOperationDiv=Print the quotient of dividing num1 by num2.
-helpMathOperationMod=Print the remainder of dividing num1 by num2.
-helpMathOperationPerc=Print the percentage represented by num1 in num2.
-helpMathOperationSqrt=Print the square root of num.
-helpMathOperationPow=Print the result of num1^num2.
+helpMathOperationAdd=Num1\uacfc num2\uc758 \ud569\uacc4\ub97c \ucd9c\ub825\ud569\ub2c8\ub2e4.
+helpMathOperationSub=Num1 \uc5d0\uc11c num2\ub97c \ube80 \ucc28\uc774\ub97c \ucd9c\ub825\ud569\ub2c8\ub2e4.
+helpMathOperationMult=Num1\uacfcnum2 \ub97c \uacf1\ud55c\uac12\uc744 \ucd9c\ub825\ud569\ub2c8\ub2e4
+helpMathOperationDiv=Num2 num1 \ub098\ub208 \ubaab\uc744 \ucd9c\ub825 \ud569\ub2c8\ub2e4.
+helpMathOperationMod=Num2 num1 \ub098\ub208 \ub098\uba38\uc9c0\ub97c \ucd9c\ub825 \ud569\ub2c8\ub2e4.
+helpMathOperationPerc=Num1 num2\uc5d0\uc11c \ub098\ud0c0\ub0b4\ub294 \ubc31\ubd84\uc728\uc744 \ucd9c\ub825 \ud569\ub2c8\ub2e4.
+helpMathOperationSqrt=\uc22b\uc790\uc758 \uc81c\uacf1\uadfc\uc744 \ucd9c\ub825
+helpMathOperationPow=Num1^num2 \uc758 \uac12\uc744 \ucd9c\ub825
destroyDenied=\ud50c\ub808\uc774\uc5b4\ub97c \uc7ac\uc124\uc815\ud558\ub824\uba74 \uba54\uc2dc\uc9c0 \uad00\ub9ac \uad8c\ud55c\uc774 \uc788\uc5b4\uc57c \ud569\ub2c8\ub2e4.
destroyHelp=\ud50c\ub808\uc774\uc5b4\ub97c \uc7ac\uc124\uc815\ud558\uace0 \uc7ac\uc0dd \ubaa9\ub85d\uc744 \uc9c0\uc6c1\ub2c8\ub2e4. \uba54\uc2dc\uc9c0 \uad00\ub9ac \uad8c\ud55c\uc744 \uac00\uc9c4 \uc870\uc815\uc790\uc6a9\uc73c\ub85c \uc608\uc57d\ub418\uc5c8\uc2b5\ub2c8\ub2e4.
destroySucc=\ud50c\ub808\uc774\uc5b4\ub97c \uc7ac\uc124\uc815\ud558\uace0 \ud050\ub97c \uc0ad\uc81c\ud569\ub2c8\ub2e4.
@@ -275,27 +279,27 @@ permsListTitle={0} \uad8c\ud55c\uc758 \uc720\uc800\uc640 \uc5ed\ud560
permsAdded=`{0}`\uc744 `{1}`\uc5d0 \ucd94\uac00\ud588\uc2b5\ub2c8\ub2e4.
permsRemoved=`{0}`\uc744 `{1}`\uc5d0\uc11c \uc81c\uac70\ud588\uc2b5\ub2c8\ub2e4.
permsFailSelfDemotion=\uad00\ub9ac\uc790 \uad8c\ud55c\uc774 \uc5c6\uc774\ub294 \uc81c\uac70\uac00 \ubd88\uac00\ub2a5\ud569\ub2c8\ub2e4.
-permsAlreadyAdded={0} already added to {1}
-permsNotAdded={0} is not in {1}
+permsAlreadyAdded={0} \uc774(\uac00) \uc774\ubbf8{1} \uc5d0 \ucd94\uac00\ub418\uc5c8\uc2b5\ub2c8\ub2e4.
+permsNotAdded={0} \uc774(\uac00){1} \uc5d0 \uc5c6\uc2b5\ub2c8\ub2e4.
fuzzyMultiple=\uc5ec\ub7ec \ud56d\ubaa9\uc744 \ucc3e\uc558\uc2b5\ub2c8\ub2e4. \ubb34\uc5c7\uc744 \uc120\ud0dd\ud558\uc2dc\uaca0\uc2b5\ub2c8\uae4c?
fuzzyNothingFound=`{0}`\uc744 \ucc3e\uc744 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4.
cmdPermsTooLow=\uc774 \uba85\ub839\uc5b4\ub97c \uc2e4\ud589\ud558\uae30 \uc704\ud55c \uad8c\ud55c\uc774 \uc5c6\uc2b5\ub2c8\ub2e4. \uc2e4\ud589\ud558\uae30 \uc704\ud574\uc11c\ub294 `{0}` \uad8c\ud55c\uc774 \ud544\uc694\ud569\ub2c8\ub2e4.
playersLimited=\ud504\ub808\ub4dc\ubcf4\ud2b8\uc758 \uc6a9\ub7c9\uc774 \uac00\ub4dd \ucc3c\uc2b5\ub2c8\ub2e4\! \uc9c0\uae08 \ud504\ub808\ub4dc\ubcf4\ud2b8\ub294 \ucd5c\ub300 `{0}`\uacf3\uc5d0\uc11c \uc5f0\uacb0\ud560 \uc218 \uc788\ub3c4\ub85d \uc81c\ud55c\ub418\uc5b4\uc788\uc73c\uba70, \uadf8\ub807\uc9c0 \uc54a\uc73c\uba74 \ub124\ud2b8\uc6cc\ud06c \ubd80\ud558\ub85c \uc778\ud574 \ub514\uc2a4\ucf54\ub4dc\uc5d0\uc11c \uc5f0\uacb0\uc774 \ub04a\uc5b4\uc9d1\ub2c8\ub2e4.\n\uc6b0\ub9ac\ub97c \ub3c4\uc640 \uc81c\ud55c\uc744 \uc62c\ub9ac\uac70\ub098 \ubd80\ud558\ub418\uc9c0 \uc54a\uc740 \ubd07\uc744 \uc0ac\uc6a9\ud558\uace0\uc2f6\ub2e4\uba74, \ud30c\ud2b8\ub808\uc628\uc5d0\uc11c \uc791\uc5c5\uc744 \ub3c4\uc640\uc8fc\uc2ed\uc2dc\uc624.\n{1}\n\n\ubd88\ud3b8\uc744 \ub07c\uccd0 \ub4dc\ub824 \uc8c4\uc1a1\ud569\ub2c8\ub2e4\! \ub098\uc911\uc5d0 \ub2e4\uc2dc \uc2dc\ub3c4\ud574 \uc8fc\uc138\uc694.\n\uc774 \uba54\uc2dc\uc9c0\ub294 \ubcf4\ud1b5 \ud53c\ud06c\ud0c0\uc784\uc5d0 \ub098\ud0c0\ub0a9\ub2c8\ub2e4.
tryLater=\ub098\uc911\uc5d0 \ub2e4\uc2dc \uc2dc\ub3c4\ud574 \uc8fc\uc138\uc694.
skipUserSingle={1}\uac00 \ucd94\uac00\ud55c {0}\uc744 \uac74\ub108\ub6f0\uc5c8\uc2b5\ub2c8\ub2e4.
-skipUserMultiple=Skipped {0} tracks added by {1}.
-skipUsersMultiple=Skipped {0} tracks added by {1} users.
-skipUserNoTracks=None of the mentioned users have any tracks queued.
-voteSkipAdded=Your vote has been added\!
-voteSkipAlreadyVoted=You already voted to skip this track\!
-voteSkipSkipping={0} have voted to skip. Skipping track {1}.
-voteSkipNotEnough={0} have voted to skip. At least {1} needed.
-voteSkipEmbedNoVotes=No votes to skip this track yet.
-voteSkipEmbedVoters={0} out of {1} have voted to skip the current track
+skipUserMultiple={1} \uac1c\uc758 \ucd94\uc801\ub41c{0} \uac1c\uc758 \ud2b8\ub799\uc774 \ucd94\uac00\ub418\uc5c8\uc2b5\ub2c8\ub2e4.
+skipUsersMultiple={1} \uc0ac\uc6a9\uc790\uac00 \ucd94\uac00\ud55c \uac74\ub108\ub6f4\ub41c {0} \ucd94\uc801 \ud569\ub2c8\ub2e4.
+skipUserNoTracks=\uc5b8\uae09 \ud55c \uc0ac\uc6a9\uc790 \uc911 \ub204\uad6c\ub3c4 \uc5b4\ub5a4 \ud2b8\ub799 \ub300\uae30.
+voteSkipAdded=\ud22c\ud45c \ucd94\uac00 \ub418\uc5c8\uc2b5\ub2c8\ub2e4\!
+voteSkipAlreadyVoted=\ub2f9\uc2e0\uc740 \uc774\ubbf8\uc774 \ud2b8\ub799\uc744 \uac74\ub108\ub6f8 \ud558\uae30\ub85c \uacb0\uc815\!
+voteSkipSkipping={0} \uba85\uc774 \uc2a4\ud0b5\uc5d0 \ub3d9\uc758\ud574 {1} \ud2b8\ub799\uc744 \uc2a4\ud0b5\ud569\ub2c8\ub2e4.
+voteSkipNotEnough={0} \uba85\uc774 \uc2a4\ud0b5\uc5d0 \ub3d9\uc758\ud588\uc9c0\ub9cc \uc2a4\ud0b5 \ucd5c\uc18c \uc778\uc6d0 ({1} \uba85) \uc5d0 \ubbf8\uce58\uc9c0 \ubabb\ud588\uc2b5\ub2c8\ub2e4.
+voteSkipEmbedNoVotes=\uc544\uc9c1 \uc774 \ud2b8\ub799\uc744 \uac74\ub108\ub6f8 \uc218 \uc5c6\ub294 \ub4dd\ud45c\uc218\uc785\ub2c8\ub2e4.
+voteSkipEmbedVoters={1} \uc911 {0} \uc774(\uac00) \ud604\uc7ac \ud2b8\ub799\ub97c \uac74\ub108\ub6f0\uae30\ub85c \uacb0\uc815\ud588\uc2b5\ub2c8\ub2e4.
mathOperationResult=\uacb0\uacfc\uac12\uc740
mathOperationDivisionByZeroError=0\uc73c\ub85c \ub098\ub20c \uc218 \uc5c6\uc2b5\ub2c8\ub2e4.
mathOperationInfinity=\ud574\ub2f9 \uc22b\uc790\ub294 \ubcf4\uc5ec\uc8fc\uae30\uc5d0 \ub108\ubb34 \ud07d\ub2c8\ub2e4\!
-prefix=Prefix
-prefixGuild=The prefix for this guild is {0}
-prefixShowAgain=You can show the prefix anytime again by mentioning me.
+prefix=\uc811\ub450\uc0ac
+prefixGuild=\uc774 \uc11c\ubc84\uc758 \uc811\ub450\uc0ac\ub294 {0} \uc785\ub2c8\ub2e4.
+prefixShowAgain=\uc800\ub97c \uc5b8\uae09\ud558\uc5ec \uc5b8\uc81c\ub4e0\uc9c0 \uc811\ub450\uc0ac\ub97c \ud45c\uc2dc\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.
diff --git a/FredBoat/src/main/resources/lang/ms_MY.properties b/FredBoat/src/main/resources/lang/ms_MY.properties
index a6c6602c3..e8a64d93e 100644
--- a/FredBoat/src/main/resources/lang/ms_MY.properties
+++ b/FredBoat/src/main/resources/lang/ms_MY.properties
@@ -8,56 +8,56 @@ playYoutubeSearchError=Terdapat ralat ketika mencari di YouTube. Sebaliknya, tim
playSearchNoResults=Tiada keputusan untuk `{q}`
playSelectVideo=**Sila pilih lagu dengan perintah `{0}play n`\:**
joinJoining=Menyertai {0}
-joinErrorAlreadyJoining=An error occurred. Couldn''t join {0} because I am already trying to connect to that channel. Please try again.
-pauseAlreadyPaused=The player is already paused.
-pauseSuccess=The player is now paused. You can unpause it with `{0}unpause`.
-repeatOnSingle=The player will now repeat the current track.
-repeatOnAll=The player will now repeat the queue.
-repeatOff=The player is no longer on repeat.
-selectSuccess=Song **\#{0}** has been selected\: **{1}** ({2})
-selectInterval=Must be a number 1-{0}.
-selectSelectionNotGiven=You must first be given a selection to choose from.
-shuffleOn=The player is now shuffled.
-shuffleOff=The player is no longer shuffled.
-reshufflePlaylist=Queue reshuffled.
-reshufflePlayerNotShuffling=You must first turn on shuffle mode.
-skipEmpty=The queue is empty\!
-skipOutOfBounds=Can''t remove track number {0} when there are only {1} tracks.
-skipNumberTooLow=Given number must be greater than 0.
-skipSuccess=Skipped track \#{0}\: **{1}**
-skipRangeInvalid=Specified track range is invalid.
-skipRangeSuccess=Tracks \#{0} to \#{1} have been removed.
-skipTrackNotFound=Couldn't find track to skip.
-stopAlreadyEmpty=The queue was already empty.
-stopEmptyOne=The queue has been emptied, `1` track has been removed.
-stopEmptySeveral=The queue has been emptied, `{0}` tracks have been removed.
-stopAccessDenied=In order to prevent abuse, this command is only available to those who can manage messages.
-unpauseQueueEmpty=The queue is empty.
-unpausePlayerNotPaused=The player is not paused.
-unpauseNoUsers=There are no users in the voice chat.
-unpauseSuccess=The player is now unpaused.
-volumeApology=Sorry\! The ;;volume command has now been deprecated on the public music bot. This is because of how it causes the bot to spend a lot more time processing audio, some tracks up to 5 times more, causing everyone to hear stutter. By disabling this feature FredBoat can play much more music without lag.\nI recommend setting the bot's volume via the dropdown menu https\://fred.moe/1vD.png
-volumeSyntax=Use `;;volume <0-150>`. {0}% is the default.\nThe player is currently at **{1}%**.
-volumeSuccess=Changed volume from **{0}%** to **{1}%**.
-exportEmpty=Nothing to export, the queue is empty.
-exportPlaylistResulted=Exported playlist\: {0}\nYou can provide this URL to play the current playlist later.
-exportPlaylistFail=Failed to upload playlist to hastebin.com
-listShowShuffled=Showing shuffled playlist.
-listShowRepeatSingle=Repeating current track.
-listShowRepeatAll=Repeating current queue.
-listShowHistory=Showing tracks in history.
-listAddedBy=**{0}** added by **{1}** `[{2}]`
-listStreamsOnlySingle=There is **{0}** live {1} in the queue.
-listStreamsOnlyMultiple=There are **{0}** live {1} in the queue.
-listStreamsOrTracksSingle=There is **{0}** {1} with a remaining length of **[{2}]**{3} in the queue.
-listStreamsOrTracksMultiple=There are **{0}** {1} with a remaining length of **[{2}]**{3} in the queue.
+joinErrorAlreadyJoining=Satu ralat telah berlaku. Tidak dapat menyertai {0} kerana saya telah cuba untuk menyambung ke saluran itu. Sila cuba lagi.
+pauseAlreadyPaused=Pemain telah dihentikan sementara.
+pauseSuccess=Pemain sedang dihentikan sementara. Anda boleh mainkan semula dengan ''{0}main''.
+repeatOnSingle=Pemain akan mengulang semula trek semasa.
+repeatOnAll=Pemain akan mengulang semula aturan.
+repeatOff=Pemain tidak akan lagi mengulang.
+selectSuccess=Lagu **\#{0} ** telah dipilih\: **{1} ** ({2})
+selectInterval=Mestilah nombor 1-{0}.
+selectSelectionNotGiven=Anda mesti terlebih dahulu diberi pilihan untuk memilih.
+shuffleOn=Pemain sekarang akan 'shuffled'.
+shuffleOff=Pemain sekarang tidak lagi 'shuffled'.
+reshufflePlaylist=Aturan telah di'shuffle' semula.
+reshufflePlayerNotShuffling=Anda mesti menghidupkan mod 'shuffle'.
+skipEmpty=Aturan masih kosong\!
+skipOutOfBounds=Tidak dapat mengalih keluar {0} nombor aturan apabila terdapat hanya {1} aturan.
+skipNumberTooLow=Nombor yang diberi mestilah lebih daripada 0.
+skipSuccess=Skip trek \#{0}\: **{1} **
+skipRangeInvalid=Pelbagai trek yang ditentukan tidak sah.
+skipRangeSuccess=Trek \#{0} untuk \#{1} telah dibuang.
+skipTrackNotFound=Tidak dapat mencari trek yang betul untuk di skip.
+stopAlreadyEmpty=Aturan sudah kosong.
+stopEmptyOne=Aturan yang telah dikosongkan, trek '1' telah dikeluarkan.
+stopEmptySeveral=Aturan yang telah dikosongkan, trek `{0}` telah dikeluarkan.
+stopAccessDenied=Untuk mengelakkan penyalahgunaan, command ini hanya disediakan untuk orang yang boleh menguruskan mesej.
+unpauseQueueEmpty=Aturan masih kosong.
+unpausePlayerNotPaused=Pemain tidak dihentikan.
+unpauseNoUsers=Tiada pengguna yang terdapat dalam voice chat.
+unpauseSuccess=Pemain sekarang tidak lagi dihentikan.
+volumeApology=Maaf\! Command ;;volume kini telah tidak digalakkan atas bot muzik awam. Ini adalah kerana ia menyebabkan bot untuk menghabiskan lebih banyak masa pemprosesan audio, beberapa trek sehingga 5 kali lebih, menyebabkan semua pengguna mendengar stutter. Dengan menyahdayakan command ini, FredBoat boleh mainkan muzik lebih tanpa lag. \nSaya cadangkan menetapkan jumlah bot yang melalui menu https\://fred.moe/1vD.png
+volumeSyntax=Gunakan '';;volume <0-150>''. {0}% adalah default. Para pemain sedang pada **{1}% **.
+volumeSuccess=Menukar volume dari **{0}% ** ke **{1}% **.
+exportEmpty=Tiada apa-apa untuk dieksport, aturan adalah kosong.
+exportPlaylistResulted=Senarai yang dieksport\: {0}\nAnda boleh berikan URL ini untuk memainkan senarai main semasa nanti.
+exportPlaylistFail=Gagal untuk muat naik senarai main ke hastebin.com
+listShowShuffled=Menunjukkan senarai main shuffled.
+listShowRepeatSingle=Mengulang semula trek semasa.
+listShowRepeatAll=Mengulang semula aturan semasa.
+listShowHistory=Menunjukkan history trek.
+listAddedBy=**{0} ** ditambah oleh **{1} ** ''[{2}]''
+listStreamsOnlySingle=Terdapat **{0} ** yang live {1} dalam aturan.
+listStreamsOnlyMultiple=Terdapat **{0} ** yang live {1} dalam aturan.
+listStreamsOrTracksSingle=Terdapat **{0} ** {1} dengan masa yang tinggal selama ** [{2}] **{3} dalam aturan.
+listStreamsOrTracksMultiple=Terdapat **{0} ** {1} dengan masa yang tinggal selama ** [{2}] **{3} dalam aturan.
streamSingular=stream
streamPlural=streams
-listAsWellAsLiveStreams=, as well as **{0}** live {1}
-trackSingular=track
-trackPlural=tracks
-npNotPlaying=Not currently playing anything.
-npNotInHistory=Currently no tracks in history.
+listAsWellAsLiveStreams=, serta **{0} ** {1} yang live
+trackSingular=trek
+trackPlural=treks
+npNotPlaying=Tidak memainkan apa-apa.
+npNotInHistory=Tiada dalam history trek yang terkini.
npDescription=Description
npLoadedSoundcloud=[{0}/{1}]\n\nLoaded from Soundcloud
npLoadedBandcamp={0}\n\nLoaded from Bandcamp
@@ -112,36 +112,36 @@ malEnglishTitle={0}**English\: **{1}\n
malSynonyms={0}**Synonyms\: **{1}\n
malEpisodes={0}**Episodes\: **{1}\n
malScore={0}**Score\: **{1}\n
-malType={0}**Type\: **{1}\n
-malStatus={0}**Status\: **{1}\n
-malStartDate={0}**Start date\: **{1}\n
-malEndDate={0}**End date\: **{1}
-malSynopsis={0}**Synopsis\: **"{1}"\n
-malUserReveal={0}\: Search revealed a user.\n
-malNoResults={0}\: No results.
-malUserName={0}**Name\: **{1}\n
-malUrl={0}**URL\: **{1}\n
-luaError=\ A Lua error occured \:anger\:\n```{0}```
-luaErrorOutputTooBig=\ Output buffer is too large \:anger\: Discord only allows 2000 characters per message, got {0}
-luaTimeout=\ Function timed out \:anger\: allowed computation time is {0} seconds.
-helpSuccess=Documentation has been sent to your direct messages\!
-helpDmFailed=Could not send documentation to your DMs. Please check that you don't have them disabled\!
-helpCommandsPromotion=Say {0} to learn what this bot can do\!
-fuzzyNoResults=No such users
-brainfuckCycleLimit=Program exceeded the maximum cycle count of {0}
-brainfuckDataPointerOutOfBounds=Data pointer out of bounds\: {0}
-brainfuckInputOOB=Input out of bounds at position\: {0}
-brainfuckNoOutput=\ There was no output
-weatherLocationNotFound=Unable to find location, please check your input {0}.
-weatherError=Error retrieving weather for {0}
-avatarSuccess=\ found it\n{0}
-configNoArgs=Configuration for **{0}**\:```
-configSetTo=is now set to `{0}`.
-configUnknownKey={0}\: Unknown key.
-configMustBeBoolean={0}\: Value must be true or false.
-modReason=Reason
-modAuditLogMessage=Action issued by {0}\#{1} [{2}]
-modFailUserHierarchy=You do not have a higher role than {0}.
+malType={0} ** jenis\: **{1}\n
+malStatus={0} ** Status\: **{1}\n
+malStartDate={0} ** Tarikh mula\: **{1}\n
+malEndDate={0} ** Tarikh berhenti\: **{1}
+malSynopsis={0} ** Sinopsis\: ** "{1}"\n
+malUserReveal={0}\: Carian telah mendedahkan seorang pengguna.\n
+malNoResults={0}\: Tiada keputusan.
+malUserName={0} ** Nama\: **{1}\n
+malUrl={0} ** URL\: **{1}\n
+luaError=\ Satu error Lua berlaku \:anger\: ''''''{0} ''''''
+luaErrorOutputTooBig=\ Penampan output adalah terlalu besar \:anger\: perbalahan hanya membenarkan lingkungan 2000 huruf setiap mesej, mendapat {0}
+luaTimeout=\ Majlis tamat \:anger\: dibenarkan pengiraan masa ialah {0} saat.
+helpSuccess=Dokumentasi telah dihantar ke mesej anda langsung\!
+helpDmFailed=Tidak dapat menghantar dokumentasi untuk DMs anda. Sila pastikan bahawa anda tidak mempunyai Upaya\!
+helpCommandsPromotion=Katakan {0} untuk belajar apa yang bot ini boleh lakukan\!
+fuzzyNoResults=Tiada pengguna tersebut
+brainfuckCycleLimit=Program melebihi kiraan kitaran maksimum {0}
+brainfuckDataPointerOutOfBounds=Penuding data daripada batas-batas\: {0}
+brainfuckInputOOB=Input daripada batas-batas di posisi\: {0}
+brainfuckNoOutput=\ Jadilah output tidak
+weatherLocationNotFound=Tidak dapat mencari lokasi, sila semak {0} input anda.
+weatherError=Ralat mendapatkan keadaan cuaca di {0}
+avatarSuccess=\ mendapati{0}
+configNoArgs=Konfigurasi untuk **{0} **\:'''' ''
+configSetTo=kini sudah bersedia untuk ''{0}''.
+configUnknownKey={0}\: kekunci tidak diketahui.
+configMustBeBoolean={0}\: nilai mestilah benar atau palsu.
+modReason=Sebab
+modAuditLogMessage=Tindakan yang dikeluarkan oleh {0}\#{1} [{2}]
+modFailUserHierarchy=Anda tidak mempunyai peranan yang lebih tinggi daripada {0}.
modFailBotHierarchy=I need to have a higher role than {0}.
modBanFail=Failed to ban {0}
modKickBanFailUserPerms=You must have permission to kick and ban to be able to use this command.
@@ -183,7 +183,7 @@ ratelimitedGeneralInfo=Kadar anda sedang dihadkan\! Sila perlahankan.
ratelimitedSkipCommand=You can skip more than one song by using this command\: {0}
ratelimitedGuildSlowLoadingPlaylist=Server ini tidak dibenarkan untuk menambah lagi senarai main buat masa sekarang. Mohon jangan spam senerai main yang panjang.
unblacklisted={0} dibuang dari senarai hitam.
-serverinfoTitle=Info about **{0}**\:
+serverinfoTitle=Info about {0}\:
serverinfoOnlineUsers=Online Users\:
serverinfoTotalUsers=Total Users\:
serverinfoRoles=Roles\:
@@ -193,7 +193,7 @@ serverinfoGuildID=Guild ID\:
serverinfoCreationDate=Creation Date\:
serverinfoOwner=Owner\:
serverinfoVLv=Verification Level\:
-userinfoTitle=Information about **{0}**\:
+userinfoTitle=Information about {0}\:
userinfoUsername=Username\:
userinfoId=ID\:
userinfoNick=Nickname\:
@@ -212,7 +212,11 @@ commandsMaintenance=Maintenance
commandsBotOwner=Bot owner
commandsMoreHelp=Say {0} to get more information on a specific command.
helpUnknownCommand=Unknown command.
-helpDM=Documentation can be found at\:\nhttps\://fredboat.com/docs\n\nWant to add FredBoat to your server? If you have Manage Server permissions for your guild, you can invite it here\:\n*This one doesn''t play music*\n\n\nIf you want to add the music bot, you will want to invite this bot\:\n\n\nNeed help or have any ideas for the bot? Perhaps you just want to hang out? Come on over to FredBoat hangout\!\n{0}\n\nYou cannot send this bot commands through DM.\nBot created by Fre_d
+helpDocsLocation=Documentation can be found at\:
+helpBotInvite=Want to add FredBoat to your server? If you have Manage Server permissions for your guild, you can invite FredBoat\:
+helpHangoutInvite=Need help or have any ideas for FredBoat? Perhaps you just want to hang out? Join the FredBoat community\!
+helpNoDmCommands=You cannot send FredBoat commands through DMs.
+helpCredits=Created by Fre_d and open source contributors
helpSent=Documentation has been sent to your DMs\!
helpProperUsage=Proper usage\:
helpCommandOwnerRestricted=This command is restricted to the owner of the bot.
diff --git a/FredBoat/src/main/resources/lang/nl_NL.properties b/FredBoat/src/main/resources/lang/nl_NL.properties
index 61a4f6c05..432b3400a 100644
--- a/FredBoat/src/main/resources/lang/nl_NL.properties
+++ b/FredBoat/src/main/resources/lang/nl_NL.properties
@@ -193,7 +193,7 @@ serverinfoGuildID=Gilde ID\:
serverinfoCreationDate=Aanmaakdatum\:
serverinfoOwner=Eigenaar\:
serverinfoVLv=Verificatie Level\:
-userinfoTitle=Informatie over **{0}**\:
+userinfoTitle=Informatie over {0}\:
userinfoUsername=Gebruikersnaam\:
userinfoId=ID\:
userinfoNick=Bijnaam\:
@@ -212,7 +212,11 @@ commandsMaintenance=Onderhoud
commandsBotOwner=Bot eigenaar
commandsMoreHelp=Zeg {0} om meer informatie te krijgen over een specifieke opdracht.
helpUnknownCommand=Onbekende opdracht.
-helpDM=De documentatie kan hier worden gevonden\:\nhttps\://fredboat.com/docs\n\nWil je FredBoat op je eigen server? Als je server beheer rechten hebt voor je Gilde, dan kan je het hier uitnodigen\:\n*Deze bot speelt geen muziek*\n\n\nAls je muziek bot wilt toevoegen, dan kan je deze bot hier uitnodigen\:\n\n\nHeb je hulp nodig of heb je idee\u00ebn voor de bot? Of wil je lekker rondhangen? Kom dan lekker naar de FredBoat Hangout\!\n{0}\n\nJe kan geen opdrachten via DM naar deze bot versturen.\nBot is gemaakt door Fre_d
+helpDocsLocation=Documentatie kan worden gevonden op\:
+helpBotInvite=Wilt u FredBoat aan uw server toevoegen? Als u gemachtigd bent deze Server te beheren voor uw gilde, kunt u FredBoat uitnodigen\:
+helpHangoutInvite=Hulp nodig of nog idee\u00ebn voor FredBoat? Misschien wilt u gewoon hangen? Voeg u bij FredBoats gemeenschap\!
+helpNoDmCommands=U kunt geen FredBoat commandos verzenden via DMs.
+helpCredits=Gemaakt door Fre_d en opensource leverden
helpSent=De documenten met instructies zijn naar Uw Directe Berichten verstuurd\!
helpProperUsage=Correcte gebruik\:
helpCommandOwnerRestricted=Deze opdracht is beperkt tot de eigenaar van de bot.
@@ -225,7 +229,7 @@ helpMusicCommandsHeader=FredBoat Muziek Opdrachten
helpJoinCommand=Voeg de bot aan je huidige stemkanaal toe.
helpLeaveCommand=Laat de bot je huidige stemkanaal verlaten.
helpPauseCommand=Pauzeer de Bot.
-helpPlayCommand=Speel muziek van de gegeven URL of zoek naar een nummer. Bezoek {0} voor een volledige lijst van bronnen
+helpPlayCommand=Speel muziek van de gegeven URL of zoek naar een nummer. Bezoek alsjeblieft {0} voor een volledige lijst van bronnen
helpPlaySplitCommand=Verdeel een YouTube video in een nummerreeks voorzien in zijn descriptie.
helpRepeatCommand=Schakel tussen herhaal modi.
helpReshuffleCommand=Schuifel de huidige nummerreeks opnieuw.
@@ -257,7 +261,7 @@ helpSayCommand=Laat de bot iets echo\u00ebn.
helpServerInfoCommand=Laat een aantal statistieken zien over deze gild.
helpUserInfoCommand=Toon informatie over jezelf of een gebruiker die bekend is met de bot.
helpPerms=Laat de {0} rang leden en rollen op de witte lijst zetten.
-helpPrefixCommand=Set the prefix for this guild.
+helpPrefixCommand=Stel de prefix in voor deze guild.
helpVoteSkip=Stem om het huidige nummer te kunnen overslaan. Minstens 50% van alle gebruikers in de voice chat moeten mee stemmen.
helpMathOperationAdd=Print de sum van num 1 en num2.
helpMathOperationSub=Print het verschil tussen het aftrekken van num2 en van num1.
@@ -296,6 +300,6 @@ mathOperationResult=Het resultaat is
mathOperationDivisionByZeroError=Ik kan niet delen door nul.
mathOperationInfinity=Het nummer is te groot om te laten zien\!
prefix=Prefix
-prefixGuild=The prefix for this guild is {0}
-prefixShowAgain=You can show the prefix anytime again by mentioning me.
+prefixGuild=De prefix van deze guild is {0}
+prefixShowAgain=Je kan de prefix zien als je mij pinged.
diff --git a/FredBoat/src/main/resources/lang/no_NO.properties b/FredBoat/src/main/resources/lang/no_NO.properties
index 2fcd2849d..8f4095c6b 100644
--- a/FredBoat/src/main/resources/lang/no_NO.properties
+++ b/FredBoat/src/main/resources/lang/no_NO.properties
@@ -183,7 +183,7 @@ ratelimitedGeneralInfo=Du sender kommandoer for fort\! Ro ned tempoet.
ratelimitedSkipCommand=You can skip more than one song by using this command\: {0}
ratelimitedGuildSlowLoadingPlaylist=Denne serveren f\u00e5r ikke legge til flere spillelister for \u00f8yeblikket. Vennligst unng\u00e5 \u00e5 spamme lange spillelister.
unblacklisted=Fjernet {0} fra sperrelisten.
-serverinfoTitle=Info om **{0} **\:
+serverinfoTitle=Info about {0}\:
serverinfoOnlineUsers=P\u00e5loggede brukere\:
serverinfoTotalUsers=Totalt antall brukere\:
serverinfoRoles=Roller\:
@@ -193,7 +193,7 @@ serverinfoGuildID=Laug-ID\:
serverinfoCreationDate=Opprettelsesdato\:
serverinfoOwner=Eier\:
serverinfoVLv=Verifikasjon niv\u00e5\:
-userinfoTitle=Informasjon om **{0} **\:
+userinfoTitle=Information about {0}\:
userinfoUsername=Brukernavn\:
userinfoId=ID\:
userinfoNick=Kallenavn\:
@@ -212,7 +212,11 @@ commandsMaintenance=Vedlikehold
commandsBotOwner=Bot eier
commandsMoreHelp=Si {0} for \u00e5 f\u00e5 mer informasjon om en bestemt kommando.
helpUnknownCommand=Unknown command.
-helpDM=Documentation can be found at\:\nhttps\://fredboat.com/docs\n\nWant to add FredBoat to your server? If you have Manage Server permissions for your guild, you can invite it here\:\n*This one doesn''t play music*\n\n\nIf you want to add the music bot, you will want to invite this bot\:\n\n\nNeed help or have any ideas for the bot? Perhaps you just want to hang out? Come on over to FredBoat hangout\!\n{0}\n\nYou cannot send this bot commands through DM.\nBot created by Fre_d
+helpDocsLocation=Documentation can be found at\:
+helpBotInvite=Want to add FredBoat to your server? If you have Manage Server permissions for your guild, you can invite FredBoat\:
+helpHangoutInvite=Need help or have any ideas for FredBoat? Perhaps you just want to hang out? Join the FredBoat community\!
+helpNoDmCommands=You cannot send FredBoat commands through DMs.
+helpCredits=Created by Fre_d and open source contributors
helpSent=Dokumentasjon er sendt til DMs\!
helpProperUsage=Riktig bruk\:
helpCommandOwnerRestricted=Denne kommandoen er begrenset til eieren av botten.
diff --git a/FredBoat/src/main/resources/lang/pl_PL.properties b/FredBoat/src/main/resources/lang/pl_PL.properties
index f9e5fffac..e74e524ba 100644
--- a/FredBoat/src/main/resources/lang/pl_PL.properties
+++ b/FredBoat/src/main/resources/lang/pl_PL.properties
@@ -45,7 +45,7 @@ exportPlaylistFail=Wyst\u0105pi\u0142 b\u0142\u0105d podczas przesy\u0142ania pl
listShowShuffled=Pokazano wymieszan\u0105 list\u0119 odtwarzania.\n\n
listShowRepeatSingle=Powtarzanie bie\u017c\u0105cych utwor\u00f3w.
listShowRepeatAll=Powtarzanie bie\u017c\u0105cej kolejki.
-listShowHistory=poka\u017c histori\u0119 utwor\u00f3w
+listShowHistory=Pokazuj\u0119 histori\u0119 utwor\u00f3w.
listAddedBy=**{0} ** dodane przez **{1} ** ''[{2}]''
listStreamsOnlySingle=Znajduje si\u0119 **{0}** na \u017cywo {1} w kolejce.
listStreamsOnlyMultiple=Znajduj\u0105 si\u0119 **{0}** na \u017cywo {1} w kolejce.
@@ -183,7 +183,7 @@ ratelimitedGeneralInfo=Jeste\u015b ograniczony od stawek. Prosz\u0119 zwolnij.
ratelimitedSkipCommand=Za pomoc\u0105 tego polecenia mo\u017cna pomin\u0105\u0107 wi\u0119cej ni\u017c jednej piosenk\u0119\: {0}
ratelimitedGuildSlowLoadingPlaylist=W tej chwili nie mo\u017cna doda\u0107 wi\u0119cej list na tym serwerze. Prosz\u0119 nie spam d\u0142ugimi listami.
unblacklisted={0} usuni\u0119ty z czarnej listy.
-serverinfoTitle=Informacje o **{0} **\:
+serverinfoTitle=Info about {0}\:
serverinfoOnlineUsers=U\u017cytkownik\u00f3w online\:
serverinfoTotalUsers=U\u017cytkownik\u00f3w razem\:
serverinfoRoles=Role\:
@@ -193,7 +193,7 @@ serverinfoGuildID=ID Gildii\:
serverinfoCreationDate=Data Utworzenia\:
serverinfoOwner=W\u0142a\u015bciciel\:
serverinfoVLv=Poziom weryfikacji\:
-userinfoTitle=Informacje o **{0} **\:
+userinfoTitle=Information about {0}\:
userinfoUsername=Nazwa u\u017cytkownika\:
userinfoId=ID\:
userinfoNick=Nick\:
@@ -212,7 +212,11 @@ commandsMaintenance=Przerwa Techniczna
commandsBotOwner=W\u0142a\u015bciciel bota
commandsMoreHelp=Napisz {0} aby dosta\u0107 wi\u0119cej informacji o specyficznej komendzie.
helpUnknownCommand=Nieznana komenda.
-helpDM=Dokumentacje znajdziesz poni\u017cej\:\nhttps\://fredboat.com/docs\n\nChcesz zaprosi\u0107 FredBoata na sw\u00f3j serwer? Je\u017celi masz uprawnienia do zarz\u0105dzania swoj\u0105 gildi\u0105, zapro\u015b go tu\:\n*Ten bot nie odtwarza muzyki*\n\n\nJe\u017celi chcesz doda\u0107 Musicbota, zapro\u015b go tu.\:\n\n\nPotrzebujesz pomocy lub masz pomys\u0142y jak ulepszy\u0107 bota? A mo\u017ce tylko chcesz sp\u0119dzi\u0107 sw\u00f3j czas? Cho\u0107 na sp\u0119dzanie czasu z FredBoatem\!\n{0}\n\nNie mozesz wysylac komend poprzez prywatna wiadomosc.\nBot stworzony przez Fre_d
+helpDocsLocation=Documentation can be found at\:
+helpBotInvite=Want to add FredBoat to your server? If you have Manage Server permissions for your guild, you can invite FredBoat\:
+helpHangoutInvite=Need help or have any ideas for FredBoat? Perhaps you just want to hang out? Join the FredBoat community\!
+helpNoDmCommands=You cannot send FredBoat commands through DMs.
+helpCredits=Created by Fre_d and open source contributors
helpSent=Dokumentacja zosta\u0142a wys\u0142ana do swojego Na prywatn\u0105 wiadomo\u015b\u0107\!
helpProperUsage=Poprawne zastosowanie\:
helpCommandOwnerRestricted=Ta komenda jest tylko ograniczona dla W\u0142a\u015bciciela bota.
@@ -257,7 +261,7 @@ helpSayCommand=Zr\u00f3b Botowi Echo Co\u015b.
helpServerInfoCommand=Wy\u015bwietl niekt\u00f3re statystyki dotycz\u0105ce tej gildii.
helpUserInfoCommand=Wy\u015bwietlanie informacji o sobie lub u\u017cytkowniku znanemu przez bot'a.
helpPerms=Pozwala gracz\u0105 kt\u00f3rzy s\u0105 w bia\u0142ej li\u015bcie oraz rangach z {0} rang.
-helpPrefixCommand=Set the prefix for this guild.
+helpPrefixCommand=Ustaw prefiks dla tego serwera.
helpVoteSkip=G\u0142osuj, aby pomin\u0105\u0107 bie\u017c\u0105c\u0105 piosenk\u0119. Do g\u0142osowania potrzeba 50% wszystkich u\u017cytkownik\u00f3w czatu g\u0142osowego.
helpMathOperationAdd=Wydrukuj sum\u0119 liczb1 i num2.
helpMathOperationSub=Print the difference of subtracting num2 from num1.
@@ -295,7 +299,7 @@ voteSkipEmbedVoters={0} spo\u015br\u00f3d {1} g\u0142osowali, aby pomin\u0105\u0
mathOperationResult=Wynik jest
mathOperationDivisionByZeroError=Ja nie mo\u017cna dzieli\u0107 przez zero.
mathOperationInfinity=Liczba jest zbyt du\u017ca, aby by\u0107 wy\u015bwietlane\!
-prefix=Prefix
-prefixGuild=The prefix for this guild is {0}
-prefixShowAgain=You can show the prefix anytime again by mentioning me.
+prefix=Prefiks
+prefixGuild=Prefiks tego serwera to {0}
+prefixShowAgain=Mo\u017cesz wy\u015bwietli\u0107 prefiks, za ka\u017cdym razem, kiedy mnie wspomnisz.
diff --git a/FredBoat/src/main/resources/lang/pt_BR.properties b/FredBoat/src/main/resources/lang/pt_BR.properties
index 06a130c89..998d55c97 100644
--- a/FredBoat/src/main/resources/lang/pt_BR.properties
+++ b/FredBoat/src/main/resources/lang/pt_BR.properties
@@ -183,7 +183,7 @@ ratelimitedGeneralInfo=Voc\u00ea est\u00e1 sendo taxa limitada\! Por favor, deva
ratelimitedSkipCommand=Voc\u00ea pode pular mais de uma m\u00fasica usando este comando\: {0}
ratelimitedGuildSlowLoadingPlaylist=Neste servidor n\u00e3o \u00e9 permitido adicionar playlists mais neste momento. Por favor n\u00e3o spam longas listas de reprodu\u00e7\u00e3o.
unblacklisted={0} removido da lista negra.
-serverinfoTitle=Informa\u00e7\u00e3o sobre * *{0} * *\:
+serverinfoTitle=Informa\u00e7\u00e3o sobre {0}\:
serverinfoOnlineUsers=Usu\u00e1rios online\:
serverinfoTotalUsers=Total de usu\u00e1rios\:
serverinfoRoles=Pap\u00e9is\:
@@ -193,7 +193,7 @@ serverinfoGuildID=ID da Guilda\:
serverinfoCreationDate=Data de cria\u00e7\u00e3o\:
serverinfoOwner=Dono\:
serverinfoVLv=N\u00edvel de Verifica\u00e7\u00e3o\:
-userinfoTitle=Informa\u00e7\u00f5es sobre * *{0} * *\:
+userinfoTitle=Informa\u00e7\u00f5es sobre {0}\:
userinfoUsername=Nome de Usu\u00e1rio\:
userinfoId=ID\:
userinfoNick=Nickname\:
@@ -212,7 +212,11 @@ commandsMaintenance=Manuten\u00e7\u00e3o
commandsBotOwner=Dono do Bot
commandsMoreHelp=Diga {0} para obter mais informa\u00e7\u00f5es sobre um comando espec\u00edfico.
helpUnknownCommand=Comando desconhecido.
-helpDM=A documenta\u00e7\u00e3o pode ser encontrada em\:\nhttps\://fredboat.com/docs\n\nQuer adicionar o FredBoat ao seu servidor? Se voc\u00ea tem as permiss\u00f5es de Gerenciar Servidor na sua guilda, voc\u00ea pode convida-lo aqui\:\n*Esse n\u00e3o reproduz m\u00fasica*\n\n\nSe voc\u00ea quer adicionar o bot de m\u00fasica, voc\u00ea vai querer convidar esse bot\:\n\n\nPrecisa de ajuda ou tem alguma ideia para o bot? Talvez voc\u00ea s\u00f3 queira relaxar? Venha para o FredBoat hangout\!\n{0}\n\nVoc\u00ea n\u00e3o pode mandar comandos para esse bot por DM.\nBot criado por Fre_d
+helpDocsLocation=Documenta\u00e7\u00e3o pode ser encontrada em\:
+helpBotInvite=Deseja adicionar FredBoat ao seu servidor? Se voc\u00ea tiver a permiss\u00e3o Gerenciar Servidor na sua guilda, voc\u00ea pode convidar FredBoat\:
+helpHangoutInvite=Precisar de ajuda ou tem alguma ideia para o FredBoat? Talvez voc\u00ea s\u00f3 quer bater um papo? Participe da Comunidade FredBoat\!
+helpNoDmCommands=Voc\u00ea n\u00e3o pode enviar comandos do FredBoat atrav\u00e9s de DMs.
+helpCredits=Criado por Fre_d e contribuidores open source
helpSent=Documenta\u00e7\u00e3o foi enviada para seus DMs\!
helpProperUsage=Uso correto\:
helpCommandOwnerRestricted=Este comando \u00e9 restrito para o dono do bot.
@@ -257,7 +261,7 @@ helpSayCommand=Fazer o bot ecoar algo.
helpServerInfoCommand=Exibe algumas estat\u00edsticas sobre esta guilda.
helpUserInfoCommand=Exibe informa\u00e7\u00f5es sobre voc\u00ea ou um usu\u00e1rio conhecido para o bot.
helpPerms=Permite que membros de whitelisting e fun\u00e7\u00f5es para o posto de {0}.
-helpPrefixCommand=Set the prefix for this guild.
+helpPrefixCommand=Defina o prefixo para essa guilda.
helpVoteSkip=Vote para ignorar a m\u00fasica atual. Precisa que 50% de todos os usu\u00e1rios no bate-papo votem.
helpMathOperationAdd=Imprime a soma do num1 e num2.
helpMathOperationSub=Mostra a diferen\u00e7a entre a sub-faixa num2 para a num1.
@@ -295,7 +299,7 @@ voteSkipEmbedVoters={0} de {1} votaram para pular a faixa atual
mathOperationResult=O resultado \u00e9
mathOperationDivisionByZeroError=Eu n\u00e3o posso dividir por zero.
mathOperationInfinity=O n\u00famero \u00e9 muito grande para ser exibido\!
-prefix=Prefix
-prefixGuild=The prefix for this guild is {0}
-prefixShowAgain=You can show the prefix anytime again by mentioning me.
+prefix=Prefixo
+prefixGuild=O prefixo para essa guild \u00e9 {0}
+prefixShowAgain=Voc\u00ea pode mostrar o prefixo novamente a qualquer momento me mencionando.
diff --git a/FredBoat/src/main/resources/lang/pt_PT.properties b/FredBoat/src/main/resources/lang/pt_PT.properties
index eba02c434..c31b161ae 100644
--- a/FredBoat/src/main/resources/lang/pt_PT.properties
+++ b/FredBoat/src/main/resources/lang/pt_PT.properties
@@ -45,7 +45,7 @@ exportPlaylistFail=Falha ao carregar a lista para hastebin.com
listShowShuffled=A exibir lista emparelhada.\n\n
listShowRepeatSingle=Repetindo a faixa atual.
listShowRepeatAll=Repetindo a fila atual.
-listShowHistory=Showing tracks in history.
+listShowHistory=A mostrar faixas anteriores.
listAddedBy=**{0}** foi adicionado por **{1}** `[{2}]`
listStreamsOnlySingle=H\u00e1 * *{0} * * {1} ao vivo na fila.
listStreamsOnlyMultiple=Existem * *{0} * * {1} ao vivo na fila.
@@ -57,7 +57,7 @@ listAsWellAsLiveStreams=, assim como **{0}** {1} ao vivo
trackSingular=faixa
trackPlural=faixas
npNotPlaying=N\u00e3o estou tocando nada.
-npNotInHistory=Currently no tracks in history.
+npNotInHistory=N\u00e3o existem faixas na sua historia.
npDescription=Descrip\u00e7\u00e3o
npLoadedSoundcloud=[{0}/{1}] \n\nCarregado do Soundcloud
npLoadedBandcamp={0} \n\nCarregado do Bandcamp
@@ -79,7 +79,7 @@ restartSuccess=* *{0} * * foi reiniciado.
queueEmpty=A fila est\u00e1 vazia.
rewSuccess=Rebobinando de **{0}** por {1}.
seekSuccess=Procurando de **{0}** a {1}.
-seekDeniedLiveTrack=You can't seek a live track.
+seekDeniedLiveTrack=Voee n\u00e3o pode avancar/recuar numa musica/transmiss\u00e3o ao vivo.
loadPlaySplitListFail=Esse link \u00e9 de uma playlist, n\u00e3o de uma faixa. Experimente `;;play` em vez disso.
loadListSuccess=Encontrando e adicionadas`{0}` m\u00fasicas da lista **{1}**.
loadNoMatches=Nenhum audio p\u00f4de ser encontrado para ''{0}''.
@@ -125,15 +125,15 @@ luaError=\ Ocorreu um erro Lua \:anger\: ```{0}```
luaErrorOutputTooBig=\ Buffer de s\u00e1ida \u00e9 muito largo \:anger\: a Discord s\u00f3 permite 2000 caracteres por mensagem, got {0}
luaTimeout=\ Fun\u00e7\u00e3o expirou \:anger\: tempo de computa\u00e7\u00e3o permitido \u00e9 {0} segundos.
helpSuccess=A documenta\u00e7\u00e3o foi enviada para suas mensagens diretas\!
-helpDmFailed=Could not send documentation to your DMs. Please check that you don't have them disabled\!
+helpDmFailed=N\u00e3o consegui enviar a documenta\u00e7\u00e3o para os seus DMs. Por favor verifique que n\u00e3o as tem desactivadas\!
helpCommandsPromotion=Diga {0} para saber o que esse bot pode fazer\!
fuzzyNoResults=Sem tais usu\u00e1rios
brainfuckCycleLimit=Programa excedeu a contagem de ciclo m\u00e1ximo de {0}
brainfuckDataPointerOutOfBounds=Ponteiro de datas fora dos limites\: {0}
brainfuckInputOOB=Entrada fora dos limites na posi\u00e7\u00e3o\: {0}
brainfuckNoOutput=\ N\u00e3o havia nenhuma sa\u00edda
-weatherLocationNotFound=Unable to find location, please check your input {0}.
-weatherError=Error retrieving weather for {0}
+weatherLocationNotFound=N\u00e3o foi possivel encontrar essa localiza\u00e7\u00e3o, por favor verifique os seus argumentos {0}.
+weatherError=Erro a buscar o tempo para {0}
avatarSuccess=\ achei\n{0}
configNoArgs=Configura\u00e7\u00e3o para **{0}**\:```
configSetTo=agora est\u00e1 definido para `{0}`.
@@ -183,7 +183,7 @@ ratelimitedGeneralInfo=Voc\u00ea est\u00e1 sendo taxa limitada\! Por favor, abra
ratelimitedSkipCommand=Voc\u00ea podes pular mais que uma m\u00fasica usando este comando\: {0}
ratelimitedGuildSlowLoadingPlaylist=Neste servidor n\u00e3o \u00e9 permitido adicionar mais playlists de momento. Por favor n\u00e3o spame longas listas de reprodu\u00e7\u00e3o.
unblacklisted={0} removido da lista negra.
-serverinfoTitle=Informa\u00e7\u00e3o sobre * *{0} * *\:
+serverinfoTitle=Informa\u00e7\u00e3o sobre {0}\:
serverinfoOnlineUsers=Usu\u00e1rios online\:
serverinfoTotalUsers=Total de usu\u00e1rios\:
serverinfoRoles=Fun\u00e7\u00f5es\:
@@ -193,17 +193,17 @@ serverinfoGuildID=ID de guilda\:
serverinfoCreationDate=Data de cria\u00e7\u00e3o\:
serverinfoOwner=Propriet\u00e1rio\:
serverinfoVLv=N\u00edvel de verifica\u00e7\u00e3o\:
-userinfoTitle=Informa\u00e7\u00f5es sobre * *{0} * *\:
+userinfoTitle=Informa\u00e7\u00e3o sobre {0}\:
userinfoUsername=Nome de usu\u00e1rio\:
userinfoId=ID\:
userinfoNick=Usu\u00e1rio\:
userinfoKnownServer=Servidores conhecidos\:
userinfoJoinDate=Data de entrada\:
userinfoCreationTime=Data de cria\u00e7\u00e3o\:
-userinfoBlacklisted=Blacklisted\:
-skipDeniedTooManyTracks=You can't skip someone else's tracks if you are not a DJ.\nConsider using the Voteskip command.
+userinfoBlacklisted=Bloqueado\:
+skipDeniedTooManyTracks=N\u00e3o podes passar a musica de outra pessoa se n\u00e3o fores o DJ\nConsidera usar o commando Voteskip.
eventUsersLeftVC=Todos os usu\u00e1rios deixaram o canal de voz. O reprodutor foi pausado.
-eventAutoResumed=User presence detected, automatically resuming the player.
+eventAutoResumed=Foi detectada a presen\u00e7a de um utilizador foi resumido automaticamente a musica.
commandsFun=Divers\u00e3o
commandsMemes=Memes
commandsUtility=Utilit\u00e1rio de
@@ -212,7 +212,11 @@ commandsMaintenance=Manuten\u00e7\u00e3o
commandsBotOwner=Dono do bot
commandsMoreHelp=Diga {0} para obter mais informa\u00e7\u00f5es sobre um comando espec\u00edfico.
helpUnknownCommand=Comando desconhecido.
-helpDM=A documenta\u00e7\u00e3o pode ser encontrada em\:\nhttps\://fredboat.com/docs\n\nQuer adicionar o FredBoat ao seu servidor? Se voc\u00ea tem as permiss\u00f5es de Gerenciar Servidor em seu servidor, voc\u00ea pode convida-lo aqui\:\n*Esse n\u00e3o reproduz m\u00fasica*\n\n\nSe voc\u00ea quer adicionar o bot de m\u00fasica, voc\u00ea vai querer convidar esse bot\:\n\n\nPrecisa de ajuda ou tem alguma ideia para o bot? Talvez voc\u00ea s\u00f3 queira relaxar? Venha para o FredBoat Hangout\!\n{0}\n\nVoc\u00ea n\u00e3o pode mandar comandos para esse bot por DM.\nBot criado por Fre_d
+helpDocsLocation=A documenta\u00e7\u00e3o pode ser encontrada em\:
+helpBotInvite=Queres adicionar o FredBoat ao teu server? Se tens permiss\u00f5es administrativas, tu podes convdar o FredBoat aqui\:
+helpHangoutInvite=Percisas de ajuda ou tens algumas ideias para o FredBoad? Ou se calhar apenas queres conviver? Junta-te a communidade FredBoat\!
+helpNoDmCommands=N\u00e3o podes enviar commandos por DMs.
+helpCredits=Criado por Fre_d e contribuidores de Git Hub
helpSent=A documenta\u00e7\u00e3o foi enviada para as suas mensagens privadas\!
helpProperUsage=Uso correto\:
helpCommandOwnerRestricted=Este comando \u00e9 restrito para o dono do bot.
@@ -225,20 +229,20 @@ helpMusicCommandsHeader=Comandos de M\u00fasica do FredBoat
helpJoinCommand=Fa\u00e7a o bot entrar no seu atual canal de voz.
helpLeaveCommand=Fa\u00e7a o bot sair do atual canal de voz.
helpPauseCommand=Pause o player.
-helpPlayCommand=Play music from the given URL or search for a track. For a full list of sources please visit {0}
+helpPlayCommand=Toque m\u00fasica pelo o dado URL ou pesquisa pela faixa. Para uma lista cheia de fontes viste {0}
helpPlaySplitCommand=Dividi um v\u00eddeo do YouTube em um tracklist fornecido na descri\u00e7\u00e3o do que \u00e9.
helpRepeatCommand=Alternar entre modos de repeti\u00e7\u00e3o.
helpReshuffleCommand=Reorganizar a fila atual.
helpSelectCommand=Selecione uma das faixas oferecidas depois de uma busca para reproduzir.
helpShuffleCommand=Alternar modo de reorganiza\u00e7\u00e3o da fila atual.
-helpSkipCommand=Skip the current song, the n'th song in the queue, all songs from n to m, or all songs from mentioned users. Please use in moderation.
+helpSkipCommand=Ignore a m\u00fasica atual, a can\u00e7\u00e3o de n'th na fila ou todas as m\u00fasicas de n para m. Por favor, use com modera\u00e7\u00e3o.
helpStopCommand=Pare o reprodutor e limpe a lista de reprodu\u00e7\u00e3o. Reservado para moderadores com permiss\u00e3o de gerenciar mensagens.
helpUnpauseCommand=Despausar o reprodutor.
helpVolumeCommand=Altera o volume. Os valores s\u00e3o 0-150 e 100 \u00e9 o padr\u00e3o. O comando de volume \u00e9 preterido no p\u00fablico bot.
helpExportCommand=Exportar a fila atual para um link de hastebin, pode ser usado mais tarde como uma lista de reprodu\u00e7\u00e3o.
helpGensokyoRadioCommand=Mostrar a atual m\u00fasica tocada na gensokyoradio.net
helpListCommand=Exibir uma lista de m\u00fasicas atuais na lista de reprodu\u00e7\u00e3o.
-helpHistoryCommand=Display a list of the songs in playlist history.
+helpHistoryCommand=Mostra uma lista de musicas na historia da playlist.
helpNowplayingCommand=Exiba a m\u00fasica que est\u00e1 tocando.
helpForwardCommand=Avancei a faixa por um determinado per\u00edodo de tempo. Exemplo\:
helpRestartCommand=Reinicie a faixa atualmente sendo reproduzida.
diff --git a/FredBoat/src/main/resources/lang/ro_RO.properties b/FredBoat/src/main/resources/lang/ro_RO.properties
index 8e004edb0..55dfa3ed5 100644
--- a/FredBoat/src/main/resources/lang/ro_RO.properties
+++ b/FredBoat/src/main/resources/lang/ro_RO.properties
@@ -183,7 +183,7 @@ ratelimitedGeneralInfo=Viteza dumneavoastr\u0103 este limitat\u0103\! V\u0103 ru
ratelimitedSkipCommand=Pute\u021bi s\u0103ro mai mult de o pies\u0103 folosind comanda\: {0}
ratelimitedGuildSlowLoadingPlaylist=Acestui server nu-i este permis s\u0103 adauge mai multe liste de redare \u00een acest moment. V\u0103 rug\u0103m s\u0103 nu spama\u021bi liste de redare lungi.
unblacklisted=Am \u0219ters {0} de pe lista neagr\u0103.
-serverinfoTitle=Informa\u0163ii despre **{0}**\:
+serverinfoTitle=Info about {0}\:
serverinfoOnlineUsers=Utilizatori online\:
serverinfoTotalUsers=Total de utilizatori\:
serverinfoRoles=Roluri\:
@@ -193,7 +193,7 @@ serverinfoGuildID=ID-ul server-ului\:
serverinfoCreationDate=Data Cre\u0103rii\:
serverinfoOwner=Proprietar\:
serverinfoVLv=Nivel de verificare\:
-userinfoTitle=Informa\u0163ii despre **{0}**\:
+userinfoTitle=Information about {0}\:
userinfoUsername=Nume de utilizator\:
userinfoId=ID\:
userinfoNick=Nickname\:
@@ -212,7 +212,11 @@ commandsMaintenance=Mentenan\u0163\u0103
commandsBotOwner=Proprietarul bot-ului
commandsMoreHelp=Spune {0} pentru a ob\u021bine mai multe informa\u021bii despre o anumit\u0103 comand\u0103.
helpUnknownCommand=Comand\u0103 necunoscut\u0103.
-helpDM=Documenta\u021bia poate fi g\u0103sit\u0103 pe\:\nhttps\://fredboat.com/docs\n\n\u00cel vrei pe FredBoat \u00een server-ul t\u0103u? Dac\u0103 ai permisiunea Manage Server pentru server-ul t\u0103u, \u00eel po\u021bi invita de aici\:\n*Acesta nu red\u0103 muzic\u0103*\n\n\nDac\u0103 vrei s\u0103 adaugi botul care red\u0103 muzica, vei dori s\u0103 invi\u021bi acest bot\:\n\n\nAi nevoie de ajutor sau idei pentru bot? Poate doar vrei s\u0103 por\u021bi discu\u021bii? Vino \u00een FredBoat hangout\!\n{0}\n\nNu po\u021bi trimite comenzi prin DM acestui bot.\nBot creat de Fre_d
+helpDocsLocation=Documentation can be found at\:
+helpBotInvite=Want to add FredBoat to your server? If you have Manage Server permissions for your guild, you can invite FredBoat\:
+helpHangoutInvite=Need help or have any ideas for FredBoat? Perhaps you just want to hang out? Join the FredBoat community\!
+helpNoDmCommands=You cannot send FredBoat commands through DMs.
+helpCredits=Created by Fre_d and open source contributors
helpSent=Documenta\u021bia \u021bi-a fost trimis\u0103 \u00een DM-uri\!
helpProperUsage=Utilizare corect\u0103\:
helpCommandOwnerRestricted=Aceast\u0103 comand\u0103 este restric\u021bionat\u0103 proprietarului bot-ului.
@@ -257,7 +261,7 @@ helpSayCommand=Face ca bot-ul s\u0103 spun\u0103 ceva.
helpServerInfoCommand=Afi\u015feaz\u0103 unele statistici despre acest server.
helpUserInfoCommand=Afi\u015feaz\u0103 informa\u0163ii despre tine sau despre un utilizator cunoscut de bot.
helpPerms=Permite ad\u0103ugarea membrilor la lista alb\u0103 \u0219i a rolurilor pentru rangul {0}.
-helpPrefixCommand=Set the prefix for this guild.
+helpPrefixCommand=Seteaz\u0103 prefixul pentru serverul acesta.
helpVoteSkip=Voteaz\u0103 pentru a s\u0103ri piesa curent\u0103. Este necesar c\u0103 50% din utilizatorii din chatul vocal s\u0103 voteze.
helpMathOperationAdd=Scrie suma lui num1 cu num2.
helpMathOperationSub=Scrie diferen\u021ba sc\u0103derii lui num2 din num1.
@@ -296,6 +300,6 @@ mathOperationResult=Rezultatul este
mathOperationDivisionByZeroError=Nu pot \u00eemp\u0103r\u021bi la zero.
mathOperationInfinity=Num\u0103rul este prea marea pentru a fi ar\u0103tat\!
prefix=Prefix
-prefixGuild=The prefix for this guild is {0}
-prefixShowAgain=You can show the prefix anytime again by mentioning me.
+prefixGuild=Prefixul pentru acest server este {0}
+prefixShowAgain=Po\u021bi afi\u0219a prefixul oric\u00e2nd vrei men\u021bion\u00e2ndu-m\u0103.
diff --git a/FredBoat/src/main/resources/lang/ru_RU.properties b/FredBoat/src/main/resources/lang/ru_RU.properties
index 13c9f5b83..c9228ad43 100644
--- a/FredBoat/src/main/resources/lang/ru_RU.properties
+++ b/FredBoat/src/main/resources/lang/ru_RU.properties
@@ -183,7 +183,7 @@ ratelimitedGeneralInfo=\u041f\u0440\u0435\u0432\u044b\u0448\u0435\u043d \u043b\u
ratelimitedSkipCommand=\u0412\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u043f\u0440\u043e\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0431\u043e\u043b\u0435\u0435 \u0447\u0435\u043c \u043e\u0434\u043d\u0443 \u043f\u0435\u0441\u043d\u044e \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u044d\u0442\u043e\u0439 \u043a\u043e\u043c\u0430\u043d\u0434\u044b\: {0}
ratelimitedGuildSlowLoadingPlaylist=\u041d\u0430 \u044d\u0442\u043e\u043c \u0441\u0435\u0440\u0432\u0435\u0440\u0435 \u0437\u0430\u043f\u0440\u0435\u0449\u0435\u043d\u043e \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0442\u044c \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u043f\u043b\u0435\u0439\u043b\u0438\u0441\u0442\u044b \u0432 \u0434\u0430\u043d\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442. \u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u043d\u0435 \u043d\u0430\u0434\u043e \u0441\u043f\u0430\u043c\u0438\u0442\u044c \u0434\u043b\u0438\u043d\u043d\u044b\u043c\u0438 \u043f\u043b\u0435\u0439\u043b\u0438\u0441\u0442\u0430\u043c\u0438.
unblacklisted={0} \u0443\u0431\u0440\u0430\u043d \u0438\u0437 \u0447\u0451\u0440\u043d\u043e\u0433\u043e \u0441\u043f\u0438\u0441\u043a\u0430.
-serverinfoTitle=\u0418\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u043e **{0} **\:
+serverinfoTitle=Info about {0}\:
serverinfoOnlineUsers=\u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439 \u043e\u043d\u043b\u0430\u0439\u043d\:
serverinfoTotalUsers=\u0412\u0441\u0435\u0433\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439\:
serverinfoRoles=\u0420\u043e\u043b\u0438\:
@@ -193,7 +193,7 @@ serverinfoGuildID=ID \u0421\u0435\u0440\u0432\u0435\u0440\u0430\:
serverinfoCreationDate=\u0414\u0430\u0442\u0430 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f\:
serverinfoOwner=\u0412\u043b\u0430\u0434\u0435\u043b\u0435\u0446\:
serverinfoVLv=\u0423\u0440\u043e\u0432\u0435\u043d\u044c \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438\:
-userinfoTitle=\u0418\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u043e **{0} **\:
+userinfoTitle=Information about {0}\:
userinfoUsername=\u0418\u043c\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f\:
userinfoId=ID\:
userinfoNick=\u041d\u0438\u043a\:
@@ -212,7 +212,11 @@ commandsMaintenance=\u0422\u0435\u0445\u043e\u0431\u0441\u043b\u0443\u0436\u0438
commandsBotOwner=\u0412\u043b\u0430\u0434\u0435\u043b\u0435\u0446 \u0431\u043e\u0442\u0430
commandsMoreHelp=\u041d\u0430\u043f\u0438\u0448\u0438\u0442\u0435 {0} \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0431\u043e\u043b\u044c\u0448\u0435 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u043e \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0439 \u043a\u043e\u043c\u0430\u043d\u0434\u0435.
helpUnknownCommand=\u041d\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u0430\u044f \u043a\u043e\u043c\u0430\u043d\u0434\u0430.
-helpDM=\u0414\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044e \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0439\u0442\u0438 \u043d\u0430\:\nhttps\://fredboat.com/docs\n\n\u0425\u043e\u0442\u0438\u0442\u0435 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c FredBoat \u043d\u0430 \u0441\u0432\u043e\u0439 \u0441\u0435\u0440\u0432\u0435\u0440? \u0415\u0441\u043b\u0438 \u0443 \u0432\u0430\u0441 \u0435\u0441\u0442\u044c \u043f\u043e\u043b\u043d\u043e\u043c\u043e\u0447\u0438\u044f \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440, \u0442\u043e \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0435\u0433\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c\:\n*\u042d\u0442\u043e\u0442 \u043c\u0443\u0437\u044b\u043a\u0443 \u043d\u0435 \u0438\u0433\u0440\u0430\u0435\u0442*\n\n\n*\u0410 \u044d\u0442\u043e\u0442 \u0438\u0433\u0440\u0430\u0435\u0442*\:\n\n\n\u041d\u0443\u0436\u043d\u0430 \u043f\u043e\u043c\u043e\u0449\u044c \u0438\u043b\u0438 \u0435\u0441\u0442\u044c \u0438\u0434\u0435\u0438 \u0434\u043b\u044f \u0431\u043e\u0442\u0430? \u0418\u043b\u0438 \u043f\u0440\u043e\u0441\u0442\u043e \u0445\u043e\u0442\u0438\u0442\u0435 \u043f\u043e\u0440\u0430\u0437\u0432\u043b\u0435\u044c\u0447\u0441\u044f? \u0417\u0430\u0445\u043e\u0434\u0438 \u043d\u0430 FredBoat \u0441\u0435\u0440\u0432\u0435\u0440\!\n{0}\n\n\u0412\u044b \u043d\u0435 \u043c\u043e\u0436\u0435\u0442\u0435 \u043f\u043e\u0441\u044b\u043b\u0430\u0442\u044c \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u044d\u0442\u043e\u043c\u0443 \u0431\u043e\u0442\u0443 \u0447\u0435\u0440\u0435\u0437 \u041b\u0421.\n\u0411\u043e\u0442 \u0441\u043e\u0437\u0434\u0430\u043d Fre_d
+helpDocsLocation=Documentation can be found at\:
+helpBotInvite=Want to add FredBoat to your server? If you have Manage Server permissions for your guild, you can invite FredBoat\:
+helpHangoutInvite=Need help or have any ideas for FredBoat? Perhaps you just want to hang out? Join the FredBoat community\!
+helpNoDmCommands=You cannot send FredBoat commands through DMs.
+helpCredits=Created by Fre_d and open source contributors
helpSent=\u0414\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f \u0431\u044b\u043b\u0430 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0430 \u0442\u0435\u0431\u0435 \u0432 \u043b\u0438\u0447\u043d\u044b\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f\!
helpProperUsage=\u041f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\:
helpCommandOwnerRestricted=\u042d\u0442\u0430 \u043a\u043e\u043c\u0430\u043d\u0434\u0430 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u0430 \u0442\u043e\u043b\u044c\u043a\u043e \u0432\u043b\u0430\u0434\u0435\u043b\u044c\u0446\u0443 \u0431\u043e\u0442\u0430.
diff --git a/FredBoat/src/main/resources/lang/sr_SP.properties b/FredBoat/src/main/resources/lang/sr_SP.properties
index b2104ac13..7fbb0965f 100644
--- a/FredBoat/src/main/resources/lang/sr_SP.properties
+++ b/FredBoat/src/main/resources/lang/sr_SP.properties
@@ -183,7 +183,7 @@ ratelimitedGeneralInfo=You are being rate limited\! Please slow down.
ratelimitedSkipCommand=You can skip more than one song by using this command\: {0}
ratelimitedGuildSlowLoadingPlaylist=This server is not allowed to add more playlists at this moment. Please don't spam long playlists.
unblacklisted=Removed {0} from the blacklist.
-serverinfoTitle=Info about **{0}**\:
+serverinfoTitle=Info about {0}\:
serverinfoOnlineUsers=Online Users\:
serverinfoTotalUsers=Total Users\:
serverinfoRoles=Roles\:
@@ -193,7 +193,7 @@ serverinfoGuildID=Guild ID\:
serverinfoCreationDate=Creation Date\:
serverinfoOwner=Owner\:
serverinfoVLv=Verification Level\:
-userinfoTitle=Information about **{0}**\:
+userinfoTitle=Information about {0}\:
userinfoUsername=Username\:
userinfoId=ID\:
userinfoNick=Nickname\:
@@ -212,7 +212,11 @@ commandsMaintenance=Maintenance
commandsBotOwner=Bot owner
commandsMoreHelp=Say {0} to get more information on a specific command.
helpUnknownCommand=Unknown command.
-helpDM=Documentation can be found at\:\nhttps\://fredboat.com/docs\n\nWant to add FredBoat to your server? If you have Manage Server permissions for your guild, you can invite it here\:\n*This one doesn''t play music*\n\n\nIf you want to add the music bot, you will want to invite this bot\:\n\n\nNeed help or have any ideas for the bot? Perhaps you just want to hang out? Come on over to FredBoat hangout\!\n{0}\n\nYou cannot send this bot commands through DM.\nBot created by Fre_d
+helpDocsLocation=Documentation can be found at\:
+helpBotInvite=Want to add FredBoat to your server? If you have Manage Server permissions for your guild, you can invite FredBoat\:
+helpHangoutInvite=Need help or have any ideas for FredBoat? Perhaps you just want to hang out? Join the FredBoat community\!
+helpNoDmCommands=You cannot send FredBoat commands through DMs.
+helpCredits=Created by Fre_d and open source contributors
helpSent=Documentation has been sent to your DMs\!
helpProperUsage=Proper usage\:
helpCommandOwnerRestricted=This command is restricted to the owner of the bot.
diff --git a/FredBoat/src/main/resources/lang/sv_SE.properties b/FredBoat/src/main/resources/lang/sv_SE.properties
index 556d4bc4e..ce09a9709 100644
--- a/FredBoat/src/main/resources/lang/sv_SE.properties
+++ b/FredBoat/src/main/resources/lang/sv_SE.properties
@@ -183,7 +183,7 @@ ratelimitedGeneralInfo=Du skickar kommandon f\u00f6r snabbt\! Sakta ner grabben.
ratelimitedSkipCommand=Du kan hoppa \u00f6ver mer \u00e4n en l\u00e5t genom att anv\u00e4nda detta kommando\: {0}
ratelimitedGuildSlowLoadingPlaylist=Denna server f\u00e5r inte skapa mer spellistor f\u00f6r tillf\u00e4llet. Var sn\u00e4ll och spamma inte med l\u00e5nga spellistor.
unblacklisted=Tog bort {0} fr\u00e5n svarta listan.
-serverinfoTitle=Info om **{0}**\:
+serverinfoTitle=Info om {0}\:
serverinfoOnlineUsers=Anv\u00e4ndare online\:
serverinfoTotalUsers=Antal anv\u00e4ndare\:
serverinfoRoles=Roller\:
@@ -193,7 +193,7 @@ serverinfoGuildID=Guild ID\:
serverinfoCreationDate=Skapades\:
serverinfoOwner=\u00c4gare\:
serverinfoVLv=Kontroll niv\u00e5\:
-userinfoTitle=Info om **{0}**\:
+userinfoTitle=Information om {0}\:
userinfoUsername=Anv\u00e4ndarnamn\:
userinfoId=ID\:
userinfoNick=Smeknamn\:
@@ -212,7 +212,11 @@ commandsMaintenance=Underh\u00e5ll
commandsBotOwner=Bot\u00e4gare
commandsMoreHelp=Skriv {0} f\u00f6r att f\u00e5 specifik information f\u00f6r ett kommando.
helpUnknownCommand=Ok\u00e4nt kommando.
-helpDM=Info kan hittas p\u00e5 botens GitHub-sida\nhttp\://docs.frederikam.com\n\nVill du ha FredBoat p\u00e5 din server? Om du har till\u00e5telsen "Hantera Server" p\u00e5 den s\u00e5 kan du bjuda in den h\u00e4r\: \n*Denna spelar inte musik*\n\n\nOm du vill l\u00e4gga till musikboten s\u00e5 b\u00f6r du bjuda in denna bot\:\n\n\nOm du beh\u00f6ver hj\u00e4lp, om du har id\u00e9er f\u00f6r boten eller om du bara vill h\u00e4nga s\u00e5 kan du g\u00f6ra p\u00e5 FredBoat Hangout\! \n{0}\n\nDu kan inte skicka kommandon till denna bot genom DM.\nBot skapad av Fre_d
+helpDocsLocation=Dokumentation kan hittas p\u00e5\:
+helpBotInvite=Vill du l\u00e4gga till FredBoat till din server? Har du hantera Server-beh\u00f6righeter f\u00f6r din guild, kan du bjuda in FredBoat\:
+helpHangoutInvite=Beh\u00f6ver du hj\u00e4lp eller har n\u00e5gra id\u00e9er f\u00f6r FredBoat? Kanske vill du bara umg\u00e5s? G\u00e5 med i FredBoat community\!
+helpNoDmCommands=Du kan inte skicka FredBoat kommandon via DMs.
+helpCredits=Skapad av Fre_d och \u00f6ppen k\u00e4llkod bidragsgivare
helpSent=Info har skickats direkt till dig\!
helpProperUsage=R\u00e4tt anv\u00e4ndning\:
helpCommandOwnerRestricted=Detta kommando \u00e4r endast tillg\u00e4ngligt f\u00f6r bot\u00e4garen.
@@ -225,7 +229,7 @@ helpMusicCommandsHeader=FredBoat-Musics kommandon
helpJoinCommand=F\u00e5 botten att ansluta till din nuvarande r\u00f6stkanal.
helpLeaveCommand=F\u00e5 botten att l\u00e4mna den nuvarande r\u00f6stkanalen.
helpPauseCommand=Pausa spelaren.
-helpPlayCommand=Play music from the given URL or search for a track. For a full list of sources please visit {0}
+helpPlayCommand=Spela upp musik fr\u00e5n den angivna URLen eller s\u00f6k efter ett sp\u00e5r. F\u00f6r en full lista av k\u00e4llor v\u00e4nligen bes\u00f6k {0}
helpPlaySplitCommand=Dela upp en YouTube-video i en l\u00e5tlista angiven i beskrivningen.
helpRepeatCommand=V\u00e4xla mellan upprepningsl\u00e4gen.
helpReshuffleCommand=Blandar om den aktuella k\u00f6n.
@@ -257,7 +261,7 @@ helpSayCommand=F\u00e5 boten att s\u00e4ga n\u00e5got.
helpServerInfoCommand=Visa lite statistik om denna server.
helpUserInfoCommand=Visa information om dig sj\u00e4lv eller en anv\u00e4ndare som \u00e4r k\u00e4nd av boten.
helpPerms=Till\u00e5ter vitlistning medlemmar och roller f\u00f6r {0} rang.
-helpPrefixCommand=Set the prefix for this guild.
+helpPrefixCommand=S\u00e4tt prefixen f\u00f6r denna server.
helpVoteSkip=R\u00f6sta f\u00f6r att hoppa \u00f6ver den nuvarande l\u00e5ten. 50% av alla anv\u00e4ndare m\u00e5ste r\u00f6sta f\u00f6r att det ska funka.
helpMathOperationAdd=Skriv ut summan av num1 och num2.
helpMathOperationSub=Skriv ut differensen av att subtrahera num2 fr\u00e5n num1.
@@ -296,6 +300,6 @@ mathOperationResult=Resultatet \u00e4r
mathOperationDivisionByZeroError=Jag kan inte dela med noll.
mathOperationInfinity=Numret \u00e4r f\u00f6r stort f\u00f6r att visas\!
prefix=Prefix
-prefixGuild=The prefix for this guild is {0}
-prefixShowAgain=You can show the prefix anytime again by mentioning me.
+prefixGuild=Prefixen f\u00f6r denna server \u00e4r {0}
+prefixShowAgain=Du kan se prefixen n\u00e4r som helst igen genom att @a mig.
diff --git a/FredBoat/src/main/resources/lang/th_TH.properties b/FredBoat/src/main/resources/lang/th_TH.properties
index 8175c7818..f407ff197 100644
--- a/FredBoat/src/main/resources/lang/th_TH.properties
+++ b/FredBoat/src/main/resources/lang/th_TH.properties
@@ -45,7 +45,7 @@ exportPlaylistFail=\u0e01\u0e32\u0e23\u0e2d\u0e31\u0e1e\u0e42\u0e2b\u0e25\u0e14\
listShowShuffled=\u0e01\u0e33\u0e25\u0e31\u0e07\u0e40\u0e40\u0e2a\u0e14\u0e07\u0e40\u0e1e\u0e25\u0e22\u0e4c\u0e25\u0e34\u0e2a\u0e15\u0e4c\u0e17\u0e35\u0e48\u0e1c\u0e48\u0e32\u0e19\u0e01\u0e32\u0e23\u0e2a\u0e31\u0e1a\u0e40\u0e1b\u0e25\u0e35\u0e48\u0e22\u0e19[shuffle] \u0e40\u0e40\u0e25\u0e49\u0e27
listShowRepeatSingle=\u0e40\u0e14\u0e35\u0e4b\u0e22\u0e27\u0e40\u0e1b\u0e34\u0e14\u0e40\u0e40\u0e17\u0e23\u0e47\u0e04\u0e19\u0e35\u0e49\u0e43\u0e2b\u0e49\u0e2d\u0e35\u0e01\u0e23\u0e2d\u0e1a\u0e19\u0e30
listShowRepeatAll=\u0e40\u0e14\u0e35\u0e4b\u0e22\u0e27\u0e40\u0e1b\u0e34\u0e14\u0e40\u0e1e\u0e25\u0e07\u0e43\u0e19\u0e04\u0e34\u0e27\u0e17\u0e31\u0e49\u0e07\u0e2b\u0e21\u0e14\u0e2d\u0e35\u0e01\u0e23\u0e2d\u0e1a\u0e43\u0e2b\u0e49\u0e19\u0e30
-listShowHistory=Showing tracks in history.
+listShowHistory=\u0e1f\u0e31\u0e07\u0e40\u0e1e\u0e25\u0e07
listAddedBy=**{0}** \u0e16\u0e39\u0e01\u0e40\u0e1e\u0e34\u0e48\u0e21\u0e40\u0e02\u0e49\u0e32\u0e44\u0e1b\u0e43\u0e19\u0e04\u0e34\u0e27\u0e42\u0e14\u0e22 **{1}** `[{2}]`
listStreamsOnlySingle=\u0e21\u0e35\u0e44\u0e25\u0e1f\u0e2a\u0e15\u0e23\u0e35\u0e21 **{0}** \u0e44\u0e25\u0e1f {1} \u0e43\u0e19\u0e04\u0e34\u0e27
listStreamsOnlyMultiple=\u0e21\u0e35\u0e44\u0e25\u0e1f\u0e2a\u0e15\u0e23\u0e35\u0e21 **{0}** \u0e44\u0e25\u0e1f {1} \u0e43\u0e19\u0e04\u0e34\u0e27
@@ -183,7 +183,7 @@ ratelimitedGeneralInfo=\u0e04\u0e38\u0e13\u0e08\u0e30\u0e16\u0e39\u0e01\u0e08\u0
ratelimitedSkipCommand=\u0e04\u0e38\u0e13\u0e2a\u0e32\u0e21\u0e32\u0e23\u0e16\u0e02\u0e49\u0e32\u0e21\u0e40\u0e1e\u0e25\u0e07\u0e17\u0e35\u0e48\u0e21\u0e32\u0e01\u0e01\u0e27\u0e48\u0e32\u0e2b\u0e19\u0e36\u0e48\u0e07 \u0e42\u0e14\u0e22\u0e43\u0e0a\u0e49\u0e04\u0e33\u0e2a\u0e31\u0e48\u0e07\u0e19\u0e35\u0e49\: {0}
ratelimitedGuildSlowLoadingPlaylist=\u0e40\u0e0b\u0e34\u0e23\u0e4c\u0e1f\u0e40\u0e27\u0e2d\u0e23\u0e4c\u0e19\u0e35\u0e49\u0e44\u0e21\u0e48\u0e2d\u0e19\u0e38\u0e0d\u0e32\u0e15\u0e43\u0e2b\u0e49\u0e40\u0e1e\u0e34\u0e48\u0e21\u0e23\u0e32\u0e22\u0e01\u0e32\u0e23\u0e40\u0e1e\u0e34\u0e48\u0e21\u0e40\u0e15\u0e34\u0e21\u0e43\u0e19\u0e02\u0e13\u0e30\u0e19\u0e35\u0e49 \u0e23\u0e32\u0e22\u0e01\u0e32\u0e23\u0e17\u0e35\u0e48\u0e40\u0e25\u0e48\u0e19\u0e22\u0e32\u0e27\u0e2a\u0e41\u0e1b\u0e21
unblacklisted={0} \u0e2d\u0e2d\u0e01\u0e08\u0e32\u0e01\u0e1a\u0e31\u0e0d\u0e0a\u0e35\u0e14\u0e33
-serverinfoTitle=\u0e02\u0e49\u0e2d\u0e21\u0e39\u0e25\u0e40\u0e01\u0e35\u0e48\u0e22\u0e27\u0e01\u0e31\u0e1a **{0} **\:
+serverinfoTitle=Info about {0}\:
serverinfoOnlineUsers=\u0e1c\u0e39\u0e49\u0e43\u0e0a\u0e49\u0e2d\u0e2d\u0e19\u0e44\u0e25\u0e19\u0e4c\:
serverinfoTotalUsers=\u0e1c\u0e39\u0e49\u0e43\u0e0a\u0e49\u0e23\u0e27\u0e21\:
serverinfoRoles=\u0e1a\u0e17\u0e1a\u0e32\u0e17\:
@@ -193,7 +193,7 @@ serverinfoGuildID=\u0e01\u0e34\u0e25\u0e14\u0e4c ID\:
serverinfoCreationDate=\u0e27\u0e31\u0e19\u0e17\u0e35\u0e48\u0e2a\u0e23\u0e49\u0e32\u0e07\:
serverinfoOwner=\u0e40\u0e08\u0e49\u0e32\u0e02\u0e2d\u0e07\:
serverinfoVLv=\u0e23\u0e30\u0e14\u0e31\u0e1a\u0e01\u0e32\u0e23\u0e15\u0e23\u0e27\u0e08\u0e2a\u0e2d\u0e1a\:
-userinfoTitle=\u0e02\u0e49\u0e2d\u0e21\u0e39\u0e25\u0e40\u0e01\u0e35\u0e48\u0e22\u0e27\u0e01\u0e31\u0e1a **{0} **\:
+userinfoTitle=Information about {0}\:
userinfoUsername=\u0e0a\u0e37\u0e48\u0e2d\u0e1c\u0e39\u0e49\u0e43\u0e0a\u0e49\:
userinfoId=\u0e23\u0e2b\u0e31\u0e2a\:
userinfoNick=\u0e0a\u0e37\u0e48\u0e2d\u0e40\u0e25\u0e48\u0e19\:
@@ -212,7 +212,11 @@ commandsMaintenance=\u0e01\u0e32\u0e23\u0e1a\u0e33\u0e23\u0e38\u0e07\u0e23\u0e31
commandsBotOwner=\u0e40\u0e08\u0e49\u0e32\u0e02\u0e2d\u0e07\u0e1a\u0e2d\u0e17
commandsMoreHelp=\u0e1a\u0e2d\u0e01 {0} \u0e08\u0e30\u0e44\u0e14\u0e49\u0e23\u0e31\u0e1a\u0e02\u0e49\u0e2d\u0e21\u0e39\u0e25\u0e40\u0e1e\u0e34\u0e48\u0e21\u0e40\u0e15\u0e34\u0e21\u0e40\u0e01\u0e35\u0e48\u0e22\u0e27\u0e01\u0e31\u0e1a\u0e04\u0e33\u0e2a\u0e31\u0e48\u0e07\u0e40\u0e09\u0e1e\u0e32\u0e30
helpUnknownCommand=\u0e04\u0e33\u0e2a\u0e31\u0e48\u0e07\u0e17\u0e35\u0e48\u0e44\u0e21\u0e48\u0e23\u0e39\u0e49\u0e08\u0e31\u0e01
-helpDM=Documentation can be found at\:\nhttps\://fredboat.com/docs\n\nWant to add FredBoat to your server? If you have Manage Server permissions for your guild, you can invite it here\:\n*This one doesn''t play music*\n\n\nIf you want to add the music bot, you will want to invite this bot\:\n\n\nNeed help or have any ideas for the bot? Perhaps you just want to hang out? Come on over to FredBoat hangout\!\n{0}\n\nYou cannot send this bot commands through DM.\nBot created by Fre_d
+helpDocsLocation=Documentation can be found at\:
+helpBotInvite=Want to add FredBoat to your server? If you have Manage Server permissions for your guild, you can invite FredBoat\:
+helpHangoutInvite=Need help or have any ideas for FredBoat? Perhaps you just want to hang out? Join the FredBoat community\!
+helpNoDmCommands=You cannot send FredBoat commands through DMs.
+helpCredits=Created by Fre_d and open source contributors
helpSent=\u0e02\u0e49\u0e2d\u0e04\u0e27\u0e32\u0e21\u0e16\u0e39\u0e01\u0e2a\u0e48\u0e07\u0e44\u0e1b\u0e22\u0e31\u0e07\u0e41\u0e0a\u0e17\u0e42\u0e14\u0e22\u0e15\u0e23\u0e07\u0e02\u0e2d\u0e07\u0e04\u0e38\u0e13\u0e41\u0e25\u0e49\u0e27\!
helpProperUsage=\u0e01\u0e32\u0e23\u0e43\u0e0a\u0e49\u0e07\u0e32\u0e19\u0e17\u0e35\u0e48\u0e40\u0e2b\u0e21\u0e32\u0e30\u0e2a\u0e21\:
helpCommandOwnerRestricted=\u0e04\u0e33\u0e2a\u0e31\u0e48\u0e07\u0e19\u0e35\u0e49\u0e16\u0e39\u0e01\u0e08\u0e33\u0e01\u0e31\u0e14\u0e44\u0e1b\u0e22\u0e31\u0e07\u0e40\u0e08\u0e49\u0e32\u0e02\u0e2d\u0e07\u0e1a\u0e2d\u0e17
diff --git a/FredBoat/src/main/resources/lang/tr_TR.properties b/FredBoat/src/main/resources/lang/tr_TR.properties
index 44cde7551..dd5ce38f3 100644
--- a/FredBoat/src/main/resources/lang/tr_TR.properties
+++ b/FredBoat/src/main/resources/lang/tr_TR.properties
@@ -183,7 +183,7 @@ ratelimitedGeneralInfo=Oran\u0131 k\u0131s\u0131tl\u0131yorsun\! L\u00fctfen yav
ratelimitedSkipCommand=Bu komutu kullanarak birden fazla \u015fark\u0131 ge\u00e7ebilirsiniz\: {0}
ratelimitedGuildSlowLoadingPlaylist=Bu sunucunun \u015fu anda daha fazla oynatma listesi eklemesine izin verilmez. L\u00fctfen uzun \u00e7alma listeleriyle spam g\u00f6ndermeyin.
unblacklisted=Kara listeden {0} kald\u0131r\u0131ld\u0131.
-serverinfoTitle=**{0}** hakk\u0131nda bilgi\:
+serverinfoTitle={0} hakk\u0131nda bilgi\:
serverinfoOnlineUsers=Aktif kullan\u0131c\u0131lar\:
serverinfoTotalUsers=Toplam Kullan\u0131c\u0131\:
serverinfoRoles=Roller\:
@@ -193,7 +193,7 @@ serverinfoGuildID=Klan ID\:
serverinfoCreationDate=Olu\u015fturulma Tarihi\:
serverinfoOwner=Sahibi\:
serverinfoVLv=Do\u011frulama Seviyesi\:
-userinfoTitle=**{0}** hakk\u0131nda bilgi\:
+userinfoTitle={0} hakk\u0131nda bilgi\:
userinfoUsername=Kullan\u0131c\u0131 ad\u0131\:
userinfoId=ID\:
userinfoNick=Rumuzu\:
@@ -212,7 +212,11 @@ commandsMaintenance=Bak\u0131m
commandsBotOwner=Bot sahibi
commandsMoreHelp=Belirli bir komutla ilgili daha fazla bilgi almak i\u00e7in {0} yaz.
helpUnknownCommand=Bilinmeyen komut.
-helpDM=D\u00f6k\u00fcmasyonlara buradan ula\u015fabilirsiniz\:\nhttps\://fredboat.com/docs\n\nSunucuza FredBoat''\u0131 eklemek istiyor musunuz? E\u011fer sunucunun izinlerini y\u00f6netebiliyorsan, botu buradan davet edebilirsin\:\n*Bu bot m\u00fczik \u00e7almaz*\n\n\nM\u00fczik botu eklemek istiyorsan ve hala bu botu davet etmek istersen\:\n\n\nBot i\u00e7in yard\u0131ma ihtiyac\u0131n m\u0131 var? yada akl\u0131na g\u00fczel bir fikir mi geldi? Yoksa sadece tak\u0131lmak m\u0131 istiyorsun? Buraya gel ve FredBoat ile tak\u0131l\! {0}\n\nBot komutlar\u0131n\u0131 \u00f6zel mesaj yoluyla g\u00f6nderemezsin\nBot Fre_d taraf\u0131ndan yap\u0131lm\u0131\u015ft\u0131r
+helpDocsLocation=Belgeler \u015furada bulunabilir\:
+helpBotInvite=FredBoat'\u0131 sunucunuza eklemek ister misiniz? E\u011fer eklemek istedi\u011finiz sunucuda "Sunucuyu Y\u00f6net" yetkiniz varsa, FredBoat'\u0131 buradan davet edebilirsiniz\:
+helpHangoutInvite=FredBoat hakk\u0131nda yard\u0131ma ihtiyac\u0131n\u0131z m\u0131 var ya da akl\u0131n\u0131za herhangi bir fikir mi geldi? Ya da sadece tak\u0131lmak m\u0131 istiyorsunuz? FredBoat toplulu\u011funa kat\u0131l\u0131n\!
+helpNoDmCommands=FredBoat komutlar\u0131n\u0131 DM \u00fczerinden g\u00f6nderemezsiniz.
+helpCredits=Fre_d ve a\u00e7\u0131k kaynak destek\u00e7ileri taraf\u0131ndan olu\u015fturuldu
helpSent=D\u00f6k\u00fcmanlar DM ile g\u00f6nderildi\!
helpProperUsage=Do\u011fru kullan\u0131m\:
helpCommandOwnerRestricted=Bu komutu sadece bot sahibi kullanabilir.
@@ -257,7 +261,7 @@ helpSayCommand=Botun sizin yazd\u0131\u011f\u0131n\u0131z \u015feyi yazmas\u0131
helpServerInfoCommand=Bu klan hakk\u0131nda baz\u0131 istatistikleri g\u00f6r\u00fcnt\u00fcler.
helpUserInfoCommand=Kendiniz veya bot i\u00e7in bilinen bir kullan\u0131c\u0131 hakk\u0131ndaki bilgileri g\u00f6r\u00fcnt\u00fcler.
helpPerms={0} s\u0131ralamas\u0131 i\u00e7in beyaz listeye eklenen \u00fcyelere ve rollere izin verir.
-helpPrefixCommand=Set the prefix for this guild.
+helpPrefixCommand=L\u00fctfen sunucunuz i\u00e7in bir "prefix" ayarlay\u0131n.
helpVoteSkip=\u00c7alan \u015fark\u0131y\u0131 atlamak i\u00e7in oylama yap. Sohbetteki kullan\u0131c\u0131lar\u0131n en az %50'sinin oyu gereklidir.
helpMathOperationAdd=num1 + num2 sonucunu yazd\u0131r.
helpMathOperationSub=num1 - num2 sonucunu yazd\u0131r.
@@ -295,7 +299,7 @@ voteSkipEmbedVoters={1} ki\u015fiden {0} ki\u015fi \u00e7alan par\u00e7an\u0131n
mathOperationResult=Sonu\u00e7
mathOperationDivisionByZeroError=S\u0131f\u0131ra b\u00f6lemem.
mathOperationInfinity=Say\u0131 g\u00f6r\u00fcnt\u00fclemek i\u00e7in \u00e7ok b\u00fcy\u00fck\!
-prefix=Prefix
-prefixGuild=The prefix for this guild is {0}
-prefixShowAgain=You can show the prefix anytime again by mentioning me.
+prefix=\u00d6n ek
+prefixGuild=Bu sunucu i\u00e7in prefix\: {0}
+prefixShowAgain=Her zaman benden bahsederek (mention) \u00f6n eki ortaya \u00e7\u0131karabilirsiniz.
diff --git a/FredBoat/src/main/resources/lang/uk_UA.properties b/FredBoat/src/main/resources/lang/uk_UA.properties
index f031ba696..8242cdcd8 100644
--- a/FredBoat/src/main/resources/lang/uk_UA.properties
+++ b/FredBoat/src/main/resources/lang/uk_UA.properties
@@ -183,7 +183,7 @@ ratelimitedGeneralInfo=You are being rate limited\! Please slow down.
ratelimitedSkipCommand=You can skip more than one song by using this command\: {0}
ratelimitedGuildSlowLoadingPlaylist=This server is not allowed to add more playlists at this moment. Please don't spam long playlists.
unblacklisted=Removed {0} from the blacklist.
-serverinfoTitle=Info about **{0}**\:
+serverinfoTitle=Info about {0}\:
serverinfoOnlineUsers=Online Users\:
serverinfoTotalUsers=Total Users\:
serverinfoRoles=Roles\:
@@ -193,7 +193,7 @@ serverinfoGuildID=Guild ID\:
serverinfoCreationDate=Creation Date\:
serverinfoOwner=Owner\:
serverinfoVLv=Verification Level\:
-userinfoTitle=Information about **{0}**\:
+userinfoTitle=Information about {0}\:
userinfoUsername=Username\:
userinfoId=ID\:
userinfoNick=Nickname\:
@@ -212,7 +212,11 @@ commandsMaintenance=Maintenance
commandsBotOwner=Bot owner
commandsMoreHelp=Say {0} to get more information on a specific command.
helpUnknownCommand=Unknown command.
-helpDM=Documentation can be found at\:\nhttps\://fredboat.com/docs\n\nWant to add FredBoat to your server? If you have Manage Server permissions for your guild, you can invite it here\:\n*This one doesn''t play music*\n\n\nIf you want to add the music bot, you will want to invite this bot\:\n\n\nNeed help or have any ideas for the bot? Perhaps you just want to hang out? Come on over to FredBoat hangout\!\n{0}\n\nYou cannot send this bot commands through DM.\nBot created by Fre_d
+helpDocsLocation=Documentation can be found at\:
+helpBotInvite=Want to add FredBoat to your server? If you have Manage Server permissions for your guild, you can invite FredBoat\:
+helpHangoutInvite=Need help or have any ideas for FredBoat? Perhaps you just want to hang out? Join the FredBoat community\!
+helpNoDmCommands=You cannot send FredBoat commands through DMs.
+helpCredits=Created by Fre_d and open source contributors
helpSent=Documentation has been sent to your DMs\!
helpProperUsage=Proper usage\:
helpCommandOwnerRestricted=This command is restricted to the owner of the bot.
diff --git a/FredBoat/src/main/resources/lang/vi_VN.properties b/FredBoat/src/main/resources/lang/vi_VN.properties
index fb8d26c86..f9390f760 100644
--- a/FredBoat/src/main/resources/lang/vi_VN.properties
+++ b/FredBoat/src/main/resources/lang/vi_VN.properties
@@ -45,7 +45,7 @@ exportPlaylistFail=T\u1ea3i danh s\u00e1ch l\u00ean hastebin.com kh\u00f4ng th\u
listShowShuffled=Hi\u1ec3n th\u1ecb danh s\u00e1ch ph\u00e1t \u0111ang x\u00e1o tr\u1ed9n.
listShowRepeatSingle=\u0110ang l\u1eb7p l\u1ea1i b\u00e0i hi\u1ec7n t\u1ea1i.
listShowRepeatAll=\u0110ang l\u1eb7p l\u1ea1i h\u00e0ng ch\u1edd hi\u1ec7n t\u1ea1i.
-listShowHistory=Showing tracks in history.
+listShowHistory=Hi\u1ec3n th\u1ecb b\u00e0i h\u00e1t trong l\u1ecbch s\u1eed.
listAddedBy=**{0}** \u0111\u00e3 \u0111\u01b0\u1ee3c th\u00eam b\u1edfi **{1}** `[{2}]`
listStreamsOnlySingle=C\u00f3 **{0}** \u0111ang ch\u1edd {1} trong h\u00e0ng \u0111\u1ee3i.
listStreamsOnlyMultiple=C\u00f3 **{0}** \u0111ang ch\u1edd {1} trong h\u00e0ng \u0111\u1ee3i.
@@ -57,7 +57,7 @@ listAsWellAsLiveStreams=, c\u0169ng nh\u01b0 **{0}** tr\u1ef1c ti\u1ebfp {1}
trackSingular=b\u00e0i nha\u0323c
trackPlural=b\u00e0i h\u00e1t
npNotPlaying=Hi\u1ec7n \u0111ang kh\u00f4ng ch\u01a1i b\u00e0i g\u00ec.
-npNotInHistory=Currently no tracks in history.
+npNotInHistory=Hi\u1ec7n kh\u00f4ng c\u00f3 b\u00e0i h\u00e1t trong l\u1ecbch s\u1eed.
npDescription=Mi\u00eau t\u1ea3
npLoadedSoundcloud=[{0}/{1}]\n\n\u0110\u00e3 n\u1ea1p t\u1eeb Soundcloud
npLoadedBandcamp={0}\n\n\u0110\u00e3 n\u1ea1p t\u1eeb Bandcamp
@@ -79,7 +79,7 @@ restartSuccess=**{0}** \u0111\u00e3 \u0111\u01b0\u1ee3c kh\u1edfi \u0111\u1ed9ng
queueEmpty=H\u00e0ng \u0111\u1ee3i \u0111ang tr\u1ed1ng.
rewSuccess=\u0110ang tua l\u1ea1i **{0}** b\u1edfi {1}.
seekSuccess=\u0110ang t\u00ecm ki\u1ebfm t\u1eeb **{0}** \u0111\u1ebfn {1}.
-seekDeniedLiveTrack=You can't seek a live track.
+seekDeniedLiveTrack=B\u1ea1n kh\u00f4ng th\u1ec3 t\u00ecm ki\u1ebfm ca kh\u00fac n\u00e0y.
loadPlaySplitListFail=Li\u00ean k\u1ebft \u0111\u00f3 d\u1eabn \u0111\u1ebfn m\u1ed9t danh s\u00e1ch ph\u00e1t, kh\u00f4ng ph\u1ea3i l\u00e0 m\u1ed9t b\u00e0i h\u00e1t. H\u00e3y thay th\u1ebf b\u1eb1ng `;;play`.
loadListSuccess=\u0110\u00e3 t\u00ecm \u0111\u01b0\u1ee3c v\u00e0 th\u00eam ''{0} b\u00e0i h\u00e1t t\u1eeb danh s\u00e1ch ph\u00e1t **{1}**.
loadNoMatches=Kh\u00f4ng c\u00f3 \u00e2m thanh \u0111\u01b0\u1ee3c t\u00ecm th\u1ea5y cho `{0}`.
@@ -125,15 +125,15 @@ luaError=\ \u0110\u00e3 x\u1ea3y ra l\u1ed7i Lua \:anger\:\n```{0}```
luaErrorOutputTooBig=\ B\u1ed9 \u0111\u1ec7m \u0111\u1ea7u ra l\u00e0 qu\u00e1 l\u1edbn \:anger\: Discord ch\u1ec9 cho ph\u00e9p 2000 k\u00fd t\u1ef1 cho tin nh\u1eafn, \u0111\u00e3 ghi {0}
luaTimeout=\ Ch\u1ee9c n\u0103ng \u0111\u00e3 qu\u00e1 gi\u1edd \:anger\: cho ph\u00e9p t\u00ednh to\u00e1n th\u1eddi gian l\u00e0 {0} gi\u00e2y.
helpSuccess=T\u00e0i li\u1ec7u h\u01b0\u1edbng d\u1eabn \u0111\u00e3 \u0111\u01b0\u1ee3c g\u1eedi tr\u1ef1c ti\u1ebfp cho b\u1ea1n\!
-helpDmFailed=Could not send documentation to your DMs. Please check that you don't have them disabled\!
+helpDmFailed=C\u00f3 th\u1ec3 kh\u00f4ng g\u1eedi t\u00e0i li\u1ec7u c\u1ee7a b\u1ea1n DMs. H\u00e3y ki\u1ec3m tra r\u1eb1ng b\u1ea1n kh\u00f4ng c\u00f3 h\u1ecd v\u00f4 hi\u1ec7u h\u00f3a\!
helpCommandsPromotion=Chat {0} \u0111\u1ec3 t\u00ecm hi\u1ec3u bot n\u00e0y c\u00f3 th\u1ec3 l\u00e0m \u0111\u01b0\u1ee3c g\u00ec\!
fuzzyNoResults=Kh\u00f4ng c\u00f3 ng\u01b0\u1eddi d\u00f9ng n\u00e0y
brainfuckCycleLimit=Ch\u01b0\u01a1ng tr\u00ecnh \u0111\u00e3 v\u01b0\u1ee3t qu\u00e1 s\u1ed1 l\u1ea7n l\u1eb7p l\u1ea1i t\u1ed1i \u0111a l\u00e0 {0}
brainfuckDataPointerOutOfBounds=Con tr\u1ecf d\u1eef li\u1ec7u n\u1eb1m ngo\u00e0i gi\u1edbi h\u1ea1n\: {0}
brainfuckInputOOB=Nh\u1eadp n\u1eb1m ngo\u00e0i gi\u1edbi h\u1ea1n\: {0}
brainfuckNoOutput=\ Kh\u00f4ng c\u00f3 \u0111\u1ea7u ra
-weatherLocationNotFound=Unable to find location, please check your input {0}.
-weatherError=Error retrieving weather for {0}
+weatherLocationNotFound=Kh\u00f4ng th\u1ec3 t\u00ecm th\u1ea5y \u0111\u1ecba \u0111i\u1ec3m, h\u00e3y ki\u1ec3m tra \u0111\u1ecbnh v\u1ecb c\u1ee7a b\u1ea1n {0}.
+weatherError=Kh\u00f4ng th\u1ec3 hi\u1ec3n th\u1ecb th\u1eddi ti\u1ebft cho {0}
avatarSuccess=\ \u0111\u00e3 t\u00ecm th\u1ea5y\n{0}
configNoArgs=C\u1ea5u h\u00ecnh cho **{0}**\:```
configSetTo=hi\u1ec7n \u0111\u01b0\u1ee3c thi\u1ebft l\u1eadp th\u00e0nh `{0}`.
@@ -183,7 +183,7 @@ ratelimitedGeneralInfo=B\u1ea1n \u0111ang b\u1ecb gi\u1edbi h\u1ea1n\! H\u00e3y
ratelimitedSkipCommand=B\u1ea1n c\u00f3 th\u1ec3 b\u1ecf qua nhi\u1ec1u h\u01a1n m\u1ed9t b\u00e0i h\u00e1t b\u1eb1ng c\u00e1ch d\u00f9ng l\u1ec7nh\: {0}
ratelimitedGuildSlowLoadingPlaylist=M\u00e1y ch\u1ee7 n\u00e0y kh\u00f4ng \u0111\u01b0\u1ee3c cho ph\u00e9p \u0111\u1ec3 th\u00eam nhi\u1ec1u danh s\u00e1ch ph\u00e1t t\u1ea1i l\u00fac n\u00e0y. Xin \u0111\u1eebng spam danh s\u00e1ch ph\u00e1t d\u00e0i.
unblacklisted=\u0110\u00e3 lo\u1ea1i b\u1ecf {0} kh\u1ecfi danh s\u00e1ch \u0111en.
-serverinfoTitle=Xem th\u00f4ng tin v\u1ec1 **{0}**\:
+serverinfoTitle=Th\u00f4ng tin v\u1ec1 {0}\:
serverinfoOnlineUsers=Ng\u01b0\u1eddi \u0111ang online\:
serverinfoTotalUsers=T\u1ed5ng s\u1ed1 ng\u01b0\u1eddi d\u00f9ng\:
serverinfoRoles=Vai tro\u0300\:
@@ -193,17 +193,17 @@ serverinfoGuildID=Guild ID\:
serverinfoCreationDate=Ng\u00e0y t\u1ea1o\:
serverinfoOwner=Ch\u1ee7 s\u1edf h\u1eefu\:
serverinfoVLv=C\u1ea5p \u0111\u1ed9 x\u00e1c minh\:
-userinfoTitle=Th\u00f4ng tin v\u1ec1 **{0}**\:
+userinfoTitle=Th\u00f4ng tin v\u1ec1 {0}\:
userinfoUsername=T\u00ean \u0111\u0103ng nh\u1eadp\:
userinfoId=ID\:
userinfoNick=Bi\u1ec7t danh\:
userinfoKnownServer=M\u00e1y ch\u1ee7 \u0111\u00e3 bi\u1ebft\:
userinfoJoinDate=Ng\u00e0y tham gia\:
userinfoCreationTime=Ng\u00e0y t\u1ea1o\:
-userinfoBlacklisted=Blacklisted\:
-skipDeniedTooManyTracks=You can't skip someone else's tracks if you are not a DJ.\nConsider using the Voteskip command.
+userinfoBlacklisted=Danh s\u00e1ch \u0111en\:
+skipDeniedTooManyTracks=B\u1ea1n kh\u00f4ng th\u1ec3 b\u1ecf qua b\u00e0i h\u00e1t c\u1ee7a ng\u01b0\u1eddi kh\u00e1c n\u1ebfu b\u1ea1n kh\u00f4ng ph\u1ea3i l\u00e0 m\u1ed9t DJ. N\u1ebfu mu\u1ed1n chuy\u1ec3n b\u00e0i d\u00f9ng Voteskip.
eventUsersLeftVC=T\u1ea5t c\u1ea3 ng\u01b0\u1eddi d\u00f9ng \u0111\u00e3 r\u1eddi kh\u1ecfi k\u00eanh tho\u1ea1i. M\u00e1y nghe nh\u1ea1c \u0111\u00e3 t\u1ea1m d\u1eebng.
-eventAutoResumed=User presence detected, automatically resuming the player.
+eventAutoResumed=T\u1ef1 \u0111\u1ed9ng ph\u00e1t hi\u1ec7n s\u1ef1 hi\u1ec7n di\u1ec7n c\u1ee7a ng\u01b0\u1eddi s\u1eed d\u1ee5ng, t\u1ef1 \u0111\u1ed9ng ch\u1ea1y l\u1ea1i nh\u1ea1c.
commandsFun=Tr\u00f2 vui
commandsMemes=Meme
commandsUtility=Ti\u1ec7n \u00edch
@@ -212,7 +212,11 @@ commandsMaintenance=B\u1ea3o tr\u00ec
commandsBotOwner=Ch\u1ee7 s\u1edf h\u1eefu bot
commandsMoreHelp=Chat {0} \u0111\u1ec3 bi\u1ebft th\u00eam th\u00f4ng tin v\u1ec1 m\u1ed9t l\u1ec7nh c\u1ee5 th\u1ec3.
helpUnknownCommand=L\u1ec7nh kh\u00f4ng r\u00f5.
-helpDM=T\u00e0i li\u1ec7u c\u00f3 th\u1ec3 \u0111\u01b0\u1ee3c t\u00ecm th\u1ea5y t\u1ea1i\:\nhttps\://fredboat.com/docs\n\nB\u1ea1n mu\u1ed1n th\u00eam FredBoat v\u00e0o m\u00e1y ch\u1ee7 c\u1ee7a m\u00ecnh? N\u1ebfu b\u1ea1n c\u00f3 quy\u1ec1n qu\u1ea3i l\u00ed m\u00e1y ch\u1ee7 cho guild c\u1ee7a b\u1ea1n, b\u1ea1n c\u00f3 th\u1ec3 m\u1eddi bot v\u00e0o \u1edf \u0111\u00e2y\:\n*con n\u00e0y kh\u00f4ng bi\u1ebft ch\u01a1i nh\u1ea1c*\n\n\nN\u1ebfu b\u1ea1n mu\u1ed1n th\u00eam con bi\u1ebft ch\u01a1i nh\u1ea1c, b\u1ea1n s\u1ebd ph\u1ea3i m\u1eddi bot n\u00e0y\:\n\n\nC\u1ea7n gi\u00fap \u0111\u1ee1ho\u1eb7c c\u00f3 \u00fd t\u01b0\u1edfng m\u1edbi cho bot? C\u00f3 th\u1ec3 b\u1ea1n ch\u1ec9 mu\u1ed1n vui \u0111\u00f9a? H\u00e3y \u0111\u1ebfn khu vui \u0111\u00f9a c\u1ee7a FredBoat\!\n{0}\n\nB\u1ea1n kh\u00f4ng th\u1ec3 g\u1eedi l\u1ec7nh cho bot th\u00f4ng qua DM (Tin nh\u1eafn tr\u1ef1c ti\u1ebfp)\nBot \u0111\u01b0\u1ee3c t\u1ea1o b\u1edfi Fre_d, d\u1ecbch ti\u1ebfng Vi\u1ec7t b\u1edfi phjtieudoc (Drake Srike)
+helpDocsLocation=T\u00e0i li\u1ec7u h\u01b0\u1edbng d\u1eabn c\u00f3 th\u1ec3 \u0111\u01b0\u1ee3c t\u00ecm th\u1ea5y t\u1ea1i\:
+helpBotInvite=B\u1ea1n mu\u1ed1n th\u00eam FredBoat v\u00e0o m\u00e1y ch\u1ee7 c\u1ee7a b\u1ea1n? N\u1ebfu b\u1ea1n c\u00f3 quy\u1ec1n truy c\u1eadp qu\u1ea3n l\u00fd m\u00e1y ch\u1ee7 cho guild c\u1ee7a b\u1ea1n, b\u1ea1n c\u00f3 th\u1ec3 m\u1eddi FredBoat\:
+helpHangoutInvite=C\u1ea7n gi\u00fap \u0111\u1ee1 ho\u1eb7c c\u00f3 b\u1ea5t k\u1ef3 \u00fd t\u01b0\u1edfng cho FredBoat? C\u00f3 l\u1ebd b\u1ea1n ch\u1ec9 mu\u1ed1n hang out? Tham gia c\u1ed9ng \u0111\u1ed3ng FredBoat\!
+helpNoDmCommands=B\u1ea1n kh\u00f4ng th\u1ec3 g\u1eedi l\u1ec7nh FredBoat qua DMs.
+helpCredits=T\u1ea1o b\u1edfi Fre_d v\u00e0 nh\u1eefng ng\u01b0\u1eddi \u0111\u00f3ng g\u00f3p m\u00e3 ngu\u1ed3n m\u1edf
helpSent=T\u00e0i li\u1ec7u \u0111\u00e3 \u0111\u01b0\u1ee3c g\u1eedi tr\u1ef1c ti\u1ebfp cho b\u1ea1n\!
helpProperUsage=C\u00e1ch d\u00f9ng ch\u00ednh x\u00e1c\:
helpCommandOwnerRestricted=L\u1ec7nh n\u00e0y ch\u1ec9 \u0111\u01b0\u1ee3c gi\u1edbi h\u1ea1n cho c\u00e1c ch\u1ee7 s\u1edf h\u1eefu c\u1ee7a bot.
@@ -225,20 +229,20 @@ helpMusicCommandsHeader=L\u1ec7nh FredBoat \u00c2m nh\u1ea1c
helpJoinCommand=L\u00e0m cho bot tham gia k\u00eanh tho\u1ea1i hi\u1ec7n t\u1ea1i.
helpLeaveCommand=L\u00e0m cho bot r\u1eddi kh\u1ecfi k\u00eanh tho\u1ea1i hi\u1ec7n t\u1ea1i.
helpPauseCommand=T\u1ea1m d\u1eebng m\u00e1y nghe nh\u1ea1c.
-helpPlayCommand=Play music from the given URL or search for a track. For a full list of sources please visit {0}
+helpPlayCommand=Ch\u01a1i nh\u1ea1c t\u1eeb URL \u0111\u00e3 cho ho\u1eb7c t\u00ecm ki\u1ebfm m\u1ed9t b\u00e0i h\u00e1t. \u0110\u1ec3 c\u00f3 danh s\u00e1ch \u0111\u1ea7y \u0111\u1ee7 ngu\u1ed3n vui l\u00f2ng truy c\u1eadp {0}
helpPlaySplitCommand=T\u00e1ch m\u1ed9t video Youtube th\u00e0nh m\u1ed9t danh s\u00e1ch b\u00e0i h\u00e1t \u0111\u01b0\u1ee3c cho \u1edf ph\u1ea7n mi\u00eau t\u1ea3.
helpRepeatCommand=Chuy\u1ec3n \u0111\u1ed5i gi\u1eefa c\u00e1c ch\u1ebf \u0111\u1ed9 l\u1eb7p l\u1ea1i.
helpReshuffleCommand=X\u00e1o tr\u1ed9n l\u1ea1i h\u00e0ng ch\u1edd hi\u1ec7n t\u1ea1i.
helpSelectCommand=Ch\u1ecdn m\u1ed9t trong c\u00e1c b\u00e0i h\u00e1t \u0111\u01b0\u1ee3c y\u00eau c\u1ea7u sau khi t\u00ecm ki\u1ebfm \u0111\u1ec3 ch\u01a1i.
helpShuffleCommand=B\u1eadt t\u1eaft ch\u1ebf \u0111\u1ed9 ng\u1eabu nhi\u00ean cho h\u00e0ng ch\u1edd hi\u1ec7n t\u1ea1i.
-helpSkipCommand=Skip the current song, the n'th song in the queue, all songs from n to m, or all songs from mentioned users. Please use in moderation.
+helpSkipCommand=B\u1ecf qua b\u00e0i h\u00e1t hi\u1ec7n t\u1ea1i, b\u00e0i h\u00e1t n'th trong h\u00e0ng ch\u1edd ho\u1eb7c t\u1ea5t c\u1ea3 b\u00e0i h\u00e1t t\u1eeb n t\u1edbi m. Xin vui l\u00f2ng s\u1eed d\u1ee5ng trong tr\u00ecnh qu\u1ea3n l\u00ed.
helpStopCommand=D\u1eebng m\u00e1y nghe nh\u1ea1c v\u00e0 d\u1ecdn danh s\u00e1ch ph\u00e1t. D\u00e0nh ri\u00eang cho ng\u01b0\u1eddi ki\u1ec3m duy\u1ec7t v\u1edbi quy\u1ec1n qu\u1ea3n l\u00fd tin nh\u1eafn.
helpUnpauseCommand=H\u1ee7y t\u1ea1m d\u1eebng m\u00e1y nghe nh\u1ea1c.
helpVolumeCommand=Thay \u0111\u1ed5i \u00e2m l\u01b0\u1ee3ng. G\u00eda tr\u1ecb t\u1eeb 0-150 v\u00e0 100 l\u00e0 m\u1eb7c \u0111\u1ecbnh. L\u1ec7nh \u00e2m l\u01b0\u1ee3ng \u0111\u01b0\u1ee3c c\u00e1ch bi\u1ec7t v\u1edbi bot c\u00f4ng khai.
helpExportCommand=Xu\u1ea5t ra h\u00e0ng ch\u1edd hi\u1ec7n t\u1ea1i v\u00e0o m\u1ed9t li\u00ean k\u1ebft hastebin, sau \u0111\u00f3 c\u00f3 th\u1ec3 \u0111\u01b0\u1ee3c d\u00f9ng nh\u01b0 m\u1ed9t danh s\u00e1ch ph\u00e1t.
helpGensokyoRadioCommand=Hi\u1ec3n th\u1ecb b\u00e0i h\u00e1t hi\u1ec7n t\u1ea1i \u0111\u01b0\u1ee3c ch\u01a1i tr\u00ean gensokyoradio.net
helpListCommand=Hi\u1ec3n th\u1ecb m\u1ed9t danh s\u00e1ch b\u00e0i h\u00e1t hi\u1ec7n t\u1ea1i trong danh s\u00e1ch ph\u00e1t.
-helpHistoryCommand=Display a list of the songs in playlist history.
+helpHistoryCommand=Hi\u1ec3n th\u1ecb m\u1ed9t danh s\u00e1ch c\u00e1c b\u00e0i h\u00e1t trong danh s\u00e1ch l\u1ecbch s\u1eed.
helpNowplayingCommand=Hi\u1ec3n th\u1ecb b\u00e0i h\u00e1t \u0111ang ph\u00e1t.
helpForwardCommand=Chuy\u1ec3n ti\u1ebfp b\u00e0i h\u00e1t b\u1eb1ng m\u1ed9t s\u1ed1 l\u01b0\u1ee3ng th\u1eddi gian nh\u1ea5t \u0111\u1ecbnh. V\u00ed d\u1ee5\:
helpRestartCommand=Kh\u1edfi \u0111\u1ed9ng l\u1ea1i ca kh\u00fac hi\u1ec7n \u0111ang ph\u00e1t.
@@ -246,7 +250,7 @@ helpRewindCommand=Tua l\u1ea1i b\u00e0i h\u00e1t b\u1eb1ng m\u1ed9t s\u1ed1 l\u0
helpSeekCommand=\u0110\u1eb7t v\u1ecb tr\u00ed c\u1ee7a b\u00e0i h\u00e1t tr\u00ean th\u1eddi gian nh\u1ea5t \u0111\u1ecbnh. V\u00ed d\u1ee5\:
helpAvatarCommand=Hi\u1ec3n th\u1ecb \u1ea3nh \u0111\u1ea1i di\u1ec7n c\u1ee7a m\u1ed9t ng\u01b0\u1eddi d\u00f9ng.
helpBrainfuckCommand=Th\u1ef1c thi m\u00e3 Hackn\u00e3o. V\u00ed d\u1ee5\:
-helpWeatherCommand=Display current weather by location.
+helpWeatherCommand=Hi\u1ec3n th\u1ecb hi\u1ec7n nay th\u1eddi ti\u1ebft theo \u0111\u1ecba \u0111i\u1ec3m.
helpClearCommand=X\u00f3a t\u1ea5t c\u1ea3 tin nh\u0103n b\u1eb1ng bot n\u00e0y trong 50 tin nh\u1eafn \u1edf k\u00eanh n\u00e0y.
helpCommandsCommand=Hi\u1ec3n th\u1ecb c\u00e1c l\u1ec7nh c\u00f3 s\u1eb5n.
helpHelpCommand=Nh\u1eadn gi\u00fap \u0111\u1ee1 cho bot n\u00e0y ho\u1eb7c tr\u1ee3 gi\u00fap cho b\u1ea5t c\u1ee9 l\u1ec7nh.
@@ -257,16 +261,16 @@ helpSayCommand=L\u00e0m cho bot nh\u1edb v\u1ec1 phjtieudoc.
helpServerInfoCommand=Hi\u1ec3n th\u1ecb m\u1ed9t s\u1ed1 s\u1ed1 li\u1ec7u th\u1ed1ng k\u00ea v\u1ec1 guild n\u00e0y.
helpUserInfoCommand=Hi\u1ec3n th\u1ecb th\u00f4ng tin v\u1ec1 ch\u00ednh m\u00ecnh ho\u1eb7c ng\u01b0\u1eddi d\u00f9ng kh\u00e1c \u0111\u1ebfn c\u00e1c bot.
helpPerms=Cho ph\u00e9p c\u00e1c th\u00e0nh vi\u00ean whitelist v\u00e0 vai tr\u00f2 c\u1ee7a h\u1ea1ng {0}.
-helpPrefixCommand=Set the prefix for this guild.
-helpVoteSkip=Vote to skip the current song. Needs 50% of all users in the voice chat to vote.
-helpMathOperationAdd=Print the sum of num1 and num2.
-helpMathOperationSub=Print the difference of subtracting num2 from num1.
-helpMathOperationMult=Print the product of num1*num2.
-helpMathOperationDiv=Print the quotient of dividing num1 by num2.
-helpMathOperationMod=Print the remainder of dividing num1 by num2.
-helpMathOperationPerc=Print the percentage represented by num1 in num2.
-helpMathOperationSqrt=Print the square root of num.
-helpMathOperationPow=Print the result of num1^num2.
+helpPrefixCommand=Thi\u1ebft l\u1eadp ti\u1ec1n t\u1ed1 cho guild n\u00e0y.
+helpVoteSkip=B\u00ecnh ch\u1ecdn \u0111\u1ec3 b\u1ecf qua b\u00e0i h\u00e1t hi\u1ec7n t\u1ea1i. C\u1ea7n s\u1ef1 \u0111\u1ed3ng thu\u1eadn c\u1ee7a 50% ng\u01b0\u1eddi d\u00f9ng trong k\u00eanh \u0111\u1ec3 b\u1ecf qua b\u00e0i h\u00e1t.
+helpMathOperationAdd=In t\u1ed5ng c\u1ee7a num1 v\u00e0 num2.
+helpMathOperationSub=In s\u1ef1 kh\u00e1c bi\u1ec7t c\u1ee7a tr\u1eeb num2 t\u1eeb num1.
+helpMathOperationMult=In c\u00e1c s\u1ea3n ph\u1ea9m c\u1ee7a num1 * num2.
+helpMathOperationDiv=In th\u01b0\u01a1ng chia num1 b\u1edfi num2.
+helpMathOperationMod=In th\u01b0\u01a1ng chia num1 b\u1edfi num2.
+helpMathOperationPerc=In t\u1ef7 l\u1ec7 ph\u1ea7n tr\u0103m \u0111\u01b0\u1ee3c \u0111\u1ea1i di\u1ec7n b\u1edfi num1 \u1edf num2.
+helpMathOperationSqrt=In b\u1eadc hai c\u1ee7a s\u1ed1 c\u00f2n t.
+helpMathOperationPow=In c\u00e1c s\u1ea3n ph\u1ea9m c\u1ee7a num1 * num2.
destroyDenied=B\u1ea1n c\u1ea7n ph\u1ea3i c\u00f3 quy\u1ec1n qu\u1ea3n l\u00ed tin nh\u1eafn \u0111\u1ec3 \u0111\u1eb7t l\u1ea1i m\u00e1y nghe nh\u1ea1c.
destroyHelp=\u0110\u1eb7t l\u1ea1i m\u00e1y nghe nh\u1ea1c v\u00e0 d\u1ecdn danh s\u00e1ch ph\u00e1t. D\u00e0nh ri\u00eang cho ng\u01b0\u1eddi ki\u1ec3m duy\u1ec7t v\u1edbi quy\u1ec1n qu\u1ea3n l\u00fd tin nh\u1eafn.
destroySucc=\u0110\u00e3 \u0111\u1eb7t l\u1ea1i m\u00e1y nghe nh\u1ea1c v\u00e0 x\u00f3a h\u00e0ng ch\u1edd.
@@ -275,27 +279,27 @@ permsListTitle=Ng\u01b0\u1eddi d\u00f9ng v\u00e0 c\u00e1c vai tr\u00f2 v\u1edbi
permsAdded=\u0110\u00e3 th\u00eam `{0}` t\u1edbi `{1}`.
permsRemoved=\u0110\u00e3 lo\u1ea1i b\u1ecf `{0}` t\u1eeb `{1}`.
permsFailSelfDemotion=B\u1ea1n kh\u00f4ng th\u1ec3 lo\u1ea1i b\u1ecf \u0111i\u1ec1u n\u00e0y v\u00ec n\u00f3 s\u1ebd khi\u1ebfn b\u1ea1n kh\u00f4ng c\u00f3 quy\u1ec1n qu\u1ea3n tr\u1ecb\!
-permsAlreadyAdded={0} already added to {1}
-permsNotAdded={0} is not in {1}
+permsAlreadyAdded={0} \u0111\u00e3 \u0111\u01b0\u1ee3c th\u00eam v\u00e0o {1}
+permsNotAdded={0} kh\u00f4ng ph\u1ea3i l\u00e0 {1}
fuzzyMultiple=Nhi\u1ec1u kho\u1ea3n m\u1ee5c \u0111\u00e3 \u0111\u01b0\u1ee3c t\u00ecm th\u1ea5y. B\u1ea1n c\u00f3 hi\u1ec3u b\u1ea5t k\u00ec g\u00ec kh\u00f4ng?
fuzzyNothingFound=Kh\u00f4ng t\u00ecm th\u1ea5y g\u00ec cho `{0}`.
cmdPermsTooLow=B\u1ea1n kh\u00f4ng c\u00f3 quy\u1ec1n \u0111\u1ec3 ch\u1ea1y l\u1ec7nh n\u00e0y\! L\u1ec7nh n\u00e0y y\u00eau c\u1ea7u `{0}`, nh\u01b0ng b\u1ea1n ch\u1ec9 c\u00f3 `{1}`.
playersLimited=FredBoat hi\u1ec7n \u0111\u00e3 \u0111\u1ea1t t\u1ed1i \u0111a n\u0103ng l\u1ef1c\! Bot n\u00e0y hi\u1ec7n \u0111ang \u0111\u01b0\u1ee3c s\u1eeda \u0111\u1ec3 ph\u00e1t nh\u1ea1c \u0111\u1ebfn `{0}` b\u00e0i, n\u1ebfu kh\u00f4ng ch\u00fang t\u00f4i ph\u1ea3i ng\u1eaft k\u1ebft n\u1ed1i kh\u1ecfi Discord d\u01b0\u1edbi trang t\u1ea3i m\u1ea1ng.\nN\u1ebfu b\u1ea1n mu\u1ed1n h\u1ed7 tr\u1ee3 ch\u00fang t\u00f4i t\u0103ng th\u00eam gi\u1edbi h\u1ea1n hay b\u1ea1n mu\u1ed1n s\u1eed d\u1ee5ng bot t\u1ed1i thi\u1ec3u c\u1ee7a ch\u00fang t\u00f4i, h\u00e3y h\u1ed7 tr\u1ee3 ch\u00fang t\u00f4i qua Patreon\:\n{1}\n\nXin l\u1ed7i v\u00ec s\u1ef1 b\u1ea5t ti\u1ec7n\! B\u1ea1n c\u00f3 th\u1ec3 ph\u1ea3i th\u1eed l\u1ea1i sau. Tin nh\u1eafn n\u00e0y th\u01b0\u1eddng ch\u1ec9 xu\u1ea5t hi\u1ec7n m\u1ed9t v\u00e0i l\u1ea7n.
-tryLater=Please try again later.
-skipUserSingle=Skipped {0} added by {1}.
-skipUserMultiple=Skipped {0} tracks added by {1}.
-skipUsersMultiple=Skipped {0} tracks added by {1} users.
-skipUserNoTracks=None of the mentioned users have any tracks queued.
-voteSkipAdded=Your vote has been added\!
-voteSkipAlreadyVoted=You already voted to skip this track\!
-voteSkipSkipping={0} have voted to skip. Skipping track {1}.
-voteSkipNotEnough={0} have voted to skip. At least {1} needed.
-voteSkipEmbedNoVotes=No votes to skip this track yet.
-voteSkipEmbedVoters={0} out of {1} have voted to skip the current track
+tryLater=Vui l\u00f2ng th\u1eed l\u1ea1i sau.
+skipUserSingle=\u0110\u00e3 b\u1ecf qua {0} \u0111\u01b0\u1ee3c th\u00eam v\u00e0o b\u1edfi {1}.
+skipUserMultiple=\u0110\u00e3 b\u1ecf qua {0} \u0111\u01b0\u1ee3c th\u00eam v\u00e0o b\u1edfi {1}.
+skipUsersMultiple=\u0110\u00e3 b\u1ecf qua {0} \u0111\u01b0\u1ee3c th\u00eam v\u00e0o b\u1edfi {1}.
+skipUserNoTracks=Kh\u00f4ng c\u00f3 \u0111\u1ec1 c\u1eadp \u0111\u1ebfn ng\u01b0\u1eddi d\u00f9ng c\u00f3 b\u1ea5t k\u1ef3 b\u00e0i h\u00e1t \u0111\u00e3 x\u1ebfp h\u00e0ng.
+voteSkipAdded=Phi\u1ebfu b\u1ea7u c\u1ee7a b\u1ea1n \u0111\u00e3 \u0111\u01b0\u1ee3c th\u00eam\!
+voteSkipAlreadyVoted=B\u1ea1n \u0111\u00e3 b\u1ecf phi\u1ebfu \u0111\u1ec3 b\u1ecf qua vi\u1ec7c theo d\u00f5i n\u00e0y\!
+voteSkipSkipping={0} \u0111\u00e3 b\u1ecf phi\u1ebfu \u0111\u1ec3 b\u1ecf qua. \u0110ang b\u1ecf qua b\u00e0i h\u00e1t {1}.
+voteSkipNotEnough={0} \u0111\u00e3 b\u1ecf phi\u1ebfu \u0111\u1ec3 b\u1ecf qua. C\u1ea7n \u00edt nh\u1ea5t l\u00e0 {1}.
+voteSkipEmbedNoVotes=Ch\u01b0a c\u00f3 phi\u1ebfu \u0111\u1ec3 b\u1ecf qua b\u00e0i h\u00e1t n\u00e0y.
+voteSkipEmbedVoters={0} tr\u00ean {1} \u0111\u00e3 b\u1ecf phi\u1ebfu \u0111\u1ec3 b\u1ecf qua vi\u1ec7c theo d\u00f5i hi\u1ec7n t\u1ea1i
mathOperationResult=K\u1ebft qu\u1ea3 l\u00e0
mathOperationDivisionByZeroError=Kh\u00f4ng th\u1ec3 chia cho 0.
mathOperationInfinity=S\u1ed1 qu\u00e1 l\u1edbn \u0111\u1ec3 \u0111\u01b0\u1ee3c hi\u1ec3n th\u1ecb\!
-prefix=Prefix
-prefixGuild=The prefix for this guild is {0}
-prefixShowAgain=You can show the prefix anytime again by mentioning me.
+prefix=Ti\u1ec1n t\u1ed1
+prefixGuild=Ti\u1ec1n t\u1ed1 cho guild n\u00e0y l\u00e0 {0}
+prefixShowAgain=B\u1ea1n c\u00f3 th\u1ec3 hi\u1ec3n th\u1ecb c\u00e1c ti\u1ec1n t\u1ed1 b\u1ea5t c\u1ee9 l\u00fac n\u00e0o m\u1ed9t l\u1ea7n n\u1eefa b\u1eb1ng c\u00e1ch nh\u1eafc \u0111\u1ebfn t\u00f4i.
diff --git a/FredBoat/src/main/resources/lang/zh_CN.properties b/FredBoat/src/main/resources/lang/zh_CN.properties
index f95226396..73e7c2588 100644
--- a/FredBoat/src/main/resources/lang/zh_CN.properties
+++ b/FredBoat/src/main/resources/lang/zh_CN.properties
@@ -19,14 +19,14 @@ selectInterval=\u6570\u5b57\u5fc5\u987b\u5728 1 \u5230 {0} \u4e4b\u95f4
selectSelectionNotGiven=\u5f53\u524d\u65e0\u641c\u7d22\u7ed3\u679c\u4f9b\u60a8\u9009\u62e9\u3002
shuffleOn=\u300c\u968f\u673a\u64ad\u653e\u300d\u6a21\u5f0f\u5df2\u6253\u5f00\u3002
shuffleOff=\u300c\u968f\u673a\u64ad\u653e\u300d\u6a21\u5f0f\u5df2\u5173\u95ed\u3002
-reshufflePlaylist=I have translated reshuffled as reorganized, I am not entirely sure that it is a correct translation.
+reshufflePlaylist=\u961f\u5217\u6539\u7ec4\u3002
reshufflePlayerNotShuffling=\u5fc5\u987b\u5148\u6253\u5f00 "\u65e0\u5e8f\u64ad\u653e" \u6a21\u5f0f\u3002
skipEmpty=\u5f53\u524d\u64ad\u653e\u5217\u8868\u4e3a\u7a7a\u3002
skipOutOfBounds=\u65e0\u6cd5\u79fb\u9664\u7b2c {0} \u9996\u6b4c\uff0c\u56e0\u4e3a\u5f53\u524d\u64ad\u653e\u5217\u8868\u53ea\u6709 {1} \u9996\u6b4c\u66f2\u3002
skipNumberTooLow=\u60a8\u8f93\u5165\u7684\u6570\u5b57\u5fc5\u987b\u5927\u4e8e 0\u3002
skipSuccess=\u5df2\u8df3\u8fc7 \#{0}\: **{1}**
skipRangeInvalid=\u6307\u5b9a\u7684\u6b4c\u66f2\u8303\u56f4\u65e0\u6548\u3002
-skipRangeSuccess=Tracks between \#{0} to \#{}~\#{1} have been removed.
+skipRangeSuccess=\u5e8f\u53f7\u4e3a {0} ~ {1} \u7684\u6b4c\u66f2\u5df2\u88ab\u79fb\u9664\u3002
skipTrackNotFound=\u5f53\u524d\u64ad\u653e\u5217\u8868\u4e3a\u7a7a\uff0c\u65e0\u6cd5\u4f7f\u7528\u8df3\u8fc7\u529f\u80fd\u3002
stopAlreadyEmpty=\u64ad\u653e\u5217\u8868\u5df2\u6e05\u7a7a\u3002
stopEmptyOne=\u64ad\u653e\u5217\u8868\u5df2\u6e05\u7a7a\uff0c`1` \u9996\u6b4c\u66f2\u5df2\u88ab\u79fb\u9664\u3002
@@ -212,7 +212,11 @@ commandsMaintenance=\u7cfb\u7edf\u7ef4\u62a4
commandsBotOwner=\u673a\u5668\u4eba\u4e3b\u4eba
commandsMoreHelp=\u8bf4{0} \u83b7\u53d6\u6709\u5173\u7279\u5b9a\u547d\u4ee4\u7684\u66f4\u591a\u4fe1\u606f\u3002
helpUnknownCommand=\u672a\u77e5\u7684\u6307\u4ee4\u3002
-helpDM=\u6587\u6863\u53ef\u4ee5\u5728 bot \u7684 GitHub \u9875\u9762\u627e\u5230\uff1a\nhttp\://docs.frederikam.com\n\n\u60f3\u6dfb\u52a0 FredBoat \u5230\u60a8\u7684\u670d\u52a1\u5668\uff1f\u5982\u679c\u60a8\u6709\u60a8\u7684\u516c\u4f1a\u7684\u7ba1\u7406\u670d\u52a1\u5668\u6743\u9650\uff0c\u5373\u53ef\u901a\u8fc7\u4e0b\u9762\u7684\u94fe\u63a5\u9080\u8bf7 bot\uff1a\n*This one doesn't play music*\nhttps\://discordapp.com/oauth2/authorize?&client_id\=168686772216135681&scope\=bot\n\n\u5982\u679c\u60f3\u6dfb\u52a0\u97f3\u4e50 bot\uff0c\u53ef\u901a\u8fc7\u4e0b\u9762\u7684\u94fe\u63a5\u9080\u8bf7\uff1a\nhttps\://discordapp.com/oauth2/authorize?&client_id\=184405253028970496&scope\=bot\n\n\u9700\u8981\u5e2e\u52a9\uff1f\u6709\u5173\u4e8e bot \u7684\u70b9\u5b50\uff1f\u6216\u8005\u53ea\u662f\u60f3\u901b\u901b\uff1f\u5feb\u6765 FredBoat \u7684 Discord \u516c\u4f1a\u5427\uff01\nhttps\://discord.gg/0yXhQ9c36F4zsJMG/0yXhQ9c36F4zsJMG\n\n\u60a8\u4e0d\u80fd\u5728\u4e0e bot \u7684\u79c1\u804a\u4e2d\u4f7f\u7528\u547d\u4ee4\u3002\nBot \u4f5c\u8005\uff1aFre_d
+helpDocsLocation=\u6587\u6863\u53ef\u4ee5\u5728\u4ee5\u4e0b\u65b9\u9762\u627e\u5230\:
+helpBotInvite=\u8981\u5c06 FredBoat \u6dfb\u52a0\u5230\u60a8\u7684\u670d\u52a1\u5668\u5417\uff1f\u5982\u679c\u60a8\u6709\u7ba1\u7406\u516c\u4f1a\u7684\u670d\u52a1\u5668\u6743\u9650, \u60a8\u53ef\u4ee5\u9080\u8bf7 FredBoat\:
+helpHangoutInvite=\u9700\u8981\u5e2e\u52a9\u6216\u6709\u4efb\u4f55\u60f3\u6cd5\u7684 FredBoat\uff1f\u4e5f\u8bb8\u4f60\u53ea\u662f\u60f3\u51fa\u53bb\u73a9\uff1f\u52a0\u5165 FredBoat \u793e\u533a\!
+helpNoDmCommands=\u60a8\u4e0d\u80fd\u901a\u8fc7 DMs \u53d1\u9001 FredBoat \u547d\u4ee4\u3002
+helpCredits=\u7531 Fre_d \u548c\u5f00\u6e90\u8d21\u732e\u8005\u521b\u5efa
helpSent=\u5e2e\u52a9\u6587\u6863\u5df2\u901a\u8fc7\u79c1\u804a\u53d1\u7ed9\u60a8\uff01
helpProperUsage=\u6b63\u786e\u4f7f\u7528\:
helpCommandOwnerRestricted=\u6b64\u547d\u4ee4\u4ec5\u9650\u4e8e \n\u673a\u5668\u4eba\u4e3b\u4eba
@@ -257,7 +261,7 @@ helpSayCommand=\u8ba9\u673a\u5668\u4eba\u56de\u58f0\u7684\u4e1c\u897f\u3002
helpServerInfoCommand=\u663e\u793a\u5173\u4e8e\u8fd9\u4e2a\u884c\u4f1a\u7684\u4e00\u4e9b\u7edf\u8ba1\u6570\u636e\u3002
helpUserInfoCommand=\u663e\u793a\u6709\u5173\u60a8\u81ea\u5df1\u6216 bot \u6240\u77e5\u7528\u6237\u7684\u4fe1\u606f\u3002
helpPerms=\u5141\u8bb8{0} \u79e9\u7684\u540d\u5355\u6210\u5458\u548c\u89d2\u8272\u3002
-helpPrefixCommand=Set the prefix for this guild.
+helpPrefixCommand=\u8bbe\u7f6e\u8be5\u884c\u4f1a\u7684\u524d\u7f00\u3002
helpVoteSkip=\u6295\u7968\u8df3\u8fc7\u5f53\u524d\u7684\u6b4c\u66f2\u3002\u9700\u898150% \u7684\u6240\u6709\u7528\u6237\u5728\u8bed\u97f3\u804a\u5929\u4e2d\u6295\u7968\u3002
helpMathOperationAdd=\u6253\u5370 num1 \u548c num2 \u7684\u603b\u548c\u3002
helpMathOperationSub=\u6253\u5370\u4ece num1 \u4e2d\u51cf\u53bb num2 \u7684\u5dee\u5f02\u3002
@@ -295,7 +299,7 @@ voteSkipEmbedVoters={0} \u51fa\u4e86{1} \u5df2\u7ecf\u6295\u7968\u8df3\u8fc7\u5f
mathOperationResult=\u5176\u7ed3\u679c\u662f
mathOperationDivisionByZeroError=\u6211\u4e0d\u80fd\u9664\u4ee5\u96f6\u3002
mathOperationInfinity=\u6570\u5b57\u592a\u5927, \u4e0d\u80fd\u663e\u793a\!
-prefix=Prefix
-prefixGuild=The prefix for this guild is {0}
-prefixShowAgain=You can show the prefix anytime again by mentioning me.
+prefix=\u524d\u7f00
+prefixGuild=\u8fd9\u4e2a\u516c\u4f1a\u7684\u524d\u7f00\u662f{0}
+prefixShowAgain=\u60a8\u53ef\u4ee5\u968f\u65f6\u901a\u8fc7\u63d0\u53ca\u6211\u6765\u663e\u793a\u524d\u7f00\u3002
diff --git a/FredBoat/src/main/resources/lang/zh_TW.properties b/FredBoat/src/main/resources/lang/zh_TW.properties
index 022ff0476..cd97eeb75 100644
--- a/FredBoat/src/main/resources/lang/zh_TW.properties
+++ b/FredBoat/src/main/resources/lang/zh_TW.properties
@@ -45,9 +45,9 @@ exportPlaylistFail=\u7121\u6cd5\u5c07\u64ad\u653e\u6e05\u55ae\u4e0a\u50b3\u81f3
listShowShuffled=\u76ee\u524d\u7684\u64ad\u653e\u5e8f\u5217\uff1a\n\n
listShowRepeatSingle=\u91cd\u8907\u64ad\u653e\u76ee\u524d\u97f3\u8ecc
listShowRepeatAll=\u91cd\u8907\u64ad\u653e\u76ee\u524d\u64ad\u653e\u5e8f\u5217
-listShowHistory=Musica
+listShowHistory=\u986f\u793a\u6b77\u53f2\u64ad\u653e\u66f2\u76ee\u3002
listAddedBy=**{0}** \u7531 **{1}** `[{2}]` \u6dfb\u52a0
-listStreamsOnlySingle=\u5e8f\u5217\u4e2d\u6709 **{0}** \u500b\u53ca\u6642 {1}
+listStreamsOnlySingle=\u5e8f\u5217\u4e2d\u6709 **{0}** \u500b\u5373\u6642 {1}\u3002
listStreamsOnlyMultiple=\u5e8f\u5217\u4e2d\u6709 **{0}** \u500b\u53ca\u6642 {1}
listStreamsOrTracksSingle=\u5e8f\u5217\u4e2d\u76ee\u524d\u6709 **{0}** \u500b {1} \uff0c\u9577\u5ea6\u662f **[{2}]**{3}
listStreamsOrTracksMultiple=\u5e8f\u5217\u4e2d\u76ee\u524d\u6709 **{0}** \u500b {1} \uff0c\u9577\u5ea6\u662f **[{2}]**{3}
@@ -57,7 +57,7 @@ listAsWellAsLiveStreams=\uff0c\u4ee5\u53ca **{0}** \u500b\u53ca\u6642 {1}
trackSingular=\u66f2\u76ee
trackPlural=\u66f2\u76ee
npNotPlaying=\u76ee\u524d\u6c92\u6709\u5728\u64ad\u653e\u4efb\u4f55\u6771\u897f
-npNotInHistory=\#musica
+npNotInHistory=\u76ee\u524d\u6b77\u53f2\u7d00\u9304\u6c92\u6709\u64ad\u653e\u66f2\u76ee\u3002
npDescription=\u63cf\u8ff0
npLoadedSoundcloud=[{0}/{1}]\n\n\u5df2\u5f9e Soundcloud \u4e2d\u8f09\u5165
npLoadedBandcamp={0} \n\n\u5df2\u5f9e Bandcamp \u4e2d\u8f09\u5165
@@ -75,11 +75,11 @@ npLoadedDefault={0}\n\n\u5df2\u5f9e {1} \u8f09\u5165
noneYet=\u6c92\u6771\u897f
npRatingRange={0}/5 \u4f86\u81ea\u6295\u7968 {1}
fwdSuccess=\u6b63\u5728\u5c07 **{0}** \u5feb\u8f49 {1}.
-restartSuccess=**{0}** \u5df2\u5f9e\u65b0\u958b\u59cb
+restartSuccess=**{0}** \u5df2\u91cd\u65b0\u958b\u59cb\u3002
queueEmpty=\u64ad\u653e\u5e8f\u5217\u662f\u7a7a\u7684
rewSuccess=\u6b63\u5728\u5c07 **{0}** \u5012\u5e36 {1}
seekSuccess=\u6b63\u5728\u5c07 **{0}** \u79fb\u52d5\u5230 {1}
-seekDeniedLiveTrack=\u4f60\u4e0d\u80fd\u79fb\u52d5\u73fe\u5834\u97f3\u8ecc\u3002
+seekDeniedLiveTrack=\u4f60\u4e0d\u80fd\u79fb\u52d5\u5373\u6642\u4e32\u6d41\u7684\u97f3\u8ecc\u3002
loadPlaySplitListFail=\u8a72\u9023\u7d50\u6307\u5411\u4e00\u500b\u64ad\u653e\u6e05\u55ae\uff0c\u4e0d\u662f\u4e00\u9996\u6b4c\u3002\u8acb\u4f7f\u7528 `;;play`
loadListSuccess=\u5df2\u5f9e\u64ad\u653e\u6e05\u55ae **{1}** \u65b0\u589e `{0}` \u9996\u6b4c
loadNoMatches=\u5728 `{0}` \u627e\u4e0d\u5230\u4efb\u4f55\u97f3\u8a0a
@@ -184,9 +184,9 @@ ratelimitedSkipCommand=\u60a8\u53ef\u4ee5\u901a\u904e\u4f7f\u7528\u6b64\u547d\u4
ratelimitedGuildSlowLoadingPlaylist=\u6b64\u4f3a\u670d\u5668\u4e0d\u5141\u8a31\u5728\u6b64\u6642\u65b0\u589e\u66f4\u591a\u64ad\u653e\u6e05\u55ae\u3002\u8acb\u4e0d\u8981\u5237\u5f88\u9577\u7684\u64ad\u653e\u6e05\u55ae
unblacklisted=\u5f9e\u9ed1\u540d\u55ae\u79fb\u9664 {0}
serverinfoTitle=\u95dc\u65bc **{0}** \u7684\u8cc7\u8a0a
-serverinfoOnlineUsers=\u5df2\u4e0a\u7dda\u7528\u6236\uff1a
-serverinfoTotalUsers=\u7528\u6236\u7e3d\u6578\uff1a
-serverinfoRoles=\u8077\u8cac\uff1a
+serverinfoOnlineUsers=\u7dda\u4e0a\u4f7f\u7528\u8005\uff1a
+serverinfoTotalUsers=\u4f7f\u7528\u8005\u7e3d\u6578\:
+serverinfoRoles=\u8eab\u4efd\uff1a
serverinfoText=\u6587\u5b57\u983b\u9053\uff1a
serverinfoVoice=\u8a9e\u97f3\u983b\u9053\uff1a
serverinfoGuildID=\u516c\u6703ID\:
@@ -200,7 +200,7 @@ userinfoNick=\u66b1\u7a31\uff1a
userinfoKnownServer=\u5df2\u77e5\u4f3a\u670d\u5668\uff1a
userinfoJoinDate=\u52a0\u5165\u65e5\u671f\uff1a
userinfoCreationTime=\u5efa\u7acb\u65e5\u671f\uff1a
-userinfoBlacklisted="\u5df2\u5217\u5165\u9ed1\u540d\u55ae\:
+userinfoBlacklisted=\u5df2\u5217\u5165\u9ed1\u540d\u55ae\:
skipDeniedTooManyTracks=\u5982\u679c\u4f60\u4e0d\u662f DJ, \u4f60\u4e0d\u80fd\u8df3\u904e\u5225\u4eba\u7684\u66f2\u76ee\u3002\u8acb\u8003\u616e\u4f7f\u7528 Voteskip \u547d\u4ee4\u3002
eventUsersLeftVC=\u6240\u6709\u7528\u6236\u5df2\u7d93\u96e2\u958b\u4e86\u983b\u9053\uff0c\u64ad\u653e\u5668\u5df2\u7d93\u66ab\u505c
eventAutoResumed=\u6aa2\u6e2c\u5230\u4f7f\u7528\u8005\u72c0\u614b, \u81ea\u52d5\u5fa9\u539f\u64ad\u653e\u6a5f\u3002
@@ -212,7 +212,11 @@ commandsMaintenance=\u7dad\u8b77
commandsBotOwner=Bot \u64c1\u6709\u8005
commandsMoreHelp=\u8aaa {0} \u4ee5\u7372\u5f97\u7279\u5b9a\u6307\u4ee4\u7684\u66f4\u591a\u8cc7\u8a0a
helpUnknownCommand=\u672a\u77e5\u7684\u6307\u4ee4
-helpDM=\u6587\u6a94\u53ef\u4ee5\u5728\u4ee5\u4e0b\u4f4d\u5740\u627e\u5230\: HTTPs\://fredboat.com/docs \u8981\u5c07 fredboat \u6dfb\u52a0\u5230\u60a8\u7684\u4f3a\u670d\u5668\uff1f\u5982\u679c\u60a8\u6709\u7ba1\u7406\u884c\u6703\u7684\u4f3a\u670d\u5668\u8a31\u53ef\u6b0a, \u60a8\u53ef\u4ee5\u5728\u9019\u88e1\u9080\u8acb\u5b83\: * \u9019\u500b\u4e0d\u64ad\u653e\u97f3\u6a02 * \u5982\u679c\u60a8\u8981\u6dfb\u52a0\u97f3\u6a02 bot, \u60a8\u5c07\u5e0c\u671b\u9080\u8acb\u6b64 bot\: \u9700\u8981\u5e6b\u52a9\u6216\u5c0d bot \u6709\u4ec0\u9ebc\u60f3\u6cd5\uff1f\u4e5f\u8a31\u4f60\u53ea\u662f\u60f3\u51fa\u53bb\u73a9\uff1f\u5feb\u4f86 FredBoat \u7684\u4f4f\u8655\!{0} \u60a8\u4e0d\u80fd\u901a\u904e DM \u767c\u9001\u6b64 bot \u547d\u4ee4. Fre_d \u5275\u5efa\u7684 bot
+helpDocsLocation=\u627e\u4e0d\u5230\u6587\u4ef6
+helpBotInvite=\u8981\u5c07 FredBoat \u6dfb\u52a0\u5230\u60a8\u7684\u4f3a\u670d\u5668\u55ce\uff1f\u5982\u679c\u60a8\u6709\u7ba1\u7406\u516c\u6703\u7684\u4f3a\u670d\u5668\u8a31\u53ef\u6b0a, \u60a8\u53ef\u4ee5\u9080\u8acb FredBoat\:
+helpHangoutInvite=\u9700\u8981\u5e6b\u52a9\u6216\u6709\u4efb\u4f55\u60f3\u6cd5\u7684 FredBoat\uff1f\u4e5f\u8a31\u4f60\u53ea\u662f\u60f3\u51fa\u53bb\u73a9\uff1f\u52a0\u5165 FredBoat \u793e\u5340\!
+helpNoDmCommands=\u60a8\u4e0d\u80fd\u901a\u904e DMs \u767c\u9001 FredBoat \u547d\u4ee4\u3002
+helpCredits=\u7531 Fre_d \u548c\u958b\u6e90\u8ca2\u737b\u8005\u5275\u5efa
helpSent=\u6587\u4ef6\u5df2\u7d93\u79c1\u8a0a\u7d66\u4f60
helpProperUsage=\u6b63\u78ba\u7528\u6cd5\:
helpCommandOwnerRestricted=\u6b64\u6307\u4ee4\u53ea\u9650Bot\u7684\u64c1\u6709\u8005\u4f7f\u7528
@@ -257,7 +261,7 @@ helpSayCommand=\u8b93 Bot \u91cd\u8907\u60a8\u8aaa\u7684\u5b57
helpServerInfoCommand=\u986f\u793a\u6b64\u516c\u6703\u7684\u4e00\u4e9b\u72c0\u614b
helpUserInfoCommand=\u986f\u793a\u95dc\u65bc\u60a8\u81ea\u5df1\u6216\u5df2\u77e5Bot\u4f7f\u7528\u8005\u7684\u8cc7\u8a0a
helpPerms=\u5141\u8a31{0} \u79e9\u7684\u540d\u55ae\u6210\u54e1\u548c\u89d2\u8272\u3002
-helpPrefixCommand=Set the prefix for this guild.
+helpPrefixCommand=\u8a2d\u7f6e\u8a72\u884c\u6703\u7684\u9996\u78bc\u3002
helpVoteSkip=\u6295\u7968\u8df3\u904e\u7576\u524d\u7684\u6b4c\u66f2\u3002\u9700\u898150% \u7684\u6240\u6709\u4f7f\u7528\u8005\u5728\u8a9e\u97f3\u804a\u5929\u4e2d\u6295\u7968\u3002
helpMathOperationAdd=\u5217\u5370 num1 \u548c num2 \u7684\u7e3d\u548c\u3002
helpMathOperationSub=\u5217\u5370\u5f9e num1 \u4e2d\u6e1b\u53bb num2 \u7684\u5dee\u7570\u3002
@@ -295,7 +299,7 @@ voteSkipEmbedVoters={0} \u51fa\u4e86{1} \u5df2\u7d93\u6295\u7968\u8df3\u904e\u75
mathOperationResult=\u7d50\u679c\u662f
mathOperationDivisionByZeroError=\u4e0d\u80fd\u9664\u4ee5 0\u3002
mathOperationInfinity=\u6578\u5b57\u904e\u5927\u7121\u6cd5\u986f\u793a\!
-prefix=Prefix
-prefixGuild=The prefix for this guild is {0}
-prefixShowAgain=You can show the prefix anytime again by mentioning me.
+prefix=\u9996\u78bc
+prefixGuild=\u9019\u500b\u516c\u6703\u7684\u9996\u78bc\u662f{0}
+prefixShowAgain=\u60a8\u53ef\u4ee5\u96a8\u6642\u901a\u904e\u63d0\u53ca\u6211\u4f86\u986f\u793a\u9996\u78bc\u3002
diff --git a/FredBoat/src/main/resources/logback.xml b/FredBoat/src/main/resources/logback.xml
index 516f443a4..11ea18cbc 100644
--- a/FredBoat/src/main/resources/logback.xml
+++ b/FredBoat/src/main/resources/logback.xml
@@ -34,7 +34,7 @@
30
- [%date{HH:mm:ss}] [ %-5level] [%logger{0}] %msg%n
+ [%date{HH:mm:ss}] [ %-5level] [%mdc] [%logger{0}] %msg%n
@@ -48,7 +48,7 @@
5
- [%d] [ %-5level] [%thread] %logger{35}: %msg%n
+ [%d] [ %-5level] [%mdc] [%thread] %logger{35}: %msg%n
@@ -62,7 +62,7 @@
30
- [%date{HH:mm:ss}] [%thread] [%logger{0}] %msg%n
+ [%date{HH:mm:ss}] [%mdc] [%thread] [%logger{0}] %msg%n
@@ -85,7 +85,7 @@
INFO
- [%date{HH:mm:ss}] [ %-5level] [%logger{0}] %msg%n
+ [%date{HH:mm:ss}] [ %-5level] [%mdc] [%logger{0}] %msg%n
diff --git a/FredBoat/src/main/resources/natives/darwin/libudpqueue.dylib b/FredBoat/src/main/resources/natives/darwin/libudpqueue.dylib
new file mode 100755
index 000000000..f1ef2e399
Binary files /dev/null and b/FredBoat/src/main/resources/natives/darwin/libudpqueue.dylib differ
diff --git a/FredBoat/src/test/java/fredboat/util/TextUtilsTest.java b/FredBoat/src/test/java/fredboat/util/TextUtilsTest.java
new file mode 100644
index 000000000..3b4b1f78f
--- /dev/null
+++ b/FredBoat/src/test/java/fredboat/util/TextUtilsTest.java
@@ -0,0 +1,68 @@
+package fredboat.util;
+
+import org.junit.jupiter.api.*;
+
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.List;
+import java.util.stream.Stream;
+
+class TextUtilsTest {
+
+ private final List one_two_three = Arrays.asList(1, 2, 3);
+
+ @TestFactory
+ Stream simpleSplitSelect() {
+ String[] testCases = {
+ "1,2,3",
+ "1 2 3",
+ "1, 2, 3",
+ };
+
+ return DynamicTest.stream(Arrays.asList(testCases).iterator(),
+ testCase -> String.format("split select of `%s`", testCase),
+ testCase -> assertSplitSelect(one_two_three, testCase)
+ );
+ }
+
+ @Test
+ void blanksInSplitSelect() {
+ assertSplitSelect(
+ Arrays.asList(1, 2, 3, 4),
+ "1, ,2 ,, 3, 4");
+ }
+
+ @TestFactory
+ Stream nonDigitsInSplitSelect() {
+ return Stream.concat(
+ DynamicTest.stream(Arrays.asList(
+ "1q 2 3",
+ "1q 2what 3"
+ ).iterator(),
+ testCase -> String.format("split select of `%s`", testCase),
+ testCase -> assertSplitSelect(one_two_three, testCase)),
+
+ DynamicTest.stream(Arrays.asList(
+ "q",
+ "We are number 1 but this string doesn't match",
+ "1, 2, 3, 4, 5 Once we caught a fish alive"
+ ).iterator(),
+ testCase -> String.format("not matching split select of `%s`", testCase),
+ testCase -> assertNoSplitSelect(testCase)
+ )
+ );
+ }
+
+ private void assertSplitSelect(Collection expected, String testCase) {
+ Assertions.assertTrue(
+ TextUtils.isSplitSelect(testCase),
+ () -> String.format("`%s` is not a split select", testCase));
+ Assertions.assertIterableEquals(
+ expected, TextUtils.getSplitSelect(testCase)
+ );
+ }
+
+ private void assertNoSplitSelect(String testCase) {
+ Assertions.assertFalse(TextUtils.isSplitSelect(testCase));
+ }
+}
diff --git a/README.md b/README.md
index 6da833d81..484a83176 100644
--- a/README.md
+++ b/README.md
@@ -1,6 +1,6 @@
![FredBoat](https://fred.moe/YY1.png)
-# FredBoat [![Build Status](https://travis-ci.org/Frederikam/FredBoat.svg?branch=master)](https://travis-ci.org/Frederikam/FredBoat) [![Crowdin](https://d322cqt584bo4o.cloudfront.net/fredboat/localized.svg)](https://crowdin.com/project/fredboat) [![Twitter Follow](https://img.shields.io/twitter/follow/DiscordFredBoat.svg?style=social&label=Follow)]() [![Dependency Status](https://www.versioneye.com/user/projects/59ff43de15f0d72f79c07210/badge.svg?style=flat-square)](https://www.versioneye.com/user/projects/59ff43de15f0d72f79c07210)
+# FredBoat [![Build Status](https://travis-ci.org/Frederikam/FredBoat.svg?branch=master)](https://travis-ci.org/Frederikam/FredBoat) [![Crowdin](https://d322cqt584bo4o.cloudfront.net/fredboat/localized.svg)](https://crowdin.com/project/fredboat) [![Twitter Follow](https://img.shields.io/twitter/follow/DiscordFredBoat.svg?style=social&label=Follow)]()
FredBoat is a bot that has various features, but most notably is that it can play music. Pull requests are welcome and please report any issues you find in [issues](https://github.com/Frederikam/FredBoat/issues).
FredBoat is licensed under the MIT license, so feel free to copy small or large parts of the code here without having to ask. I would love to see what you can create with it!
@@ -8,9 +8,9 @@ FredBoat is licensed under the MIT license, so feel free to copy small or large
[![Join FredBoat Hangout](https://discordapp.com/api/guilds/174820236481134592/embed.png?style=banner2)](https://discord.gg/cgPFW4q)
## Documentation
-Help can be found at https://fredboat.com/docs
+Help can be found at [https://fredboat.com/docs](https://fredboat.com/docs).
-For installation instructions, go to https://fredboat.com/docs/selfhosting
+For installation instructions, go to [https://fredboat.com/docs/selfhosting](https://fredboat.com/docs/selfhosting).
## Contributing
If you are interested, you can read about contributing to this project [here](https://github.com/Frederikam/FredBoat/blob/master/CONTRIBUTING.md).
diff --git a/Shared/src/main/java/fredboat/shared/constant/BotConstants.java b/Shared/src/main/java/fredboat/shared/constant/BotConstants.java
index d08ff5035..655c9dc4a 100644
--- a/Shared/src/main/java/fredboat/shared/constant/BotConstants.java
+++ b/Shared/src/main/java/fredboat/shared/constant/BotConstants.java
@@ -29,12 +29,12 @@
public class BotConstants {
- public static final String MUSIC_BOT_ID = "184405311681986560";
- public static final String BETA_BOT_ID = "152691313123393536";
- public static final String MAIN_BOT_ID = "150376112944447488";
- public static final String PATRON_BOT_ID = "241950106125860865";
+ public static final long MUSIC_BOT_ID = 184405311681986560L;
+ public static final long BETA_BOT_ID = 152691313123393536L;
+ public static final long MAIN_BOT_ID = 150376112944447488L;
+ public static final long PATRON_BOT_ID = 241950106125860865L;
- public static final String FREDBOAT_HANGOUT_ID = "174820236481134592";
+ public static final long FREDBOAT_HANGOUT_ID = 174820236481134592L;
public static final Color FREDBOAT_COLOR = new Color(28, 191, 226); //#1CBFE2
public static final String FREDBOAT_URL = "https://fredboat.com";
@@ -42,6 +42,10 @@ public class BotConstants {
public static final String DOCS_PERMISSIONS_URL = DOCS_URL + "/permissions";
public static final String DOCS_DONATE_URL = DOCS_URL + "/donate";
+ //These can be set using eval in case we need to change it in the future ~Fre_d
+ public static String hangoutInvite = "https://discord.gg/cgPFW4q";
+ public static String botInvite = "https://goo.gl/cFs5M9";
+
private BotConstants() {
}
diff --git a/docker-compose.yml b/docker-compose.yml
index 0c7702c8d..948fd2acd 100644
--- a/docker-compose.yml
+++ b/docker-compose.yml
@@ -19,7 +19,7 @@ services:
################################################################################
db:
image: fredboat/postgres
- restart: on-failure:3
+ restart: always
# WINDOWS ONLY: if you are running under windows you need to comment out the following two lines:
volumes: