From 49e86614c5e1612d341e0274b61b7a8765191cb0 Mon Sep 17 00:00:00 2001
From: Kowlin
Date: Fri, 24 May 2019 20:10:55 +0200
Subject: [PATCH 001/183] Adding support for GitHub Funding (#2732)
(I'm lazy, I know I should use a fork... sorry <3)
---
.github/FUNDING.yml | 3 +++
1 file changed, 3 insertions(+)
create mode 100644 .github/FUNDING.yml
diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml
new file mode 100644
index 000000000..45ab9faf9
--- /dev/null
+++ b/.github/FUNDING.yml
@@ -0,0 +1,3 @@
+# These are supported funding model platforms
+
+patreon: Red_Devs
From 6928e2aca2712cd959a67b34ec2862ee597740b5 Mon Sep 17 00:00:00 2001
From: Flame442 <34169552+Flame442@users.noreply.github.com>
Date: Fri, 24 May 2019 17:52:43 -0400
Subject: [PATCH 002/183] Fixes some issues with API help commands (#2729)
* Fixes some issues with `[p]streamset youtubekey/twitchtoken`
Lots of general formatting bugs and clarity issues.
* General formatting bugs and clarity issues
---
redbot/cogs/image/image.py | 18 +++++++++---------
redbot/cogs/streams/streams.py | 22 ++++++++++++----------
2 files changed, 21 insertions(+), 19 deletions(-)
diff --git a/redbot/cogs/image/image.py b/redbot/cogs/image/image.py
index 7c2148bbf..060e809c0 100644
--- a/redbot/cogs/image/image.py
+++ b/redbot/cogs/image/image.py
@@ -138,20 +138,20 @@ class Image(commands.Cog):
@checks.is_owner()
@commands.command()
async def imgurcreds(self, ctx):
- """Explain how to set imgur API tokens"""
+ """Explain how to set imgur API tokens."""
message = _(
"To get an Imgur Client ID:\n"
"1. Login to an Imgur account.\n"
- "2. Visit [this](https://api.imgur.com/oauth2/addclient) page\n"
- "3. Enter a name for your application\n"
- "4. Select *Anonymous usage without user authorization* for the auth type\n"
- "5. Set the authorization callback URL to `https://localhost`\n"
- "6. Leave the app website blank\n"
- "7. Enter a valid email address and a description\n"
- "8. Check the captcha box and click next\n"
+ "2. Visit this page https://api.imgur.com/oauth2/addclient.\n"
+ "3. Enter a name for your application.\n"
+ "4. Select *Anonymous usage without user authorization* for the auth type.\n"
+ "5. Set the authorization callback URL to `https://localhost`.\n"
+ "6. Leave the app website blank.\n"
+ "7. Enter a valid email address and a description.\n"
+ "8. Check the captcha box and click next.\n"
"9. Your Client ID will be on the next page.\n"
- "10. do `{prefix}set api imgur client_id,your_client_id`\n"
+ "10. Run the command `{prefix}set api imgur client_id,`.\n"
).format(prefix=ctx.prefix)
await ctx.maybe_send_embed(message)
diff --git a/redbot/cogs/streams/streams.py b/redbot/cogs/streams/streams.py
index 3893dcf18..cd7478f88 100644
--- a/redbot/cogs/streams/streams.py
+++ b/redbot/cogs/streams/streams.py
@@ -316,18 +316,19 @@ class Streams(commands.Cog):
@streamset.command()
@checks.is_owner()
async def twitchtoken(self, ctx: commands.Context):
- """Explain how to set the twitch token"""
+ """Explain how to set the twitch token."""
message = _(
"To set the twitch API tokens, follow these steps:\n"
"1. Go to this page: https://dev.twitch.tv/dashboard/apps.\n"
- "2. Click *Register Your Application*\n"
- "3. Enter a name, set the OAuth Redirect URI to `http://localhost`, and \n"
- "select an Application Category of your choosing."
- "4. Click *Register*, and on the following page, copy the Client ID.\n"
- "5. do `{prefix}set api twitch client_id,your_client_id`\n\n"
+ "2. Click *Register Your Application*.\n"
+ "3. Enter a name, set the OAuth Redirect URI to `http://localhost`, and "
+ "select an Application Category of your choosing.\n"
+ "4. Click *Register*.\n"
+ "5. On the following page, copy the Client ID.\n"
+ "6. Run the command `{prefix}set api twitch client_id,`\n\n"
"Note: These tokens are sensitive and should only be used in a private channel\n"
- "or in DM with the bot.)\n"
+ "or in DM with the bot.\n"
).format(prefix=ctx.prefix)
await ctx.maybe_send_embed(message)
@@ -335,17 +336,18 @@ class Streams(commands.Cog):
@streamset.command()
@checks.is_owner()
async def youtubekey(self, ctx: commands.Context):
- """Explain how to set the YouTube token"""
+ """Explain how to set the YouTube token."""
message = _(
"To get one, do the following:\n"
"1. Create a project\n"
"(see https://support.google.com/googleapi/answer/6251787 for details)\n"
"2. Enable the YouTube Data API v3 \n"
- "(see https://support.google.com/googleapi/answer/6158841for instructions)\n"
+ "(see https://support.google.com/googleapi/answer/6158841 for instructions)\n"
"3. Set up your API key \n"
"(see https://support.google.com/googleapi/answer/6158862 for instructions)\n"
- "4. Copy your API key and do `{prefix}set api youtube api_key,your_api_key`\n\n"
+ "4. Copy your API key and run the command "
+ "`{prefix}set api youtube api_key,`\n\n"
"Note: These tokens are sensitive and should only be used in a private channel\n"
"or in DM with the bot.\n"
).format(prefix=ctx.prefix)
From cd745d35c2ad7996a46dca778542e1e29f8d2846 Mon Sep 17 00:00:00 2001
From: Stonedestroyer <1307729+Stonedestroyer@users.noreply.github.com>
Date: Fri, 24 May 2019 23:55:48 +0200
Subject: [PATCH 003/183] [Core] Add debug info command (#2728)
Shows useful debug information for debugging.
---
redbot/core/core_commands.py | 56 ++++++++++++++++++++++++++++++++++++
1 file changed, 56 insertions(+)
diff --git a/redbot/core/core_commands.py b/redbot/core/core_commands.py
index 6adc88b74..6c4869625 100644
--- a/redbot/core/core_commands.py
+++ b/redbot/core/core_commands.py
@@ -8,6 +8,9 @@ import logging
import os
import pathlib
import sys
+import platform
+import getpass
+import pip
import tarfile
import traceback
from collections import namedtuple
@@ -1467,6 +1470,59 @@ class Core(commands.Cog, CoreLogic):
msg = _("Data path: {path}").format(path=data_dir)
await ctx.send(box(msg))
+ @commands.command(hidden=True)
+ @checks.is_owner()
+ async def debuginfo(self, ctx: commands.Context):
+ """Shows debug information useful for debugging.."""
+
+ if sys.platform == "linux":
+ import distro
+
+ IS_WINDOWS = os.name == "nt"
+ IS_MAC = sys.platform == "darwin"
+ IS_LINUX = sys.platform == "linux"
+
+ pyver = "{}.{}.{} ({})".format(*sys.version_info[:3], platform.architecture()[0])
+ pipver = pip.__version__
+ redver = red_version_info
+ dpy_version = discord.__version__
+ if IS_WINDOWS:
+ os_info = platform.uname()
+ osver = "{} {} (version {})".format(os_info.system, os_info.release, os_info.version)
+ elif IS_MAC:
+ os_info = platform.mac_ver()
+ osver = "Mac OSX {} {}".format(os_info[0], os_info[2])
+ elif IS_LINUX:
+ os_info = distro.linux_distribution()
+ osver = "{} {}".format(os_info[0], os_info[1]).strip()
+ else:
+ osver = "Could not parse OS, report this on Github."
+ user_who_ran = getpass.getuser()
+
+ if await ctx.embed_requested():
+ e = discord.Embed(color=await ctx.embed_colour())
+ e.title = "Debug Info for Red"
+ e.add_field(name="Red version", value=redver, inline=True)
+ e.add_field(name="Python version", value=pyver, inline=True)
+ e.add_field(name="Discord.py version", value=dpy_version, inline=True)
+ e.add_field(name="Pip version", value=pipver, inline=True)
+ e.add_field(name="System arch", value=platform.machine(), inline=True)
+ e.add_field(name="User", value=user_who_ran, inline=True)
+ e.add_field(name="OS version", value=osver, inline=False)
+ await ctx.send(embed=e)
+ else:
+ info = (
+ "Debug Info for Red\n\n"
+ + "Red version: {}\n".format(redver)
+ + "Python version: {}\n".format(pyver)
+ + "Discord.py version: {}\n".format(dpy_version)
+ + "Pip version: {}\n".format(pipver)
+ + "System arch: {}\n".format(platform.machine())
+ + "User: {}\n".format(user_who_ran)
+ + "OS version: {}\n".format(osver)
+ )
+ await ctx.send(box(info))
+
@commands.group()
@checks.is_owner()
async def whitelist(self, ctx: commands.Context):
From 2e271d695bf10fd00194c82778a23f40c3eccc26 Mon Sep 17 00:00:00 2001
From: Neuro Assassin <42872277+NeuroAssassin@users.noreply.github.com>
Date: Fri, 24 May 2019 18:22:17 -0400
Subject: [PATCH 004/183] Add respectable aliases for consistency (#2731)
* Add respectable aliases for consistency
* General command name for alias.py
* Forgot one for alias
* General command for filter
* General command for warnings
* Whoops
Resolves #1749
---
redbot/cogs/alias/alias.py | 4 ++--
redbot/cogs/customcom/customcom.py | 2 +-
redbot/cogs/downloader/downloader.py | 2 +-
redbot/cogs/filter/filter.py | 2 +-
redbot/cogs/warnings/warnings.py | 4 ++--
5 files changed, 7 insertions(+), 7 deletions(-)
diff --git a/redbot/cogs/alias/alias.py b/redbot/cogs/alias/alias.py
index 8a24a727c..19042e539 100644
--- a/redbot/cogs/alias/alias.py
+++ b/redbot/cogs/alias/alias.py
@@ -375,7 +375,7 @@ class Alias(commands.Cog):
await ctx.send(_("There is no alias with the name `{name}`").format(name=alias_name))
@checks.mod_or_permissions(manage_guild=True)
- @alias.command(name="del")
+ @alias.command(name="delete", aliases=["del", "remove"])
@commands.guild_only()
async def _del_alias(self, ctx: commands.Context, alias_name: str):
"""Delete an existing alias on this server."""
@@ -394,7 +394,7 @@ class Alias(commands.Cog):
await ctx.send(_("Alias with name `{name}` was not found.").format(name=alias_name))
@checks.is_owner()
- @global_.command(name="del")
+ @global_.command(name="delete", aliases=["del", "remove"])
async def _del_global_alias(self, ctx: commands.Context, alias_name: str):
"""Delete an existing global alias."""
aliases = await self.unloaded_global_aliases()
diff --git a/redbot/cogs/customcom/customcom.py b/redbot/cogs/customcom/customcom.py
index 09b8ef26a..a4a0bf005 100644
--- a/redbot/cogs/customcom/customcom.py
+++ b/redbot/cogs/customcom/customcom.py
@@ -296,7 +296,7 @@ class CustomCommands(commands.Cog):
)
)
- @customcom.command(name="delete")
+ @customcom.command(name="delete", aliases=["del", "remove"])
@checks.mod_or_permissions(administrator=True)
async def cc_delete(self, ctx, command: str.lower):
"""Delete a custom command.
diff --git a/redbot/cogs/downloader/downloader.py b/redbot/cogs/downloader/downloader.py
index f609e58a6..4350fb6f5 100644
--- a/redbot/cogs/downloader/downloader.py
+++ b/redbot/cogs/downloader/downloader.py
@@ -246,7 +246,7 @@ class Downloader(commands.Cog):
if repo.install_msg is not None:
await ctx.send(repo.install_msg.replace("[p]", ctx.prefix))
- @repo.command(name="delete", aliases=["remove"], usage="")
+ @repo.command(name="delete", aliases=["remove", "del"], usage="")
async def _repo_del(self, ctx, repo: Repo):
"""Remove a repo and its files."""
await self._repo_manager.delete_repo(repo.name)
diff --git a/redbot/cogs/filter/filter.py b/redbot/cogs/filter/filter.py
index a1a73c1ac..841d42e42 100644
--- a/redbot/cogs/filter/filter.py
+++ b/redbot/cogs/filter/filter.py
@@ -236,7 +236,7 @@ class Filter(commands.Cog):
else:
await ctx.send(_("Those words were already in the filter."))
- @_filter.command(name="remove")
+ @_filter.command(name="delete", aliases=["remove", "del"])
async def filter_remove(self, ctx: commands.Context, *, words: str):
"""Remove words from the filter.
diff --git a/redbot/cogs/warnings/warnings.py b/redbot/cogs/warnings/warnings.py
index d2c9e48f1..b53fdaf8d 100644
--- a/redbot/cogs/warnings/warnings.py
+++ b/redbot/cogs/warnings/warnings.py
@@ -125,7 +125,7 @@ class Warnings(commands.Cog):
registered_actions.sort(key=lambda a: a["points"], reverse=True)
await ctx.send(_("Action {name} has been added.").format(name=name))
- @warnaction.command(name="del")
+ @warnaction.command(name="delete", aliases=["del", "remove"])
@commands.guild_only()
async def action_del(self, ctx: commands.Context, action_name: str):
"""Delete the action with the specified name."""
@@ -175,7 +175,7 @@ class Warnings(commands.Cog):
await ctx.send(_("The new reason has been registered."))
- @warnreason.command(name="del", aliases=["remove"])
+ @warnreason.command(name="delete", aliases=["remove", "del"])
@commands.guild_only()
async def reason_del(self, ctx: commands.Context, reason_name: str):
"""Delete a warning reason."""
From 68590dfdb89050125ea29456a65c638b168fff56 Mon Sep 17 00:00:00 2001
From: Michael H
Date: Sat, 25 May 2019 17:58:14 -0400
Subject: [PATCH 005/183] [Core] Improve API token converter (#2692)
* improve api converter
* make usage more clear
---
redbot/core/commands/converter.py | 59 ++++++++++++++++++++++++++++---
redbot/core/core_commands.py | 7 ++--
2 files changed, 59 insertions(+), 7 deletions(-)
diff --git a/redbot/core/commands/converter.py b/redbot/core/commands/converter.py
index 308c442c9..e62a6e2c1 100644
--- a/redbot/core/commands/converter.py
+++ b/redbot/core/commands/converter.py
@@ -1,7 +1,9 @@
import re
-from typing import TYPE_CHECKING
+import functools
+from typing import TYPE_CHECKING, Optional, List, Dict
import discord
+from discord.ext import commands as dpy_commands
from . import BadArgument
from ..i18n import Translator
@@ -9,7 +11,7 @@ from ..i18n import Translator
if TYPE_CHECKING:
from .context import Context
-__all__ = ["GuildConverter"]
+__all__ = ["GuildConverter", "APIToken", "DictConverter", "get_dict_converter"]
_ = Translator("commands.converter", __file__)
@@ -47,16 +49,20 @@ class APIToken(discord.ext.commands.Converter):
This will parse the input argument separating the key value pairs into a
format to be used for the core bots API token storage.
- This will split the argument by either `;` or `,` and return a dict
+ This will split the argument by either `;` ` `, or `,` and return a dict
to be stored. Since all API's are different and have different naming convention,
this leaves the onus on the cog creator to clearly define how to setup the correct
credential names for their cogs.
+
+ Note: Core usage of this has been replaced with DictConverter use instead.
+
+ This may be removed at a later date (with warning)
"""
async def convert(self, ctx, argument) -> dict:
bot = ctx.bot
result = {}
- match = re.split(r";|,", argument)
+ match = re.split(r";|,| ", argument)
# provide two options to split incase for whatever reason one is part of the api key we're using
if len(match) > 1:
result[match[0]] = "".join(r for r in match[1:])
@@ -65,3 +71,48 @@ class APIToken(discord.ext.commands.Converter):
if not result:
raise BadArgument(_("The provided tokens are not in a valid format."))
return result
+
+
+class DictConverter(dpy_commands.Converter):
+ """
+ Converts pairs of space seperated values to a dict
+ """
+
+ def __init__(self, *expected_keys: str, delims: Optional[List[str]] = None):
+ self.expected_keys = expected_keys
+ self.delims = delims or [" "]
+ self.pattern = re.compile(r"|".join(re.escape(d) for d in self.delims))
+
+ async def convert(self, ctx: "Context", argument: str) -> Dict[str, str]:
+
+ ret: Dict[str, str] = {}
+ args = self.pattern.split(argument)
+
+ if len(args) % 2 != 0:
+ raise BadArgument()
+
+ iterator = iter(args)
+
+ for key in iterator:
+ if self.expected_keys and key not in self.expected_keys:
+ raise BadArgument(_("Unexpected key {key}").format(key))
+
+ ret[key] = next(iterator)
+
+ return ret
+
+
+def get_dict_converter(*expected_keys: str, delims: Optional[List[str]] = None) -> type:
+ """
+ Returns a typechecking safe `DictConverter` suitable for use with discord.py
+ """
+
+ class PartialMeta(type(DictConverter)):
+ __call__ = functools.partialmethod(
+ type(DictConverter).__call__, *expected_keys, delims=delims
+ )
+
+ class ValidatedConverter(DictConverter, metaclass=PartialMeta):
+ pass
+
+ return ValidatedConverter
diff --git a/redbot/core/core_commands.py b/redbot/core/core_commands.py
index 6c4869625..e30ac1aa4 100644
--- a/redbot/core/core_commands.py
+++ b/redbot/core/core_commands.py
@@ -45,6 +45,8 @@ log = logging.getLogger("red")
_ = i18n.Translator("Core", __file__)
+TokenConverter = commands.get_dict_converter(delims=[" ", ",", ";"])
+
class CoreLogic:
def __init__(self, bot: "Red"):
@@ -1063,7 +1065,7 @@ class Core(commands.Cog, CoreLogic):
@_set.command()
@checks.is_owner()
- async def api(self, ctx: commands.Context, service: str, *tokens: commands.converter.APIToken):
+ async def api(self, ctx: commands.Context, service: str, *, tokens: TokenConverter):
"""Set various external API tokens.
This setting will be asked for by some 3rd party cogs and some core cogs.
@@ -1076,8 +1078,7 @@ class Core(commands.Cog, CoreLogic):
"""
if ctx.channel.permissions_for(ctx.me).manage_messages:
await ctx.message.delete()
- entry = {k: v for t in tokens for k, v in t.items()}
- await ctx.bot.db.api_tokens.set_raw(service, value=entry)
+ await ctx.bot.db.api_tokens.set_raw(service, value=tokens)
await ctx.send(_("`{service}` API tokens have been set.").format(service=service))
@commands.group()
From 132545e057381342e93748c722a50c34af2c1cea Mon Sep 17 00:00:00 2001
From: Flame442 <34169552+Flame442@users.noreply.github.com>
Date: Mon, 27 May 2019 20:27:56 -0400
Subject: [PATCH 006/183] [Audio] Clarity changes for the API info commands
(#2733)
* Clarity changes for the API info commands
* Remove unnecessary f-string
---
redbot/cogs/audio/audio.py | 12 ++++++------
1 file changed, 6 insertions(+), 6 deletions(-)
diff --git a/redbot/cogs/audio/audio.py b/redbot/cogs/audio/audio.py
index 02e3f0f0b..3c61993b3 100644
--- a/redbot/cogs/audio/audio.py
+++ b/redbot/cogs/audio/audio.py
@@ -592,15 +592,15 @@ class Audio(commands.Cog):
async def spotifyapi(self, ctx):
"""Instructions to set the Spotify API tokens."""
message = _(
- f"1. Go to Spotify developers and log in with your Spotify account\n"
+ "1. Go to Spotify developers and log in with your Spotify account.\n"
"(https://developer.spotify.com/dashboard/applications)\n"
- '2. Click "Create An App"\n'
+ '2. Click "Create An App".\n'
"3. Fill out the form provided with your app name, etc.\n"
- '4. When asked if you\'re developing commercial integration select "No"\n'
+ '4. When asked if you\'re developing commercial integration select "No".\n'
"5. Accept the terms and conditions.\n"
"6. Copy your client ID and your client secret into:\n"
- "`{prefix}set api spotify client_id,your_client_id "
- "client_secret,your_client_secret`"
+ "`{prefix}set api spotify client_id, "
+ "client_secret,`"
).format(prefix=ctx.prefix)
await ctx.maybe_send_embed(message)
@@ -660,7 +660,7 @@ class Audio(commands.Cog):
"6. Click on Create Credential at the top.\n"
'7. At the top click the link for "API key".\n'
"8. No application restrictions are needed. Click Create at the bottom.\n"
- "9. You now have a key to add to `{prefix}set api youtube api_key,your_api_key`"
+ "9. You now have a key to add to `{prefix}set api youtube api_key,`"
).format(prefix=ctx.prefix)
await ctx.maybe_send_embed(message)
From b4f4e080afd59a190becdb8b36748adf23515c06 Mon Sep 17 00:00:00 2001
From: PredaaA <46051820+PredaaA@users.noreply.github.com>
Date: Tue, 28 May 2019 02:39:36 +0200
Subject: [PATCH 007/183] [core_commands] Using humanize_timedelta for
[p]uptime command (#2735)
* Update core_commands.py
---
redbot/core/core_commands.py | 30 +++++++-----------------------
1 file changed, 7 insertions(+), 23 deletions(-)
diff --git a/redbot/core/core_commands.py b/redbot/core/core_commands.py
index e30ac1aa4..9fff5c6db 100644
--- a/redbot/core/core_commands.py
+++ b/redbot/core/core_commands.py
@@ -33,7 +33,7 @@ from redbot.core import (
i18n,
)
from .utils.predicates import MessagePredicate
-from .utils.chat_formatting import pagify, box, inline
+from .utils.chat_formatting import humanize_timedelta, pagify, box, inline
if TYPE_CHECKING:
from redbot.core.bot import Red
@@ -333,28 +333,12 @@ class Core(commands.Cog, CoreLogic):
async def uptime(self, ctx: commands.Context):
"""Shows Red's uptime"""
since = ctx.bot.uptime.strftime("%Y-%m-%d %H:%M:%S")
- passed = self.get_bot_uptime()
- await ctx.send(_("Been up for: **{}** (since {} UTC)").format(passed, since))
-
- def get_bot_uptime(self, *, brief: bool = False):
- # Courtesy of Danny
- now = datetime.datetime.utcnow()
- delta = now - self.bot.uptime
- hours, remainder = divmod(int(delta.total_seconds()), 3600)
- minutes, seconds = divmod(remainder, 60)
- days, hours = divmod(hours, 24)
-
- if not brief:
- if days:
- fmt = _("{d} days, {h} hours, {m} minutes, and {s} seconds")
- else:
- fmt = _("{h} hours, {m} minutes, and {s} seconds")
- else:
- fmt = _("{h}h {m}m {s}s")
- if days:
- fmt = _("{d}d ") + fmt
-
- return fmt.format(d=days, h=hours, m=minutes, s=seconds)
+ delta = datetime.datetime.utcnow() - self.bot.uptime
+ await ctx.send(
+ _("Been up for: **{}** (since {} UTC)").format(
+ humanize_timedelta(timedelta=delta), since
+ )
+ )
@commands.group()
async def embedset(self, ctx: commands.Context):
From 2338ad8223b329ff344fbc4788dda3acb6755459 Mon Sep 17 00:00:00 2001
From: Stonedestroyer <1307729+Stonedestroyer@users.noreply.github.com>
Date: Tue, 28 May 2019 03:04:15 +0200
Subject: [PATCH 008/183] [Image] Fix giphy api (#2653)
* Remove hardcoded Giphy key.
Allows you to set your own Giphy API key.
* Run black
* Fix Giphy name
On their website it's spelled GIPHY.
---
redbot/cogs/image/image.py | 42 ++++++++++++++++++++++++++++++++++----
1 file changed, 38 insertions(+), 4 deletions(-)
diff --git a/redbot/cogs/image/image.py b/redbot/cogs/image/image.py
index 060e809c0..1570f1fbf 100644
--- a/redbot/cogs/image/image.py
+++ b/redbot/cogs/image/image.py
@@ -7,8 +7,6 @@ from redbot.core import checks, Config, commands
_ = Translator("Image", __file__)
-GIPHY_API_KEY = "dc6zaTOxFJmzC"
-
@cog_i18n(_)
class Image(commands.Cog):
@@ -166,8 +164,17 @@ class Image(commands.Cog):
await ctx.send_help()
return
+ giphy_api_key = await ctx.bot.db.api_tokens.get_raw("GIPHY", default=None)
+ if not giphy_api_key:
+ await ctx.send(
+ _("A API key has not been set! Please set one with `{prefix}giphycreds`.").format(
+ prefix=ctx.prefix
+ )
+ )
+ return
+
url = "http://api.giphy.com/v1/gifs/search?&api_key={}&q={}".format(
- GIPHY_API_KEY, keywords
+ giphy_api_key["api_key"], keywords
)
async with self.session.get(url) as r:
@@ -190,8 +197,17 @@ class Image(commands.Cog):
await ctx.send_help()
return
+ giphy_api_key = await ctx.bot.db.api_tokens.get_raw("GIPHY", default=None)
+ if not giphy_api_key:
+ await ctx.send(
+ _("A API key has not been set! Please set one with `{prefix}giphycreds`.").format(
+ prefix=ctx.prefix
+ )
+ )
+ return
+
url = "http://api.giphy.com/v1/gifs/random?&api_key={}&tag={}".format(
- GIPHY_API_KEY, keywords
+ giphy_api_key["api_key"], keywords
)
async with self.session.get(url) as r:
@@ -203,3 +219,21 @@ class Image(commands.Cog):
await ctx.send(_("No results found."))
else:
await ctx.send(_("Error contacting the API."))
+
+ @checks.is_owner()
+ @commands.command()
+ async def giphycreds(self, ctx):
+ """Explain how to set Giphy API tokens"""
+
+ message = _(
+ "To get an Giphyr API Key:\n"
+ "1. Login to an Giphy account.\n"
+ "2. Visit [this](https://developers.giphy.com/dashboard) page\n"
+ "3. Press `Create an App`\n"
+ "4. Write a app name, example: `Red Bot`\n"
+ "5. Write a app description, example: `Used for Red Bot`\n"
+ "6. Copy the API key shown.\n"
+ "7. Do `{prefix}set api GIPHY api_key,your_api_key`\n"
+ ).format(prefix=ctx.prefix)
+
+ await ctx.maybe_send_embed(message)
From 242df83785a48bce3301c2c0a185e46f4d39932c Mon Sep 17 00:00:00 2001
From: DiscordLiz <47602820+DiscordLiz@users.noreply.github.com>
Date: Tue, 28 May 2019 02:47:44 -0400
Subject: [PATCH 009/183] [Image] Fix some issues in strings (#2737)
---
redbot/cogs/image/image.py | 12 ++++++------
1 file changed, 6 insertions(+), 6 deletions(-)
diff --git a/redbot/cogs/image/image.py b/redbot/cogs/image/image.py
index 1570f1fbf..7c672bdff 100644
--- a/redbot/cogs/image/image.py
+++ b/redbot/cogs/image/image.py
@@ -167,7 +167,7 @@ class Image(commands.Cog):
giphy_api_key = await ctx.bot.db.api_tokens.get_raw("GIPHY", default=None)
if not giphy_api_key:
await ctx.send(
- _("A API key has not been set! Please set one with `{prefix}giphycreds`.").format(
+ _("An API key has not been set! Please set one with `{prefix}giphycreds`.").format(
prefix=ctx.prefix
)
)
@@ -200,7 +200,7 @@ class Image(commands.Cog):
giphy_api_key = await ctx.bot.db.api_tokens.get_raw("GIPHY", default=None)
if not giphy_api_key:
await ctx.send(
- _("A API key has not been set! Please set one with `{prefix}giphycreds`.").format(
+ _("An API key has not been set! Please set one with `{prefix}giphycreds`.").format(
prefix=ctx.prefix
)
)
@@ -226,12 +226,12 @@ class Image(commands.Cog):
"""Explain how to set Giphy API tokens"""
message = _(
- "To get an Giphyr API Key:\n"
- "1. Login to an Giphy account.\n"
+ "To get a Giphy API Key:\n"
+ "1. Login to a Giphy account.\n"
"2. Visit [this](https://developers.giphy.com/dashboard) page\n"
"3. Press `Create an App`\n"
- "4. Write a app name, example: `Red Bot`\n"
- "5. Write a app description, example: `Used for Red Bot`\n"
+ "4. Write an app name, example: `Red Bot`\n"
+ "5. Write an app description, example: `Used for Red Bot`\n"
"6. Copy the API key shown.\n"
"7. Do `{prefix}set api GIPHY api_key,your_api_key`\n"
).format(prefix=ctx.prefix)
From 56161c0a88e6ec31ae2bd0b0d284ca8f54cad496 Mon Sep 17 00:00:00 2001
From: DiscordLiz <47602820+DiscordLiz@users.noreply.github.com>
Date: Tue, 28 May 2019 12:37:02 -0400
Subject: [PATCH 010/183] Send to owners (#2738)
* Add bot.send_to_owner
resolves #2665
Adds some basic methods and config entries.
Does not add commands for modifying this yet.
* Use send_to_owners in events
* handle feedback
---
redbot/core/bot.py | 45 +++++++++++++++++++++++++++++++++++++++++++
redbot/core/events.py | 24 ++++++-----------------
2 files changed, 51 insertions(+), 18 deletions(-)
diff --git a/redbot/core/bot.py b/redbot/core/bot.py
index 877c54eb7..23f1b6ddd 100644
--- a/redbot/core/bot.py
+++ b/redbot/core/bot.py
@@ -20,6 +20,8 @@ from .utils import common_filters
CUSTOM_GROUPS = "CUSTOM_GROUPS"
+log = logging.getLogger("redbot")
+
def _is_submodule(parent, child):
return parent == child or child.startswith(parent + ".")
@@ -60,6 +62,8 @@ class RedBase(commands.GroupMixin, commands.bot.BotBase, RPCMixin):
disabled_commands=[],
disabled_command_msg="That command is disabled.",
api_tokens={},
+ extra_owner_destinations=[],
+ owner_opt_out_list=[],
)
self.db.register_guild(
@@ -464,6 +468,47 @@ class RedBase(commands.GroupMixin, commands.bot.BotBase, RPCMixin):
ctx.permission_state = commands.PermState.DENIED_BY_HOOK
return False
+ async def get_owner_notification_destinations(self) -> List[discord.abc.Messageable]:
+ """
+ Gets the users and channels to send to
+ """
+ destinations = []
+ opt_outs = await self.db.owner_opt_out_list()
+ for user_id in (self.owner_id, *self._co_owners):
+ if user_id not in opt_outs:
+ user = self.get_user(user_id)
+ if user:
+ destinations.append(user)
+
+ channel_ids = await self.db.extra_owner_destinations()
+ for channel_id in channel_ids:
+ channel = self.get_channel(channel_id)
+ if channel:
+ destinations.append(channel)
+
+ return destinations
+
+ async def send_to_owners(self, content=None, **kwargs):
+ """
+ This sends something to all owners and their configured extra destinations.
+
+ This takes the same arguments as discord.abc.Messageable.send
+
+ This logs failing sends
+ """
+ destinations = await self.get_owner_notification_destinations()
+
+ async def wrapped_send(location, content=None, **kwargs):
+ try:
+ await location.send(content, **kwargs)
+ except Exception as _exc:
+ log.exception(
+ f"I could not send an owner notification to ({location.id}){location}"
+ )
+
+ sends = [wrapped_send(d, content, **kwargs) for d in destinations]
+ await asyncio.gather(*sends)
+
class Red(RedBase, discord.AutoShardedClient):
"""
diff --git a/redbot/core/events.py b/redbot/core/events.py
index aacc88017..bd0bff3cd 100644
--- a/redbot/core/events.py
+++ b/redbot/core/events.py
@@ -120,24 +120,12 @@ def init_events(bot, cli_flags):
"but you're using {}".format(data["info"]["version"], red_version)
)
- owners = []
- owner = bot.get_user(bot.owner_id)
- if owner is not None:
- owners.append(owner)
-
- for co_owner in bot._co_owners:
- co_owner = bot.get_user(co_owner)
- if co_owner is not None:
- owners.append(co_owner)
-
- for owner in owners:
- with contextlib.suppress(discord.HTTPException):
- await owner.send(
- "Your Red instance is out of date! {} is the current "
- "version, however you are using {}!".format(
- data["info"]["version"], red_version
- )
- )
+ await bot.send_to_owners(
+ "Your Red instance is out of date! {} is the current "
+ "version, however you are using {}!".format(
+ data["info"]["version"], red_version
+ )
+ )
INFO2 = []
mongo_enabled = storage_type() != "JSON"
From 1581604f710cd8c3e90994f9f8a6d2b18916c634 Mon Sep 17 00:00:00 2001
From: DiscordLiz <47602820+DiscordLiz@users.noreply.github.com>
Date: Tue, 28 May 2019 12:43:55 -0400
Subject: [PATCH 011/183] Add a timedelta converter (#2736)
* Add a timedelta converter
This reuses a lot of logic from @mikeshardmind 's scheduler cog with permission
It adds a timedelta converter
It keeps it generalized as requested
It keeps the function available for non converter use as requested
* Handle feedback
* style fix
---
redbot/core/commands/converter.py | 168 +++++++++++++++++++++++++++++-
1 file changed, 167 insertions(+), 1 deletion(-)
diff --git a/redbot/core/commands/converter.py b/redbot/core/commands/converter.py
index e62a6e2c1..3c915f611 100644
--- a/redbot/core/commands/converter.py
+++ b/redbot/core/commands/converter.py
@@ -1,5 +1,6 @@
import re
import functools
+from datetime import timedelta
from typing import TYPE_CHECKING, Optional, List, Dict
import discord
@@ -7,17 +8,105 @@ from discord.ext import commands as dpy_commands
from . import BadArgument
from ..i18n import Translator
+from ..utils.chat_formatting import humanize_timedelta
if TYPE_CHECKING:
from .context import Context
-__all__ = ["GuildConverter", "APIToken", "DictConverter", "get_dict_converter"]
+__all__ = [
+ "APIToken",
+ "DictConverter",
+ "GuildConverter",
+ "TimedeltaConverter",
+ "get_dict_converter",
+ "get_timedelta_converter",
+ "parse_timedelta",
+]
_ = Translator("commands.converter", __file__)
ID_REGEX = re.compile(r"([0-9]{15,21})")
+# Taken with permission from
+# https://github.com/mikeshardmind/SinbadCogs/blob/816f3bc2ba860243f75112904b82009a8a9e1f99/scheduler/time_utils.py#L9-L19
+TIME_RE_STRING = r"\s?".join(
+ [
+ r"((?P\d+?)\s?(weeks?|w))?",
+ r"((?P\d+?)\s?(days?|d))?",
+ r"((?P\d+?)\s?(hours?|hrs|hr?))?",
+ r"((?P\d+?)\s?(minutes?|mins?|m(?!o)))?", # prevent matching "months"
+ r"((?P\d+?)\s?(seconds?|secs?|s))?",
+ ]
+)
+
+TIME_RE = re.compile(TIME_RE_STRING, re.I)
+
+
+def parse_timedelta(
+ argument: str,
+ *,
+ maximum: Optional[timedelta] = None,
+ minimum: Optional[timedelta] = None,
+ allowed_units: Optional[List[str]] = None,
+) -> Optional[timedelta]:
+ """
+ This converts a user provided string into a timedelta
+
+ The units should be in order from largest to smallest.
+ This works with or without whitespace.
+
+ Parameters
+ ----------
+ argument : str
+ The user provided input
+ maximum : Optional[timedelta]
+ If provided, any parsed value higher than this will raise an exception
+ minimum : Optional[timedelta]
+ If provided, any parsed value lower than this will raise an exception
+ allowed_units : Optional[List[str]]
+ If provided, you can constrain a user to expressing the amount of time
+ in specific units. The units you can chose to provide are the same as the
+ parser understands. `weeks` `days` `hours` `minutes` `seconds`
+
+ Returns
+ -------
+ Optional[timedelta]
+ If matched, the timedelta which was parsed. This can return `None`
+
+ Raises
+ ------
+ BadArgument
+ If the argument passed uses a unit not allowed, but understood
+ or if the value is out of bounds.
+ """
+ matches = TIME_RE.match(argument)
+ allowed_units = allowed_units or ["weeks", "days", "hours", "minutes", "seconds"]
+ if matches:
+ params = {k: int(v) for k, v in matches.groupdict().items() if v is not None}
+ for k in params.keys():
+ if k not in allowed_units:
+ raise BadArgument(
+ _("`{unit}` is not a valid unit of time for this command").format(unit=k)
+ )
+ if params:
+ delta = timedelta(**params)
+ if maximum and maximum < delta:
+ raise BadArgument(
+ _(
+ "This amount of time is too large for this command. (maximum: {maximum})"
+ ).format(maximum=humanize_timedelta(timedelta=maximum))
+ )
+ if minimum and delta < minimum:
+ raise BadArgument(
+ _(
+ "This amount of time is too small for this command. (minimum: {minimum})"
+ ).format(minimum=humanize_timedelta(timedelta=minimum))
+ )
+ return delta
+ return None
+
+
class GuildConverter(discord.Guild):
"""Converts to a `discord.Guild` object.
@@ -116,3 +205,80 @@ def get_dict_converter(*expected_keys: str, delims: Optional[List[str]] = None)
pass
return ValidatedConverter
+
+
+class TimedeltaConverter(dpy_commands.Converter):
+ """
+ This is a converter for timedeltas.
+ The units should be in order from largest to smallest.
+ This works with or without whitespace.
+
+ See `parse_timedelta` for more information about how this functions.
+
+ Attributes
+ ----------
+ maximum : Optional[timedelta]
+ If provided, any parsed value higher than this will raise an exception
+ minimum : Optional[timedelta]
+ If provided, any parsed value lower than this will raise an exception
+ allowed_units : Optional[List[str]]
+ If provided, you can constrain a user to expressing the amount of time
+ in specific units. The units you can chose to provide are the same as the
+ parser understands. `weeks` `days` `hours` `minutes` `seconds`
+ """
+
+ def __init__(self, *, minimum=None, maximum=None, allowed_units=None):
+ self.allowed_units = allowed_units
+ self.minimum = minimum
+ self.maximum = maximum
+
+ async def convert(self, ctx: "Context", argument: str) -> timedelta:
+ delta = parse_timedelta(
+ argument, minimum=self.minimum, maximum=self.maximum, allowed_units=self.allowed_units
+ )
+ if delta is not None:
+ return delta
+ raise BadArgument() # This allows this to be a required argument.
+
+
+def get_timedelta_converter(
+ *,
+ maximum: Optional[timedelta] = None,
+ minimum: Optional[timedelta] = None,
+ allowed_units: Optional[List[str]] = None,
+) -> type:
+ """
+ This creates a type suitable for typechecking which works with discord.py's
+ commands.
+
+ See `parse_timedelta` for more information about how this functions.
+
+ Parameters
+ ----------
+ maximum : Optional[timedelta]
+ If provided, any parsed value higher than this will raise an exception
+ minimum : Optional[timedelta]
+ If provided, any parsed value lower than this will raise an exception
+ allowed_units : Optional[List[str]]
+ If provided, you can constrain a user to expressing the amount of time
+ in specific units. The units you can chose to provide are the same as the
+ parser understands. `weeks` `days` `hours` `minutes` `seconds`
+
+ Returns
+ -------
+ type
+ The converter class, which will be a subclass of `TimedeltaConverter`
+ """
+
+ class PartialMeta(type(TimedeltaConverter)):
+ __call__ = functools.partialmethod(
+ type(DictConverter).__call__,
+ allowed_units=allowed_units,
+ minimum=minimum,
+ maximum=maximum,
+ )
+
+ class ValidatedConverter(TimedeltaConverter, metaclass=PartialMeta):
+ pass
+
+ return ValidatedConverter
From aac9369f3fd61e1e4c009df1c4f9b52d83295197 Mon Sep 17 00:00:00 2001
From: DevilXD
Date: Wed, 29 May 2019 02:01:27 +0200
Subject: [PATCH 012/183] [Mod] Add [p]slowmode (#2734)
Makes use of new timedelta converter
---
redbot/cogs/mod/mod.py | 2 ++
redbot/cogs/mod/slowmode.py | 41 +++++++++++++++++++++++++++++++++++++
2 files changed, 43 insertions(+)
create mode 100644 redbot/cogs/mod/slowmode.py
diff --git a/redbot/cogs/mod/mod.py b/redbot/cogs/mod/mod.py
index 9ac18743c..a303aab50 100644
--- a/redbot/cogs/mod/mod.py
+++ b/redbot/cogs/mod/mod.py
@@ -12,6 +12,7 @@ from .kickban import KickBanMixin
from .movetocore import MoveToCore
from .mutes import MuteMixin
from .names import ModInfo
+from .slowmode import Slowmode
from .settings import ModSettings
_ = T_ = Translator("Mod", __file__)
@@ -36,6 +37,7 @@ class Mod(
MoveToCore,
MuteMixin,
ModInfo,
+ Slowmode,
commands.Cog,
metaclass=CompositeMetaClass,
):
diff --git a/redbot/cogs/mod/slowmode.py b/redbot/cogs/mod/slowmode.py
new file mode 100644
index 000000000..807769c26
--- /dev/null
+++ b/redbot/cogs/mod/slowmode.py
@@ -0,0 +1,41 @@
+import re
+from .abc import MixinMeta
+from datetime import timedelta
+from redbot.core import commands, i18n, checks
+from redbot.core.utils.chat_formatting import humanize_timedelta
+
+_ = i18n.Translator("Mod", __file__)
+
+
+class Slowmode(MixinMeta):
+ """
+ Commands regarding channel slowmode management.
+ """
+
+ @commands.command()
+ @commands.guild_only()
+ @commands.bot_has_permissions(manage_channels=True)
+ @checks.admin_or_permissions(manage_channels=True)
+ async def slowmode(
+ self,
+ ctx,
+ *,
+ interval: commands.TimedeltaConverter(
+ minimum=timedelta(seconds=0), maximum=timedelta(hours=6)
+ ) = timedelta(seconds=0),
+ ):
+ """Changes channel's slowmode setting.
+
+ Interval can be anything from 0 seconds to 6 hours.
+ Use without parameters to disable.
+ """
+ seconds = interval.total_seconds()
+ await ctx.channel.edit(slowmode_delay=seconds)
+ if seconds > 0:
+ await ctx.send(
+ _("Slowmode interval is now {interval}.").format(
+ interval=humanize_timedelta(timedelta=interval)
+ )
+ )
+ else:
+ await ctx.send(_("Slowmode has been disabled."))
From f894b62bfeba5d73c941cdaf4f412c457b35b0ac Mon Sep 17 00:00:00 2001
From: DevilXD
Date: Thu, 30 May 2019 04:36:32 +0200
Subject: [PATCH 013/183] [CustomCom] Fixed KeyError on specific message
edge-case (#2739)
fixes #2679
---
redbot/cogs/customcom/customcom.py | 2 ++
1 file changed, 2 insertions(+)
diff --git a/redbot/cogs/customcom/customcom.py b/redbot/cogs/customcom/customcom.py
index a4a0bf005..8d3faae8e 100644
--- a/redbot/cogs/customcom/customcom.py
+++ b/redbot/cogs/customcom/customcom.py
@@ -84,6 +84,8 @@ class CommandObj:
return "{:%d/%m/%Y %H:%M:%S}".format(datetime.utcnow())
async def get(self, message: discord.Message, command: str) -> Tuple[str, Dict]:
+ if not command:
+ raise NotFound()
ccinfo = await self.db(message.guild).commands.get_raw(command, default=None)
if not ccinfo:
raise NotFound()
From 8ddc5aa63e1f4ab31dc164888b42f5abb2911112 Mon Sep 17 00:00:00 2001
From: DiscordLiz <47602820+DiscordLiz@users.noreply.github.com>
Date: Fri, 31 May 2019 05:13:36 -0400
Subject: [PATCH 014/183] [Core] Add commands to manage owner notification
destinations. (#2745)
---
redbot/core/core_commands.py | 96 ++++++++++++++++++++++++++++++++++++
1 file changed, 96 insertions(+)
diff --git a/redbot/core/core_commands.py b/redbot/core/core_commands.py
index 9fff5c6db..e06ab0341 100644
--- a/redbot/core/core_commands.py
+++ b/redbot/core/core_commands.py
@@ -1989,6 +1989,102 @@ class Core(commands.Cog, CoreLogic):
else:
await ctx.send(_("They are not Immune"))
+ @checks.is_owner()
+ @_set.group()
+ async def ownernotifications(self, ctx: commands.Context):
+ """
+ Commands for configuring owner notifications.
+ """
+ pass
+
+ @ownernotifications.command()
+ async def optin(self, ctx: commands.Context):
+ """
+ Opt-in on recieving owner notifications.
+
+ This is the default state.
+ """
+ async with ctx.bot.db.owner_opt_out_list() as opt_outs:
+ if ctx.author.id in opt_outs:
+ opt_outs.remove(ctx.author.id)
+
+ await ctx.tick()
+
+ @ownernotifications.command()
+ async def optout(self, ctx: commands.Context):
+ """
+ Opt-out of recieving owner notifications.
+ """
+ async with ctx.bot.db.owner_opt_out_list() as opt_outs:
+ if ctx.author.id not in opt_outs:
+ opt_outs.append(ctx.author.id)
+
+ await ctx.tick()
+
+ @ownernotifications.command()
+ async def adddestination(
+ self, ctx: commands.Context, *, channel: Union[discord.TextChannel, int]
+ ):
+ """
+ Adds a destination text channel to recieve owner notifications
+ """
+
+ try:
+ channel_id = channel.id
+ except AttributeError:
+ channel_id = channel
+
+ async with ctx.bot.db.extra_owner_destinations() as extras:
+ if channel_id not in extras:
+ extras.append(channel_id)
+
+ await ctx.tick()
+
+ @ownernotifications.command(aliases=["remdestination", "deletedestination", "deldestination"])
+ async def removedestination(
+ self, ctx: commands.Context, *, channel: Union[discord.TextChannel, int]
+ ):
+ """
+ Removes a destination text channel from recieving owner notifications.
+ """
+
+ try:
+ channel_id = channel.id
+ except AttributeError:
+ channel_id = channel
+
+ async with ctx.bot.db.extra_owner_destinations() as extras:
+ if channel_id in extras:
+ extras.remove(channel_id)
+
+ await ctx.tick()
+
+ @ownernotifications.command()
+ async def listdestinations(self, ctx: commands.Context):
+ """
+ Lists the configured extra destinations for owner notifications
+ """
+
+ channel_ids = await ctx.bot.db.extra_owner_destinations()
+
+ if not channel_ids:
+ await ctx.send(_("There are no extra channels being sent to."))
+ return
+
+ data = []
+
+ for channel_id in channel_ids:
+ channel = ctx.bot.get_channel(channel_id)
+ if channel:
+ # This includes the channel name in case the user can't see the channel.
+ data.append(f"{channel.mention} {channel} ({channel.id})")
+ else:
+ data.append(_("Unknown channel with id: {id}").format(id=channel_id))
+
+ output = "\n".join(data)
+ for page in pagify(output):
+ await ctx.send(page)
+
# RPC handlers
async def rpc_load(self, request):
cog_name = request.params[0]
From 1ccc441aab7886d174fce59f5dbd0aa85961c820 Mon Sep 17 00:00:00 2001
From: DiscordLiz <47602820+DiscordLiz@users.noreply.github.com>
Date: Fri, 31 May 2019 05:32:26 -0400
Subject: [PATCH 015/183] [Core] Make contact use configured destinations
(#2743)
* Make contact use configured destinations
---
redbot/core/core_commands.py | 103 ++++++++++++++++++++++++-----------
1 file changed, 71 insertions(+), 32 deletions(-)
diff --git a/redbot/core/core_commands.py b/redbot/core/core_commands.py
index e06ab0341..6221e5dde 100644
--- a/redbot/core/core_commands.py
+++ b/redbot/core/core_commands.py
@@ -1335,7 +1335,6 @@ class Core(commands.Cog, CoreLogic):
async def contact(self, ctx: commands.Context, *, message: str):
"""Sends a message to the owner"""
guild = ctx.message.guild
- owner = discord.utils.get(ctx.bot.get_all_members(), id=ctx.bot.owner_id)
author = ctx.message.author
footer = _("User ID: {}").format(author.id)
@@ -1356,41 +1355,81 @@ class Core(commands.Cog, CoreLogic):
description = _("Sent by {} {}").format(author, source)
- if isinstance(author, discord.Member):
- colour = author.colour
- else:
- colour = discord.Colour.red()
+ destinations = await ctx.bot.get_owner_notification_destinations()
- if await ctx.embed_requested():
- e = discord.Embed(colour=colour, description=message)
- if author.avatar_url:
- e.set_author(name=description, icon_url=author.avatar_url)
- else:
- e.set_author(name=description)
- e.set_footer(text=footer)
+ if not destinations:
+ await ctx.send(_("I've been configured not to send this anywhere."))
+ return
- try:
- await owner.send(content, embed=e)
- except discord.InvalidArgument:
- await ctx.send(
- _("I cannot send your message, I'm unable to find my owner... *sigh*")
- )
- except discord.HTTPException:
- await ctx.send(_("I'm unable to deliver your message. Sorry."))
+ successful = False
+
+ for destination in destinations:
+
+ is_dm = isinstance(destination, discord.User)
+ send_embed = None
+
+ if is_dm:
+ send_embed = await ctx.bot.db.user(destination).embeds()
else:
- await ctx.send(_("Your message has been sent."))
+ if not destination.permissions_for(destination.guild.me).send_messages:
+ continue
+ if destination.permissions_for(destination.guild.me).embed_links:
+ send_embed = await ctx.bot.db.guild(destination.guild).embeds()
+ else:
+ send_embed = False
+
+ if send_embed is None:
+ send_embed = await ctx.bot.db.embeds()
+
+ if send_embed:
+
+ if not is_dm and await self.bot.db.guild(destination.guild).use_bot_color():
+ color = destination.guild.me.color
+ else:
+ color = ctx.bot.color
+
+ e = discord.Embed(colour=color, description=message)
+ if author.avatar_url:
+ e.set_author(name=description, icon_url=author.avatar_url)
+ else:
+ e.set_author(name=description)
+
+ e.set_footer(text=footer)
+
+ try:
+ await destination.send(embed=e)
+ except discord.Forbidden:
+ log.exception(f"Contact failed to {destination}({destination.id})")
+ # Should this automatically opt them out?
+ except discord.HTTPException:
+ log.exception(
+ f"An unexpected error happened while attempting to"
+ f" send contact to {destination}({destination.id})"
+ )
+ else:
+ successful = True
+
+ else:
+
+ msg_text = "{}\nMessage:\n\n{}\n{}".format(description, message, footer)
+
+ try:
+ await destination.send("{}\n{}".format(content, box(msg_text)))
+ except discord.Forbidden:
+ log.exception(f"Contact failed to {destination}({destination.id})")
+ # Should this automatically opt them out?
+ except discord.HTTPException:
+ log.exception(
+ f"An unexpected error happened while attempting to"
+ f" send contact to {destination}({destination.id})"
+ )
+ else:
+ successful = True
+
+ if successful:
+ await ctx.send(_("Your message has been sent."))
else:
- msg_text = "{}\nMessage:\n\n{}\n{}".format(description, message, footer)
- try:
- await owner.send("{}\n{}".format(content, box(msg_text)))
- except discord.InvalidArgument:
- await ctx.send(
- _("I cannot send your message, I'm unable to find my owner... *sigh*")
- )
- except discord.HTTPException:
- await ctx.send(_("I'm unable to deliver your message. Sorry."))
- else:
- await ctx.send(_("Your message has been sent."))
+ await ctx.send(_("I'm unable to deliver your message. Sorry."))
@commands.command()
@checks.is_owner()
From 2cb6e98092bc0230676b579fd0c5c217723814fe Mon Sep 17 00:00:00 2001
From: Matan Kushner
Date: Fri, 31 May 2019 11:39:14 +0200
Subject: [PATCH 016/183] =?UTF-8?q?[Readme]=20Anilist=20=E2=86=92=20AniLis?=
=?UTF-8?q?t=20(#2747)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
README.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/README.md b/README.md
index bc7b1e5a6..aaf513f80 100644
--- a/README.md
+++ b/README.md
@@ -106,7 +106,7 @@ plugins directly from Discord! A few examples are:
- Casino
- Reaction roles
- Slow Mode
-- Anilist
+- AniList
- And much, much more!
Feel free to take a [peek](https://cogboard.red/t/approved-repositories/210) at a list of
From e7b615d92105ded469a1159aaa55b88fc0318264 Mon Sep 17 00:00:00 2001
From: DiscordLiz <47602820+DiscordLiz@users.noreply.github.com>
Date: Fri, 31 May 2019 05:54:27 -0400
Subject: [PATCH 017/183] [Commands] Adds support for non interactive use
(#2746)
Adds assume_yes to context
Changes cleanup's 100+ check
Changes cog update.
---
redbot/cogs/cleanup/cleanup.py | 3 ++
redbot/cogs/downloader/downloader.py | 56 +++++++++++++++-------------
redbot/core/commands/context.py | 1 +
3 files changed, 34 insertions(+), 26 deletions(-)
diff --git a/redbot/cogs/cleanup/cleanup.py b/redbot/cogs/cleanup/cleanup.py
index 60796e314..23a55e0b6 100644
--- a/redbot/cogs/cleanup/cleanup.py
+++ b/redbot/cogs/cleanup/cleanup.py
@@ -33,6 +33,9 @@ class Cleanup(commands.Cog):
Tries its best to cleanup after itself if the response is positive.
"""
+ if ctx.assume_yes:
+ return True
+
prompt = await ctx.send(
_("Are you sure you want to delete {number} messages? (y/n)").format(number=number)
)
diff --git a/redbot/cogs/downloader/downloader.py b/redbot/cogs/downloader/downloader.py
index 4350fb6f5..820f791e3 100644
--- a/redbot/cogs/downloader/downloader.py
+++ b/redbot/cogs/downloader/downloader.py
@@ -424,35 +424,39 @@ class Downloader(commands.Cog):
return await ctx.send(
_("None of the updated cogs were previously loaded. Update complete.")
)
- message = _("Would you like to reload the updated cogs?")
- can_react = ctx.channel.permissions_for(ctx.me).add_reactions
- if not can_react:
- message += " (y/n)"
- query: discord.Message = await ctx.send(message)
- if can_react:
- # noinspection PyAsyncCall
- start_adding_reactions(query, ReactionPredicate.YES_OR_NO_EMOJIS, ctx.bot.loop)
- pred = ReactionPredicate.yes_or_no(query, ctx.author)
- event = "reaction_add"
- else:
- pred = MessagePredicate.yes_or_no(ctx)
- event = "message"
- try:
- await ctx.bot.wait_for(event, check=pred, timeout=30)
- except asyncio.TimeoutError:
- await query.delete()
- return
- if pred.result is True:
+ if not ctx.assume_yes:
+ message = _("Would you like to reload the updated cogs?")
+ can_react = ctx.channel.permissions_for(ctx.me).add_reactions
+ if not can_react:
+ message += " (y/n)"
+ query: discord.Message = await ctx.send(message)
if can_react:
- with contextlib.suppress(discord.Forbidden):
- await query.clear_reactions()
- await ctx.invoke(ctx.bot.get_cog("Core").reload, *cognames)
- else:
- if can_react:
- await query.delete()
+ # noinspection PyAsyncCall
+ start_adding_reactions(query, ReactionPredicate.YES_OR_NO_EMOJIS, ctx.bot.loop)
+ pred = ReactionPredicate.yes_or_no(query, ctx.author)
+ event = "reaction_add"
else:
- await ctx.send(_("OK then."))
+ pred = MessagePredicate.yes_or_no(ctx)
+ event = "message"
+ try:
+ await ctx.bot.wait_for(event, check=pred, timeout=30)
+ except asyncio.TimeoutError:
+ await query.delete()
+ return
+
+ if not pred.result:
+ if can_react:
+ await query.delete()
+ else:
+ await ctx.send(_("OK then."))
+ return
+ else:
+ if can_react:
+ with contextlib.suppress(discord.Forbidden):
+ await query.clear_reactions()
+
+ await ctx.invoke(ctx.bot.get_cog("Core").reload, *cognames)
@cog.command(name="list", usage="")
async def _cog_list(self, ctx, repo: Repo):
diff --git a/redbot/core/commands/context.py b/redbot/core/commands/context.py
index 958c2cdad..32a3a2439 100644
--- a/redbot/core/commands/context.py
+++ b/redbot/core/commands/context.py
@@ -23,6 +23,7 @@ class Context(commands.Context):
"""
def __init__(self, **attrs):
+ self.assume_yes = attrs.pop("assume_yes", False)
super().__init__(**attrs)
self.permission_state: PermState = PermState.NORMAL
From 3ca2a9af286f593aa061bfe47892250ab5462b21 Mon Sep 17 00:00:00 2001
From: Michael H
Date: Fri, 31 May 2019 15:37:50 -0400
Subject: [PATCH 018/183] [Help] Fix long cog helps (#2730)
* [Help] Fix long cog helps
- Why do people thing a category help of over 250 characters is more
useful than putting the help in relevent commands?!
* toss an MD fix in here too I guess
---
redbot/core/commands/help.py | 10 ++++++++--
1 file changed, 8 insertions(+), 2 deletions(-)
diff --git a/redbot/core/commands/help.py b/redbot/core/commands/help.py
index 3f671df7e..eb6fbf49e 100644
--- a/redbot/core/commands/help.py
+++ b/redbot/core/commands/help.py
@@ -166,7 +166,7 @@ class RedHelpFormatter:
if command.help:
splitted = command.help.split("\n\n")
- name = "__{0}__".format(splitted[0])
+ name = splitted[0]
value = "\n\n".join(splitted[1:]).replace("[p]", ctx.clean_prefix)
if not value:
value = EMPTY_STRING
@@ -287,7 +287,13 @@ class RedHelpFormatter:
emb["footer"]["text"] = tagline
if description:
- emb["embed"]["title"] = f"*{description[:2044]}*"
+ splitted = description.split("\n\n")
+ name = splitted[0]
+ value = "\n\n".join(splitted[1:]).replace("[p]", ctx.clean_prefix)
+ if not value:
+ value = EMPTY_STRING
+ field = EmbedField(name[:252], value[:1024], False)
+ emb["fields"].append(field)
if coms:
From 0e9086ca1fb408a715f9601c60ac1b5819ad74fc Mon Sep 17 00:00:00 2001
From: Michael H
Date: Fri, 31 May 2019 15:38:44 -0400
Subject: [PATCH 019/183] [Core] Fix error handling in loading extensions.
(#2688)
* fixes 2687
* raise the right exception
---
redbot/core/bot.py | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/redbot/core/bot.py b/redbot/core/bot.py
index 23f1b6ddd..142f40b5f 100644
--- a/redbot/core/bot.py
+++ b/redbot/core/bot.py
@@ -261,8 +261,8 @@ class RedBase(commands.GroupMixin, commands.bot.BotBase, RPCMixin):
lib.setup(self)
except Exception as e:
self._remove_module_references(lib.__name__)
- self._call_module_finalizers(lib, key)
- raise errors.ExtensionFailed(key, e) from e
+ self._call_module_finalizers(lib, name)
+ raise errors.CogLoadError() from e
else:
self._BotBase__extensions[name] = lib
From 33b7652b6232fc77381b8cc25115c502eff1e51a Mon Sep 17 00:00:00 2001
From: Michael H
Date: Fri, 31 May 2019 15:41:04 -0400
Subject: [PATCH 020/183] [Help] Detatch menu usage into a task (#2725)
* [Help] Detatch menu usage into a task
- This resolves #2712
- This is a minor API change. Conceptually, the difference is minor in
nature `bot.send_help_for` returns when help has been sent, however
this can now be prior to when the help menu (if one is in use) is
closed.
- This should not be considered breaking as there is and has been a
a warning about this file's APIs being still up for unannounced modifications
No developers should be currently relying on this behavior.
* operator precendence
---
redbot/core/commands/help.py | 12 ++++++++----
1 file changed, 8 insertions(+), 4 deletions(-)
diff --git a/redbot/core/commands/help.py b/redbot/core/commands/help.py
index eb6fbf49e..bff76c292 100644
--- a/redbot/core/commands/help.py
+++ b/redbot/core/commands/help.py
@@ -26,6 +26,7 @@
# Additionally, this gives our users a bit more customization options including by
# 3rd party cogs down the road.
+import asyncio
from collections import namedtuple
from typing import Union, List, AsyncIterator, Iterable, cast
@@ -555,10 +556,13 @@ class RedHelpFormatter:
)
)
else:
- if len(pages) > 1:
- await menus.menu(ctx, pages, menus.DEFAULT_CONTROLS)
- else:
- await menus.menu(ctx, pages, {"\N{CROSS MARK}": menus.close_menu})
+ # Specifically ensuring the menu's message is sent prior to returning
+ m = await (ctx.send(embed=pages[0]) if embed else ctx.send(pages[0]))
+ c = menus.DEFAULT_CONTROLS if len(pages) > 1 else {"\N{CROSS MARK}": menus.close_menu}
+ # Allow other things to happen during menu timeout/interaction.
+ asyncio.create_task(menus.menu(ctx, pages, c, message=m))
+ # menu needs reactions added manually since we fed it a messsage
+ menus.start_adding_reactions(m, c.keys())
@commands.command(name="help", hidden=True, i18n=T_)
From 2e58922d013c8b8c21bb33f8b56af7bad65e4c05 Mon Sep 17 00:00:00 2001
From: aikaterna <20862007+aikaterna@users.noreply.github.com>
Date: Fri, 31 May 2019 13:26:20 -0700
Subject: [PATCH 021/183] [Audio] Lavalink jar bump (#2750)
---
redbot/cogs/audio/manager.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/redbot/cogs/audio/manager.py b/redbot/cogs/audio/manager.py
index 1e5d30670..63ddfc795 100644
--- a/redbot/cogs/audio/manager.py
+++ b/redbot/cogs/audio/manager.py
@@ -14,7 +14,7 @@ import aiohttp
from redbot.core import data_manager
JAR_VERSION = "3.2.0.3"
-JAR_BUILD = 772
+JAR_BUILD = 796
LAVALINK_DOWNLOAD_URL = (
f"https://github.com/Cog-Creators/Lavalink-Jars/releases/download/{JAR_VERSION}_{JAR_BUILD}/"
f"Lavalink.jar"
From e956e6e3209bfa2b79e231e54488d945c1f4f9e7 Mon Sep 17 00:00:00 2001
From: Ryan
Date: Fri, 31 May 2019 16:41:23 -0400
Subject: [PATCH 022/183] [Streams] Ignore lack of rerun info where not
available (#2748)
---
redbot/cogs/streams/streams.py | 6 +++++-
1 file changed, 5 insertions(+), 1 deletion(-)
diff --git a/redbot/cogs/streams/streams.py b/redbot/cogs/streams/streams.py
index cd7478f88..83a67f4fc 100644
--- a/redbot/cogs/streams/streams.py
+++ b/redbot/cogs/streams/streams.py
@@ -547,7 +547,11 @@ class Streams(commands.Cog):
for stream in self.streams:
with contextlib.suppress(Exception):
try:
- embed, is_rerun = await stream.is_online()
+ if stream.__class__.__name__ == "TwitchStream":
+ embed, is_rerun = await stream.is_online()
+ else:
+ embed = await stream.is_online()
+ is_rerun = False
except OfflineStream:
if not stream._messages_cache:
continue
From 652d9fe95047268bf527b6d19f1bcab8c7ea9819 Mon Sep 17 00:00:00 2001
From: Flame442 <34169552+Flame442@users.noreply.github.com>
Date: Fri, 31 May 2019 17:58:04 -0400
Subject: [PATCH 023/183] =?UTF-8?q?Update=20version=20number=20to=203.1.2?=
=?UTF-8?q?=20=F0=9F=8E=89=20(#2751)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
redbot/__init__.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/redbot/__init__.py b/redbot/__init__.py
index dcc031cac..162ed6ba0 100644
--- a/redbot/__init__.py
+++ b/redbot/__init__.py
@@ -174,7 +174,7 @@ class VersionInfo:
)
-__version__ = "3.1.1"
+__version__ = "3.1.2"
version_info = VersionInfo.from_str(__version__)
# Filter fuzzywuzzy slow sequence matcher warning
From 9116cd02e68a17c27615fe190bbcda7138113106 Mon Sep 17 00:00:00 2001
From: Bakersbakebread <29239704+Bakersbakebread@users.noreply.github.com>
Date: Sun, 2 Jun 2019 16:57:43 +0100
Subject: [PATCH 024/183] [Core] Pass exceptions on Cog Load to user. (#2754)
---
redbot/core/bot.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/redbot/core/bot.py b/redbot/core/bot.py
index 142f40b5f..3db1380ea 100644
--- a/redbot/core/bot.py
+++ b/redbot/core/bot.py
@@ -262,7 +262,7 @@ class RedBase(commands.GroupMixin, commands.bot.BotBase, RPCMixin):
except Exception as e:
self._remove_module_references(lib.__name__)
self._call_module_finalizers(lib, name)
- raise errors.CogLoadError() from e
+ raise errors.CogLoadError(e) from e
else:
self._BotBase__extensions[name] = lib
From 16443c8cc0c24cbc5b3dc7de858edb71b9ca6cd3 Mon Sep 17 00:00:00 2001
From: Michael H
Date: Sun, 2 Jun 2019 13:42:58 -0400
Subject: [PATCH 025/183] [CI] Improve automated checks (#2702)
* same stuff, but with some more spurious error supression
* fix issue in permissions found in this
* fix a few more spurious errors
* fix another issue
* semi-spurious error fixes
* .
* formatting
* move this to properly log
* distutils import + virtualenv
* more fixes
---
.pylintrc | 148 +++++++++++++++++++++++++
redbot/cogs/audio/manager.py | 12 +-
redbot/cogs/cleanup/cleanup.py | 8 +-
redbot/cogs/economy/economy.py | 4 +-
redbot/cogs/mod/events.py | 3 +-
redbot/cogs/mod/kickban.py | 3 +-
redbot/cogs/mod/log.py | 4 -
redbot/cogs/mod/movetocore.py | 3 +-
redbot/cogs/permissions/permissions.py | 6 +-
redbot/cogs/streams/streamtypes.py | 12 +-
redbot/core/bot.py | 3 +-
redbot/core/commands/requires.py | 14 ++-
redbot/core/config.py | 5 +-
redbot/core/core_commands.py | 4 +-
redbot/core/data_manager.py | 2 +-
redbot/core/json_io.py | 2 +-
redbot/core/utils/__init__.py | 6 +-
redbot/setup.py | 4 +-
setup.cfg | 1 +
tox.ini | 4 +-
20 files changed, 205 insertions(+), 43 deletions(-)
create mode 100644 .pylintrc
delete mode 100644 redbot/cogs/mod/log.py
diff --git a/.pylintrc b/.pylintrc
new file mode 100644
index 000000000..1e870ede1
--- /dev/null
+++ b/.pylintrc
@@ -0,0 +1,148 @@
+[MASTER]
+
+# Specify a configuration file.
+#rcfile=
+
+# Add files or directories to the blacklist. They should be base names, not
+# paths.
+ignore=pytest
+
+# Pickle collected data for later comparisons.
+persistent=no
+
+# List of plugins (as comma separated values of python modules names) to load,
+# usually to register additional checkers.
+load-plugins=
+
+# DO NOT CHANGE THIS VALUE # Use multiple processes to speed up Pylint.
+jobs=1
+
+# Allow loading of arbitrary C extensions. Extensions are imported into the
+# active Python interpreter and may run arbitrary code.
+unsafe-load-any-extension=no
+
+# A comma-separated list of package or module names from where C extensions may
+# be loaded. Extensions are loading into the active Python interpreter and may
+# run arbitrary code
+extension-pkg-whitelist=
+
+# Allow optimization of some AST trees. This will activate a peephole AST
+# optimizer, which will apply various small optimizations. For instance, it can
+# be used to obtain the result of joining multiple strings with the addition
+# operator. Joining a lot of strings can lead to a maximum recursion error in
+# Pylint and this flag can prevent that. It has one side effect, the resulting
+# AST will be different than the one from reality.
+optimize-ast=no
+
+
+[MESSAGES CONTROL]
+
+# Only show warnings with the listed confidence levels. Leave empty to show
+# all. Valid levels: HIGH, INFERENCE, INFERENCE_FAILURE, UNDEFINED
+confidence=
+
+# Enable the message, report, category or checker with the given id(s). You can
+# either give multiple identifier separated by comma (,) or put this option
+# multiple time. See also the "--disable" option for examples.
+
+
+enable=all
+
+disable=C, # black is enforcing this for us already, incompatibly
+ W, # unbroaden this to the below specifics later on.
+ W0107, # uneccessary pass is stylisitc in most places
+ W0212, # Should likely refactor around protected access warnings later
+ W1203, # fstrings are too fast to care about enforcing this.
+ W0612, # unused vars can sometimes indicate an issue, but ...
+ W1401, # Should probably fix the reason this is disabled (start up screen)
+ W0511, # Nope, todos are fine for future people to see things to do.
+ W0613, # Too many places where we need to take unused args do to d.py ... also menus
+ W0221, # Overriden converters.
+ W0223, # abstractmethod not defined in mixins is expected
+ I, # ...
+ R # While some of these have merit, It's too large a burden to enable this right now.
+
+
+[REPORTS]
+
+output-format=parseable
+files-output=no
+reports=no
+
+
+[LOGGING]
+
+# Logging modules to check that the string format arguments are in logging
+# function parameter format
+logging-modules=logging
+
+
+[TYPECHECK]
+
+# Tells whether missing members accessed in mixin class should be ignored. A
+# mixin class is detected if its name ends with "mixin" (case insensitive).
+ignore-mixin-members=yes
+
+# TODO: Write a plyint plugin to allow this with these mixin classes
+# To use the abstractmethod we know will be defined in the final class.
+ignored-classes=redbot.cogs.mod.movetocore.MoveToCore,
+ redbot.cogs.mod.kickban.KickBanMixin,
+ redbot.cogs.mod.mutes.MuteMixin,
+ redbot.cogs.mod.names.ModInfo,
+ redbot.cogs.mod.settings.ModSettings,
+ redbot.cogs.mod.events.Events
+
+ignored-modules=distutils # https://github.com/PyCQA/pylint/issues/73
+
+
+[VARIABLES]
+
+# Tells whether we should check for unused import in __init__ files.
+init-import=no
+
+# A regular expression matching the name of dummy variables (i.e. expectedly
+# not used).
+dummy-variables-rgx=_$|dummy
+
+
+[SIMILARITIES]
+
+# Minimum lines number of a similarity.
+min-similarity-lines=4
+
+# Ignore comments when computing similarities.
+ignore-comments=yes
+
+# Ignore docstrings when computing similarities.
+ignore-docstrings=yes
+
+# Ignore imports when computing similarities.
+ignore-imports=no
+
+
+[MISCELLANEOUS]
+
+# List of note tags to take in consideration, separated by a comma.
+notes=FIXME,XXX,TODO
+
+
+[CLASSES]
+
+# List of method names used to declare (i.e. assign) instance attributes.
+defining-attr-methods=__init__,__new__,__call__
+
+# List of valid names for the first argument in a class method.
+valid-classmethod-first-arg=cls
+
+# List of valid names for the first argument in a metaclass class method.
+valid-metaclass-classmethod-first-arg=mcs
+
+# List of member names, which should be excluded from the protected access
+# warning.
+exclude-protected=
+
+[EXCEPTIONS]
+
+# Exceptions that will emit a warning when being caught. Defaults to
+# "Exception"
+overgeneral-exceptions=Exception,discord.DiscordException
\ No newline at end of file
diff --git a/redbot/cogs/audio/manager.py b/redbot/cogs/audio/manager.py
index 63ddfc795..c1512513c 100644
--- a/redbot/cogs/audio/manager.py
+++ b/redbot/cogs/audio/manager.py
@@ -3,7 +3,7 @@ import pathlib
import platform
import shutil
import asyncio
-import asyncio.subprocess
+import asyncio.subprocess # disables for # https://github.com/PyCQA/pylint/issues/1469
import logging
import re
import tempfile
@@ -42,7 +42,7 @@ class ServerManager:
def __init__(self) -> None:
self.ready = asyncio.Event()
- self._proc: Optional[asyncio.subprocess.Process] = None
+ self._proc: Optional[asyncio.subprocess.Process] = None # pylint:disable=no-member
self._monitor_task: Optional[asyncio.Task] = None
self._shutdown: bool = False
@@ -67,7 +67,7 @@ class ServerManager:
shutil.copyfile(BUNDLED_APP_YML, LAVALINK_APP_YML)
args = await self._get_jar_args()
- self._proc = await asyncio.subprocess.create_subprocess_exec(
+ self._proc = await asyncio.subprocess.create_subprocess_exec( # pylint:disable=no-member
*args,
cwd=str(LAVALINK_DOWNLOAD_DIR),
stdout=asyncio.subprocess.PIPE,
@@ -117,7 +117,7 @@ class ServerManager:
"""
This assumes we've already checked that java exists.
"""
- _proc: asyncio.subprocess.Process = await asyncio.create_subprocess_exec(
+ _proc: asyncio.subprocess.Process = await asyncio.create_subprocess_exec( # pylint:disable=no-member
"java", "-version", stdout=asyncio.subprocess.PIPE, stderr=asyncio.subprocess.PIPE
)
# java -version outputs to stderr
@@ -173,7 +173,7 @@ class ServerManager:
await self.start()
else:
log.critical(
- "Your Java is borked. Please find the hs_err_pid{}.log file"
+ "Your Java is borked. Please find the hs_err_pid%d.log file"
" in the Audio data folder and report this issue.",
self._proc.pid,
)
@@ -222,7 +222,7 @@ class ServerManager:
return True
args = await cls._get_jar_args()
args.append("--version")
- _proc = await asyncio.subprocess.create_subprocess_exec(
+ _proc = await asyncio.subprocess.create_subprocess_exec( # pylint:disable=no-member
*args,
cwd=str(LAVALINK_DOWNLOAD_DIR),
stdout=asyncio.subprocess.PIPE,
diff --git a/redbot/cogs/cleanup/cleanup.py b/redbot/cogs/cleanup/cleanup.py
index 23a55e0b6..f54d075ee 100644
--- a/redbot/cogs/cleanup/cleanup.py
+++ b/redbot/cogs/cleanup/cleanup.py
@@ -1,3 +1,4 @@
+import logging
import re
from datetime import datetime, timedelta
from typing import Union, List, Callable, Set
@@ -8,12 +9,13 @@ from redbot.core import checks, commands
from redbot.core.bot import Red
from redbot.core.i18n import Translator, cog_i18n
from redbot.core.utils.mod import slow_deletion, mass_purge
-from redbot.cogs.mod.log import log
from redbot.core.utils.predicates import MessagePredicate
from .converters import RawMessageIds
_ = Translator("Cleanup", __file__)
+log = logging.getLogger("red.cleanup")
+
@cog_i18n(_)
class Cleanup(commands.Cog):
@@ -302,13 +304,13 @@ class Cleanup(commands.Cog):
author = ctx.author
try:
mone = await channel.fetch_message(one)
- except discord.errors.Notfound:
+ except discord.errors.NotFound:
return await ctx.send(
_("Could not find a message with the ID of {id}.".format(id=one))
)
try:
mtwo = await channel.fetch_message(two)
- except discord.errors.Notfound:
+ except discord.errors.NotFound:
return await ctx.send(
_("Could not find a message with the ID of {id}.".format(id=two))
)
diff --git a/redbot/cogs/economy/economy.py b/redbot/cogs/economy/economy.py
index fb73d4c24..8626c5bb7 100644
--- a/redbot/cogs/economy/economy.py
+++ b/redbot/cogs/economy/economy.py
@@ -467,7 +467,9 @@ class Economy(commands.Cog):
sign = " "
if i == 1:
sign = ">"
- slot += "{}{} {} {}\n".format(sign, *[c.value for c in row])
+ slot += "{}{} {} {}\n".format(
+ sign, *[c.value for c in row] # pylint: disable=no-member
+ )
payout = PAYOUTS.get(rows[1])
if not payout:
diff --git a/redbot/cogs/mod/events.py b/redbot/cogs/mod/events.py
index 24a0d2089..f39362388 100644
--- a/redbot/cogs/mod/events.py
+++ b/redbot/cogs/mod/events.py
@@ -1,13 +1,14 @@
+import logging
from datetime import datetime
from collections import defaultdict, deque
import discord
from redbot.core import i18n, modlog, commands
from redbot.core.utils.mod import is_mod_or_superior
-from . import log
from .abc import MixinMeta
_ = i18n.Translator("Mod", __file__)
+log = logging.getLogger("red.mod")
class Events(MixinMeta):
diff --git a/redbot/cogs/mod/kickban.py b/redbot/cogs/mod/kickban.py
index 883ca4fec..dc7c9e7da 100644
--- a/redbot/cogs/mod/kickban.py
+++ b/redbot/cogs/mod/kickban.py
@@ -1,5 +1,6 @@
import asyncio
import contextlib
+import logging
from collections import namedtuple
from datetime import datetime, timedelta
from typing import cast, Optional, Union
@@ -10,8 +11,8 @@ from redbot.core.utils.chat_formatting import pagify
from redbot.core.utils.mod import is_allowed_by_hierarchy, get_audit_reason
from .abc import MixinMeta
from .converters import RawUserIds
-from .log import log
+log = logging.getLogger("red.mod")
_ = i18n.Translator("Mod", __file__)
diff --git a/redbot/cogs/mod/log.py b/redbot/cogs/mod/log.py
deleted file mode 100644
index 72fe68d9d..000000000
--- a/redbot/cogs/mod/log.py
+++ /dev/null
@@ -1,4 +0,0 @@
-import logging
-
-
-log = logging.getLogger("red.mod")
diff --git a/redbot/cogs/mod/movetocore.py b/redbot/cogs/mod/movetocore.py
index 721d15c22..35fae7b1c 100644
--- a/redbot/cogs/mod/movetocore.py
+++ b/redbot/cogs/mod/movetocore.py
@@ -1,3 +1,4 @@
+import logging
import asyncio
import contextlib
@@ -5,8 +6,8 @@ import discord
from redbot.core import commands, checks, i18n
from redbot.core.utils.chat_formatting import box
from .abc import MixinMeta
-from .log import log
+log = logging.getLogger("red.mod")
_ = i18n.Translator("Mod", __file__)
diff --git a/redbot/cogs/permissions/permissions.py b/redbot/cogs/permissions/permissions.py
index 271d7b9af..6e14cb650 100644
--- a/redbot/cogs/permissions/permissions.py
+++ b/redbot/cogs/permissions/permissions.py
@@ -28,6 +28,9 @@ COG = "COG"
COMMAND = "COMMAND"
GLOBAL = 0
+_OldConfigSchema = Dict[int, Dict[str, Dict[str, Dict[str, Dict[str, List[int]]]]]]
+_NewConfigSchema = Dict[str, Dict[int, Dict[str, Dict[int, bool]]]]
+
# The strings in the schema are constants and should get extracted, but not translated until
# runtime.
translate = _
@@ -625,9 +628,6 @@ class Permissions(commands.Cog):
await self.config.custom(COMMAND).set(new_cmd_rules)
await self.config.version.set(__version__)
- _OldConfigSchema = Dict[int, Dict[str, Dict[str, Dict[str, Dict[str, List[int]]]]]]
- _NewConfigSchema = Dict[str, Dict[int, Dict[str, Dict[int, bool]]]]
-
@staticmethod
def _get_updated_schema(
old_config: _OldConfigSchema
diff --git a/redbot/cogs/streams/streamtypes.py b/redbot/cogs/streams/streamtypes.py
index d0ce0e462..6c6a6c681 100644
--- a/redbot/cogs/streams/streamtypes.py
+++ b/redbot/cogs/streams/streamtypes.py
@@ -215,7 +215,7 @@ class TwitchStream(Stream):
status = "Untitled broadcast"
if is_rerun:
status += " - Rerun"
- embed = discord.Embed(title=status, url=url)
+ embed = discord.Embed(title=status, url=url, color=0x6441A4)
embed.set_author(name=channel["display_name"])
embed.add_field(name="Followers", value=channel["followers"])
embed.add_field(name="Total views", value=channel["views"])
@@ -224,7 +224,6 @@ class TwitchStream(Stream):
embed.set_image(url=rnd(data["stream"]["preview"]["medium"]))
if channel["game"]:
embed.set_footer(text="Playing: " + channel["game"])
- embed.color = 0x6441A4
return embed
@@ -260,14 +259,13 @@ class HitboxStream(Stream):
livestream = data["livestream"][0]
channel = livestream["channel"]
url = channel["channel_link"]
- embed = discord.Embed(title=livestream["media_status"], url=url)
+ embed = discord.Embed(title=livestream["media_status"], url=url, color=0x98CB00)
embed.set_author(name=livestream["media_name"])
embed.add_field(name="Followers", value=channel["followers"])
embed.set_thumbnail(url=base_url + channel["user_logo"])
if livestream["media_thumbnail"]:
embed.set_image(url=rnd(base_url + livestream["media_thumbnail"]))
embed.set_footer(text="Playing: " + livestream["category_name"])
- embed.color = 0x98CB00
return embed
@@ -310,7 +308,7 @@ class MixerStream(Stream):
embed.set_thumbnail(url=default_avatar)
if data["thumbnail"]:
embed.set_image(url=rnd(data["thumbnail"]["url"]))
- embed.color = 0x4C90F3
+ embed.color = 0x4C90F3 # pylint: disable=assigning-non-slot
if data["type"] is not None:
embed.set_footer(text="Playing: " + data["type"]["name"])
return embed
@@ -345,13 +343,12 @@ class PicartoStream(Stream):
)
url = "https://picarto.tv/" + data["name"]
thumbnail = data["thumbnails"]["web"]
- embed = discord.Embed(title=data["title"], url=url)
+ embed = discord.Embed(title=data["title"], url=url, color=0x4C90F3)
embed.set_author(name=data["name"])
embed.set_image(url=rnd(thumbnail))
embed.add_field(name="Followers", value=data["followers"])
embed.add_field(name="Total views", value=data["viewers_total"])
embed.set_thumbnail(url=avatar)
- embed.color = 0x132332
data["tags"] = ", ".join(data["tags"])
if not data["tags"]:
@@ -362,6 +359,5 @@ class PicartoStream(Stream):
else:
data["adult"] = ""
- embed.color = 0x4C90F3
embed.set_footer(text="{adult}Category: {category} | Tags: {tags}".format(**data))
return embed
diff --git a/redbot/core/bot.py b/redbot/core/bot.py
index 3db1380ea..1c3505d59 100644
--- a/redbot/core/bot.py
+++ b/redbot/core/bot.py
@@ -27,7 +27,8 @@ def _is_submodule(parent, child):
return parent == child or child.startswith(parent + ".")
-class RedBase(commands.GroupMixin, commands.bot.BotBase, RPCMixin):
+# barely spurious warning caused by our intentional shadowing
+class RedBase(commands.GroupMixin, commands.bot.BotBase, RPCMixin): # pylint: disable=no-member
"""Mixin for the main bot class.
This exists because `Red` inherits from `discord.AutoShardedClient`, which
diff --git a/redbot/core/commands/requires.py b/redbot/core/commands/requires.py
index d2798ccee..668c071f3 100644
--- a/redbot/core/commands/requires.py
+++ b/redbot/core/commands/requires.py
@@ -704,29 +704,35 @@ def mod():
class _IntKeyDict(Dict[int, _T]):
"""Dict subclass which throws KeyError when a non-int key is used."""
+ get: Callable
+ setdefault: Callable
+
def __getitem__(self, key: Any) -> _T:
if not isinstance(key, int):
raise TypeError("Keys must be of type `int`")
- return super().__getitem__(key)
+ return super().__getitem__(key) # pylint: disable=no-member
def __setitem__(self, key: Any, value: _T) -> None:
if not isinstance(key, int):
raise TypeError("Keys must be of type `int`")
- return super().__setitem__(key, value)
+ return super().__setitem__(key, value) # pylint: disable=no-member
class _RulesDict(Dict[Union[int, str], PermState]):
"""Dict subclass which throws a KeyError when an invalid key is used."""
+ get: Callable
+ setdefault: Callable
+
def __getitem__(self, key: Any) -> PermState:
if key != Requires.DEFAULT and not isinstance(key, int):
raise TypeError(f'Expected "{Requires.DEFAULT}" or int key, not "{key}"')
- return super().__getitem__(key)
+ return super().__getitem__(key) # pylint: disable=no-member
def __setitem__(self, key: Any, value: PermState) -> None:
if key != Requires.DEFAULT and not isinstance(key, int):
raise TypeError(f'Expected "{Requires.DEFAULT}" or int key, not "{key}"')
- return super().__setitem__(key, value)
+ return super().__setitem__(key, value) # pylint: disable=no-member
def _validate_perms_dict(perms: Dict[str, bool]) -> None:
diff --git a/redbot/core/config.py b/redbot/core/config.py
index 30bf50252..43f49a377 100644
--- a/redbot/core/config.py
+++ b/redbot/core/config.py
@@ -30,7 +30,7 @@ def get_latest_confs() -> Tuple["Config"]:
return tuple(ret)
-class _ValueCtxManager(Awaitable[_T], AsyncContextManager[_T]):
+class _ValueCtxManager(Awaitable[_T], AsyncContextManager[_T]): # pylint: disable=duplicate-bases
"""Context manager implementation of config values.
This class allows mutable config values to be both "get" and "set" from
@@ -1135,7 +1135,8 @@ class Config:
)
group = Group(identifier_data, defaults={}, driver=self.driver)
else:
- group = self._get_base_group(*scopes)
+ cat, *scopes = scopes
+ group = self._get_base_group(cat, *scopes)
await group.clear()
async def clear_all(self):
diff --git a/redbot/core/core_commands.py b/redbot/core/core_commands.py
index 6221e5dde..38262fe99 100644
--- a/redbot/core/core_commands.py
+++ b/redbot/core/core_commands.py
@@ -963,13 +963,13 @@ class Core(commands.Cog, CoreLogic):
"message", check=MessagePredicate.same_context(ctx), timeout=60
)
except asyncio.TimeoutError:
- self.owner.reset_cooldown(ctx)
+ ctx.command.reset_cooldown(ctx)
await ctx.send(
_("The `{prefix}set owner` request has timed out.").format(prefix=ctx.prefix)
)
else:
if message.content.strip() == token:
- self.owner.reset_cooldown(ctx)
+ ctx.command.reset_cooldown(ctx)
await ctx.bot.db.owner.set(ctx.author.id)
ctx.bot.owner_id = ctx.author.id
await ctx.send(_("You have been set as owner."))
diff --git a/redbot/core/data_manager.py b/redbot/core/data_manager.py
index cc2bd3263..0e0b58fdb 100644
--- a/redbot/core/data_manager.py
+++ b/redbot/core/data_manager.py
@@ -35,7 +35,7 @@ basic_config_default = {"DATA_PATH": None, "COG_PATH_APPEND": "cogs", "CORE_PATH
config_dir = None
appdir = appdirs.AppDirs("Red-DiscordBot")
if sys.platform == "linux":
- if 0 < os.getuid() < 1000:
+ if 0 < os.getuid() < 1000: # pylint: disable=no-member
config_dir = Path(appdir.site_data_dir)
if not config_dir:
config_dir = Path(appdir.user_config_dir)
diff --git a/redbot/core/json_io.py b/redbot/core/json_io.py
index 08cf5c4d5..d209a1ad9 100644
--- a/redbot/core/json_io.py
+++ b/redbot/core/json_io.py
@@ -57,7 +57,7 @@ class JsonIO:
tmp_path.replace(self.path)
- # pylint: disable=E1101
+ # pylint: disable=no-member
try:
fd = os.open(self.path.parent, os.O_DIRECTORY)
os.fsync(fd)
diff --git a/redbot/core/utils/__init__.py b/redbot/core/utils/__init__.py
index eee5448f4..dc4d2fa8a 100644
--- a/redbot/core/utils/__init__.py
+++ b/redbot/core/utils/__init__.py
@@ -69,7 +69,8 @@ def safe_delete(pth: Path):
shutil.rmtree(str(pth), ignore_errors=True)
-class AsyncFilter(AsyncIterator[_T], Awaitable[List[_T]]):
+# https://github.com/PyCQA/pylint/issues/2717
+class AsyncFilter(AsyncIterator[_T], Awaitable[List[_T]]): # pylint: disable=duplicate-bases
"""Class returned by `async_filter`. See that function for details.
We don't recommend instantiating this class directly.
@@ -112,6 +113,9 @@ class AsyncFilter(AsyncIterator[_T], Awaitable[List[_T]]):
async def __flatten(self) -> List[_T]:
return [item async for item in self]
+ def __aiter__(self):
+ return self
+
def __await__(self):
# Simply return the generator filled into a list
return self.__flatten().__await__()
diff --git a/redbot/setup.py b/redbot/setup.py
index 3814e8b5d..61a3b834d 100644
--- a/redbot/setup.py
+++ b/redbot/setup.py
@@ -34,7 +34,7 @@ conversion_log = logging.getLogger("red.converter")
config_dir = None
appdir = appdirs.AppDirs("Red-DiscordBot")
if sys.platform == "linux":
- if 0 < os.getuid() < 1000:
+ if 0 < os.getuid() < 1000: # pylint: disable=no-member # Non-exist on win
config_dir = Path(appdir.site_data_dir)
if not config_dir:
config_dir = Path(appdir.user_config_dir)
@@ -524,7 +524,7 @@ def convert(instance, backend):
if __name__ == "__main__":
try:
- cli()
+ cli() # pylint: disable=no-value-for-parameter # click
except KeyboardInterrupt:
print("Exiting...")
else:
diff --git a/setup.cfg b/setup.cfg
index a65267f9b..3f6ceff49 100644
--- a/setup.cfg
+++ b/setup.cfg
@@ -84,6 +84,7 @@ test =
pytest==4.2.0
pytest-asyncio==0.10.0
six==1.12.0
+ pylint==2.3.1
[options.entry_points]
console_scripts =
diff --git a/tox.ini b/tox.ini
index 0d429449a..c61cb7091 100644
--- a/tox.ini
+++ b/tox.ini
@@ -11,13 +11,15 @@ envlist =
skip_missing_interpreters = True
[testenv]
-description = Run unit tests with pytest
+description = Run tests and basic automatic issue checking.
whitelist_externals =
pytest
+ pylint
extras = voice, test, mongo
commands =
python -m compileall ./redbot/cogs
pytest
+ pylint ./redbot
[testenv:docs]
description = Attempt to build docs with sphinx-build
From c2195ec576ba3bcbcc6b6a978ddc3600820b3651 Mon Sep 17 00:00:00 2001
From: aikaterna <20862007+aikaterna@users.noreply.github.com>
Date: Sun, 2 Jun 2019 15:55:44 -0700
Subject: [PATCH 026/183] [Audio] Add bot permission checks (#2756)
---
redbot/cogs/audio/audio.py | 24 ++++++++++++++++++++++++
1 file changed, 24 insertions(+)
diff --git a/redbot/cogs/audio/audio.py b/redbot/cogs/audio/audio.py
index 3c61993b3..f221debd1 100644
--- a/redbot/cogs/audio/audio.py
+++ b/redbot/cogs/audio/audio.py
@@ -304,6 +304,7 @@ class Audio(commands.Cog):
@commands.group()
@commands.guild_only()
+ @commands.bot_has_permissions(embed_links=True)
async def audioset(self, ctx):
"""Music configuration options."""
pass
@@ -666,6 +667,7 @@ class Audio(commands.Cog):
@commands.command()
@commands.guild_only()
+ @commands.bot_has_permissions(embed_links=True, add_reactions=True)
async def audiostats(self, ctx):
"""Audio stats."""
server_num = len(lavalink.active_players())
@@ -718,6 +720,7 @@ class Audio(commands.Cog):
@commands.command()
@commands.guild_only()
+ @commands.bot_has_permissions(embed_links=True)
async def bump(self, ctx, index: int):
"""Bump a track number to the top of the queue."""
dj_enabled = await self.config.guild(ctx.guild).dj_enabled()
@@ -755,6 +758,7 @@ class Audio(commands.Cog):
@commands.command()
@commands.guild_only()
+ @commands.bot_has_permissions(embed_links=True)
async def disconnect(self, ctx):
"""Disconnect from the voice channel."""
dj_enabled = await self.config.guild(ctx.guild).dj_enabled()
@@ -773,6 +777,7 @@ class Audio(commands.Cog):
@commands.group()
@commands.guild_only()
+ @commands.bot_has_permissions(embed_links=True, add_reactions=True)
async def local(self, ctx):
"""Local playback commands."""
pass
@@ -947,6 +952,7 @@ class Audio(commands.Cog):
@commands.command()
@commands.guild_only()
+ @commands.bot_has_permissions(embed_links=True, add_reactions=True)
async def now(self, ctx):
"""Now playing."""
if not self._player_check(ctx):
@@ -1036,6 +1042,7 @@ class Audio(commands.Cog):
@commands.command()
@commands.guild_only()
+ @commands.bot_has_permissions(embed_links=True)
async def pause(self, ctx):
"""Pause or resume a playing track."""
dj_enabled = await self.config.guild(ctx.guild).dj_enabled()
@@ -1084,6 +1091,7 @@ class Audio(commands.Cog):
@commands.command()
@commands.guild_only()
+ @commands.bot_has_permissions(embed_links=True)
async def percent(self, ctx):
"""Queue percentage."""
if not self._player_check(ctx):
@@ -1140,6 +1148,7 @@ class Audio(commands.Cog):
@commands.command()
@commands.guild_only()
+ @commands.bot_has_permissions(embed_links=True)
async def play(self, ctx, *, query):
"""Play a URL or search for a track."""
@@ -1520,6 +1529,7 @@ class Audio(commands.Cog):
@commands.group()
@commands.guild_only()
+ @commands.bot_has_permissions(embed_links=True)
async def playlist(self, ctx):
"""Playlist configuration options."""
pass
@@ -1687,6 +1697,7 @@ class Audio(commands.Cog):
@checks.is_owner()
@playlist.command(name="download")
+ @commands.bot_has_permissions(attach_files=True)
async def _playlist_download(self, ctx, playlist_name, v2=False):
"""Download a copy of a playlist.
@@ -1773,6 +1784,7 @@ class Audio(commands.Cog):
await menu(ctx, page_list, DEFAULT_CONTROLS)
@playlist.command(name="list")
+ @commands.bot_has_permissions(add_reactions=True)
async def _playlist_list(self, ctx):
"""List saved playlists."""
playlists = await self.config.guild(ctx.guild).playlists.get_raw()
@@ -2163,6 +2175,7 @@ class Audio(commands.Cog):
@commands.command()
@commands.guild_only()
+ @commands.bot_has_permissions(embed_links=True)
async def prev(self, ctx):
"""Skip to the start of the previously played track."""
if not self._player_check(ctx):
@@ -2208,6 +2221,7 @@ class Audio(commands.Cog):
@commands.group(invoke_without_command=True)
@commands.guild_only()
+ @commands.bot_has_permissions(embed_links=True, add_reactions=True)
async def queue(self, ctx, *, page="1"):
"""List the queue.
@@ -2447,6 +2461,7 @@ class Audio(commands.Cog):
@commands.command()
@commands.guild_only()
+ @commands.bot_has_permissions(embed_links=True)
async def repeat(self, ctx):
"""Toggle repeat."""
dj_enabled = await self.config.guild(ctx.guild).dj_enabled()
@@ -2473,6 +2488,7 @@ class Audio(commands.Cog):
@commands.command()
@commands.guild_only()
+ @commands.bot_has_permissions(embed_links=True)
async def remove(self, ctx, index: int):
"""Remove a specific track number from the queue."""
dj_enabled = await self.config.guild(ctx.guild).dj_enabled()
@@ -2509,6 +2525,7 @@ class Audio(commands.Cog):
@commands.command()
@commands.guild_only()
+ @commands.bot_has_permissions(embed_links=True, add_reactions=True)
async def search(self, ctx, *, query):
"""Pick a track with a search.
@@ -2795,6 +2812,7 @@ class Audio(commands.Cog):
@commands.command()
@commands.guild_only()
+ @commands.bot_has_permissions(embed_links=True)
async def seek(self, ctx, seconds):
"""Seek ahead or behind on a track by seconds or a to a specific time.
@@ -2860,6 +2878,7 @@ class Audio(commands.Cog):
@commands.command()
@commands.guild_only()
+ @commands.bot_has_permissions(embed_links=True)
async def shuffle(self, ctx):
"""Toggle shuffle."""
dj_enabled = await self.config.guild(ctx.guild).dj_enabled()
@@ -2884,6 +2903,7 @@ class Audio(commands.Cog):
@commands.command()
@commands.guild_only()
+ @commands.bot_has_permissions(embed_links=True)
async def sing(self, ctx):
"""Make Red sing one of her songs"""
ids = (
@@ -2899,6 +2919,7 @@ class Audio(commands.Cog):
@commands.command()
@commands.guild_only()
+ @commands.bot_has_permissions(embed_links=True)
async def skip(self, ctx, skip_to_track: int = None):
"""Skip to the next track, or to a given track number."""
if not self._player_check(ctx):
@@ -3093,6 +3114,7 @@ class Audio(commands.Cog):
@commands.command()
@commands.guild_only()
+ @commands.bot_has_permissions(embed_links=True)
async def stop(self, ctx):
"""Stop playback and clear the queue."""
dj_enabled = await self.config.guild(ctx.guild).dj_enabled()
@@ -3126,6 +3148,7 @@ class Audio(commands.Cog):
@commands.command()
@commands.guild_only()
+ @commands.bot_has_permissions(embed_links=True)
async def volume(self, ctx, vol: int = None):
"""Set the volume, 1% - 150%."""
dj_enabled = await self.config.guild(ctx.guild).dj_enabled()
@@ -3172,6 +3195,7 @@ class Audio(commands.Cog):
@commands.group(aliases=["llset"])
@commands.guild_only()
+ @commands.bot_has_permissions(embed_links=True)
@checks.is_owner()
async def llsetup(self, ctx):
"""Lavalink server configuration options."""
From da405113061b2bf9f8c5d09fe18d66a4b2da0347 Mon Sep 17 00:00:00 2001
From: aikaterna <20862007+aikaterna@users.noreply.github.com>
Date: Sun, 2 Jun 2019 15:56:41 -0700
Subject: [PATCH 027/183] [Audio] Remove blacklisted architectures (#2755)
---
redbot/cogs/audio/manager.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/redbot/cogs/audio/manager.py b/redbot/cogs/audio/manager.py
index c1512513c..c5e7ba886 100644
--- a/redbot/cogs/audio/manager.py
+++ b/redbot/cogs/audio/manager.py
@@ -37,7 +37,7 @@ class ServerManager:
_java_version: ClassVar[Optional[Tuple[int, int]]] = None
_up_to_date: ClassVar[Optional[bool]] = None
- _blacklisted_archs = ["armv6l", "aarch32", "aarch64"]
+ _blacklisted_archs = []
def __init__(self) -> None:
self.ready = asyncio.Event()
From 463d8d63067b19b2a5d33143b5f68df3052e3a2b Mon Sep 17 00:00:00 2001
From: DevilXD
Date: Mon, 3 Jun 2019 13:46:55 +0200
Subject: [PATCH 028/183] [Commands] Added optional default_unit to the
TimedeltaConverter (#2753)
* Added default_unit to the TimedeltaConverter
* Fixed a possible converter crash
* Updated get_timedelta_converter to incorporate the new kwarg
---
redbot/core/commands/converter.py | 33 +++++++++++++++++++++++--------
1 file changed, 25 insertions(+), 8 deletions(-)
diff --git a/redbot/core/commands/converter.py b/redbot/core/commands/converter.py
index 3c915f611..26cd67fa1 100644
--- a/redbot/core/commands/converter.py
+++ b/redbot/core/commands/converter.py
@@ -94,13 +94,13 @@ def parse_timedelta(
if maximum and maximum < delta:
raise BadArgument(
_(
- "This amount of time is too large for this command. (maximum: {maximum})"
+ "This amount of time is too large for this command. (Maximum: {maximum})"
).format(maximum=humanize_timedelta(timedelta=maximum))
)
if minimum and delta < minimum:
raise BadArgument(
_(
- "This amount of time is too small for this command. (minimum: {minimum})"
+ "This amount of time is too small for this command. (Minimum: {minimum})"
).format(minimum=humanize_timedelta(timedelta=minimum))
)
return delta
@@ -224,18 +224,29 @@ class TimedeltaConverter(dpy_commands.Converter):
allowed_units : Optional[List[str]]
If provided, you can constrain a user to expressing the amount of time
in specific units. The units you can chose to provide are the same as the
- parser understands. `weeks` `days` `hours` `minutes` `seconds`
+ parser understands: `weeks` `days` `hours` `minutes` `seconds`
+ default_unit : Optional[str]
+ If provided, it will additionally try to match integer-only input into
+ a timedelta, using the unit specified. Same units as in `allowed_units`
+ apply.
"""
- def __init__(self, *, minimum=None, maximum=None, allowed_units=None):
+ def __init__(self, *, minimum=None, maximum=None, allowed_units=None, default_unit=None):
self.allowed_units = allowed_units
+ self.default_unit = default_unit
self.minimum = minimum
self.maximum = maximum
async def convert(self, ctx: "Context", argument: str) -> timedelta:
- delta = parse_timedelta(
- argument, minimum=self.minimum, maximum=self.maximum, allowed_units=self.allowed_units
- )
+ if self.default_unit and argument.isdecimal():
+ delta = timedelta(**{self.default_unit: int(argument)})
+ else:
+ delta = parse_timedelta(
+ argument,
+ minimum=self.minimum,
+ maximum=self.maximum,
+ allowed_units=self.allowed_units,
+ )
if delta is not None:
return delta
raise BadArgument() # This allows this to be a required argument.
@@ -243,6 +254,7 @@ class TimedeltaConverter(dpy_commands.Converter):
def get_timedelta_converter(
*,
+ default_unit: Optional[str] = None,
maximum: Optional[timedelta] = None,
minimum: Optional[timedelta] = None,
allowed_units: Optional[List[str]] = None,
@@ -262,7 +274,11 @@ def get_timedelta_converter(
allowed_units : Optional[List[str]]
If provided, you can constrain a user to expressing the amount of time
in specific units. The units you can chose to provide are the same as the
- parser understands. `weeks` `days` `hours` `minutes` `seconds`
+ parser understands: `weeks` `days` `hours` `minutes` `seconds`
+ default_unit : Optional[str]
+ If provided, it will additionally try to match integer-only input into
+ a timedelta, using the unit specified. Same units as in `allowed_units`
+ apply.
Returns
-------
@@ -274,6 +290,7 @@ def get_timedelta_converter(
__call__ = functools.partialmethod(
type(DictConverter).__call__,
allowed_units=allowed_units,
+ default_unit=default_unit,
minimum=minimum,
maximum=maximum,
)
From 61b5730c48ece2352b81fe59aec1b1ea64f9bcd2 Mon Sep 17 00:00:00 2001
From: El Laggron
Date: Mon, 3 Jun 2019 17:46:13 +0200
Subject: [PATCH 029/183] [V3 Core] More features for the bot invite URL
(#1847)
* Add inviteset group command
* Fix errors
* Fix line break
* Remove user bot support
* Fix docstrings line breaks
* Remove embed specific formatting
* Remove invite redirect
* Add self argument to _can_get_invite_url
* Remove unused import
* fix errors related to classes + double help
* Removed self bot support
---
redbot/core/bot.py | 2 ++
redbot/core/core_commands.py | 68 ++++++++++++++++++++++++++++++++++--
2 files changed, 67 insertions(+), 3 deletions(-)
diff --git a/redbot/core/bot.py b/redbot/core/bot.py
index 1c3505d59..531e48d22 100644
--- a/redbot/core/bot.py
+++ b/redbot/core/bot.py
@@ -60,6 +60,8 @@ class RedBase(commands.GroupMixin, commands.bot.BotBase, RPCMixin): # pylint: d
help__verify_checks=True,
help__verify_exists=False,
help__tagline="",
+ invite_public=False,
+ invite_perm=0,
disabled_commands=[],
disabled_command_msg="That command is disabled.",
api_tokens={},
diff --git a/redbot/core/core_commands.py b/redbot/core/core_commands.py
index 38262fe99..1657f219e 100644
--- a/redbot/core/core_commands.py
+++ b/redbot/core/core_commands.py
@@ -265,7 +265,15 @@ class CoreLogic:
Invite URL.
"""
app_info = await self.bot.application_info()
- return discord.utils.oauth_url(app_info.id)
+ perms_int = await self.bot.db.invite_perm()
+ permissions = discord.Permissions(perms_int)
+ return discord.utils.oauth_url(app_info.id, permissions)
+
+ @staticmethod
+ async def _can_get_invite_url(ctx):
+ is_owner = await ctx.bot.is_owner(ctx.author)
+ is_invite_public = await ctx.bot.db.invite_public()
+ return is_owner or is_invite_public
@i18n.cog_i18n(_)
@@ -441,11 +449,65 @@ class Core(commands.Cog, CoreLogic):
await ctx.send(_("No exception has occurred yet"))
@commands.command()
- @checks.is_owner()
- async def invite(self, ctx: commands.Context):
+ @commands.check(CoreLogic._can_get_invite_url)
+ async def invite(self, ctx):
"""Show's Red's invite url"""
await ctx.author.send(await self._invite_url())
+ @commands.group()
+ @checks.is_owner()
+ async def inviteset(self, ctx):
+ """Setup the bot's invite"""
+ pass
+
+ @inviteset.command()
+ async def public(self, ctx, confirm: bool = False):
+ """
+ Define if the command should be accessible\
+ for the average users.
+ """
+ if await self.bot.db.invite_public():
+ await self.bot.db.invite_public.set(False)
+ await ctx.send("The invite is now private.")
+ return
+ app_info = await self.bot.application_info()
+ if not app_info.bot_public:
+ await ctx.send(
+ "I am not a public bot. That means that nobody except "
+ "you can invite me on new servers.\n\n"
+ "You can change this by ticking `Public bot` in "
+ "your token settings: "
+ "https://discordapp.com/developers/applications/me/{0}".format(self.bot.user.id)
+ )
+ return
+ if not confirm:
+ await ctx.send(
+ "You're about to make the `{0}invite` command public. "
+ "All users will be able to invite me on their server.\n\n"
+ "If you agree, you can type `{0}inviteset public yes`.".format(ctx.prefix)
+ )
+ else:
+ await self.bot.db.invite_public.set(True)
+ await ctx.send("The invite command is now public.")
+
+ @inviteset.command()
+ async def perms(self, ctx, level: int):
+ """
+ Make the bot create its own role with permissions on join.
+
+ The bot will create its own role with the desired permissions\
+ when he join a new server. This is a special role that can't be\
+ deleted or removed from the bot.
+
+ For that, you need to give a valid permissions level.
+ You can generate one here: https://discordapi.com/permissions.html
+
+ Please note that you might need the two factor authentification for\
+ some permissions.
+ """
+ await self.bot.db.invite_perm.set(level)
+ await ctx.send("The new permissions level has been set.")
+
@commands.command()
@commands.guild_only()
@checks.is_owner()
From 682ee1a459aa8eb21dd256508c7f262c12cbaf65 Mon Sep 17 00:00:00 2001
From: Michael H
Date: Tue, 4 Jun 2019 14:21:30 -0400
Subject: [PATCH 030/183] [Docs] Fixes the docs for `commands.Command.error`
(#2760)
* docfix
* inline code for sphinx, not a ref
---
redbot/core/commands/commands.py | 10 +++++++---
1 file changed, 7 insertions(+), 3 deletions(-)
diff --git a/redbot/core/commands/commands.py b/redbot/core/commands/commands.py
index 17cc4b0a0..e4a2cd2d6 100644
--- a/redbot/core/commands/commands.py
+++ b/redbot/core/commands/commands.py
@@ -420,6 +420,10 @@ class Command(CogCommandMixin, commands.Command):
To have red handle specific errors with the default behavior,
call ``Red.on_command_error`` with ``unhandled_by_cog`` set to True.
+ Due to how discord.py wraps exceptions, the exception you are expecting here
+ is likely in ``error.original`` despite that the normal event handler for bot
+ wide command error handling has no such wrapping.
+
For example:
.. code-block:: python
@@ -427,10 +431,10 @@ class Command(CogCommandMixin, commands.Command):
@a_command.error
async def a_command_error_handler(self, ctx, error):
- if isisntance(error, MyErrrorType):
- self.log_exception(error)
+ if isinstance(error.original, MyErrrorType):
+ self.log_exception(error.original)
else:
- await ctx.bot.on_command_error(ctx, error, unhandled_by_cog=True)
+ await ctx.bot.on_command_error(ctx, error.original, unhandled_by_cog=True)
Parameters
-----------
From d133598d80a6ba5f41505e946d81bb0ad41823e1 Mon Sep 17 00:00:00 2001
From: Toby Harradine
Date: Sun, 9 Jun 2019 16:04:13 +1000
Subject: [PATCH 031/183] [Audio] Fix OSErrors on mixed-filesystem environments
(#2765)
Resolves the issue outlined [here](https://github.com/Cog-Creators/Red-DiscordBot/issues/2682#issuecomment-500185495).
Signed-off-by: Toby Harradine
---
redbot/cogs/audio/manager.py | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/redbot/cogs/audio/manager.py b/redbot/cogs/audio/manager.py
index c5e7ba886..3c9b7a501 100644
--- a/redbot/cogs/audio/manager.py
+++ b/redbot/cogs/audio/manager.py
@@ -213,7 +213,8 @@ class ServerManager:
file.flush()
finally:
file.close()
- pathlib.Path(path).replace(LAVALINK_JAR_FILE)
+
+ shutil.move(path, str(LAVALINK_JAR_FILE), copy_function=shutil.copyfile)
@classmethod
async def _is_up_to_date(cls):
From cc927248f00028865b59858e503d140621b70f03 Mon Sep 17 00:00:00 2001
From: Toby Harradine
Date: Thu, 13 Jun 2019 08:27:47 +1000
Subject: [PATCH 032/183] Revert custom `Bot.process_commands` behaviour
(#2768)
This still preserves the new event, which was a welcome change. However, context still needs to be invoked when a command isn't found, so `on_command_error` can still catch `commands.CommandNotFound`.
Fixes broken fuzzy help.
Signed-off-by: Toby Harradine
---
redbot/core/bot.py | 17 +++++++++--------
1 file changed, 9 insertions(+), 8 deletions(-)
diff --git a/redbot/core/bot.py b/redbot/core/bot.py
index 531e48d22..a0d8cc586 100644
--- a/redbot/core/bot.py
+++ b/redbot/core/bot.py
@@ -215,18 +215,19 @@ class RedBase(commands.GroupMixin, commands.bot.BotBase, RPCMixin): # pylint: d
async def process_commands(self, message: discord.Message):
"""
- modification from the base to do the same thing in the command case
-
- but dispatch an additional event for cogs which want to handle normal messages
- differently to command messages,
- without the overhead of additional get_context calls per cog
+ Same as base method, but dispatches an additional event for cogs
+ which want to handle normal messages differently to command
+ messages, without the overhead of additional get_context calls
+ per cog.
"""
if not message.author.bot:
ctx = await self.get_context(message)
- if ctx.valid:
- return await self.invoke(ctx)
+ await self.invoke(ctx)
+ else:
+ ctx = None
- self.dispatch("message_without_command", message)
+ if ctx is None or ctx.valid is False:
+ self.dispatch("message_without_command", message)
@staticmethod
def list_packages():
From 804d6eecea5682de2c15cde257f17a197aba958d Mon Sep 17 00:00:00 2001
From: DiscordLiz <47602820+DiscordLiz@users.noreply.github.com>
Date: Tue, 18 Jun 2019 21:25:49 -0400
Subject: [PATCH 033/183] [Core] Fix DictConverterer error handling format
(#2776)
---
redbot/core/commands/converter.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/redbot/core/commands/converter.py b/redbot/core/commands/converter.py
index 26cd67fa1..bb5ce669d 100644
--- a/redbot/core/commands/converter.py
+++ b/redbot/core/commands/converter.py
@@ -184,7 +184,7 @@ class DictConverter(dpy_commands.Converter):
for key in iterator:
if self.expected_keys and key not in self.expected_keys:
- raise BadArgument(_("Unexpected key {key}").format(key))
+ raise BadArgument(_("Unexpected key {key}").format(key=key))
ret[key] = next(iterator)
From 9d008d587a95c36921d16f2f9b7eac98bacc0896 Mon Sep 17 00:00:00 2001
From: Neuro Assassin <42872277+NeuroAssassin@users.noreply.github.com>
Date: Tue, 18 Jun 2019 21:35:56 -0400
Subject: [PATCH 034/183] [V3 Core] Add checks to [p]command (#2770)
* Add checks to [p]command
* Change to privilege level
---
redbot/core/core_commands.py | 22 ++++++++++++++++++++++
1 file changed, 22 insertions(+)
diff --git a/redbot/core/core_commands.py b/redbot/core/core_commands.py
index 1657f219e..bdbaf2f08 100644
--- a/redbot/core/core_commands.py
+++ b/redbot/core/core_commands.py
@@ -35,6 +35,8 @@ from redbot.core import (
from .utils.predicates import MessagePredicate
from .utils.chat_formatting import humanize_timedelta, pagify, box, inline
+from .commands.requires import PrivilegeLevel
+
if TYPE_CHECKING:
from redbot.core.bot import Red
@@ -1912,6 +1914,12 @@ class Core(commands.Cog, CoreLogic):
)
return
+ if self.command_manager in command_obj.parents or self.command_manager == command_obj:
+ await ctx.send(
+ _("The command to disable cannot be `command` or any of its subcommands.")
+ )
+ return
+
async with ctx.bot.db.disabled_commands() as disabled_commands:
if command not in disabled_commands:
disabled_commands.append(command_obj.qualified_name)
@@ -1934,6 +1942,16 @@ class Core(commands.Cog, CoreLogic):
)
return
+ if self.command_manager in command_obj.parents or self.command_manager == command_obj:
+ await ctx.send(
+ _("The command to disable cannot be `command` or any of its subcommands.")
+ )
+ return
+
+ if command_obj.requires.privilege_level > await PrivilegeLevel.from_ctx(ctx):
+ await ctx.send(_("You are not allowed to disable that command."))
+ return
+
async with ctx.bot.db.guild(ctx.guild).disabled_commands() as disabled_commands:
if command not in disabled_commands:
disabled_commands.append(command_obj.qualified_name)
@@ -1990,6 +2008,10 @@ class Core(commands.Cog, CoreLogic):
)
return
+ if command_obj.requires.privilege_level > await PrivilegeLevel.from_ctx(ctx):
+ await ctx.send(_("You are not allowed to enable that command."))
+ return
+
async with ctx.bot.db.guild(ctx.guild).disabled_commands() as disabled_commands:
with contextlib.suppress(ValueError):
disabled_commands.remove(command_obj.qualified_name)
From 57d5c0870a2c704c8225af6c901bcda58c9a30bb Mon Sep 17 00:00:00 2001
From: jack1142 <6032823+jack1142@users.noreply.github.com>
Date: Wed, 19 Jun 2019 14:40:25 +0200
Subject: [PATCH 035/183] style(modlog): Phrase information about `reason`
command better (#2777)
---
redbot/core/modlog.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/redbot/core/modlog.py b/redbot/core/modlog.py
index 2c42007fc..9b95e2abe 100644
--- a/redbot/core/modlog.py
+++ b/redbot/core/modlog.py
@@ -116,7 +116,7 @@ class Case:
if self.reason:
reason = "**Reason:** {}".format(self.reason)
else:
- reason = "**Reason:** Use `[p]reason {} ` to add it".format(self.case_number)
+ reason = "**Reason:** Use the `reason` command to add it"
if self.moderator is not None:
moderator = escape_spoilers(
From beb16b81a93926ba152ba11fac4da34a3e7a2f61 Mon Sep 17 00:00:00 2001
From: jack1142 <6032823+jack1142@users.noreply.github.com>
Date: Sat, 22 Jun 2019 03:24:24 +0200
Subject: [PATCH 036/183] docs(config): wrong code example in `Value.__call__`
(#2780)
fix #2775
---
redbot/core/config.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/redbot/core/config.py b/redbot/core/config.py
index 43f49a377..7abf8957e 100644
--- a/redbot/core/config.py
+++ b/redbot/core/config.py
@@ -119,7 +119,7 @@ class Value:
# Is equivalent to this
group_obj = conf.guild(some_guild)
- value_obj = conf.foo
+ value_obj = group_obj.foo
foo = await value_obj()
.. important::
From e854716236e063588083f263f6ab50b472e6cb72 Mon Sep 17 00:00:00 2001
From: aikaterna <20862007+aikaterna@users.noreply.github.com>
Date: Fri, 21 Jun 2019 19:19:57 -0700
Subject: [PATCH 037/183] [Audio] Fix for escape character prefixes (#2789)
---
redbot/cogs/audio/audio.py | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/redbot/cogs/audio/audio.py b/redbot/cogs/audio/audio.py
index f221debd1..828d069a0 100644
--- a/redbot/cogs/audio/audio.py
+++ b/redbot/cogs/audio/audio.py
@@ -1630,7 +1630,7 @@ class Audio(commands.Cog):
playlist_name_msg = await ctx.bot.wait_for(
"message",
timeout=15.0,
- check=MessagePredicate.regex(fr"^(?!{ctx.prefix})", ctx),
+ check=MessagePredicate.regex(fr"^(?!{re.escape(ctx.prefix)})", ctx),
)
new_playlist_name = playlist_name_msg.content.split(" ")[0].strip('"')
if len(new_playlist_name) > 20:
@@ -1868,7 +1868,7 @@ class Audio(commands.Cog):
playlist_name_msg = await ctx.bot.wait_for(
"message",
timeout=15.0,
- check=MessagePredicate.regex(fr"^(?!{ctx.prefix})", ctx),
+ check=MessagePredicate.regex(fr"^(?!{re.escape(ctx.prefix)})", ctx),
)
playlist_name = playlist_name_msg.content.split(" ")[0].strip('"')
if len(playlist_name) > 20:
From 3c66c602f6a92e74ec214fbedaf0a500d6009ce9 Mon Sep 17 00:00:00 2001
From: MeatyChunks <6160351+MeatyChunks@users.noreply.github.com>
Date: Sat, 22 Jun 2019 06:41:11 +0100
Subject: [PATCH 038/183] [Help] Prevent spamming when a user blocks the bot
(#2790)
Currently the bot sends an error message for each page of help, this should make it only send once.
---
redbot/core/commands/help.py | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/redbot/core/commands/help.py b/redbot/core/commands/help.py
index bff76c292..615cd8e03 100644
--- a/redbot/core/commands/help.py
+++ b/redbot/core/commands/help.py
@@ -538,7 +538,7 @@ class RedHelpFormatter:
try:
await destination.send(embed=page)
except discord.Forbidden:
- await ctx.send(
+ return await ctx.send(
T_(
"I couldn't send the help message to you in DM. "
"Either you blocked me or you disabled DMs in this server."
@@ -549,7 +549,7 @@ class RedHelpFormatter:
try:
await destination.send(page)
except discord.Forbidden:
- await ctx.send(
+ return await ctx.send(
T_(
"I couldn't send the help message to you in DM. "
"Either you blocked me or you disabled DMs in this server."
From 0bf54fae520fbf083d19c64f067787e986ec087e Mon Sep 17 00:00:00 2001
From: jack1142 <6032823+jack1142@users.noreply.github.com>
Date: Sun, 23 Jun 2019 05:33:27 +0200
Subject: [PATCH 039/183] [Admin] Convert set to list because set is not JSON
serializable (#2792)
---
redbot/cogs/admin/admin.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/redbot/cogs/admin/admin.py b/redbot/cogs/admin/admin.py
index 4bbc28557..1330fb4fe 100644
--- a/redbot/cogs/admin/admin.py
+++ b/redbot/cogs/admin/admin.py
@@ -315,7 +315,7 @@ class Admin(commands.Cog):
valid_role_ids = set(r.id for r in valid_roles)
if selfrole_ids != valid_role_ids:
- await self.conf.guild(guild).selfroles.set(valid_role_ids)
+ await self.conf.guild(guild).selfroles.set(list(valid_role_ids))
# noinspection PyTypeChecker
return valid_roles
From ff894ecbe732150326c86a1f289518831b78b142 Mon Sep 17 00:00:00 2001
From: DevilXD
Date: Sun, 23 Jun 2019 05:55:48 +0200
Subject: [PATCH 040/183] [Docs] Add warning about PATH on Windows (#2791)
---
docs/install_windows.rst | 9 ++++++---
1 file changed, 6 insertions(+), 3 deletions(-)
diff --git a/docs/install_windows.rst b/docs/install_windows.rst
index d913cdb48..f36753f70 100644
--- a/docs/install_windows.rst
+++ b/docs/install_windows.rst
@@ -37,15 +37,15 @@ Manually installing dependencies
* `Python `_ - Red needs Python 3.7.0 or greater
.. note:: Please make sure that the box to add Python to PATH is CHECKED, otherwise
- you may run into issues when trying to run Red
+ you may run into issues when trying to run Red.
* `Git `_
-.. attention:: Please choose the option to "Run Git from the Windows Command Prompt" in Git's setup
+.. attention:: Please choose the option to "Run Git from the Windows Command Prompt" in Git's setup.
* `Java `_ - needed for Audio
-.. attention:: Please choose the "Windows Online" installer
+.. attention:: Please choose the "Windows Online" installer.
.. _installing-red-windows:
@@ -53,6 +53,9 @@ Manually installing dependencies
Installing Red
--------------
+.. attention:: You may need to restart your computer after installing dependencies
+ for the PATH changes to take effect.
+
1. Open a command prompt (open Start, search for "command prompt", then click it)
2. Create and activate a virtual environment (strongly recommended), see the section `using-venv`
3. Run **one** of the following commands, depending on what extras you want installed
From 1804314f45edb8726cb4cc5b208a614b90c7de7f Mon Sep 17 00:00:00 2001
From: Toby Harradine
Date: Sun, 23 Jun 2019 14:09:59 +1000
Subject: [PATCH 041/183] [Audio] Improve Lavalink download/connection
exception handling (#2764)
- More errors will be logged to the console with clearer messages when something goes wrong
- Downloading the Lavalink Jar will abort after 5 failed attempts. The connect task will also abort if an unhandled exception occurs whilst downloading or connecting to Lavalink. After this occurs, instead of responding "Connection to Lavalink has not yet been established" to commands, the bot will respond "Connection to Lavalink has failed". This has no effect on other commands which don't involve connecting to Lavalink (e.g. settings commands).
- Logs this message when Lavalink jar is successfully downloaded: `Successfully downloaded Lavalink.jar ( bytes written)`
- Uses [`tqdm`](https://github.com/tqdm/tqdm/) to display a progress bar whilst downloading Lavalink.jar.
Signed-off-by: Toby Harradine
---
redbot/cogs/audio/audio.py | 95 +++++++++++++++++++++++++++++++-----
redbot/cogs/audio/errors.py | 33 +++++++++++++
redbot/cogs/audio/manager.py | 44 +++++++++++++----
setup.cfg | 1 +
4 files changed, 153 insertions(+), 20 deletions(-)
create mode 100644 redbot/cogs/audio/errors.py
diff --git a/redbot/cogs/audio/audio.py b/redbot/cogs/audio/audio.py
index 828d069a0..8135f8e7e 100644
--- a/redbot/cogs/audio/audio.py
+++ b/redbot/cogs/audio/audio.py
@@ -31,6 +31,7 @@ from redbot.core.utils.menus import (
from redbot.core.utils.predicates import MessagePredicate, ReactionPredicate
from urllib.parse import urlparse
from .manager import ServerManager
+from .errors import LavalinkDownloadFailed
_ = Translator("Audio", __file__)
@@ -91,6 +92,7 @@ class Audio(commands.Cog):
self._connect_task = None
self._disconnect_task = None
self._cleaned_up = False
+ self._connection_aborted = False
self.spotify_token = None
self.play_lock = {}
@@ -121,7 +123,10 @@ class Audio(commands.Cog):
self._connect_task = self.bot.loop.create_task(self.attempt_connect())
async def attempt_connect(self, timeout: int = 30):
- while True: # run until success
+ self._connection_aborted = False
+ max_retries = 5
+ retry_count = 0
+ while retry_count < max_retries:
external = await self.config.use_external_lavalink()
if external is False:
settings = self._default_lavalink_settings
@@ -134,21 +139,52 @@ class Audio(commands.Cog):
self._manager = ServerManager()
try:
await self._manager.start()
- except RuntimeError as exc:
- log.exception(
- "Exception whilst starting internal Lavalink server, retrying...",
- exc_info=exc,
- )
+ except LavalinkDownloadFailed as exc:
await asyncio.sleep(1)
- continue
+ if exc.should_retry:
+ log.exception(
+ "Exception whilst starting internal Lavalink server, retrying...",
+ exc_info=exc,
+ )
+ retry_count += 1
+ continue
+ else:
+ log.exception(
+ "Fatal exception whilst starting internal Lavalink server, "
+ "aborting...",
+ exc_info=exc,
+ )
+ self._connection_aborted = True
+ raise
except asyncio.CancelledError:
log.exception("Invalid machine architecture, cannot run Lavalink.")
raise
+ except Exception as exc:
+ log.exception(
+ "Unhandled exception whilst starting internal Lavalink server, "
+ "aborting...",
+ exc_info=exc,
+ )
+ self._connection_aborted = True
+ raise
+ else:
+ break
else:
host = await self.config.host()
password = await self.config.password()
rest_port = await self.config.rest_port()
ws_port = await self.config.ws_port()
+ break
+ else:
+ log.critical(
+ "Setting up the Lavalink server failed after multiple attempts. See above "
+ "tracebacks for details."
+ )
+ self._connection_aborted = True
+ return
+
+ retry_count = 0
+ while retry_count < max_retries:
try:
await lavalink.initialize(
bot=self.bot,
@@ -158,12 +194,26 @@ class Audio(commands.Cog):
ws_port=ws_port,
timeout=timeout,
)
- return # break infinite loop
except asyncio.TimeoutError:
log.error("Connecting to Lavalink server timed out, retrying...")
if external is False and self._manager is not None:
await self._manager.shutdown()
+ retry_count += 1
await asyncio.sleep(1) # prevent busylooping
+ except Exception as exc:
+ log.exception(
+ "Unhandled exception whilst connecting to Lavalink, aborting...", exc_info=exc
+ )
+ self._connection_aborted = True
+ raise
+ else:
+ break
+ else:
+ self._connection_aborted = True
+ log.critical(
+ "Connecting to the Lavalink server failed after multiple attempts. See above "
+ "tracebacks for details."
+ )
async def event_handler(self, player, event_type, extra):
disconnect = await self.config.guild(player.channel.guild).disconnect()
@@ -1160,6 +1210,11 @@ class Audio(commands.Cog):
if not url_check:
return await self._embed_msg(ctx, _("That URL is not allowed."))
if not self._player_check(ctx):
+ if self._connection_aborted:
+ msg = _("Connection to Lavalink has failed.")
+ if await ctx.bot.is_owner(ctx.author):
+ msg += " " + _("Please check your console or logs for details.")
+ return await self._embed_msg(ctx, msg)
try:
if (
not ctx.author.voice.channel.permissions_for(ctx.me).connect
@@ -2096,15 +2151,22 @@ class Audio(commands.Cog):
await self._embed_msg(ctx, _("You need the DJ role to use playlists."))
return False
if not self._player_check(ctx):
+ if self._connection_aborted:
+ msg = _("Connection to Lavalink has failed.")
+ if await ctx.bot.is_owner(ctx.author):
+ msg += " " + _("Please check your console or logs for details.")
+ await self._embed_msg(ctx, msg)
+ return False
try:
if (
not ctx.author.voice.channel.permissions_for(ctx.me).connect
or not ctx.author.voice.channel.permissions_for(ctx.me).move_members
and self._userlimit(ctx.author.voice.channel)
):
- return await self._embed_msg(
+ await self._embed_msg(
ctx, _("I don't have permission to connect to your channel.")
)
+ return False
await lavalink.connect(ctx.author.voice.channel)
player = lavalink.get_player(ctx.guild.id)
player.store("connect", datetime.datetime.utcnow())
@@ -2560,6 +2622,11 @@ class Audio(commands.Cog):
}
if not self._player_check(ctx):
+ if self._connection_aborted:
+ msg = _("Connection to Lavalink has failed.")
+ if await ctx.bot.is_owner(ctx.author):
+ msg += " " + _("Please check your console or logs for details.")
+ return await self._embed_msg(ctx, msg)
try:
if (
not ctx.author.voice.channel.permissions_for(ctx.me).connect
@@ -2673,6 +2740,11 @@ class Audio(commands.Cog):
async def _search_button_action(self, ctx, tracks, emoji, page):
if not self._player_check(ctx):
+ if self._connection_aborted:
+ msg = _("Connection to Lavalink has failed.")
+ if await ctx.bot.is_owner(ctx.author):
+ msg += " " + _("Please check your console or logs for details.")
+ return await self._embed_msg(ctx, msg)
try:
await lavalink.connect(ctx.author.voice.channel)
player = lavalink.get_player(ctx.guild.id)
@@ -3493,8 +3565,9 @@ class Audio(commands.Cog):
else:
self.play_lock[ctx.message.guild.id] = False
- @staticmethod
- def _player_check(ctx):
+ def _player_check(self, ctx: commands.Context):
+ if self._connection_aborted:
+ return False
try:
lavalink.get_player(ctx.guild.id)
return True
diff --git a/redbot/cogs/audio/errors.py b/redbot/cogs/audio/errors.py
new file mode 100644
index 000000000..9785a9b82
--- /dev/null
+++ b/redbot/cogs/audio/errors.py
@@ -0,0 +1,33 @@
+import aiohttp
+
+
+class AudioError(Exception):
+ """Base exception for errors in the Audio cog."""
+
+
+class LavalinkDownloadFailed(AudioError, RuntimeError):
+ """Downloading the Lavalink jar failed.
+
+ Attributes
+ ----------
+ response : aiohttp.ClientResponse
+ The response from the server to the failed GET request.
+ should_retry : bool
+ Whether or not the Audio cog should retry downloading the jar.
+
+ """
+
+ def __init__(self, *args, response: aiohttp.ClientResponse, should_retry: bool = False):
+ super().__init__(*args)
+ self.response = response
+ self.should_retry = should_retry
+
+ def __repr__(self) -> str:
+ str_args = [*map(str, self.args), self._response_repr()]
+ return f"LavalinkDownloadFailed({', '.join(str_args)}"
+
+ def __str__(self) -> str:
+ return f"{super().__str__()} {self._response_repr()}"
+
+ def _response_repr(self) -> str:
+ return f"[{self.response.status} {self.response.reason}]"
diff --git a/redbot/cogs/audio/manager.py b/redbot/cogs/audio/manager.py
index 3c9b7a501..db4c140b2 100644
--- a/redbot/cogs/audio/manager.py
+++ b/redbot/cogs/audio/manager.py
@@ -6,12 +6,15 @@ import asyncio
import asyncio.subprocess # disables for # https://github.com/PyCQA/pylint/issues/1469
import logging
import re
+import sys
import tempfile
from typing import Optional, Tuple, ClassVar, List
import aiohttp
+from tqdm import tqdm
from redbot.core import data_manager
+from .errors import LavalinkDownloadFailed
JAR_VERSION = "3.2.0.3"
JAR_BUILD = 796
@@ -200,22 +203,45 @@ class ServerManager:
async with aiohttp.ClientSession() as session:
async with session.get(LAVALINK_DOWNLOAD_URL) as response:
if response.status == 404:
- raise RuntimeError(
- f"Lavalink jar version {JAR_VERSION}_{JAR_BUILD} hasn't been published"
+ # A 404 means our LAVALINK_DOWNLOAD_URL is invalid, so likely the jar version
+ # hasn't been published yet
+ raise LavalinkDownloadFailed(
+ f"Lavalink jar version {JAR_VERSION}_{JAR_BUILD} hasn't been published "
+ f"yet",
+ response=response,
+ should_retry=False,
)
+ elif 400 <= response.status < 600:
+ # Other bad responses should be raised but we should retry just incase
+ raise LavalinkDownloadFailed(response=response, should_retry=True)
fd, path = tempfile.mkstemp()
file = open(fd, "wb")
- try:
- chunk = await response.content.read(1024)
- while chunk:
- file.write(chunk)
+ nbytes = 0
+ with tqdm(
+ desc="Lavalink.jar",
+ total=response.content_length,
+ file=sys.stdout,
+ unit="B",
+ unit_scale=True,
+ miniters=1,
+ dynamic_ncols=True,
+ leave=False,
+ ) as progress_bar:
+ try:
chunk = await response.content.read(1024)
- file.flush()
- finally:
- file.close()
+ while chunk:
+ chunk_size = file.write(chunk)
+ nbytes += chunk_size
+ progress_bar.update(chunk_size)
+ chunk = await response.content.read(1024)
+ file.flush()
+ finally:
+ file.close()
shutil.move(path, str(LAVALINK_JAR_FILE), copy_function=shutil.copyfile)
+ log.info("Successfully downloaded Lavalink.jar (%s bytes written)", format(nbytes, ","))
+
@classmethod
async def _is_up_to_date(cls):
if cls._up_to_date is True:
diff --git a/setup.cfg b/setup.cfg
index 3f6ceff49..ed3044aa3 100644
--- a/setup.cfg
+++ b/setup.cfg
@@ -43,6 +43,7 @@ install_requires =
pyyaml==3.13
red-lavalink>=0.3.0,<0.4
schema==0.6.8
+ tqdm==4.32.1
yarl==1.3.0
discord.py==1.0.1
websockets<7
From 065396abab2c5f0fa1be5f42ab987def39ad460f Mon Sep 17 00:00:00 2001
From: aikaterna <20862007+aikaterna@users.noreply.github.com>
Date: Sat, 22 Jun 2019 21:10:31 -0700
Subject: [PATCH 042/183] [Audio] Change Lavalink.jar version checking (#2785)
---
redbot/cogs/audio/manager.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/redbot/cogs/audio/manager.py b/redbot/cogs/audio/manager.py
index db4c140b2..7885a9f70 100644
--- a/redbot/cogs/audio/manager.py
+++ b/redbot/cogs/audio/manager.py
@@ -261,7 +261,7 @@ class ServerManager:
# Output is unexpected, suspect corrupted jarfile
return False
build = int(match["build"])
- cls._up_to_date = build == JAR_BUILD
+ cls._up_to_date = build >= JAR_BUILD
return cls._up_to_date
@classmethod
From 6ae3040aac2d4fe004370b98d44689cf7ecdd2b4 Mon Sep 17 00:00:00 2001
From: Michael H
Date: Sun, 23 Jun 2019 02:39:24 -0400
Subject: [PATCH 043/183] [Filter] Make name filtering behavior consistent
(#2794)
- Uses the updated filter check
- This is also a performance gain on large servers with filter names
enabled.
---
redbot/cogs/filter/filter.py | 19 +++++++++----------
1 file changed, 9 insertions(+), 10 deletions(-)
diff --git a/redbot/cogs/filter/filter.py b/redbot/cogs/filter/filter.py
index 841d42e42..fae8cab8e 100644
--- a/redbot/cogs/filter/filter.py
+++ b/redbot/cogs/filter/filter.py
@@ -448,13 +448,12 @@ class Filter(commands.Cog):
if not await self.settings.guild(member.guild).filter_names():
return
- word_list = await self.settings.guild(member.guild).filter()
- for w in word_list:
- if w in member.display_name.lower():
- name_to_use = await self.settings.guild(member.guild).filter_default_name()
- reason = _("Filtered nickname") if member.nick else _("Filtered name")
- try:
- await member.edit(nick=name_to_use, reason=reason)
- except discord.HTTPException:
- pass
- return
+ if await self.filter_hits(member.display_name, member.guild):
+
+ name_to_use = await self.settings.guild(member.guild).filter_default_name()
+ reason = _("Filtered nickname") if member.nick else _("Filtered name")
+ try:
+ await member.edit(nick=name_to_use, reason=reason)
+ except discord.HTTPException:
+ pass
+ return
From 71d0bd0d0794b7d4d622b4e4fc452dfb32690c55 Mon Sep 17 00:00:00 2001
From: Toby Harradine
Date: Mon, 24 Jun 2019 12:55:49 +1000
Subject: [PATCH 044/183] Various Config and Mongo Driver fixes (#2795)
- Fixes defaults being mixed into custom groups above the document level when doing `Group.all()`
- Fixes `Config.clear_all()` with Mongo driver
- Fixes `Group.set()` with Mongo driver on custom groups above the document level
- Fixes `IdentifierData.custom_group_data` being set to the wrong thing in `BaseDriver.import/export_data` (although this was an inconsequential bug)
Signed-off-by: Toby Harradine
---
redbot/core/config.py | 30 ++++---
redbot/core/drivers/red_base.py | 20 ++++-
redbot/core/drivers/red_json.py | 3 +-
redbot/core/drivers/red_mongo.py | 146 ++++++++++++++++++++++++++-----
4 files changed, 160 insertions(+), 39 deletions(-)
diff --git a/redbot/core/config.py b/redbot/core/config.py
index 7abf8957e..569e33b70 100644
--- a/redbot/core/config.py
+++ b/redbot/core/config.py
@@ -1,16 +1,14 @@
import logging
import collections
from copy import deepcopy
-from typing import Any, Union, Tuple, Dict, Awaitable, AsyncContextManager, TypeVar, TYPE_CHECKING
+from typing import Any, Union, Tuple, Dict, Awaitable, AsyncContextManager, TypeVar
import weakref
import discord
from .data_manager import cog_data_path, core_data_path
from .drivers import get_driver, IdentifierData, BackendType
-
-if TYPE_CHECKING:
- from .drivers.red_base import BaseDriver
+from .drivers.red_base import BaseDriver
__all__ = ["Config", "get_latest_confs"]
@@ -545,7 +543,7 @@ class Config:
self,
cog_name: str,
unique_identifier: str,
- driver: "BaseDriver",
+ driver: BaseDriver,
force_registration: bool = False,
defaults: dict = None,
):
@@ -852,9 +850,16 @@ class Config:
custom_group_data=self.custom_groups,
is_custom=is_custom,
)
+
+ pkey_len = BaseDriver.get_pkey_len(identifier_data)
+ if len(primary_keys) < pkey_len:
+ # Don't mix in defaults with groups higher than the document level
+ defaults = {}
+ else:
+ defaults = self.defaults.get(category, {})
return Group(
identifier_data=identifier_data,
- defaults=self.defaults.get(category, {}),
+ defaults=defaults,
driver=self.driver,
force_registration=self.force_registration,
)
@@ -975,6 +980,7 @@ class Config:
"""
group = self._get_base_group(scope)
ret = {}
+ defaults = self.defaults.get(scope, {})
try:
dict_ = await self.driver.get(group.identifier_data)
@@ -982,7 +988,7 @@ class Config:
pass
else:
for k, v in dict_.items():
- data = group.defaults
+ data = deepcopy(defaults)
data.update(v)
ret[int(k)] = data
@@ -1056,11 +1062,11 @@ class Config:
"""
return await self._all_from_scope(self.USER)
- @staticmethod
- def _all_members_from_guild(group: Group, guild_data: dict) -> dict:
+ def _all_members_from_guild(self, guild_data: dict) -> dict:
ret = {}
+ defaults = self.defaults.get(self.MEMBER, {})
for member_id, member_data in guild_data.items():
- new_member_data = group.defaults
+ new_member_data = deepcopy(defaults)
new_member_data.update(member_data)
ret[int(member_id)] = new_member_data
return ret
@@ -1099,7 +1105,7 @@ class Config:
pass
else:
for guild_id, guild_data in dict_.items():
- ret[int(guild_id)] = self._all_members_from_guild(group, guild_data)
+ ret[int(guild_id)] = self._all_members_from_guild(guild_data)
else:
group = self._get_base_group(self.MEMBER, str(guild.id))
try:
@@ -1107,7 +1113,7 @@ class Config:
except KeyError:
pass
else:
- ret = self._all_members_from_guild(group, guild_data)
+ ret = self._all_members_from_guild(guild_data)
return ret
async def _clear_scope(self, *scopes: str):
diff --git a/redbot/core/drivers/red_base.py b/redbot/core/drivers/red_base.py
index cd7091a71..2e5d41c6f 100644
--- a/redbot/core/drivers/red_base.py
+++ b/redbot/core/drivers/red_base.py
@@ -18,8 +18,8 @@ class IdentifierData:
self,
uuid: str,
category: str,
- primary_key: Tuple[str],
- identifiers: Tuple[str],
+ primary_key: Tuple[str, ...],
+ identifiers: Tuple[str, ...],
custom_group_data: dict,
is_custom: bool = False,
):
@@ -183,7 +183,7 @@ class BaseDriver:
c,
(),
(),
- custom_group_data.get(c, {}),
+ custom_group_data,
is_custom=c in custom_group_data,
)
try:
@@ -202,7 +202,19 @@ class BaseDriver:
category,
pkey,
(),
- custom_group_data.get(category, {}),
+ custom_group_data,
is_custom=category in custom_group_data,
)
await self.set(ident_data, data)
+
+ @staticmethod
+ def get_pkey_len(identifier_data: IdentifierData) -> int:
+ cat = identifier_data.category
+ if cat == ConfigCategory.GLOBAL.value:
+ return 0
+ elif cat == ConfigCategory.MEMBER.value:
+ return 2
+ elif identifier_data.is_custom:
+ return identifier_data.custom_group_data[cat]
+ else:
+ return 1
diff --git a/redbot/core/drivers/red_json.py b/redbot/core/drivers/red_json.py
index 73023ffeb..7e6f7c333 100644
--- a/redbot/core/drivers/red_json.py
+++ b/redbot/core/drivers/red_json.py
@@ -1,5 +1,4 @@
from pathlib import Path
-from typing import Tuple
import copy
import weakref
import logging
@@ -156,7 +155,7 @@ class JSON(BaseDriver):
category,
pkey,
(),
- custom_group_data.get(category, {}),
+ custom_group_data,
is_custom=category in custom_group_data,
)
update_write_data(ident_data, data)
diff --git a/redbot/core/drivers/red_mongo.py b/redbot/core/drivers/red_mongo.py
index 4554aa0a5..aabd36adf 100644
--- a/redbot/core/drivers/red_mongo.py
+++ b/redbot/core/drivers/red_mongo.py
@@ -1,11 +1,13 @@
+import contextlib
+import itertools
import re
from getpass import getpass
-from typing import Match, Pattern, Tuple
+from typing import Match, Pattern, Tuple, Any, Dict, Iterator, List
from urllib.parse import quote_plus
import motor.core
import motor.motor_asyncio
-from motor.motor_asyncio import AsyncIOMotorCursor
+import pymongo.errors
from .red_base import BaseDriver, IdentifierData
@@ -36,7 +38,7 @@ def _initialize(**kwargs):
url = "{}://{}{}/{}".format(uri, host, ports, db_name)
global _conn
- _conn = motor.motor_asyncio.AsyncIOMotorClient(url)
+ _conn = motor.motor_asyncio.AsyncIOMotorClient(url, retryWrites=True)
class Mongo(BaseDriver):
@@ -87,7 +89,9 @@ class Mongo(BaseDriver):
# noinspection PyTypeChecker
return identifier_data.primary_key
- async def rebuild_dataset(self, identifier_data: IdentifierData, cursor: AsyncIOMotorCursor):
+ async def rebuild_dataset(
+ self, identifier_data: IdentifierData, cursor: motor.motor_asyncio.AsyncIOMotorCursor
+ ):
ret = {}
async for doc in cursor:
pkeys = doc["_id"]["RED_primary_key"]
@@ -137,24 +141,96 @@ class Mongo(BaseDriver):
async def set(self, identifier_data: IdentifierData, value=None):
uuid = self._escape_key(identifier_data.uuid)
primary_key = list(map(self._escape_key, self.get_primary_key(identifier_data)))
- dot_identifiers = ".".join(map(self._escape_key, identifier_data.identifiers))
if isinstance(value, dict):
if len(value) == 0:
await self.clear(identifier_data)
return
value = self._escape_dict_keys(value)
-
mongo_collection = self.get_collection(identifier_data.category)
- if len(dot_identifiers) > 0:
- update_stmt = {"$set": {dot_identifiers: value}}
- else:
- update_stmt = {"$set": value}
+ pkey_len = self.get_pkey_len(identifier_data)
+ num_pkeys = len(primary_key)
- await mongo_collection.update_one(
- {"_id": {"RED_uuid": uuid, "RED_primary_key": primary_key}},
- update=update_stmt,
- upsert=True,
- )
+ if num_pkeys >= pkey_len:
+ # We're setting at the document level or below.
+ dot_identifiers = ".".join(map(self._escape_key, identifier_data.identifiers))
+ if dot_identifiers:
+ update_stmt = {"$set": {dot_identifiers: value}}
+ else:
+ update_stmt = {"$set": value}
+
+ await mongo_collection.update_one(
+ {"_id": {"RED_uuid": uuid, "RED_primary_key": primary_key}},
+ update=update_stmt,
+ upsert=True,
+ )
+
+ else:
+ # We're setting above the document level.
+ # Easiest and most efficient thing to do is delete all documents that we're potentially
+ # replacing, then insert_many().
+ # We'll do it in a transaction so we can roll-back in case something goes horribly
+ # wrong.
+ pkey_filter = self.generate_primary_key_filter(identifier_data)
+ async with await _conn.start_session() as session:
+ with contextlib.suppress(pymongo.errors.CollectionInvalid):
+ # Collections must already exist when inserting documents within a transaction
+ await _conn.get_database().create_collection(mongo_collection.full_name)
+ try:
+ async with session.start_transaction():
+ await mongo_collection.delete_many(pkey_filter, session=session)
+ await mongo_collection.insert_many(
+ self.generate_documents_to_insert(uuid, primary_key, value, pkey_len),
+ session=session,
+ )
+ except pymongo.errors.OperationFailure:
+ # This DB version / setup doesn't support transactions, so we'll have to use
+ # a shittier method.
+
+ # The strategy here is to separate the existing documents and the new documents
+ # into ones to be deleted, ones to be replaced, and new ones to be inserted.
+ # Then we can do a bulk_write().
+
+ # This is our list of (filter, new_document) tuples for replacing existing
+ # documents. The `new_document` should be taken and removed from `value`, so
+ # `value` only ends up containing documents which need to be inserted.
+ to_replace: List[Tuple[Dict, Dict]] = []
+
+ # This is our list of primary key filters which need deleting. They should
+ # simply be all the primary keys which were part of existing documents but are
+ # not included in the new documents.
+ to_delete: List[Dict] = []
+ async for document in mongo_collection.find(pkey_filter, session=session):
+ pkey = document["_id"]["RED_primary_key"]
+ new_document = value
+ try:
+ for pkey_part in pkey[num_pkeys:-1]:
+ new_document = new_document[pkey_part]
+ # This document is being replaced - remove it from `value`.
+ new_document = new_document.pop(pkey[-1])
+ except KeyError:
+ # We've found the primary key of an old document which isn't in the
+ # updated set of documents - it should be deleted.
+ to_delete.append({"_id": {"RED_uuid": uuid, "RED_primary_key": pkey}})
+ else:
+ _filter = {"_id": {"RED_uuid": uuid, "RED_primary_key": pkey}}
+ new_document.update(_filter)
+ to_replace.append((_filter, new_document))
+
+ # What's left of `value` should be the new documents needing to be inserted.
+ to_insert = self.generate_documents_to_insert(
+ uuid, primary_key, value, pkey_len
+ )
+ requests = list(
+ itertools.chain(
+ (pymongo.DeleteOne(f) for f in to_delete),
+ (pymongo.ReplaceOne(f, d) for f, d in to_replace),
+ (pymongo.InsertOne(d) for d in to_insert if d),
+ )
+ )
+ # This will pipeline the operations so they all complete quickly. However if
+ # any of them fail, the rest of them will complete - i.e. this operation is not
+ # atomic.
+ await mongo_collection.bulk_write(requests, ordered=False)
def generate_primary_key_filter(self, identifier_data: IdentifierData):
uuid = self._escape_key(identifier_data.uuid)
@@ -170,20 +246,48 @@ class Mongo(BaseDriver):
ret["_id.RED_primary_key"] = {"$exists": True}
return ret
+ @classmethod
+ def generate_documents_to_insert(
+ cls, uuid: str, primary_keys: List[str], data: Dict[str, Dict[str, Any]], pkey_len: int
+ ) -> Iterator[Dict[str, Any]]:
+ num_missing_pkeys = pkey_len - len(primary_keys)
+ if num_missing_pkeys == 1:
+ for pkey, document in data.items():
+ document["_id"] = {"RED_uuid": uuid, "RED_primary_key": primary_keys + [pkey]}
+ yield document
+ else:
+ for pkey, inner_data in data.items():
+ for document in cls.generate_documents_to_insert(
+ uuid, primary_keys + [pkey], inner_data, pkey_len
+ ):
+ yield document
+
async def clear(self, identifier_data: IdentifierData):
- # There are three cases here:
+ # There are five cases here:
# 1) We're clearing out a subset of identifiers (aka identifiers is NOT empty)
# 2) We're clearing out full primary key and no identifiers
# 3) We're clearing out partial primary key and no identifiers
# 4) Primary key is empty, should wipe all documents in the collection
- mongo_collection = self.get_collection(identifier_data.category)
+ # 5) Category is empty, all of this cog's data should be deleted
pkey_filter = self.generate_primary_key_filter(identifier_data)
- if len(identifier_data.identifiers) == 0:
- # This covers cases 2-4
- await mongo_collection.delete_many(pkey_filter)
- else:
+ if identifier_data.identifiers:
+ # This covers case 1
+ mongo_collection = self.get_collection(identifier_data.category)
dot_identifiers = ".".join(map(self._escape_key, identifier_data.identifiers))
await mongo_collection.update_one(pkey_filter, update={"$unset": {dot_identifiers: 1}})
+ elif identifier_data.category:
+ # This covers cases 2-4
+ mongo_collection = self.get_collection(identifier_data.category)
+ await mongo_collection.delete_many(pkey_filter)
+ else:
+ # This covers case 5
+ db = self.db
+ super_collection = db[self.cog_name]
+ results = await db.list_collections(
+ filter={"name": {"$regex": rf"^{super_collection.name}\."}}
+ )
+ for result in results:
+ await db[result["name"]].delete_many(pkey_filter)
@staticmethod
def _escape_key(key: str) -> str:
From 6bdc9606f6fc829eca342c29ff1a708200a5a118 Mon Sep 17 00:00:00 2001
From: DiscordLiz <47602820+DiscordLiz@users.noreply.github.com>
Date: Sun, 23 Jun 2019 23:36:00 -0400
Subject: [PATCH 045/183] [Core] Multiple mod admin roles (#2783)
* Adds Schema versioning
- Adds Migration tool
- Adds tool to migrate to allow multiple admin and mod roles
- Supports Multiple mod and admin roles
* Ensures migration is run prior to cog load and connection to discord
* Updates to not rely on singular mod/admin role id
* Update requires logic for multiple mod/admin roles
* Add new commands for managing mod/admin roles
* Feedback
Update strings
Update docstrings
Add aliases
* Use snowflakelist
* paginate
* Change variable name
* Fix mistake
* handle settings view fix
* Fix name error
* I'm bad at Ux
* style fix
---
redbot/__main__.py | 5 ++-
redbot/cogs/audio/audio.py | 45 +++++++++-----------
redbot/cogs/bank/bank.py | 12 ++++--
redbot/cogs/reports/reports.py | 18 +++-----
redbot/core/bot.py | 55 ++++++++++++++++++++----
redbot/core/commands/requires.py | 16 +++----
redbot/core/core_commands.py | 73 ++++++++++++++++++++++++--------
redbot/core/utils/mod.py | 36 ++++++----------
8 files changed, 161 insertions(+), 99 deletions(-)
diff --git a/redbot/__main__.py b/redbot/__main__.py
index 92793ab56..8509def4a 100644
--- a/redbot/__main__.py
+++ b/redbot/__main__.py
@@ -107,8 +107,11 @@ def main():
red = Red(
cli_flags=cli_flags, description=description, dm_help=None, fetch_offline_members=True
)
+ loop = asyncio.get_event_loop()
+ loop.run_until_complete(red.maybe_update_config())
init_global_checks(red)
init_events(red, cli_flags)
+
red.add_cog(Core(red))
red.add_cog(CogManagerUI())
if cli_flags.dev:
@@ -117,7 +120,7 @@ def main():
modlog._init()
# noinspection PyProtectedMember
bank._init()
- loop = asyncio.get_event_loop()
+
if os.name == "posix":
loop.add_signal_handler(SIGTERM, lambda: asyncio.ensure_future(sigterm_handler(red, log)))
tmp_data = {}
diff --git a/redbot/cogs/audio/audio.py b/redbot/cogs/audio/audio.py
index 8135f8e7e..77e05981e 100644
--- a/redbot/cogs/audio/audio.py
+++ b/redbot/cogs/audio/audio.py
@@ -3051,34 +3051,29 @@ class Audio(commands.Cog):
return await self._skip_action(ctx, skip_to_track)
async def _can_instaskip(self, ctx, member):
- mod_role = await ctx.bot.db.guild(ctx.guild).mod_role()
- admin_role = await ctx.bot.db.guild(ctx.guild).admin_role()
+
dj_enabled = await self.config.guild(ctx.guild).dj_enabled()
- if dj_enabled:
- is_active_dj = await self._has_dj_role(ctx, member)
- else:
- is_active_dj = False
- is_owner = member.id == self.bot.owner_id
- is_server_owner = member.id == ctx.guild.owner_id
- is_coowner = any(x == member.id for x in self.bot._co_owners)
- is_admin = (
- discord.utils.get(ctx.guild.get_member(member.id).roles, id=admin_role) is not None
- )
- is_mod = discord.utils.get(ctx.guild.get_member(member.id).roles, id=mod_role) is not None
- is_bot = member.bot is True
- is_other_channel = await self._channel_check(ctx)
+ if member.bot:
+ return True
- return (
- is_active_dj
- or is_owner
- or is_server_owner
- or is_coowner
- or is_admin
- or is_mod
- or is_bot
- or is_other_channel
- )
+ if member.id == ctx.guild.owner_id:
+ return True
+
+ if dj_enabled:
+ if await self._has_dj_role(ctx, member):
+ return True
+
+ if await ctx.bot.is_owner(member):
+ return True
+
+ if await ctx.bot.is_mod(member):
+ return True
+
+ if await self._channel_check(ctx):
+ return True
+
+ return False
async def _is_alone(self, ctx, member):
try:
diff --git a/redbot/cogs/bank/bank.py b/redbot/cogs/bank/bank.py
index 7fd79170c..6d186ee6b 100644
--- a/redbot/cogs/bank/bank.py
+++ b/redbot/cogs/bank/bank.py
@@ -43,10 +43,14 @@ def check_global_setting_admin():
return False
if await ctx.bot.is_owner(author):
return True
- permissions = ctx.channel.permissions_for(author)
- is_guild_owner = author == ctx.guild.owner
- admin_role = await ctx.bot.db.guild(ctx.guild).admin_role()
- return admin_role in author.roles or is_guild_owner or permissions.manage_guild
+ if author == ctx.guild.owner:
+ return True
+ if ctx.channel.permissions_for(author).manage_guild:
+ return True
+ admin_roles = set(await ctx.bot.db.guild(ctx.guild).admin_role())
+ for role in author.roles:
+ if role.id in admin_roles:
+ return True
else:
return await ctx.bot.is_owner(author)
diff --git a/redbot/cogs/reports/reports.py b/redbot/cogs/reports/reports.py
index fcf868afe..fe2971347 100644
--- a/redbot/cogs/reports/reports.py
+++ b/redbot/cogs/reports/reports.py
@@ -84,18 +84,14 @@ class Reports(commands.Cog):
await ctx.send(_("Reporting is now disabled."))
async def internal_filter(self, m: discord.Member, mod=False, perms=None):
- ret = False
- if mod:
- guild = m.guild
- admin_role = guild.get_role(await self.bot.db.guild(guild).admin_role())
- mod_role = guild.get_role(await self.bot.db.guild(guild).mod_role())
- ret |= any(r in m.roles for r in (mod_role, admin_role))
- if perms:
- ret |= m.guild_permissions >= perms
+ if perms and m.guild_permissions >= perms:
+ return True
+ if mod and await self.bot.is_mod(m):
+ return True
# The following line is for consistency with how perms are handled
- # in Red, though I'm not sure it makse sense to use here.
- ret |= await self.bot.is_owner(m)
- return ret
+ # in Red, though I'm not sure it makes sense to use here.
+ if await self.bot.is_owner(m):
+ return True
async def discover_guild(
self,
diff --git a/redbot/core/bot.py b/redbot/core/bot.py
index a0d8cc586..f6d872b46 100644
--- a/redbot/core/bot.py
+++ b/redbot/core/bot.py
@@ -67,14 +67,15 @@ class RedBase(commands.GroupMixin, commands.bot.BotBase, RPCMixin): # pylint: d
api_tokens={},
extra_owner_destinations=[],
owner_opt_out_list=[],
+ schema_version=0,
)
self.db.register_guild(
prefix=[],
whitelist=[],
blacklist=[],
- admin_role=None,
- mod_role=None,
+ admin_role=[],
+ mod_role=[],
embeds=None,
use_bot_color=False,
fuzzy=False,
@@ -134,6 +135,38 @@ class RedBase(commands.GroupMixin, commands.bot.BotBase, RPCMixin): # pylint: d
self._permissions_hooks: List[commands.CheckPredicate] = []
+ async def maybe_update_config(self):
+ """
+ This should be run prior to loading cogs or connecting to discord.
+ """
+ schema_version = await self.db.schema_version()
+
+ if schema_version == 0:
+ await self._schema_0_to_1()
+ schema_version += 1
+ await self.db.schema_version.set(schema_version)
+
+ async def _schema_0_to_1(self):
+ """
+ This contains the migration to allow multiple mod and multiple admin roles.
+ """
+
+ log.info("Begin updating guild configs to support multiple mod/admin roles")
+ all_guild_data = await self.db.all_guilds()
+ for guild_id, guild_data in all_guild_data.items():
+ guild_obj = discord.Object(id=guild_id)
+ mod_roles, admin_roles = [], []
+ maybe_mod_role_id = guild_data["mod_role"]
+ maybe_admin_role_id = guild_data["admin_role"]
+
+ if maybe_mod_role_id:
+ mod_roles.append(maybe_mod_role_id)
+ await self.db.guild(guild_obj).mod_role.set(mod_roles)
+ if maybe_admin_role_id:
+ admin_roles.append(maybe_admin_role_id)
+ await self.db.guild(guild_obj).admin_role.set(admin_roles)
+ log.info("Done updating guild configs to support multiple mod/admin roles")
+
async def send_help_for(
self, ctx: commands.Context, help_for: Union[commands.Command, commands.GroupMixin, str]
):
@@ -191,21 +224,25 @@ class RedBase(commands.GroupMixin, commands.bot.BotBase, RPCMixin): # pylint: d
async def is_admin(self, member: discord.Member):
"""Checks if a member is an admin of their guild."""
- admin_role = await self.db.guild(member.guild).admin_role()
try:
- if any(role.id == admin_role for role in member.roles):
- return True
+ member_snowflakes = member._roles # DEP-WARN
+ for snowflake in await self.db.guild(member.guild).admin_role():
+ if member_snowflakes.has(snowflake): # Dep-WARN
+ return True
except AttributeError: # someone passed a webhook to this
pass
return False
async def is_mod(self, member: discord.Member):
"""Checks if a member is a mod or admin of their guild."""
- mod_role = await self.db.guild(member.guild).mod_role()
- admin_role = await self.db.guild(member.guild).admin_role()
try:
- if any(role.id in (mod_role, admin_role) for role in member.roles):
- return True
+ member_snowflakes = member._roles # DEP-WARN
+ for snowflake in await self.db.guild(member.guild).admin_role():
+ if member_snowflakes.has(snowflake): # DEP-WARN
+ return True
+ for snowflake in await self.db.guild(member.guild).mod_role():
+ if member_snowflakes.has(snowflake): # DEP-WARN
+ return True
except AttributeError: # someone passed a webhook to this
pass
return False
diff --git a/redbot/core/commands/requires.py b/redbot/core/commands/requires.py
index 668c071f3..db06bc1d5 100644
--- a/redbot/core/commands/requires.py
+++ b/redbot/core/commands/requires.py
@@ -126,16 +126,14 @@ class PrivilegeLevel(enum.IntEnum):
# The following is simply an optimised way to check if the user has the
# admin or mod role.
guild_settings = ctx.bot.db.guild(ctx.guild)
- admin_role_id = await guild_settings.admin_role()
- mod_role_id = await guild_settings.mod_role()
- is_mod = False
- for role in ctx.author.roles:
- if role.id == admin_role_id:
+
+ member_snowflakes = ctx.author._roles # DEP-WARN
+ for snowflake in await guild_settings.admin_role():
+ if member_snowflakes.has(snowflake): # DEP-WARN
return cls.ADMIN
- elif role.id == mod_role_id:
- is_mod = True
- if is_mod:
- return cls.MOD
+ for snowflake in await guild_settings.mod_role():
+ if member_snowflakes.has(snowflake): # DEP-WARN
+ return cls.MOD
return cls.NONE
diff --git a/redbot/core/core_commands.py b/redbot/core/core_commands.py
index bdbaf2f08..3b4680864 100644
--- a/redbot/core/core_commands.py
+++ b/redbot/core/core_commands.py
@@ -33,7 +33,7 @@ from redbot.core import (
i18n,
)
from .utils.predicates import MessagePredicate
-from .utils.chat_formatting import humanize_timedelta, pagify, box, inline
+from .utils.chat_formatting import humanize_timedelta, pagify, box, inline, humanize_list
from .commands.requires import PrivilegeLevel
@@ -705,15 +705,17 @@ class Core(commands.Cog, CoreLogic):
if ctx.invoked_subcommand is None:
if ctx.guild:
guild = ctx.guild
- admin_role = (
- guild.get_role(await ctx.bot.db.guild(ctx.guild).admin_role()) or "Not set"
- )
- mod_role = (
- guild.get_role(await ctx.bot.db.guild(ctx.guild).mod_role()) or "Not set"
+ admin_role_ids = await ctx.bot.db.guild(ctx.guild).admin_role()
+ admin_role_names = [r.name for r in guild.roles if r.id in admin_role_ids]
+ admin_roles_str = (
+ humanize_list(admin_role_names) if admin_role_names else "Not Set."
)
+ mod_role_ids = await ctx.bot.db.guild(ctx.guild).mod_role()
+ mod_role_names = [r.name for r in guild.roles if r.id in mod_role_ids]
+ mod_roles_str = humanize_list(mod_role_names) if mod_role_names else "Not Set."
prefixes = await ctx.bot.db.guild(ctx.guild).prefix()
- guild_settings = _("Admin role: {admin}\nMod role: {mod}\n").format(
- admin=admin_role, mod=mod_role
+ guild_settings = _("Admin roles: {admin}\nMod roles: {mod}\n").format(
+ admin=admin_roles_str, mod=mod_roles_str
)
else:
guild_settings = ""
@@ -734,23 +736,60 @@ class Core(commands.Cog, CoreLogic):
guild_settings=guild_settings,
locale=locale,
)
- await ctx.send(box(settings))
+ for page in pagify(settings):
+ await ctx.send(box(page))
@_set.command()
@checks.guildowner()
@commands.guild_only()
- async def adminrole(self, ctx: commands.Context, *, role: discord.Role):
- """Sets the admin role for this server"""
- await ctx.bot.db.guild(ctx.guild).admin_role.set(role.id)
- await ctx.send(_("The admin role for this guild has been set."))
+ async def addadminrole(self, ctx: commands.Context, *, role: discord.Role):
+ """
+ Adds an admin role for this guild.
+ """
+ async with ctx.bot.db.guild(ctx.guild).admin_role() as roles:
+ if role.id in roles:
+ return await ctx.send(_("This role is already an admin role."))
+ roles.append(role.id)
+ await ctx.send(_("That role is now considered an admin role."))
@_set.command()
@checks.guildowner()
@commands.guild_only()
- async def modrole(self, ctx: commands.Context, *, role: discord.Role):
- """Sets the mod role for this server"""
- await ctx.bot.db.guild(ctx.guild).mod_role.set(role.id)
- await ctx.send(_("The mod role for this guild has been set."))
+ async def addmodrole(self, ctx: commands.Context, *, role: discord.Role):
+ """
+ Adds a mod role for this guild.
+ """
+ async with ctx.bot.db.guild(ctx.guild).mod_role() as roles:
+ if role.id in roles:
+ return await ctx.send(_("This role is already a mod role."))
+ roles.append(role.id)
+ await ctx.send(_("That role is now considered a mod role."))
+
+ @_set.command(aliases=["remadmindrole", "deladminrole", "deleteadminrole"])
+ @checks.guildowner()
+ @commands.guild_only()
+ async def removeadminrole(self, ctx: commands.Context, *, role: discord.Role):
+ """
+ Removes an admin role for this guild.
+ """
+ async with ctx.bot.db.guild(ctx.guild).admin_role() as roles:
+ if role.id not in roles:
+ return await ctx.send(_("That role was not an admin role to begin with."))
+ roles.remove(role.id)
+ await ctx.send(_("That role is no longer considered an admin role."))
+
+ @_set.command(aliases=["remmodrole", "delmodrole", "deletemodrole"])
+ @checks.guildowner()
+ @commands.guild_only()
+ async def removemodrole(self, ctx: commands.Context, *, role: discord.Role):
+ """
+ Removes a mod role for this guild.
+ """
+ async with ctx.bot.db.guild(ctx.guild).mod_role() as roles:
+ if role.id not in roles:
+ return await ctx.send(_("That role was not a mod role to begin with."))
+ roles.remove(role.id)
+ await ctx.send(_("That role is no longer considered a mod role."))
@_set.command(aliases=["usebotcolor"])
@checks.guildowner()
diff --git a/redbot/core/utils/mod.py b/redbot/core/utils/mod.py
index 06480e25b..9191d8889 100644
--- a/redbot/core/utils/mod.py
+++ b/redbot/core/utils/mod.py
@@ -123,29 +123,25 @@ async def is_mod_or_superior(
If the wrong type of ``obj`` was passed.
"""
- user = None
if isinstance(obj, discord.Message):
user = obj.author
elif isinstance(obj, discord.Member):
user = obj
elif isinstance(obj, discord.Role):
- pass
+ if obj.id in await bot.db.guild(obj.guild).mod_role():
+ return True
+ if obj.id in await bot.db.guild(obj.guild).admin_role():
+ return True
+ return False
else:
raise TypeError("Only messages, members or roles may be passed")
- server = obj.guild
- admin_role_id = await bot.db.guild(server).admin_role()
- mod_role_id = await bot.db.guild(server).mod_role()
-
- if isinstance(obj, discord.Role):
- return obj.id in [admin_role_id, mod_role_id]
-
if await bot.is_owner(user):
return True
- elif discord.utils.find(lambda r: r.id in (admin_role_id, mod_role_id), user.roles):
+ if await bot.is_mod(user):
return True
- else:
- return False
+
+ return False
def strfdelta(delta: timedelta):
@@ -208,27 +204,21 @@ async def is_admin_or_superior(
If the wrong type of ``obj`` was passed.
"""
- user = None
if isinstance(obj, discord.Message):
user = obj.author
elif isinstance(obj, discord.Member):
user = obj
elif isinstance(obj, discord.Role):
- pass
+ return obj.id in await bot.db.guild(obj.guild).admin_role()
else:
raise TypeError("Only messages, members or roles may be passed")
- admin_role_id = await bot.db.guild(obj.guild).admin_role()
-
- if isinstance(obj, discord.Role):
- return obj.id == admin_role_id
-
- if user and await bot.is_owner(user):
+ if await bot.is_owner(user):
return True
- elif discord.utils.get(user.roles, id=admin_role_id):
+ if await bot.is_admin(user):
return True
- else:
- return False
+
+ return False
async def check_permissions(ctx: "Context", perms: Dict[str, bool]) -> bool:
From f2b7ce95467b06f5d90858e1c94d56721e4bd40b Mon Sep 17 00:00:00 2001
From: aikaterna <20862007+aikaterna@users.noreply.github.com>
Date: Sun, 23 Jun 2019 21:58:20 -0700
Subject: [PATCH 046/183] [Audio] Add equalizer (#2787)
* [Audio] Add equalizer
* [Audio] Add equalizer
---
redbot/cogs/audio/audio.py | 464 ++++++++++++++++++++++++++++++++-
redbot/cogs/audio/equalizer.py | 50 ++++
2 files changed, 501 insertions(+), 13 deletions(-)
create mode 100644 redbot/cogs/audio/equalizer.py
diff --git a/redbot/cogs/audio/audio.py b/redbot/cogs/audio/audio.py
index 77e05981e..a08539241 100644
--- a/redbot/cogs/audio/audio.py
+++ b/redbot/cogs/audio/audio.py
@@ -30,12 +30,13 @@ from redbot.core.utils.menus import (
)
from redbot.core.utils.predicates import MessagePredicate, ReactionPredicate
from urllib.parse import urlparse
+from .equalizer import Equalizer
from .manager import ServerManager
from .errors import LavalinkDownloadFailed
_ = Translator("Audio", __file__)
-__version__ = "0.0.9"
+__version__ = "0.0.10"
__author__ = ["aikaterna"]
log = logging.getLogger("red.audio")
@@ -85,6 +86,9 @@ class Audio(commands.Cog):
vote_percent=0,
)
+ self.config.init_custom("EQUALIZER", 1)
+ self.config.register_custom("EQUALIZER", eq_bands=[], eq_presets={})
+
self.config.register_guild(**default_guild)
self.config.register_global(**default_global)
self.skip_votes = {}
@@ -811,8 +815,12 @@ class Audio(commands.Cog):
@commands.bot_has_permissions(embed_links=True)
async def disconnect(self, ctx):
"""Disconnect from the voice channel."""
- dj_enabled = await self.config.guild(ctx.guild).dj_enabled()
- if self._player_check(ctx):
+ if not self._player_check(ctx):
+ return await self._embed_msg(ctx, _("Nothing playing."))
+ else:
+ dj_enabled = await self.config.guild(ctx.guild).dj_enabled()
+ player = lavalink.get_player(ctx.guild.id)
+
if dj_enabled:
if not await self._can_instaskip(ctx, ctx.author):
return await self._embed_msg(ctx, _("You need the DJ role to disconnect."))
@@ -822,8 +830,267 @@ class Audio(commands.Cog):
return await self._embed_msg(ctx, _("There are other people listening to music."))
else:
self._play_lock(ctx, False)
- await lavalink.get_player(ctx.guild.id).stop()
- await lavalink.get_player(ctx.guild.id).disconnect()
+ eq = player.fetch("eq")
+ if eq:
+ await self.config.custom("EQUALIZER", ctx.guild.id).eq_bands.set(eq.bands)
+ await player.stop()
+ await player.disconnect()
+
+ @commands.group(invoke_without_command=True)
+ @commands.guild_only()
+ @commands.cooldown(1, 15, discord.ext.commands.BucketType.guild)
+ @commands.bot_has_permissions(embed_links=True, add_reactions=True)
+ @checks.mod_or_permissions(administrator=True)
+ async def eq(self, ctx):
+ """Equalizer management."""
+ if not self._player_check(ctx):
+ return await self._embed_msg(ctx, _("Nothing playing."))
+ player = lavalink.get_player(ctx.guild.id)
+ eq = player.fetch("eq", Equalizer())
+ reactions = ["◀", "⬅", "⏫", "🔼", "🔽", "⏬", "➡", "▶", "⏺", "ℹ"]
+ await self._eq_msg_clear(player.fetch("eq_message"))
+ eq_message = await ctx.send(box(eq.visualise(), lang="ini"))
+ player.store("eq_message", eq_message)
+
+ for reaction in reactions:
+ try:
+ await eq_message.add_reaction(reaction)
+ except discord.errors.NotFound:
+ pass
+
+ await self._eq_interact(ctx, player, eq, eq_message, 0)
+
+ @eq.command(name="delete")
+ async def _eq_delete(self, ctx, eq_preset: str):
+ """Delete a saved eq preset."""
+ eq_presets = await self.config.custom("EQUALIZER", ctx.guild.id).eq_presets()
+ eq_preset = eq_preset.lower()
+ try:
+ del eq_presets[eq_preset]
+ except KeyError:
+ return await self._embed_msg(
+ ctx,
+ _(
+ "{eq_preset} is not in the eq preset list.".format(
+ eq_preset=eq_preset.capitalize()
+ )
+ ),
+ )
+
+ await self.config.custom("EQUALIZER", ctx.guild.id).eq_presets.set(eq_presets)
+ await self._embed_msg(
+ ctx, _("The {preset_name} preset was deleted.".format(preset_name=eq_preset))
+ )
+
+ @eq.command(name="list")
+ async def _eq_list(self, ctx):
+ """List saved eq presets."""
+ eq_presets = await self.config.custom("EQUALIZER", ctx.guild.id).eq_presets()
+ if not eq_presets.keys():
+ return await self._embed_msg(ctx, _("No saved equalizer presets."))
+ eq_list = "\n".join(list(sorted(eq_presets.keys())))
+ page_list = []
+ for page in pagify(eq_list, delims=[", "], page_length=1000):
+ embed = discord.Embed(
+ colour=await ctx.embed_colour(), title="Equalizer presets:", description=page
+ )
+ embed.set_footer(text=_("{num} preset(s)").format(num=len(list(eq_presets.keys()))))
+ page_list.append(embed)
+ await menu(ctx, page_list, DEFAULT_CONTROLS)
+
+ @eq.command(name="load")
+ async def _eq_load(self, ctx, eq_preset: str):
+ """Load a saved eq preset."""
+ eq_preset = eq_preset.lower()
+ eq_presets = await self.config.custom("EQUALIZER", ctx.guild.id).eq_presets()
+ try:
+ eq_values = eq_presets[eq_preset]
+ except KeyError:
+ return await self._embed_msg(
+ ctx, _("No preset named {eq_preset}.".format(eq_preset=eq_preset.capitalize()))
+ )
+ await self.config.custom("EQUALIZER", ctx.guild.id).eq_bands.set(eq_values)
+ if not self._player_check(ctx):
+ return await self._embed_msg(ctx, _("Nothing playing."))
+ player = lavalink.get_player(ctx.guild.id)
+ await self._eq_check(ctx, player)
+ eq = player.fetch("eq", Equalizer())
+ await self._eq_msg_clear(player.fetch("eq_message"))
+ message = await ctx.send(
+ content=box(eq.visualise(), lang="ini"),
+ embed=discord.Embed(
+ colour=await ctx.embed_colour(),
+ title=_("The {eq_preset} preset was loaded.".format(eq_preset=eq_preset)),
+ ),
+ )
+ player.store("eq_message", message)
+
+ @eq.command(name="reset")
+ async def _eq_reset(self, ctx):
+ """Reset the eq to 0 across all bands."""
+ if not self._player_check(ctx):
+ return await self._embed_msg(ctx, _("Nothing playing."))
+ player = lavalink.get_player(ctx.guild.id)
+ eq = player.fetch("eq", Equalizer())
+
+ for band in range(eq._band_count):
+ eq.set_gain(band, 0.0)
+
+ await self._apply_gains(ctx.guild.id, eq.bands)
+ await self.config.custom("EQUALIZER", ctx.guild.id).eq_bands.set(eq.bands)
+ player.store("eq", eq)
+ await self._eq_msg_clear(player.fetch("eq_message"))
+ message = await ctx.send(
+ content=box(eq.visualise(), lang="ini"),
+ embed=discord.Embed(
+ colour=await ctx.embed_colour(), title=_("Equalizer values have been reset.")
+ ),
+ )
+ player.store("eq_message", message)
+
+ @eq.command(name="save")
+ @commands.cooldown(1, 15, discord.ext.commands.BucketType.guild)
+ async def _eq_save(self, ctx, eq_preset: str = None):
+ """Save the current eq settings to a preset."""
+ if not self._player_check(ctx):
+ return await self._embed_msg(ctx, _("Nothing playing."))
+ if not eq_preset:
+ await self._embed_msg(ctx, _("Please enter a name for this equalizer preset."))
+ try:
+
+ def pred(m):
+ return (
+ m.channel == ctx.channel
+ and m.author == ctx.author
+ and not m.content.startswith(ctx.prefix)
+ )
+
+ eq_name_msg = await ctx.bot.wait_for("message", timeout=15.0, check=pred)
+ eq_preset = eq_name_msg.content.split(" ")[0].strip('"').lower()
+ except asyncio.TimeoutError:
+ return await self._embed_msg(
+ ctx, _("No equalizer preset name entered, try the command again later.")
+ )
+
+ eq_exists_msg = None
+ eq_preset = eq_preset.lower().lstrip(ctx.prefix)
+ eq_presets = await self.config.custom("EQUALIZER", ctx.guild.id).eq_presets()
+ eq_list = list(eq_presets.keys())
+
+ if len(eq_preset) > 20:
+ return await self._embed_msg(ctx, _("Try the command again with a shorter name."))
+ if eq_preset in eq_list:
+ embed = discord.Embed(
+ colour=await ctx.embed_colour(),
+ title=_("Preset name already exists, do you want to replace it?"),
+ )
+ eq_exists_msg = await ctx.send(embed=embed)
+ start_adding_reactions(eq_exists_msg, ReactionPredicate.YES_OR_NO_EMOJIS)
+ pred = ReactionPredicate.yes_or_no(eq_exists_msg, ctx.author)
+ await ctx.bot.wait_for("reaction_add", check=pred)
+ if not pred.result:
+ await self._clear_react(eq_exists_msg)
+ embed2 = discord.Embed(
+ colour=await ctx.embed_colour(), title=_("Not saving preset.")
+ )
+ return await eq_exists_msg.edit(embed=embed2)
+
+ player = lavalink.get_player(ctx.guild.id)
+ eq = player.fetch("eq", Equalizer())
+ to_append = {eq_preset: eq.bands}
+ new_eq_presets = {**eq_presets, **to_append}
+ await self.config.custom("EQUALIZER", ctx.guild.id).eq_presets.set(new_eq_presets)
+ embed3 = discord.Embed(
+ colour=await ctx.embed_colour(),
+ title=_(
+ "Current equalizer saved to the {preset_name} preset.".format(
+ preset_name=eq_preset
+ )
+ ),
+ )
+ if eq_exists_msg:
+ await self._clear_react(eq_exists_msg)
+ await eq_exists_msg.edit(embed=embed3)
+ else:
+ await ctx.send(embed=embed3)
+
+ @eq.command(name="set")
+ async def _eq_set(self, ctx, band_name_or_position, band_value: float):
+ """Set an eq band with a band number or name and value.
+
+ Band positions are 1-15 and values have a range of -0.25 to 1.0.
+ Band names are 25, 40, 63, 100, 160, 250, 400, 630, 1k, 1.6k, 2.5k, 4k, 6.3k, 10k, and 16k Hz.
+ Setting a band value to -0.25 nullifies it while +0.25 is double.
+ """
+ if not self._player_check(ctx):
+ return await self._embed_msg(ctx, _("Nothing playing."))
+ player = lavalink.get_player(ctx.guild.id)
+ band_names = [
+ "25",
+ "40",
+ "63",
+ "100",
+ "160",
+ "250",
+ "400",
+ "630",
+ "1k",
+ "1.6k",
+ "2.5k",
+ "4k",
+ "6.3k",
+ "10k",
+ "16k",
+ ]
+
+ eq = player.fetch("eq", Equalizer())
+ bands_num = eq._band_count
+ if band_value > 1:
+ band_value = 1
+ elif band_value <= -0.25:
+ band_value = -0.25
+ else:
+ band_value = round(band_value, 1)
+
+ try:
+ band_number = int(band_name_or_position) - 1
+ except ValueError:
+ band_number = None
+
+ if band_number not in range(0, bands_num) and band_name_or_position not in band_names:
+ return await self._embed_msg(
+ ctx,
+ _(
+ "Valid band numbers are 1-15 or the band names listed in the help for this command."
+ ),
+ )
+
+ if band_name_or_position in band_names:
+ band_pos = band_names.index(band_name_or_position)
+ band_int = False
+ eq.set_gain(int(band_pos), band_value)
+ await self._apply_gain(ctx.guild.id, int(band_pos), band_value)
+ else:
+ band_int = True
+ eq.set_gain(band_number, band_value)
+ await self._apply_gain(ctx.guild.id, band_number, band_value)
+
+ await self._eq_msg_clear(player.fetch("eq_message"))
+ await self.config.custom("EQUALIZER", ctx.guild.id).eq_bands.set(eq.bands)
+ player.store("eq", eq)
+ band_name = band_names[band_number] if band_int else band_name_or_position
+ message = await ctx.send(
+ content=box(eq.visualise(), lang="ini"),
+ embed=discord.Embed(
+ colour=await ctx.embed_colour(),
+ title=_(
+ "The {band_name}Hz band has been set to {band_value}.".format(
+ band_name=band_name, band_value=band_value
+ )
+ ),
+ ),
+ )
+ player.store("eq_message", message)
@commands.group()
@commands.guild_only()
@@ -1071,23 +1338,23 @@ class Audio(commands.Cog):
timeout=10.0,
)
except asyncio.TimeoutError:
- return await self._clear_react(message)
+ return await self._clear_react(message, emoji)
else:
if task is not None:
task.cancel()
reacts = {v: k for k, v in emoji.items()}
react = reacts[r.emoji]
if react == "prev":
- await self._clear_react(message)
+ await self._clear_react(message, emoji)
await ctx.invoke(self.prev)
elif react == "stop":
- await self._clear_react(message)
+ await self._clear_react(message, emoji)
await ctx.invoke(self.stop)
elif react == "pause":
- await self._clear_react(message)
+ await self._clear_react(message, emoji)
await ctx.invoke(self.pause)
elif react == "next":
- await self._clear_react(message)
+ await self._clear_react(message, emoji)
await ctx.invoke(self.skip)
@commands.command()
@@ -1237,8 +1504,10 @@ class Audio(commands.Cog):
if not await self._can_instaskip(ctx, ctx.author):
return await self._embed_msg(ctx, _("You need the DJ role to queue tracks."))
player = lavalink.get_player(ctx.guild.id)
+
player.store("channel", ctx.channel.id)
player.store("guild", ctx.guild.id)
+ await self._eq_check(ctx, player)
await self._data_check(ctx)
if (
not ctx.author.voice or ctx.author.voice.channel != player.channel
@@ -2191,6 +2460,7 @@ class Audio(commands.Cog):
return False
if not await self._currency_check(ctx, jukebox_price):
return False
+ await self._eq_check(ctx, player)
await self._data_check(ctx)
return True
@@ -2655,6 +2925,7 @@ class Audio(commands.Cog):
return await self._embed_msg(
ctx, _("You must be in the voice channel to enqueue tracks.")
)
+ await self._eq_check(ctx, player)
await self._data_check(ctx)
if not isinstance(query, list):
@@ -3208,6 +3479,9 @@ class Audio(commands.Cog):
if (player.is_playing) or (not player.is_playing and player.paused):
await self._embed_msg(ctx, _("Stopping..."))
await player.stop()
+ eq = player.fetch("eq")
+ if eq:
+ await self.config.custom("EQUALIZER", ctx.guild.id).eq_bands.set(eq.bands)
player.store("prev_requester", None)
player.store("prev_song", None)
player.store("playing_song", None)
@@ -3357,6 +3631,30 @@ class Audio(commands.Cog):
self._restart_connect()
+ async def _apply_gain(self, guild_id, band, gain):
+ const = {
+ "op": "equalizer",
+ "guildId": str(guild_id),
+ "bands": [{"band": band, "gain": gain}],
+ }
+
+ try:
+ await lavalink.get_player(guild_id).node.send({**const})
+ except (KeyError, IndexError):
+ pass
+
+ async def _apply_gains(self, guild_id, gains):
+ const = {
+ "op": "equalizer",
+ "guildId": str(guild_id),
+ "bands": [{"band": x, "gain": y} for x, y in enumerate(gains)],
+ }
+
+ try:
+ await lavalink.get_player(guild_id).node.send({**const})
+ except (KeyError, IndexError):
+ pass
+
async def _channel_check(self, ctx):
try:
player = lavalink.get_player(ctx.guild.id)
@@ -3407,11 +3705,16 @@ class Audio(commands.Cog):
else:
return False
- @staticmethod
- async def _clear_react(message):
+ async def _clear_react(self, message, emoji: dict = None):
try:
await message.clear_reactions()
- except (discord.Forbidden, discord.HTTPException):
+ except discord.Forbidden:
+ if not emoji:
+ return
+ for key in emoji.values():
+ await asyncio.sleep(0.2)
+ await message.remove_reaction(key, self.bot.user)
+ except (discord.HTTPException, discord.NotFound):
return
async def _currency_check(self, ctx, jukebox_price: int):
@@ -3516,6 +3819,119 @@ class Audio(commands.Cog):
embed = discord.Embed(colour=await ctx.embed_colour(), title=title)
await ctx.send(embed=embed)
+ async def _eq_check(self, ctx, player):
+ eq = player.fetch("eq", Equalizer())
+
+ config_bands = await self.config.custom("EQUALIZER", ctx.guild.id).eq_bands()
+ if not config_bands:
+ config_bands = eq.bands
+ await self.config.custom("EQUALIZER", ctx.guild.id).eq_bands.set(eq.bands)
+
+ if eq.bands != config_bands:
+ band_num = list(range(0, eq._band_count))
+ band_value = config_bands
+ eq_dict = {}
+ for k, v in zip(band_num, band_value):
+ eq_dict[k] = v
+ for band, value in eq_dict.items():
+ eq.set_gain(band, value)
+ player.store("eq", eq)
+ await self._apply_gains(ctx.guild.id, config_bands)
+
+ async def _eq_interact(self, ctx, player, eq, message, selected):
+ player.store("eq", eq)
+ emoji = {
+ "far_left": "◀",
+ "one_left": "⬅",
+ "max_output": "⏫",
+ "output_up": "🔼",
+ "output_down": "🔽",
+ "min_output": "⏬",
+ "one_right": "➡",
+ "far_right": "▶",
+ "reset": "⏺",
+ "info": "ℹ",
+ }
+ selector = f'{" " * 8}{" " * selected}^^'
+ try:
+ await message.edit(content=box(f"{eq.visualise()}\n{selector}", lang="ini"))
+ except discord.errors.NotFound:
+ return
+ try:
+ react_emoji, react_user = await self._get_eq_reaction(ctx, message, emoji)
+ except TypeError:
+ return
+
+ if not react_emoji:
+ await self.config.custom("EQUALIZER", ctx.guild.id).eq_bands.set(eq.bands)
+ await self._clear_react(message, emoji)
+
+ if react_emoji == "⬅":
+ await self._remove_react(message, react_emoji, react_user)
+ await self._eq_interact(ctx, player, eq, message, max(selected - 1, 0))
+
+ if react_emoji == "➡":
+ await self._remove_react(message, react_emoji, react_user)
+ await self._eq_interact(ctx, player, eq, message, min(selected + 1, 14))
+
+ if react_emoji == "🔼":
+ await self._remove_react(message, react_emoji, react_user)
+ _max = "{:.2f}".format(min(eq.get_gain(selected) + 0.1, 1.0))
+ eq.set_gain(selected, float(_max))
+ await self._apply_gain(ctx.guild.id, selected, _max)
+ await self._eq_interact(ctx, player, eq, message, selected)
+
+ if react_emoji == "🔽":
+ await self._remove_react(message, react_emoji, react_user)
+ _min = "{:.2f}".format(max(eq.get_gain(selected) - 0.1, -0.25))
+ eq.set_gain(selected, float(_min))
+ await self._apply_gain(ctx.guild.id, selected, _min)
+ await self._eq_interact(ctx, player, eq, message, selected)
+
+ if react_emoji == "⏫":
+ await self._remove_react(message, react_emoji, react_user)
+ _max = 1.0
+ eq.set_gain(selected, _max)
+ await self._apply_gain(ctx.guild.id, selected, _max)
+ await self._eq_interact(ctx, player, eq, message, selected)
+
+ if react_emoji == "⏬":
+ await self._remove_react(message, react_emoji, react_user)
+ _min = -0.25
+ eq.set_gain(selected, _min)
+ await self._apply_gain(ctx.guild.id, selected, _min)
+ await self._eq_interact(ctx, player, eq, message, selected)
+
+ if react_emoji == "◀":
+ await self._remove_react(message, react_emoji, react_user)
+ selected = 0
+ await self._eq_interact(ctx, player, eq, message, selected)
+
+ if react_emoji == "▶":
+ await self._remove_react(message, react_emoji, react_user)
+ selected = 14
+ await self._eq_interact(ctx, player, eq, message, selected)
+
+ if react_emoji == "⏺":
+ await self._remove_react(message, react_emoji, react_user)
+ for band in range(eq._band_count):
+ eq.set_gain(band, 0.0)
+ await self._apply_gains(ctx.guild.id, eq.bands)
+ await self._eq_interact(ctx, player, eq, message, selected)
+
+ if react_emoji == "ℹ":
+ await self._remove_react(message, react_emoji, react_user)
+ await ctx.send_help(self.eq)
+ await self._eq_interact(ctx, player, eq, message, selected)
+
+ @staticmethod
+ async def _eq_msg_clear(eq_message):
+ if eq_message is not None:
+ try:
+ await eq_message.delete()
+ except discord.errors.NotFound:
+ pass
+
async def _get_embed_colour(self, channel: discord.abc.GuildChannel):
# Unfortunately we need this for when context is unavailable.
if await self.bot.db.guild(channel.guild).use_bot_color():
@@ -3523,6 +3939,21 @@ class Audio(commands.Cog):
else:
return self.bot.color
+ async def _get_eq_reaction(self, ctx, message, emoji):
+ try:
+ reaction, user = await self.bot.wait_for(
+ "reaction_add",
+ check=lambda r, u: r.message.id == message.id
+ and u.id == ctx.author.id
+ and r.emoji in emoji.values(),
+ timeout=30,
+ )
+ except asyncio.TimeoutError:
+ await self._clear_react(message, emoji)
+ return None
+ else:
+ return reaction.emoji, user
+
async def _localtracks_folders(self, ctx):
if not await self._localtracks_check(ctx):
return
@@ -3591,6 +4022,13 @@ class Audio(commands.Cog):
queue_total_duration = remain + queue_duration
return queue_total_duration
+ @staticmethod
+ async def _remove_react(message, react_emoji, react_user):
+ try:
+ await message.remove_reaction(react_emoji, react_user)
+ except (discord.Forbidden, discord.HTTPException, discord.NotFound):
+ pass
+
@staticmethod
def _to_json(ctx, playlist_url, tracklist):
playlist = {"author": ctx.author.id, "playlist_url": playlist_url, "tracks": tracklist}
diff --git a/redbot/cogs/audio/equalizer.py b/redbot/cogs/audio/equalizer.py
new file mode 100644
index 000000000..ecb98c6ab
--- /dev/null
+++ b/redbot/cogs/audio/equalizer.py
@@ -0,0 +1,50 @@
+# The equalizer class and some audio eq functions are derived from
+# 180093157554388993's work, with his permission
+
+
+class Equalizer:
+ def __init__(self):
+ self._band_count = 15
+ self.bands = [0.0 for x in range(self._band_count)]
+
+ def set_gain(self, band: int, gain: float):
+ if band < 0 or band >= self._band_count:
+ raise IndexError(f"Band {band} does not exist!")
+
+ gain = min(max(gain, -0.25), 1.0)
+
+ self.bands[band] = gain
+
+ def get_gain(self, band: int):
+ if band < 0 or band >= self._band_count:
+ raise IndexError(f"Band {band} does not exist!")
+ return self.bands[band]
+
+ def visualise(self):
+ block = ""
+ bands = [str(band + 1).zfill(2) for band in range(self._band_count)]
+ bottom = (" " * 8) + " ".join(bands)
+ gains = [1.0, 0.9, 0.8, 0.7, 0.6, 0.5, 0.4, 0.3, 0.2, 0.1, 0.0, -0.1, -0.2, -0.25]
+
+ for gain in gains:
+ prefix = " "
+
+ if gain > 0:
+ prefix = "+"
+ elif gain == 0:
+ prefix = " "
+ else:
+ prefix = ""
+
+ block += f"{prefix}{gain:.2f} | "
+
+ for value in self.bands:
+ if value >= gain:
+ block += "[] "
+ else:
+ block += " "
+
+ block += "\n"
+
+ block += bottom
+ return block
From 25ccc11dc4e55dac9bc0374fedb3ca574e27b822 Mon Sep 17 00:00:00 2001
From: aikaterna <20862007+aikaterna@users.noreply.github.com>
Date: Sun, 23 Jun 2019 22:05:01 -0700
Subject: [PATCH 047/183] [Audio] Add [p]summon (#2786)
---
redbot/cogs/audio/audio.py | 35 +++++++++++++++++++++++++++++++++++
1 file changed, 35 insertions(+)
diff --git a/redbot/cogs/audio/audio.py b/redbot/cogs/audio/audio.py
index a08539241..ae96b0f6b 100644
--- a/redbot/cogs/audio/audio.py
+++ b/redbot/cogs/audio/audio.py
@@ -3487,6 +3487,41 @@ class Audio(commands.Cog):
player.store("playing_song", None)
player.store("requester", None)
+ @commands.command()
+ @commands.guild_only()
+ @commands.cooldown(1, 15, discord.ext.commands.BucketType.guild)
+ @commands.bot_has_permissions(embed_links=True)
+ async def summon(self, ctx):
+ """Summon the bot to a voice channel."""
+ dj_enabled = await self.config.guild(ctx.guild).dj_enabled()
+ try:
+ if (
+ not ctx.author.voice.channel.permissions_for(ctx.me).connect
+ or not ctx.author.voice.channel.permissions_for(ctx.me).move_members
+ and self._userlimit(ctx.author.voice.channel)
+ ):
+ return await self._embed_msg(
+ ctx, _("I don't have permission to connect to your channel.")
+ )
+ if not self._player_check(ctx):
+ await lavalink.connect(ctx.author.voice.channel)
+ player = lavalink.get_player(ctx.guild.id)
+ player.store("connect", datetime.datetime.utcnow())
+ else:
+ player = lavalink.get_player(ctx.guild.id)
+ if ctx.author.voice.channel == player.channel:
+ return
+ await player.move_to(ctx.author.voice.channel)
+ except AttributeError:
+ return await self._embed_msg(ctx, _("Connect to a voice channel first."))
+ except IndexError:
+ return await self._embed_msg(
+ ctx, _("Connection to Lavalink has not yet been established.")
+ )
+ if dj_enabled:
+ if not await self._can_instaskip(ctx, ctx.author):
+ return await self._embed_msg(ctx, _("You need the DJ role to summon the bot."))
+
@commands.command()
@commands.guild_only()
@commands.bot_has_permissions(embed_links=True)
From 870b61536460f35a23a388cf3d1c819a31899fcc Mon Sep 17 00:00:00 2001
From: aikaterna <20862007+aikaterna@users.noreply.github.com>
Date: Sun, 23 Jun 2019 22:09:04 -0700
Subject: [PATCH 048/183] [Audio] Queue & misc cleanup (#2784)
* [Audio] Queue & misc cleanup
---
redbot/cogs/audio/audio.py | 75 +++++++++++++++++++++++---------------
1 file changed, 46 insertions(+), 29 deletions(-)
diff --git a/redbot/cogs/audio/audio.py b/redbot/cogs/audio/audio.py
index ae96b0f6b..b866793a3 100644
--- a/redbot/cogs/audio/audio.py
+++ b/redbot/cogs/audio/audio.py
@@ -126,7 +126,7 @@ class Audio(commands.Cog):
self._connect_task = self.bot.loop.create_task(self.attempt_connect())
- async def attempt_connect(self, timeout: int = 30):
+ async def attempt_connect(self, timeout: int = 50):
self._connection_aborted = False
max_retries = 5
retry_count = 0
@@ -1335,7 +1335,7 @@ class Audio(commands.Cog):
(r, u) = await self.bot.wait_for(
"reaction_add",
check=ReactionPredicate.with_emojis(expected, message, ctx.author),
- timeout=10.0,
+ timeout=30.0,
)
except asyncio.TimeoutError:
return await self._clear_react(message, emoji)
@@ -1468,7 +1468,6 @@ class Audio(commands.Cog):
@commands.bot_has_permissions(embed_links=True)
async def play(self, ctx, *, query):
"""Play a URL or search for a track."""
-
guild_data = await self.config.guild(ctx.guild).all()
restrict = await self.config.restrict()
if restrict:
@@ -2554,23 +2553,30 @@ class Audio(commands.Cog):
@commands.group(invoke_without_command=True)
@commands.guild_only()
@commands.bot_has_permissions(embed_links=True, add_reactions=True)
- async def queue(self, ctx, *, page="1"):
- """List the queue.
+ async def queue(self, ctx, *, page: int = 1):
+ """List the songs in the queue."""
+
+ async def _queue_menu(
+ ctx: commands.Context,
+ pages: list,
+ controls: dict,
+ message: discord.Message,
+ page: int,
+ timeout: float,
+ emoji: str,
+ ):
+ if message:
+ await ctx.send_help(self.queue)
+ await message.delete()
+ return None
+
+ QUEUE_CONTROLS = {"⬅": prev_page, "❌": close_menu, "➡": next_page, "ℹ": _queue_menu}
- Use [p]queue search to search the queue.
- """
if not self._player_check(ctx):
return await self._embed_msg(ctx, _("There's nothing in the queue."))
player = lavalink.get_player(ctx.guild.id)
if not player.queue:
return await self._embed_msg(ctx, _("There's nothing in the queue."))
- if not page.isdigit():
- if page.startswith("search "):
- return await self._queue_search(ctx=ctx, search_words=page.replace("search ", ""))
- else:
- return
- else:
- page = int(page)
len_queue_pages = math.ceil(len(player.queue) / 10)
queue_page_list = []
for page_num in range(1, len_queue_pages + 1):
@@ -2578,7 +2584,7 @@ class Audio(commands.Cog):
queue_page_list.append(embed)
if page > len_queue_pages:
page = len_queue_pages
- await menu(ctx, queue_page_list, DEFAULT_CONTROLS, page=(page - 1))
+ await menu(ctx, queue_page_list, QUEUE_CONTROLS, page=(page - 1))
async def _build_queue_page(self, ctx, player, page_num):
shuffle = await self.config.guild(ctx.guild).shuffle()
@@ -2676,18 +2682,6 @@ class Audio(commands.Cog):
embed.set_footer(text=text)
return embed
- async def _queue_search(self, ctx, *, search_words):
- player = lavalink.get_player(ctx.guild.id)
- search_list = await self._build_queue_search_list(player.queue, search_words)
- if not search_list:
- return await self._embed_msg(ctx, _("No matches."))
- len_search_pages = math.ceil(len(search_list) / 10)
- search_page_list = []
- for page_num in range(1, len_search_pages + 1):
- embed = await self._build_queue_search_page(ctx, page_num, search_list)
- search_page_list.append(embed)
- await menu(ctx, search_page_list, DEFAULT_CONTROLS)
-
async def _build_queue_search_list(self, queue_list, search_words):
track_list = []
queue_idx = 0
@@ -2720,8 +2714,9 @@ class Audio(commands.Cog):
for i, track in enumerate(
search_list[search_idx_start:search_idx_end], start=search_idx_start
):
+
track_idx = i + 1
- if command == "search":
+ if type(track) is str:
local_path = await self.config.localpath()
track_location = track.replace("localtrack:{}/localtracks/".format(local_path), "")
track_match += "`{}.` **{}**\n".format(track_idx, track_location)
@@ -2791,6 +2786,28 @@ class Audio(commands.Cog):
).format(removed_tracks=removed_tracks),
)
+ @queue.command(name="search")
+ @commands.guild_only()
+ async def _queue_search(self, ctx, *, search_words: str):
+ """Search the queue."""
+ try:
+ player = lavalink.get_player(ctx.guild.id)
+ except KeyError:
+ return await self._embed_msg(ctx, _("There's nothing in the queue."))
+ if not self._player_check(ctx) or not player.queue:
+ return await self._embed_msg(ctx, _("There's nothing in the queue."))
+
+ search_list = await self._build_queue_search_list(player.queue, search_words)
+ if not search_list:
+ return await self._embed_msg(ctx, _("No matches."))
+
+ len_search_pages = math.ceil(len(search_list) / 10)
+ search_page_list = []
+ for page_num in range(1, len_search_pages + 1):
+ embed = await self._build_queue_search_page(ctx, page_num, search_list)
+ search_page_list.append(embed)
+ await menu(ctx, search_page_list, DEFAULT_CONTROLS)
+
@commands.command()
@commands.guild_only()
@commands.bot_has_permissions(embed_links=True)
@@ -3248,7 +3265,7 @@ class Audio(commands.Cog):
@commands.guild_only()
@commands.bot_has_permissions(embed_links=True)
async def sing(self, ctx):
- """Make Red sing one of her songs"""
+ """Make Red sing one of her songs."""
ids = (
"zGTkAVsrfg8",
"cGMWL8cOeAU",
From 52f5d5cd6abde291a37c6eabece0bf548280665a Mon Sep 17 00:00:00 2001
From: kennnyshiwa <44236678+kennnyshiwa@users.noreply.github.com>
Date: Mon, 24 Jun 2019 02:39:03 -0400
Subject: [PATCH 049/183] [Mod] add role mentions to userinfo and reverse role
sorting (#2759)
* add role mentions to userinfo and reverse role sorting
This small PR adds the role mentions to userinfo and reverses the sorting so that the top most role of a user is at the left of the embed
* Remove sorting as it's handled by d.py
---
redbot/cogs/mod/names.py | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/redbot/cogs/mod/names.py b/redbot/cogs/mod/names.py
index 4a4bb4edf..e3e7a269b 100644
--- a/redbot/cogs/mod/names.py
+++ b/redbot/cogs/mod/names.py
@@ -91,7 +91,7 @@ class ModInfo(MixinMeta):
special_date = datetime(2016, 1, 10, 6, 8, 4, 443000)
is_special = user.id == 96130341705637888 and guild.id == 133049272517001216
- roles = sorted(user.roles)[1:]
+ roles = user.roles[-1:0:-1]
names, nicks = await self.get_names_and_nicks(user)
joined_at = user.joined_at if not is_special else special_date
@@ -125,7 +125,7 @@ class ModInfo(MixinMeta):
activity = _("Watching {}").format(user.activity.name)
if roles:
- roles = ", ".join([x.name for x in roles])
+ roles = ", ".join([x.mention for x in roles])
else:
roles = None
From f91d8610ae3cfcca48144e9745c5edbf424250e0 Mon Sep 17 00:00:00 2001
From: Toby Harradine
Date: Wed, 26 Jun 2019 00:52:33 +1000
Subject: [PATCH 050/183] [ModLog] Use custom scopes for ModLog Config (#2766)
Modlog was the biggest culprit for seriously large documents in the MongoDB backend, since it stored all cases as nested dicts in the guild scope. So, for example, on the Fortnite server, the guild document for Kowlin's bot had exceeded 8MB.
This commit gives each case its own document. It also does the same for casetypes. Not only does it remove the possibility of the document exceeding the maximum size in MongoDB, it's also just more efficient for all backends.
Other misc changes: Fixed a bunch of type-hints, and also added more support for when an object related to a case (user, moderator, channel etc.) can't be found (because it was deleted or something rather)
Signed-off-by: Toby Harradine
---
redbot/__main__.py | 2 +-
redbot/core/modlog.py | 339 ++++++++++++++++++++++++------------------
redbot/pytest/mod.py | 4 +-
3 files changed, 201 insertions(+), 144 deletions(-)
diff --git a/redbot/__main__.py b/redbot/__main__.py
index 8509def4a..e64de887a 100644
--- a/redbot/__main__.py
+++ b/redbot/__main__.py
@@ -117,7 +117,7 @@ def main():
if cli_flags.dev:
red.add_cog(Dev())
# noinspection PyProtectedMember
- modlog._init()
+ loop.run_until_complete(modlog._init())
# noinspection PyProtectedMember
bank._init()
diff --git a/redbot/core/modlog.py b/redbot/core/modlog.py
index 9b95e2abe..7a6db696b 100644
--- a/redbot/core/modlog.py
+++ b/redbot/core/modlog.py
@@ -1,5 +1,5 @@
from datetime import datetime
-from typing import List, Union
+from typing import List, Union, Optional, cast
import discord
@@ -30,18 +30,66 @@ __all__ = [
"reset_cases",
]
-_DEFAULT_GLOBAL = {"casetypes": {}}
+_conf: Optional[Config] = None
-_DEFAULT_GUILD = {"mod_log": None, "cases": {}, "casetypes": {}}
-
-_conf: Config = None
+_CASETYPES = "CASETYPES"
+_CASES = "CASES"
+_SCHEMA_VERSION = 2
-def _init():
+async def _init():
global _conf
_conf = Config.get_conf(None, 1354799444, cog_name="ModLog")
- _conf.register_global(**_DEFAULT_GLOBAL)
- _conf.register_guild(**_DEFAULT_GUILD)
+ _conf.register_global(schema_version=1)
+ _conf.register_guild(mod_log=None, casetypes={})
+ _conf.init_custom(_CASETYPES, 1)
+ _conf.init_custom(_CASES, 2)
+ _conf.register_custom(
+ _CASETYPES, default_setting=None, image=None, case_str=None, audit_type=None
+ )
+ _conf.register_custom(
+ _CASES,
+ case_number=None,
+ action_type=None,
+ guild=None,
+ created_at=None,
+ user=None,
+ moderator=None,
+ reason=None,
+ until=None,
+ channel=None,
+ amended_by=None,
+ modified_at=None,
+ message=None,
+ )
+ await _migrate_config(from_version=await _conf.schema_version(), to_version=_SCHEMA_VERSION)
+
+
+async def _migrate_config(from_version: int, to_version: int):
+ if from_version == to_version:
+ return
+ elif from_version < to_version:
+ # casetypes go from GLOBAL -> casetypes to CASETYPES
+ all_casetypes = await _conf.get_raw("casetypes", default={})
+ if all_casetypes:
+ await _conf.custom(_CASETYPES).set(all_casetypes)
+
+ # cases go from GUILD -> guild_id -> cases to CASES -> guild_id -> cases
+ all_guild_data = await _conf.all_guilds()
+ all_cases = {}
+ for guild_id, guild_data in all_guild_data.items():
+ guild_cases = guild_data.pop("cases", None)
+ if guild_cases:
+ all_cases[str(guild_id)] = guild_cases
+ await _conf.custom(_CASES).set(all_cases)
+
+ # new schema is now in place
+ await _conf.schema_version.set(_SCHEMA_VERSION)
+
+ # migration done, now let's delete all the old stuff
+ await _conf.clear_raw("casetypes")
+ for guild_id in all_guild_data:
+ await _conf.guild(cast(discord.Guild, discord.Object(id=guild_id))).clear_raw("cases")
class Case:
@@ -53,15 +101,15 @@ class Case:
guild: discord.Guild,
created_at: int,
action_type: str,
- user: discord.User,
- moderator: discord.Member,
+ user: Union[discord.User, int],
+ moderator: discord.User,
case_number: int,
reason: str = None,
until: int = None,
- channel: discord.TextChannel = None,
- amended_by: discord.Member = None,
- modified_at: int = None,
- message: discord.Message = None,
+ channel: Optional[Union[discord.TextChannel, discord.VoiceChannel, int]] = None,
+ amended_by: Optional[discord.User] = None,
+ modified_at: Optional[int] = None,
+ message: Optional[discord.Message] = None,
):
self.bot = bot
self.guild = guild
@@ -90,7 +138,7 @@ class Case:
for item in list(data.keys()):
setattr(self, item, data[item])
- await _conf.guild(self.guild).cases.set_raw(str(self.case_number), value=self.to_json())
+ await _conf.custom(_CASES, str(self.guild.id), str(self.case_number)).set(self.to_json())
self.bot.dispatch("modlog_case_edit", self)
async def message_content(self, embed: bool = True):
@@ -119,11 +167,7 @@ class Case:
reason = "**Reason:** Use the `reason` command to add it"
if self.moderator is not None:
- moderator = escape_spoilers(
- "{}#{} ({})\n".format(
- self.moderator.name, self.moderator.discriminator, self.moderator.id
- )
- )
+ moderator = escape_spoilers(f"{self.moderator} ({self.moderator.id})")
else:
moderator = "Unknown"
until = None
@@ -151,21 +195,28 @@ class Case:
datetime.fromtimestamp(self.modified_at).strftime("%Y-%m-%d %H:%M:%S")
)
- user = escape_spoilers(
- filter_invites(
- "{}#{} ({})\n".format(self.user.name, self.user.discriminator, self.user.id)
- )
- ) # Invites and spoilers get rendered even in embeds.
+ if isinstance(self.user, int):
+ user = f"Deleted User#0000 ({self.user})"
+ avatar_url = None
+ else:
+ user = escape_spoilers(
+ filter_invites(f"{self.user} ({self.user.id})")
+ ) # Invites and spoilers get rendered even in embeds.
+ avatar_url = self.user.avatar_url
+
if embed:
emb = discord.Embed(title=title, description=reason)
- emb.set_author(name=user, icon_url=self.user.avatar_url)
+ if avatar_url is not None:
+ emb.set_author(name=user, icon_url=avatar_url)
emb.add_field(name="Moderator", value=moderator, inline=False)
if until and duration:
emb.add_field(name="Until", value=until)
emb.add_field(name="Duration", value=duration)
- if self.channel:
+ if isinstance(self.channel, int):
+ emb.add_field(name="Channel", value=f"{self.channel} (deleted)", inline=False)
+ elif self.channel is not None:
emb.add_field(name="Channel", value=self.channel.name, inline=False)
if amended_by:
emb.add_field(name="Amended by", value=amended_by)
@@ -203,12 +254,15 @@ class Case:
mod = self.moderator.id
else:
mod = None
+ if isinstance(self.user, int):
+ user_id = self.user
+ else:
+ user_id = self.user.id
data = {
- "case_number": self.case_number,
"action_type": self.action_type,
"guild": self.guild.id,
"created_at": self.created_at,
- "user": self.user.id,
+ "user": user_id,
"moderator": mod,
"reason": self.reason,
"until": self.until,
@@ -220,7 +274,9 @@ class Case:
return data
@classmethod
- async def from_json(cls, mod_channel: discord.TextChannel, bot: Red, data: dict):
+ async def from_json(
+ cls, mod_channel: discord.TextChannel, bot: Red, case_number: int, data: dict, **kwargs
+ ):
"""Get a Case object from the provided information
Parameters
@@ -229,8 +285,14 @@ class Case:
The mod log channel for the guild
bot: Red
The bot's instance. Needed to get the target user
+ case_number: int
+ The case's number.
data: dict
The JSON representation of the case to be gotten
+ **kwargs
+ Extra attributes for the Case instance which override values
+ in the data dict. These should be complete objects and not
+ IDs, where possible.
Returns
-------
@@ -246,31 +308,55 @@ class Case:
`discord.HTTPException`
A generic API issue
"""
- guild = mod_channel.guild
- if data["message"]:
- try:
- message = await mod_channel.fetch_message(data["message"])
- except discord.NotFound:
+ guild = kwargs.get("guild") or mod_channel.guild
+
+ message = kwargs.get("message")
+ if message is None:
+ message_id = data.get("message")
+ if message_id is not None:
+ try:
+ message = discord.utils.get(bot.cached_messages, id=message_id)
+ except AttributeError:
+ # bot.cached_messages didn't exist prior to discord.py 1.1.0
+ message = None
+ if message is None:
+ try:
+ message = await mod_channel.fetch_message(message_id)
+ except (discord.NotFound, AttributeError):
+ message = None
+ else:
message = None
- user = await bot.fetch_user(data["user"])
- moderator = guild.get_member(data["moderator"])
- channel = guild.get_channel(data["channel"])
- amended_by = guild.get_member(data["amended_by"])
- case_guild = bot.get_guild(data["guild"])
+
+ user_objects = {"user": None, "moderator": None, "amended_by": None}
+ for user_key in tuple(user_objects):
+ user_object = kwargs.get(user_key)
+ if user_object is None:
+ user_id = data.get(user_key)
+ if user_id is None:
+ user_object = None
+ else:
+ user_object = bot.get_user(user_id)
+ if user_object is None:
+ try:
+ user_object = await bot.fetch_user(user_id)
+ except discord.NotFound:
+ user_object = user_id
+ user_objects[user_key] = user_object
+
+ channel = kwargs.get("channel") or guild.get_channel(data["channel"]) or data["channel"]
+ case_guild = kwargs.get("guild") or bot.get_guild(data["guild"])
return cls(
bot=bot,
guild=case_guild,
created_at=data["created_at"],
action_type=data["action_type"],
- user=user,
- moderator=moderator,
- case_number=data["case_number"],
+ case_number=case_number,
reason=data["reason"],
until=data["until"],
channel=channel,
- amended_by=amended_by,
modified_at=data["modified_at"],
message=message,
+ **user_objects,
)
@@ -300,8 +386,8 @@ class CaseType:
default_setting: bool,
image: str,
case_str: str,
- audit_type: str = None,
- guild: discord.Guild = None,
+ audit_type: Optional[str] = None,
+ guild: Optional[discord.Guild] = None,
):
self.name = name
self.default_setting = default_setting
@@ -318,7 +404,7 @@ class CaseType:
"case_str": self.case_str,
"audit_type": self.audit_type,
}
- await _conf.casetypes.set_raw(self.name, value=data)
+ await _conf.custom(_CASETYPES, self.name).set(data)
async def is_enabled(self) -> bool:
"""
@@ -352,23 +438,27 @@ class CaseType:
await _conf.guild(self.guild).casetypes.set_raw(self.name, value=enabled)
@classmethod
- def from_json(cls, data: dict):
+ def from_json(cls, name: str, data: dict, **kwargs):
"""
Parameters
----------
- data: dict
- The data to create an instance from
+ name : str
+ The casetype's name.
+ data : dict
+ The JSON data to create an instance from
+ **kwargs
+ Values for other attributes of the instance
Returns
-------
CaseType
"""
- return cls(**data)
+ return cls(name=name, **data, **kwargs)
-async def get_next_case_number(guild: discord.Guild) -> str:
+async def get_next_case_number(guild: discord.Guild) -> int:
"""
Gets the next case number
@@ -379,12 +469,15 @@ async def get_next_case_number(guild: discord.Guild) -> str:
Returns
-------
- str
+ int
The next case number
"""
- cases = sorted((await _conf.guild(guild).get_raw("cases")), key=lambda x: int(x), reverse=True)
- return str(int(cases[0]) + 1) if cases else "1"
+ case_numbers = (await _conf.custom(_CASES, guild.id).all()).keys()
+ if not case_numbers:
+ return 1
+ else:
+ return max(map(int, case_numbers)) + 1
async def get_case(case_number: int, guild: discord.Guild, bot: Red) -> Case:
@@ -412,11 +505,11 @@ async def get_case(case_number: int, guild: discord.Guild, bot: Red) -> Case:
"""
try:
- case = await _conf.guild(guild).cases.get_raw(str(case_number))
+ case = await _conf.custom(_CASES, str(guild.id), str(case_number)).all()
except KeyError as e:
raise RuntimeError("That case does not exist for guild {}".format(guild.name)) from e
mod_channel = await get_modlog_channel(guild)
- return await Case.from_json(mod_channel, bot, case)
+ return await Case.from_json(mod_channel, bot, case_number, case)
async def get_all_cases(guild: discord.Guild, bot: Red) -> List[Case]:
@@ -436,12 +529,12 @@ async def get_all_cases(guild: discord.Guild, bot: Red) -> List[Case]:
A list of all cases for the guild
"""
- cases = await _conf.guild(guild).get_raw("cases")
- case_numbers = list(cases.keys())
- case_list = []
- for case in case_numbers:
- case_list.append(await get_case(case, guild, bot))
- return case_list
+ cases = await _conf.custom(_CASES, str(guild.id)).all()
+ mod_channel = await get_modlog_channel(guild)
+ return [
+ await Case.from_json(mod_channel, bot, case_number, case_data)
+ for case_number, case_data in cases.items()
+ ]
async def get_cases_for_member(
@@ -470,15 +563,13 @@ async def get_cases_for_member(
------
ValueError
If at least one of member or member_id is not provided
- `discord.NotFound`
- A user with this ID does not exist.
`discord.Forbidden`
The bot does not have permission to fetch the modlog message which was sent.
`discord.HTTPException`
Fetching the user failed.
"""
- cases = await _conf.guild(guild).get_raw("cases")
+ cases = await _conf.custom(_CASES, str(guild.id)).all()
if not (member_id or member):
raise ValueError("Expected a member or a member id to be provided.") from None
@@ -487,43 +578,21 @@ async def get_cases_for_member(
member_id = member.id
if not member:
- member = guild.get_member(member_id)
+ member = bot.get_user(member_id)
if not member:
- member = await bot.fetch_user(member_id)
+ try:
+ member = await bot.fetch_user(member_id)
+ except discord.NotFound:
+ member = member_id
try:
- mod_channel = await get_modlog_channel(guild)
+ modlog_channel = await get_modlog_channel(guild)
except RuntimeError:
- mod_channel = None
-
- async def make_case(data: dict) -> Case:
-
- message = None
- if data["message"] and mod_channel:
- try:
- message = await mod_channel.fetch_message(data["message"])
- except discord.NotFound:
- pass
-
- return Case(
- bot=bot,
- guild=bot.get_guild(data["guild"]),
- created_at=data["created_at"],
- action_type=data["action_type"],
- user=member,
- moderator=guild.get_member(data["moderator"]),
- case_number=data["case_number"],
- reason=data["reason"],
- until=data["until"],
- channel=guild.get_channel(data["channel"]),
- amended_by=guild.get_member(data["amended_by"]),
- modified_at=data["modified_at"],
- message=message,
- )
+ modlog_channel = None
cases = [
- await make_case(case_data)
- for case_data in cases.values()
+ await Case.from_json(modlog_channel, bot, case_number, case_data, user=member, guild=guild)
+ for case_number, case_data in cases.items()
if case_data["user"] == member_id
]
@@ -536,11 +605,11 @@ async def create_case(
created_at: datetime,
action_type: str,
user: Union[discord.User, discord.Member],
- moderator: discord.Member = None,
- reason: str = None,
- until: datetime = None,
- channel: discord.TextChannel = None,
-) -> Union[Case, None]:
+ moderator: Optional[Union[discord.User, discord.Member]] = None,
+ reason: Optional[str] = None,
+ until: Optional[datetime] = None,
+ channel: Optional[discord.TextChannel] = None,
+) -> Optional[Case]:
"""
Creates a new case.
@@ -548,36 +617,36 @@ async def create_case(
Parameters
----------
- bot: `Red`
+ bot: Red
The bot object
- guild: `discord.Guild`
+ guild: discord.Guild
The guild the action was taken in
created_at: datetime
The time the action occurred at
action_type: str
The type of action that was taken
- user: `discord.User` or `discord.Member`
+ user: Union[discord.User, discord.Member]
The user target by the action
- moderator: `discord.Member`
+ moderator: Optional[Union[discord.User, discord.Member]]
The moderator who took the action
- reason: str
+ reason: Optional[str]
The reason the action was taken
- until: datetime
+ until: Optional[datetime]
The time the action is in effect until
- channel: `discord.TextChannel` or `discord.VoiceChannel`
+ channel: Optional[discord.TextChannel]
The channel the action was taken in
"""
case_type = await get_casetype(action_type, guild)
if case_type is None:
- return None
+ return
if not await case_type.is_enabled():
- return None
+ return
if user == bot.user:
- return None
+ return
- next_case_number = int(await get_next_case_number(guild))
+ next_case_number = await get_next_case_number(guild)
case = Case(
bot,
@@ -594,12 +663,12 @@ async def create_case(
modified_at=None,
message=None,
)
- await _conf.guild(guild).cases.set_raw(str(next_case_number), value=case.to_json())
+ await _conf.custom(_CASES, str(guild.id), str(next_case_number)).set(case.to_json())
bot.dispatch("modlog_case_create", case)
return case
-async def get_casetype(name: str, guild: discord.Guild = None) -> Union[CaseType, None]:
+async def get_casetype(name: str, guild: Optional[discord.Guild] = None) -> Optional[CaseType]:
"""
Gets the case type
@@ -607,22 +676,21 @@ async def get_casetype(name: str, guild: discord.Guild = None) -> Union[CaseType
----------
name: str
The name of the case type to get
- guild: discord.Guild
+ guild: Optional[discord.Guild]
If provided, sets the case type's guild attribute to this guild
Returns
-------
- CaseType or None
+ Optional[CaseType]
"""
- casetypes = await _conf.get_raw("casetypes")
- if name in casetypes:
- data = casetypes[name]
- data["name"] = name
- casetype = CaseType.from_json(data)
+ try:
+ data = await _conf.custom(_CASETYPES, name).all()
+ except KeyError:
+ return
+ else:
+ casetype = CaseType.from_json(name, data)
casetype.guild = guild
return casetype
- else:
- return None
async def get_all_casetypes(guild: discord.Guild = None) -> List[CaseType]:
@@ -635,15 +703,10 @@ async def get_all_casetypes(guild: discord.Guild = None) -> List[CaseType]:
A list of case types
"""
- casetypes = await _conf.get_raw("casetypes", default={})
- typelist = []
- for ct in casetypes.keys():
- data = casetypes[ct]
- data["name"] = ct
- casetype = CaseType.from_json(data)
- casetype.guild = guild
- typelist.append(casetype)
- return typelist
+ return [
+ CaseType.from_json(name, data, guild=guild)
+ for name, data in await _conf.custom(_CASETYPES).all()
+ ]
async def register_casetype(
@@ -822,7 +885,7 @@ async def set_modlog_channel(
return True
-async def reset_cases(guild: discord.Guild) -> bool:
+async def reset_cases(guild: discord.Guild) -> None:
"""
Wipes all modlog cases for the specified guild
@@ -831,14 +894,8 @@ async def reset_cases(guild: discord.Guild) -> bool:
guild: `discord.Guild`
The guild to reset cases for
- Returns
- -------
- bool
- `True` if successful
-
"""
- await _conf.guild(guild).cases.set({})
- return True
+ await _conf.custom(_CASES, str(guild.id)).clear()
def _strfdelta(delta):
diff --git a/redbot/pytest/mod.py b/redbot/pytest/mod.py
index 30b2fcda3..243af525b 100644
--- a/redbot/pytest/mod.py
+++ b/redbot/pytest/mod.py
@@ -5,11 +5,11 @@ __all__ = ["mod"]
@pytest.fixture
-def mod(config, monkeypatch):
+async def mod(config, monkeypatch):
from redbot.core import Config
with monkeypatch.context() as m:
m.setattr(Config, "get_conf", lambda *args, **kwargs: config)
- modlog._init()
+ await modlog._init()
return modlog
From 49819a2eebd3b9f891dd2c1ca1e63d0818a08a74 Mon Sep 17 00:00:00 2001
From: Toby Harradine
Date: Wed, 26 Jun 2019 20:39:22 +1000
Subject: [PATCH 051/183] [ModLog] Fix `get_all_casetypes()` (#2807)
Signed-off-by: Toby Harradine
---
redbot/core/modlog.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/redbot/core/modlog.py b/redbot/core/modlog.py
index 7a6db696b..62dd1e03a 100644
--- a/redbot/core/modlog.py
+++ b/redbot/core/modlog.py
@@ -705,7 +705,7 @@ async def get_all_casetypes(guild: discord.Guild = None) -> List[CaseType]:
"""
return [
CaseType.from_json(name, data, guild=guild)
- for name, data in await _conf.custom(_CASETYPES).all()
+ for name, data in (await _conf.custom(_CASETYPES).all()).items()
]
From a0f34bbbd9612ad9829ae717271c3b5fae545354 Mon Sep 17 00:00:00 2001
From: aikaterna <20862007+aikaterna@users.noreply.github.com>
Date: Wed, 26 Jun 2019 17:48:06 -0700
Subject: [PATCH 052/183] [Audio] Move DJ role check in [p]summon (#2799)
---
redbot/cogs/audio/audio.py | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/redbot/cogs/audio/audio.py b/redbot/cogs/audio/audio.py
index b866793a3..884fece62 100644
--- a/redbot/cogs/audio/audio.py
+++ b/redbot/cogs/audio/audio.py
@@ -3511,6 +3511,9 @@ class Audio(commands.Cog):
async def summon(self, ctx):
"""Summon the bot to a voice channel."""
dj_enabled = await self.config.guild(ctx.guild).dj_enabled()
+ if dj_enabled:
+ if not await self._can_instaskip(ctx, ctx.author):
+ return await self._embed_msg(ctx, _("You need the DJ role to summon the bot."))
try:
if (
not ctx.author.voice.channel.permissions_for(ctx.me).connect
@@ -3535,9 +3538,6 @@ class Audio(commands.Cog):
return await self._embed_msg(
ctx, _("Connection to Lavalink has not yet been established.")
)
- if dj_enabled:
- if not await self._can_instaskip(ctx, ctx.author):
- return await self._embed_msg(ctx, _("You need the DJ role to summon the bot."))
@commands.command()
@commands.guild_only()
From d1d4ec3e386175e782591802c0f44c90f53c9023 Mon Sep 17 00:00:00 2001
From: aikaterna <20862007+aikaterna@users.noreply.github.com>
Date: Thu, 27 Jun 2019 05:13:01 -0700
Subject: [PATCH 053/183] [Audio] No capitalization needed (#2801)
---
redbot/cogs/audio/audio.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/redbot/cogs/audio/audio.py b/redbot/cogs/audio/audio.py
index 884fece62..eb43d5f70 100644
--- a/redbot/cogs/audio/audio.py
+++ b/redbot/cogs/audio/audio.py
@@ -907,7 +907,7 @@ class Audio(commands.Cog):
eq_values = eq_presets[eq_preset]
except KeyError:
return await self._embed_msg(
- ctx, _("No preset named {eq_preset}.".format(eq_preset=eq_preset.capitalize()))
+ ctx, _("No preset named {eq_preset}.".format(eq_preset=eq_preset))
)
await self.config.custom("EQUALIZER", ctx.guild.id).eq_bands.set(eq_values)
if not self._player_check(ctx):
From 461f56bca11bbabf4e4fd742fe362041a1041d89 Mon Sep 17 00:00:00 2001
From: Toby Harradine
Date: Fri, 28 Jun 2019 00:16:14 +1000
Subject: [PATCH 054/183] Kill Pipfile, update dependencies, and add dep
bumping tools (#2806)
### Replacement for pipenv's environment setup
First of all, there's a new Make recipe for all devs and contributors on both Windows and Posix, `make setupenv`, which is kind of a replacement for `pipenv install --dev`. It creates a virtual environment in `.venv` using the inbuilt `venv` module, clearing out any existing virtual environment if needed first. Then it installs all dev dependencies using our new `dev-requirements.txt` file. `CONTRIBUTING.md` has been updated to reflect all of this.
### Dependency version bumping tool
Secondly, I've added a python script, `tools/bumpdeps.py` to help with bumping dependency versions. It has its own Make recipe too, `make bumpdeps`. This script won't work on Windows (yet). It reads the `tools/primary_deps.ini` file, which contains the primary requirements of Red and its extras with loose version specifiers, and outputs all pinned dependencies, in `setup.cfg` format. It's not a foolproof dependency resolver, it's quite simple, but it's bound to help out a lot. It'll try to give warnings if there might be a version conflict, but updating `setup.cfg` with its output and then doing `pip install -r dev-requirements.txt` will allow pip to issue warnings if something is conflicting.
So to add a new dependency, add it to `tools/primary_deps.ini` in the appropriate place, and either use `make bumpdeps` to completely update all dependencies, or simply add it to `setup.cfg` manually with its sub-dependencies, and all versions pinned.
### Sphinx 2.1.2 (docs changes)
The sphinx update brought along the ability to disable type annotations being rendered in function and method signatures, and I have gladly gone and done that. Type annotations should already be specified under the "Parameters" section, and the way sphinx renders them in function signatures makes them much harder to read.
Also, documented classes will now display what classes they inherit from.
Signed-off-by: Toby Harradine
---
.github/CONTRIBUTING.md | 32 +-
.gitignore | 2 +
Makefile | 10 +
Pipfile | 11 -
Pipfile.lock | 885 ----------------------------------------
dev-requirements.txt | 3 +
docs/conf.py | 9 +-
make.bat | 7 +
redbot/core/__init__.py | 4 -
redbot/core/modlog.py | 2 +-
setup.cfg | 77 ++--
tools/bumpdeps.py | 171 ++++++++
tools/primary_deps.ini | 40 ++
13 files changed, 306 insertions(+), 947 deletions(-)
delete mode 100644 Pipfile
delete mode 100644 Pipfile.lock
create mode 100644 dev-requirements.txt
create mode 100755 tools/bumpdeps.py
create mode 100644 tools/primary_deps.ini
diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md
index d7dedc705..0858e15df 100644
--- a/.github/CONTRIBUTING.md
+++ b/.github/CONTRIBUTING.md
@@ -56,24 +56,27 @@ The following requirements must be installed prior to setting up:
- Python 3.7.0 or greater
- git
- pip
- - pipenv
-If you're not on Windows, you can optionally install [pyenv](https://github.com/pyenv/pyenv), which will help you run tests for different python versions.
+If you're not on Windows, you should also have GNU make installed, and you can optionally install [pyenv](https://github.com/pyenv/pyenv), which can help you run tests for different python versions.
1. Fork and clone the repository to a directory on your local machine.
-2. Open a command line in that directory and execute the following commands:
+2. Open a command line in that directory and execute the following command:
```bash
- pip install pipenv
- pipenv install --dev
+ make setupenv
```
- Red, its dependencies, and all required development tools, are now installed to a virtual environment. Red is installed in editable mode, meaning that edits you make to the source code in the repository will be reflected when you run Red.
-3. Activate the new virtual environment with the command:
- ```bash
- pipenv shell
- ```
- From here onwards, we will assume you are executing commands from within this shell. Each time you open a new command line, you should execute this command first.
+ Red, its dependencies, and all required development tools, are now installed to a virtual environment located in the `.venv` subdirectory. Red is installed in editable mode, meaning that edits you make to the source code in the repository will be reflected when you run Red.
+3. Activate the new virtual environment with one of the following commands:
+ - Posix:
+ ```bash
+ source .venv/bin/activate
+ ```
+ - Windows:
+ ```powershell
+ .venv\Scripts\activate
+ ```
+ Each time you open a new command line, you should execute this command first. From here onwards, we will assume you are executing commands from within this activated virtual environment.
-Note: If you haven't used `pipenv` before but are comfortable with virtualenvs, just run `pip install pipenv` in the virtualenv you're already using and invoke the command above from the cloned Red repo. It will do the correct thing.
+**Note:** If you're comfortable with setting up virtual environments yourself and would rather do it manually, just run `pip install -r dev-requirements.txt` after setting it up.
### 4.2 Testing
We've recently started using [tox](https://github.com/tox-dev/tox) to run all of our tests. It's extremely simple to use, and if you followed the previous section correctly, it is already installed to your virtual environment.
@@ -95,12 +98,13 @@ Our style checker of choice, [black](https://github.com/ambv/black), actually ha
Use the command `black --help` to see how to use this tool. The full style guide is explained in detail on [black's GitHub repository](https://github.com/ambv/black). **There is one exception to this**, however, which is that we set the line length to 99, instead of black's default 88. When using `black` on the command line, simply use it like so: `black -l 99 -N `.
### 4.4 Make
-You may have noticed we have a `Makefile` and a `make.bat` in the top-level directory. For now, you can do two things with them:
+You may have noticed we have a `Makefile` and a `make.bat` in the top-level directory. For now, you can do three things with them:
1. `make reformat`: Reformat all python files in the project with Black
2. `make stylecheck`: Check if any `.py` files in the project need reformatting
+3. `make setupenv`: Set up a new virtual environment in the `.venv` subdirectory, and install Red and its dependencies. If one already exists, it is cleared out and replaced.
### 4.5 Keeping your dependencies up to date
-Whenever you pull from upstream (V3/develop on the main repository) and you notice the file `Pipfile.lock` has been changed, it usually means one of the package dependencies have been updated, added or removed. To make sure you're testing and formatting with the most up-to-date versions of our dependencies, run `pipenv install --dev` again.
+Whenever you pull from upstream (V3/develop on the main repository) and you notice either of the files `setup.cfg` or `dev-requirements.txt` have been changed, it can often mean some package dependencies have been updated, added or removed. To make sure you're testing and formatting with the most up-to-date versions of our dependencies, run `make setupenv` to recreate your virtual environment. You could also simply do `pip install -Ur dev-requirements.txt`, but you will still have any dependencies which may have been removed previously.
### 4.6 To contribute changes
diff --git a/.gitignore b/.gitignore
index 61f2eb923..ba29f5881 100644
--- a/.gitignore
+++ b/.gitignore
@@ -4,6 +4,8 @@
*.pot
.data
!/tests/cogs/dataconverter/data/**/*.json
+Pipfile
+Pipfile.lock
### JetBrains template
# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio and Webstorm
diff --git a/Makefile b/Makefile
index 46de7da9f..6280b2bfb 100644
--- a/Makefile
+++ b/Makefile
@@ -12,3 +12,13 @@ upload_translations:
crowdin upload sources
download_translations:
crowdin download
+
+# Dependencies
+bumpdeps:
+ python tools/bumpdeps.py
+
+# Development environment
+setupenv:
+ python3.7 -m venv --clear .venv
+ .venv/bin/pip install -U pip setuptools
+ .venv/bin/pip install -Ur dev-requirements.txt
diff --git a/Pipfile b/Pipfile
deleted file mode 100644
index da8fd1aad..000000000
--- a/Pipfile
+++ /dev/null
@@ -1,11 +0,0 @@
-[[source]]
-url = "https://pypi.org/simple"
-verify_ssl = true
-name = "pypi"
-
-[packages]
-red-discordbot = {path = ".",editable = true,extras = ['mongo']}
-
-[dev-packages]
-tox = "*"
-red-discordbot = {path = ".",editable = true,extras = ['docs', 'test', 'style', 'mongo']}
diff --git a/Pipfile.lock b/Pipfile.lock
deleted file mode 100644
index 9a259f509..000000000
--- a/Pipfile.lock
+++ /dev/null
@@ -1,885 +0,0 @@
-{
- "_meta": {
- "hash": {
- "sha256": "d71d118bb7fd8ed744bd9f98d3b9f22ccb589d1c45cd92ea2cbd721446fe6002"
- },
- "pipfile-spec": 6,
- "requires": {},
- "sources": [
- {
- "name": "pypi",
- "url": "https://pypi.org/simple",
- "verify_ssl": true
- }
- ]
- },
- "default": {
- "aiohttp": {
- "hashes": [
- "sha256:00d198585474299c9c3b4f1d5de1a576cc230d562abc5e4a0e81d71a20a6ca55",
- "sha256:0155af66de8c21b8dba4992aaeeabf55503caefae00067a3b1139f86d0ec50ed",
- "sha256:09654a9eca62d1bd6d64aa44db2498f60a5c1e0ac4750953fdd79d5c88955e10",
- "sha256:199f1d106e2b44b6dacdf6f9245493c7d716b01d0b7fbe1959318ba4dc64d1f5",
- "sha256:296f30dedc9f4b9e7a301e5cc963012264112d78a1d3094cd83ef148fdf33ca1",
- "sha256:368ed312550bd663ce84dc4b032a962fcb3c7cae099dbbd48663afc305e3b939",
- "sha256:40d7ea570b88db017c51392349cf99b7aefaaddd19d2c78368aeb0bddde9d390",
- "sha256:629102a193162e37102c50713e2e31dc9a2fe7ac5e481da83e5bb3c0cee700aa",
- "sha256:6d5ec9b8948c3d957e75ea14d41e9330e1ac3fed24ec53766c780f82805140dc",
- "sha256:87331d1d6810214085a50749160196391a712a13336cd02ce1c3ea3d05bcf8d5",
- "sha256:9a02a04bbe581c8605ac423ba3a74999ec9d8bce7ae37977a3d38680f5780b6d",
- "sha256:9c4c83f4fa1938377da32bc2d59379025ceeee8e24b89f72fcbccd8ca22dc9bf",
- "sha256:9cddaff94c0135ee627213ac6ca6d05724bfe6e7a356e5e09ec57bd3249510f6",
- "sha256:a25237abf327530d9561ef751eef9511ab56fd9431023ca6f4803f1994104d72",
- "sha256:a5cbd7157b0e383738b8e29d6e556fde8726823dae0e348952a61742b21aeb12",
- "sha256:a97a516e02b726e089cffcde2eea0d3258450389bbac48cbe89e0f0b6e7b0366",
- "sha256:acc89b29b5f4e2332d65cd1b7d10c609a75b88ef8925d487a611ca788432dfa4",
- "sha256:b05bd85cc99b06740aad3629c2585bda7b83bd86e080b44ba47faf905fdf1300",
- "sha256:c2bec436a2b5dafe5eaeb297c03711074d46b6eb236d002c13c42f25c4a8ce9d",
- "sha256:cc619d974c8c11fe84527e4b5e1c07238799a8c29ea1c1285149170524ba9303",
- "sha256:d4392defd4648badaa42b3e101080ae3313e8f4787cb517efd3f5b8157eaefd6",
- "sha256:e1c3c582ee11af7f63a34a46f0448fca58e59889396ffdae1f482085061a2889"
- ],
- "version": "==3.5.4"
- },
- "aiohttp-json-rpc": {
- "hashes": [
- "sha256:14656d360211bcdb686be0c099f7a99d8c2ae8e2762b113e6df408a8f275323f",
- "sha256:9aa8a897fbe32b343ce7b14121491cc200395161316ca1296c6fab28449886bf"
- ],
- "version": "==0.12.1"
- },
- "appdirs": {
- "hashes": [
- "sha256:9e5896d1372858f8dd3344faf4e5014d21849c756c8d5701f78f8a103b372d92",
- "sha256:d8b24664561d0d34ddfaec54636d502d7cea6e29c3eaf68f3df6180863e2166e"
- ],
- "version": "==1.4.3"
- },
- "async-timeout": {
- "hashes": [
- "sha256:0c3c816a028d47f659d6ff5c745cb2acf1f966da1fe5c19c77a70282b25f4c5f",
- "sha256:4291ca197d287d274d0b6cb5d6f8f8f82d434ed288f962539ff18cc9012f9ea3"
- ],
- "version": "==3.0.1"
- },
- "attrs": {
- "hashes": [
- "sha256:10cbf6e27dbce8c30807caf056c8eb50917e0eaafe86347671b57254006c3e69",
- "sha256:ca4be454458f9dec299268d472aaa5a11f67a4ff70093396e1ceae9c76cf4bbb"
- ],
- "version": "==18.2.0"
- },
- "chardet": {
- "hashes": [
- "sha256:84ab92ed1c4d4f16916e05906b6b75a6c0fb5db821cc65e70cbd64a3e2a5eaae",
- "sha256:fc323ffcaeaed0e0a02bf4d117757b98aed530d9ed4531e3e15460124c106691"
- ],
- "version": "==3.0.4"
- },
- "click": {
- "hashes": [
- "sha256:2335065e6395b9e67ca716de5f7526736bfa6ceead690adf616d925bdc622b13",
- "sha256:5b94b49521f6456670fdb30cd82a4eca9412788a93fa6dd6df72c94d5a8ff2d7"
- ],
- "version": "==7.0"
- },
- "colorama": {
- "hashes": [
- "sha256:05eed71e2e327246ad6b38c540c4a3117230b19679b875190486ddd2d721422d",
- "sha256:f8ac84de7840f5b9c4e3347b3c1eaa50f7e49c2b07596221daec5edaabbd7c48"
- ],
- "version": "==0.4.1"
- },
- "discord.py": {
- "hashes": [
- "sha256:173b5e2fea2e012bbe964e87e92826ccaf97056bba539a7caec988f329acca04",
- "sha256:7cb420731fe9c8d820401f3290957433a10169816d08805f826042941d25928e"
- ],
- "version": "==1.0.1"
- },
- "distro": {
- "hashes": [
- "sha256:362dde65d846d23baee4b5c058c8586f219b5a54be1cf5fc6ff55c4578392f57",
- "sha256:eedf82a470ebe7d010f1872c17237c79ab04097948800029994fa458e52fb4b4"
- ],
- "version": "==1.4.0"
- },
- "dnspython": {
- "hashes": [
- "sha256:36c5e8e38d4369a08b6780b7f27d790a292b2b08eea01607865bf0936c558e01",
- "sha256:f69c21288a962f4da86e56c4905b49d11aba7938d3d740e80d9e366ee4f1632d"
- ],
- "version": "==1.16.0"
- },
- "fuzzywuzzy": {
- "hashes": [
- "sha256:5ac7c0b3f4658d2743aa17da53a55598144edbc5bee3c6863840636e6926f254",
- "sha256:6f49de47db00e1c71d40ad16da42284ac357936fa9b66bea1df63fed07122d62"
- ],
- "version": "==0.17.0"
- },
- "idna": {
- "hashes": [
- "sha256:c357b3f628cf53ae2c4c05627ecc484553142ca23264e593d327bcde5e9c3407",
- "sha256:ea8b7f6188e6fa117537c3df7da9fc686d485087abf6ac197f9c46432f7e4a3c"
- ],
- "version": "==2.8"
- },
- "idna-ssl": {
- "hashes": [
- "sha256:a933e3bb13da54383f9e8f35dc4f9cb9eb9b3b78c6b36f311254d6d0d92c6c7c"
- ],
- "version": "==1.1.0"
- },
- "motor": {
- "hashes": [
- "sha256:462fbb824f4289481c158227a2579d6adaf1ec7c70cf7ebe60ed6ceb321e5869",
- "sha256:d035c09ab422bc50bf3efb134f7405694cae76268545bd21e14fb22e2638f84e"
- ],
- "version": "==2.0.0"
- },
- "multidict": {
- "hashes": [
- "sha256:024b8129695a952ebd93373e45b5d341dbb87c17ce49637b34000093f243dd4f",
- "sha256:041e9442b11409be5e4fc8b6a97e4bcead758ab1e11768d1e69160bdde18acc3",
- "sha256:045b4dd0e5f6121e6f314d81759abd2c257db4634260abcfe0d3f7083c4908ef",
- "sha256:047c0a04e382ef8bd74b0de01407e8d8632d7d1b4db6f2561106af812a68741b",
- "sha256:068167c2d7bbeebd359665ac4fff756be5ffac9cda02375b5c5a7c4777038e73",
- "sha256:148ff60e0fffa2f5fad2eb25aae7bef23d8f3b8bdaf947a65cdbe84a978092bc",
- "sha256:1d1c77013a259971a72ddaa83b9f42c80a93ff12df6a4723be99d858fa30bee3",
- "sha256:1d48bc124a6b7a55006d97917f695effa9725d05abe8ee78fd60d6588b8344cd",
- "sha256:31dfa2fc323097f8ad7acd41aa38d7c614dd1960ac6681745b6da124093dc351",
- "sha256:34f82db7f80c49f38b032c5abb605c458bac997a6c3142e0d6c130be6fb2b941",
- "sha256:3d5dd8e5998fb4ace04789d1d008e2bb532de501218519d70bb672c4c5a2fc5d",
- "sha256:4a6ae52bd3ee41ee0f3acf4c60ceb3f44e0e3bc52ab7da1c2b2aa6703363a3d1",
- "sha256:4b02a3b2a2f01d0490dd39321c74273fed0568568ea0e7ea23e02bd1fb10a10b",
- "sha256:4b843f8e1dd6a3195679d9838eb4670222e8b8d01bc36c9894d6c3538316fa0a",
- "sha256:5de53a28f40ef3c4fd57aeab6b590c2c663de87a5af76136ced519923d3efbb3",
- "sha256:61b2b33ede821b94fa99ce0b09c9ece049c7067a33b279f343adfe35108a4ea7",
- "sha256:6a3a9b0f45fd75dc05d8e93dc21b18fc1670135ec9544d1ad4acbcf6b86781d0",
- "sha256:76ad8e4c69dadbb31bad17c16baee61c0d1a4a73bed2590b741b2e1a46d3edd0",
- "sha256:7ba19b777dc00194d1b473180d4ca89a054dd18de27d0ee2e42a103ec9b7d014",
- "sha256:7c1b7eab7a49aa96f3db1f716f0113a8a2e93c7375dd3d5d21c4941f1405c9c5",
- "sha256:7fc0eee3046041387cbace9314926aa48b681202f8897f8bff3809967a049036",
- "sha256:8ccd1c5fff1aa1427100ce188557fc31f1e0a383ad8ec42c559aabd4ff08802d",
- "sha256:8e08dd76de80539d613654915a2f5196dbccc67448df291e69a88712ea21e24a",
- "sha256:c18498c50c59263841862ea0501da9f2b3659c00db54abfbf823a80787fde8ce",
- "sha256:c49db89d602c24928e68c0d510f4fcf8989d77defd01c973d6cbe27e684833b1",
- "sha256:ce20044d0317649ddbb4e54dab3c1bcc7483c78c27d3f58ab3d0c7e6bc60d26a",
- "sha256:d1071414dd06ca2eafa90c85a079169bfeb0e5f57fd0b45d44c092546fcd6fd9",
- "sha256:d3be11ac43ab1a3e979dac80843b42226d5d3cccd3986f2e03152720a4297cd7",
- "sha256:db603a1c235d110c860d5f39988ebc8218ee028f07a7cbc056ba6424372ca31b"
- ],
- "version": "==4.5.2"
- },
- "pymongo": {
- "hashes": [
- "sha256:025f94fc1e1364f00e50badc88c47f98af20012f23317234e51a11333ef986e6",
- "sha256:02aa7fb282606331aefbc0586e2cf540e9dbe5e343493295e7f390936ad2738e",
- "sha256:057210e831573e932702cf332012ed39da78edf0f02d24a3f0b213264a87a397",
- "sha256:0d946b79c56187fe139276d4c8ed612a27a616966c8b9779d6b79e2053587c8b",
- "sha256:104790893b928d310aae8a955e0bdbaa442fb0ac0a33d1bbb0741c791a407778",
- "sha256:15527ef218d95a8717486106553b0d54ff2641e795b65668754e17ab9ca6e381",
- "sha256:1826527a0b032f6e20e7ac7f72d7c26dd476a5e5aa82c04aa1c7088a59fded7d",
- "sha256:22e3aa4ce1c3eebc7f70f9ca7fd4ce1ea33e8bdb7b61996806cd312f08f84a3a",
- "sha256:244e1101e9a48615b9a16cbd194f73c115fdfefc96894803158608115f703b26",
- "sha256:24b8c04fdb633a84829d03909752c385faef249c06114cc8d8e1700b95aae5c8",
- "sha256:2c276696350785d3104412cbe3ac70ab1e3a10c408e7b20599ee41403a3ed630",
- "sha256:2d8474dc833b1182b651b184ace997a7bd83de0f51244de988d3c30e49f07de3",
- "sha256:3119b57fe1d964781e91a53e81532c85ed1701baaddec592e22f6b77a9fdf3df",
- "sha256:3bee8e7e0709b0fcdaa498a3e513bde9ffc7cd09dbceb11e425bd91c89dbd5b6",
- "sha256:436c071e01a464753d30dbfc8768dd93aecf2a8e378e5314d130b95e77b4d612",
- "sha256:46635e3f19ad04d5a7d7cf23d232388ddbfccf46d9a3b7436b6abadda4e84813",
- "sha256:4772e0b679717e7ac4608d996f57b6f380748a919b457cb05bb941467b888b22",
- "sha256:4e2cd80e16f481a62c3175b607373200e714ed29025f21559ebf7524f295689f",
- "sha256:52732960efa0e003ca1c092dc0a3c65276e897681287a788a01ca78dda3b41f0",
- "sha256:55a7de51ec7d1731b2431886d0349146645f2816e5b8eb982d7c49f89472c9f3",
- "sha256:5f8ed5934197a2d4b2087646e98de3e099a237099dcf498b9e38dd3465f74ef4",
- "sha256:64b064124fcbc8eb04a155117dc4d9a336e3cda3f069958fbc44fe70c3c3d1e9",
- "sha256:65958b8e4319f992e85dad59d8081888b97fcdbde5f0d14bc28f2848b92d3ef1",
- "sha256:7683428862e20c6a790c19e64f8ccf487f613fbc83d47e3d532df9c81668d451",
- "sha256:78566d5570c75a127c2491e343dc006798a384f06be588fe9b0cbe5595711559",
- "sha256:7d1cb00c093dbf1d0b16ccf123e79dee3b82608e4a2a88947695f0460eef13ff",
- "sha256:8c74e2a9b594f7962c62cef7680a4cb92a96b4e6e3c2f970790da67cc0213a7e",
- "sha256:8e60aa7699170f55f4b0f56ee6f8415229777ac7e4b4b1aa41fc61eec08c1f1d",
- "sha256:9447b561529576d89d3bf973e5241a88cf76e45bd101963f5236888713dea774",
- "sha256:970055bfeb0be373f2f5299a3db8432444bad3bc2f198753ee6c2a3a781e0959",
- "sha256:a6344b8542e584e140dc3c651d68bde51270e79490aa9320f9e708f9b2c39bd5",
- "sha256:ce309ca470d747b02ba6069d286a17b7df8e9c94d10d727d9cf3a64e51d85184",
- "sha256:cfbd86ed4c2b2ac71bbdbcea6669bf295def7152e3722ddd9dda94ac7981f33d",
- "sha256:d7929c513732dff093481f4a0954ed5ff16816365842136b17caa0b4992e49d3"
- ],
- "version": "==3.7.2"
- },
- "python-levenshtein-wheels": {
- "hashes": [
- "sha256:0065529c8aec4c044468286177761857d36981ba6f7fdb62d7d5f7ffd143de5d",
- "sha256:016924a59d689f9f47d5f7b26b70f31e309255e8dd72602c91e93ceb752b9f92",
- "sha256:089d046ea7727e583233c71fef1046663ed67b96967063ae8ddc9f551e86a4fc",
- "sha256:0aea217eab612acd45dcc3424a2e8dbd977cc309f80359d0c01971f1e65b9a9b",
- "sha256:0beb91ad80b1573829066e5af36b80190c367be6e0a65292f073353b0388c7fc",
- "sha256:0fa2ca69ef803bc6037a8c919e2e8a17b55e94c9c9ffcb4c21befbb15a1d0f40",
- "sha256:11c77d0d74ab7f46f89a58ae9c2d67349ebc1ae3e18636627f9939d810167c31",
- "sha256:19a68716a322486ddffc8bf7e5cf44a82f7700b05a10658e6e7fc5c7ae92b13d",
- "sha256:19a95a01d28d63b042438ba860c4ace90362906a038fa77962ba33325d377d10",
- "sha256:1a61f3a51e00a3608659bbaabb3f27af37c9dbe84d843369061a3e45cf0d5103",
- "sha256:1c50aebebab403fb2dd415d70355446ac364dece502b0e2737a1a085bb9a4aa4",
- "sha256:1e51cdc123625a28709662d24ea0cb4cf6f991845e6054d9f803c78da1d6b08f",
- "sha256:1f0056d3216b0fe38f25c6f8ebc84bd9f6d34c55a7a9414341b674fb98961399",
- "sha256:228b59460e9a786e498bdfc8011838b89c6054650b115c86c9c819a055a793b0",
- "sha256:23020f9ff2cb3457a926dcc470b84f9bd5b7646bd8b8e06b915bdbbc905cb23f",
- "sha256:3e6bcca97a7ff4e720352b57ddc26380c0583dcdd4b791acef7b574ad58468a7",
- "sha256:3ed88f9e638da57647149115c34e0e120cae6f3d35eee7d77e22cc9c1d8eced3",
- "sha256:445bf7941cb1fa05d6c2a4a502ad4868a5cacd92e8eb77b2bd008cdda9d37c55",
- "sha256:4ba5e147d76d7ee884fd6eae461438b080bcc9f2c6eb9b576811e1bcfe8f808e",
- "sha256:4bb128b719c30f3b9feacfe71a338ae07d39dbffc077139416f3535c89f12362",
- "sha256:53c0c9964390368fd64460b690f168221c669766b193b7e80ae3950c2b9551f8",
- "sha256:57c4edef81611098d37176278f2b6a3712bf864eed313496d7d80504805896d1",
- "sha256:7f7283dfe50eac8a8cd9b777de9eb50b1edf7dbb46fc7cc9d9b0050d0c135021",
- "sha256:7f9759095b3fc825464a72b1cae95125e610eba3c70f91557754c32a0bf32ea2",
- "sha256:98727050ba70eb8d318ec8a8203531c20119347fc8f281102b097326812742ab",
- "sha256:ac9cdf044dcb9481c7da782db01b50c1f0e7cdd78c8507b963b6d072829c0263",
- "sha256:b679f951f842c38665aa54bea4d7403099131f71fac6d8584f893a731fe1266d",
- "sha256:b8c183dc4aa4e95dc5c373eedc3d205c176805835611fcfec5d9050736c695c4",
- "sha256:c2c76f483d05eddec60a5cd89e92385adef565a4f243b1d9a6abe2f6bd2a7c0a",
- "sha256:c388baa3c04272a7c585d3da24030c142353eb26eb531dd2681502e6be7d7a26",
- "sha256:cb0f2a711db665b5bf8697b5af3b9884bb1139385c5c12c2e472e4bbee62da99",
- "sha256:cbac984d7b36e75b440d1c8ff9d3425d778364a0cbc23f8943383d4decd35d5e",
- "sha256:f9084ed3b8997ad4353d124b903f2860a9695b9e080663276d9e58c32e293244"
- ],
- "version": "==0.13.1"
- },
- "pyyaml": {
- "hashes": [
- "sha256:3d7da3009c0f3e783b2c873687652d83b1bbfd5c88e9813fb7e5b03c0dd3108b",
- "sha256:3ef3092145e9b70e3ddd2c7ad59bdd0252a94dfe3949721633e41344de00a6bf",
- "sha256:40c71b8e076d0550b2e6380bada1f1cd1017b882f7e16f09a65be98e017f211a",
- "sha256:558dd60b890ba8fd982e05941927a3911dc409a63dcb8b634feaa0cda69330d3",
- "sha256:a7c28b45d9f99102fa092bb213aa12e0aaf9a6a1f5e395d36166639c1f96c3a1",
- "sha256:aa7dd4a6a427aed7df6fb7f08a580d68d9b118d90310374716ae90b710280af1",
- "sha256:bc558586e6045763782014934bfaf39d48b8ae85a2713117d16c39864085c613",
- "sha256:d46d7982b62e0729ad0175a9bc7e10a566fc07b224d2c79fafb5e032727eaa04",
- "sha256:d5eef459e30b09f5a098b9cea68bebfeb268697f78d647bd255a085371ac7f3f",
- "sha256:e01d3203230e1786cd91ccfdc8f8454c8069c91bee3962ad93b87a4b2860f537",
- "sha256:e170a9e6fcfd19021dd29845af83bb79236068bf5fd4df3327c1be18182b2531"
- ],
- "version": "==3.13"
- },
- "red-discordbot": {
- "editable": true,
- "extras": [
- "mongo"
- ],
- "path": "."
- },
- "red-lavalink": {
- "hashes": [
- "sha256:2a2f469c1feb72c2604795053a8823757ace85ed752eaf573c1d0daba29d1180",
- "sha256:4bc685a5d89660875d07f50060bacc820e69a763a581ce69375c792e16df4081"
- ],
- "version": "==0.3.0"
- },
- "schema": {
- "hashes": [
- "sha256:d994b0dc4966000037b26898df638e3e2a694cc73636cb2050e652614a350687",
- "sha256:fa1a53fe5f3b6929725a4e81688c250f46838e25d8c1885a10a590c8c01a7b74"
- ],
- "version": "==0.6.8"
- },
- "websockets": {
- "hashes": [
- "sha256:0e2f7d6567838369af074f0ef4d0b802d19fa1fee135d864acc656ceefa33136",
- "sha256:2a16dac282b2fdae75178d0ed3d5b9bc3258dabfae50196cbb30578d84b6f6a6",
- "sha256:5a1fa6072405648cb5b3688e9ed3b94be683ce4a4e5723e6f5d34859dee495c1",
- "sha256:5c1f55a1274df9d6a37553fef8cff2958515438c58920897675c9bc70f5a0538",
- "sha256:669d1e46f165e0ad152ed8197f7edead22854a6c90419f544e0f234cc9dac6c4",
- "sha256:695e34c4dbea18d09ab2c258994a8bf6a09564e762655408241f6a14592d2908",
- "sha256:6b2e03d69afa8d20253455e67b64de1a82ff8612db105113cccec35d3f8429f0",
- "sha256:79ca7cdda7ad4e3663ea3c43bfa8637fc5d5604c7737f19a8964781abbd1148d",
- "sha256:7fd2dd9a856f72e6ed06f82facfce01d119b88457cd4b47b7ae501e8e11eba9c",
- "sha256:82c0354ac39379d836719a77ee360ef865377aa6fdead87909d50248d0f05f4d",
- "sha256:8f3b956d11c5b301206382726210dc1d3bee1a9ccf7aadf895aaf31f71c3716c",
- "sha256:91ec98640220ae05b34b79ee88abf27f97ef7c61cf525eec57ea8fcea9f7dddb",
- "sha256:952be9540d83dba815569d5cb5f31708801e0bbfc3a8c5aef1890b57ed7e58bf",
- "sha256:99ac266af38ba1b1fe13975aea01ac0e14bb5f3a3200d2c69f05385768b8568e",
- "sha256:9fa122e7adb24232247f8a89f2d9070bf64b7869daf93ac5e19546b409e47e96",
- "sha256:a0873eadc4b8ca93e2e848d490809e0123eea154aa44ecd0109c4d0171869584",
- "sha256:cb998bd4d93af46b8b49ecf5a72c0a98e5cc6d57fdca6527ba78ad89d6606484",
- "sha256:e02e57346f6a68523e3c43bbdf35dde5c440318d1f827208ae455f6a2ace446d",
- "sha256:e79a5a896bcee7fff24a788d72e5c69f13e61369d055f28113e71945a7eb1559",
- "sha256:ee55eb6bcf23ecc975e6b47c127c201b913598f38b6a300075f84eeef2d3baff",
- "sha256:f1414e6cbcea8d22843e7eafdfdfae3dd1aba41d1945f6ca66e4806c07c4f454"
- ],
- "version": "==6.0"
- },
- "yarl": {
- "hashes": [
- "sha256:024ecdc12bc02b321bc66b41327f930d1c2c543fa9a561b39861da9388ba7aa9",
- "sha256:2f3010703295fbe1aec51023740871e64bb9664c789cba5a6bdf404e93f7568f",
- "sha256:3890ab952d508523ef4881457c4099056546593fa05e93da84c7250516e632eb",
- "sha256:3e2724eb9af5dc41648e5bb304fcf4891adc33258c6e14e2a7414ea32541e320",
- "sha256:5badb97dd0abf26623a9982cd448ff12cb39b8e4c94032ccdedf22ce01a64842",
- "sha256:73f447d11b530d860ca1e6b582f947688286ad16ca42256413083d13f260b7a0",
- "sha256:7ab825726f2940c16d92aaec7d204cfc34ac26c0040da727cf8ba87255a33829",
- "sha256:b25de84a8c20540531526dfbb0e2d2b648c13fd5dd126728c496d7c3fea33310",
- "sha256:c6e341f5a6562af74ba55205dbd56d248daf1b5748ec48a0200ba227bb9e33f4",
- "sha256:c9bb7c249c4432cd47e75af3864bc02d26c9594f49c82e2a28624417f0ae63b8",
- "sha256:e060906c0c585565c718d1c3841747b61c5439af2211e185f6739a9412dfbde1"
- ],
- "version": "==1.3.0"
- }
- },
- "develop": {
- "aiohttp": {
- "hashes": [
- "sha256:00d198585474299c9c3b4f1d5de1a576cc230d562abc5e4a0e81d71a20a6ca55",
- "sha256:0155af66de8c21b8dba4992aaeeabf55503caefae00067a3b1139f86d0ec50ed",
- "sha256:09654a9eca62d1bd6d64aa44db2498f60a5c1e0ac4750953fdd79d5c88955e10",
- "sha256:199f1d106e2b44b6dacdf6f9245493c7d716b01d0b7fbe1959318ba4dc64d1f5",
- "sha256:296f30dedc9f4b9e7a301e5cc963012264112d78a1d3094cd83ef148fdf33ca1",
- "sha256:368ed312550bd663ce84dc4b032a962fcb3c7cae099dbbd48663afc305e3b939",
- "sha256:40d7ea570b88db017c51392349cf99b7aefaaddd19d2c78368aeb0bddde9d390",
- "sha256:629102a193162e37102c50713e2e31dc9a2fe7ac5e481da83e5bb3c0cee700aa",
- "sha256:6d5ec9b8948c3d957e75ea14d41e9330e1ac3fed24ec53766c780f82805140dc",
- "sha256:87331d1d6810214085a50749160196391a712a13336cd02ce1c3ea3d05bcf8d5",
- "sha256:9a02a04bbe581c8605ac423ba3a74999ec9d8bce7ae37977a3d38680f5780b6d",
- "sha256:9c4c83f4fa1938377da32bc2d59379025ceeee8e24b89f72fcbccd8ca22dc9bf",
- "sha256:9cddaff94c0135ee627213ac6ca6d05724bfe6e7a356e5e09ec57bd3249510f6",
- "sha256:a25237abf327530d9561ef751eef9511ab56fd9431023ca6f4803f1994104d72",
- "sha256:a5cbd7157b0e383738b8e29d6e556fde8726823dae0e348952a61742b21aeb12",
- "sha256:a97a516e02b726e089cffcde2eea0d3258450389bbac48cbe89e0f0b6e7b0366",
- "sha256:acc89b29b5f4e2332d65cd1b7d10c609a75b88ef8925d487a611ca788432dfa4",
- "sha256:b05bd85cc99b06740aad3629c2585bda7b83bd86e080b44ba47faf905fdf1300",
- "sha256:c2bec436a2b5dafe5eaeb297c03711074d46b6eb236d002c13c42f25c4a8ce9d",
- "sha256:cc619d974c8c11fe84527e4b5e1c07238799a8c29ea1c1285149170524ba9303",
- "sha256:d4392defd4648badaa42b3e101080ae3313e8f4787cb517efd3f5b8157eaefd6",
- "sha256:e1c3c582ee11af7f63a34a46f0448fca58e59889396ffdae1f482085061a2889"
- ],
- "version": "==3.5.4"
- },
- "aiohttp-json-rpc": {
- "hashes": [
- "sha256:14656d360211bcdb686be0c099f7a99d8c2ae8e2762b113e6df408a8f275323f",
- "sha256:9aa8a897fbe32b343ce7b14121491cc200395161316ca1296c6fab28449886bf"
- ],
- "version": "==0.12.1"
- },
- "alabaster": {
- "hashes": [
- "sha256:446438bdcca0e05bd45ea2de1668c1d9b032e1a9154c2c259092d77031ddd359",
- "sha256:a661d72d58e6ea8a57f7a86e37d86716863ee5e92788398526d58b26a4e4dc02"
- ],
- "version": "==0.7.12"
- },
- "appdirs": {
- "hashes": [
- "sha256:9e5896d1372858f8dd3344faf4e5014d21849c756c8d5701f78f8a103b372d92",
- "sha256:d8b24664561d0d34ddfaec54636d502d7cea6e29c3eaf68f3df6180863e2166e"
- ],
- "version": "==1.4.3"
- },
- "async-timeout": {
- "hashes": [
- "sha256:0c3c816a028d47f659d6ff5c745cb2acf1f966da1fe5c19c77a70282b25f4c5f",
- "sha256:4291ca197d287d274d0b6cb5d6f8f8f82d434ed288f962539ff18cc9012f9ea3"
- ],
- "version": "==3.0.1"
- },
- "atomicwrites": {
- "hashes": [
- "sha256:03472c30eb2c5d1ba9227e4c2ca66ab8287fbfbbda3888aa93dc2e28fc6811b4",
- "sha256:75a9445bac02d8d058d5e1fe689654ba5a6556a1dfd8ce6ec55a0ed79866cfa6"
- ],
- "version": "==1.3.0"
- },
- "attrs": {
- "hashes": [
- "sha256:10cbf6e27dbce8c30807caf056c8eb50917e0eaafe86347671b57254006c3e69",
- "sha256:ca4be454458f9dec299268d472aaa5a11f67a4ff70093396e1ceae9c76cf4bbb"
- ],
- "version": "==18.2.0"
- },
- "babel": {
- "hashes": [
- "sha256:6778d85147d5d85345c14a26aada5e478ab04e39b078b0745ee6870c2b5cf669",
- "sha256:8cba50f48c529ca3fa18cf81fa9403be176d374ac4d60738b839122dfaaa3d23"
- ],
- "version": "==2.6.0"
- },
- "black": {
- "hashes": [
- "sha256:09a9dcb7c46ed496a9850b76e4e825d6049ecd38b611f1224857a79bd985a8cf",
- "sha256:68950ffd4d9169716bcb8719a56c07a2f4485354fec061cdd5910aa07369731c"
- ],
- "version": "==19.3b0"
- },
- "certifi": {
- "hashes": [
- "sha256:47f9c83ef4c0c621eaef743f133f09fa8a74a9b75f037e8624f83bd1b6626cb7",
- "sha256:993f830721089fef441cdfeb4b2c8c9df86f0c63239f06bd025a76a7daddb033"
- ],
- "version": "==2018.11.29"
- },
- "chardet": {
- "hashes": [
- "sha256:84ab92ed1c4d4f16916e05906b6b75a6c0fb5db821cc65e70cbd64a3e2a5eaae",
- "sha256:fc323ffcaeaed0e0a02bf4d117757b98aed530d9ed4531e3e15460124c106691"
- ],
- "version": "==3.0.4"
- },
- "click": {
- "hashes": [
- "sha256:2335065e6395b9e67ca716de5f7526736bfa6ceead690adf616d925bdc622b13",
- "sha256:5b94b49521f6456670fdb30cd82a4eca9412788a93fa6dd6df72c94d5a8ff2d7"
- ],
- "version": "==7.0"
- },
- "colorama": {
- "hashes": [
- "sha256:05eed71e2e327246ad6b38c540c4a3117230b19679b875190486ddd2d721422d",
- "sha256:f8ac84de7840f5b9c4e3347b3c1eaa50f7e49c2b07596221daec5edaabbd7c48"
- ],
- "version": "==0.4.1"
- },
- "discord.py": {
- "hashes": [
- "sha256:173b5e2fea2e012bbe964e87e92826ccaf97056bba539a7caec988f329acca04",
- "sha256:7cb420731fe9c8d820401f3290957433a10169816d08805f826042941d25928e"
- ],
- "version": "==1.0.1"
- },
- "distro": {
- "hashes": [
- "sha256:362dde65d846d23baee4b5c058c8586f219b5a54be1cf5fc6ff55c4578392f57",
- "sha256:eedf82a470ebe7d010f1872c17237c79ab04097948800029994fa458e52fb4b4"
- ],
- "version": "==1.4.0"
- },
- "dnspython": {
- "hashes": [
- "sha256:36c5e8e38d4369a08b6780b7f27d790a292b2b08eea01607865bf0936c558e01",
- "sha256:f69c21288a962f4da86e56c4905b49d11aba7938d3d740e80d9e366ee4f1632d"
- ],
- "version": "==1.16.0"
- },
- "docutils": {
- "hashes": [
- "sha256:02aec4bd92ab067f6ff27a38a38a41173bf01bed8f89157768c1573f53e474a6",
- "sha256:51e64ef2ebfb29cae1faa133b3710143496eca21c530f3f71424d77687764274",
- "sha256:7a4bd47eaf6596e1295ecb11361139febe29b084a87bf005bf899f9a42edc3c6"
- ],
- "version": "==0.14"
- },
- "filelock": {
- "hashes": [
- "sha256:b8d5ca5ca1c815e1574aee746650ea7301de63d87935b3463d26368b76e31633",
- "sha256:d610c1bb404daf85976d7a82eb2ada120f04671007266b708606565dd03b5be6"
- ],
- "version": "==3.0.10"
- },
- "fuzzywuzzy": {
- "hashes": [
- "sha256:5ac7c0b3f4658d2743aa17da53a55598144edbc5bee3c6863840636e6926f254",
- "sha256:6f49de47db00e1c71d40ad16da42284ac357936fa9b66bea1df63fed07122d62"
- ],
- "version": "==0.17.0"
- },
- "idna": {
- "hashes": [
- "sha256:c357b3f628cf53ae2c4c05627ecc484553142ca23264e593d327bcde5e9c3407",
- "sha256:ea8b7f6188e6fa117537c3df7da9fc686d485087abf6ac197f9c46432f7e4a3c"
- ],
- "version": "==2.8"
- },
- "idna-ssl": {
- "hashes": [
- "sha256:a933e3bb13da54383f9e8f35dc4f9cb9eb9b3b78c6b36f311254d6d0d92c6c7c"
- ],
- "version": "==1.1.0"
- },
- "imagesize": {
- "hashes": [
- "sha256:3f349de3eb99145973fefb7dbe38554414e5c30abd0c8e4b970a7c9d09f3a1d8",
- "sha256:f3832918bc3c66617f92e35f5d70729187676313caa60c187eb0f28b8fe5e3b5"
- ],
- "version": "==1.1.0"
- },
- "jinja2": {
- "hashes": [
- "sha256:065c4f02ebe7f7cf559e49ee5a95fb800a9e4528727aec6f24402a5374c65013",
- "sha256:14dd6caf1527abb21f08f86c784eac40853ba93edb79552aa1e4b8aef1b61c7b"
- ],
- "version": "==2.10.1"
- },
- "markupsafe": {
- "hashes": [
- "sha256:048ef924c1623740e70204aa7143ec592504045ae4429b59c30054cb31e3c432",
- "sha256:130f844e7f5bdd8e9f3f42e7102ef1d49b2e6fdf0d7526df3f87281a532d8c8b",
- "sha256:19f637c2ac5ae9da8bfd98cef74d64b7e1bb8a63038a3505cd182c3fac5eb4d9",
- "sha256:1b8a7a87ad1b92bd887568ce54b23565f3fd7018c4180136e1cf412b405a47af",
- "sha256:1c25694ca680b6919de53a4bb3bdd0602beafc63ff001fea2f2fc16ec3a11834",
- "sha256:1f19ef5d3908110e1e891deefb5586aae1b49a7440db952454b4e281b41620cd",
- "sha256:1fa6058938190ebe8290e5cae6c351e14e7bb44505c4a7624555ce57fbbeba0d",
- "sha256:31cbb1359e8c25f9f48e156e59e2eaad51cd5242c05ed18a8de6dbe85184e4b7",
- "sha256:3e835d8841ae7863f64e40e19477f7eb398674da6a47f09871673742531e6f4b",
- "sha256:4e97332c9ce444b0c2c38dd22ddc61c743eb208d916e4265a2a3b575bdccb1d3",
- "sha256:525396ee324ee2da82919f2ee9c9e73b012f23e7640131dd1b53a90206a0f09c",
- "sha256:52b07fbc32032c21ad4ab060fec137b76eb804c4b9a1c7c7dc562549306afad2",
- "sha256:52ccb45e77a1085ec5461cde794e1aa037df79f473cbc69b974e73940655c8d7",
- "sha256:5c3fbebd7de20ce93103cb3183b47671f2885307df4a17a0ad56a1dd51273d36",
- "sha256:5e5851969aea17660e55f6a3be00037a25b96a9b44d2083651812c99d53b14d1",
- "sha256:5edfa27b2d3eefa2210fb2f5d539fbed81722b49f083b2c6566455eb7422fd7e",
- "sha256:7d263e5770efddf465a9e31b78362d84d015cc894ca2c131901a4445eaa61ee1",
- "sha256:83381342bfc22b3c8c06f2dd93a505413888694302de25add756254beee8449c",
- "sha256:857eebb2c1dc60e4219ec8e98dfa19553dae33608237e107db9c6078b1167856",
- "sha256:98e439297f78fca3a6169fd330fbe88d78b3bb72f967ad9961bcac0d7fdd1550",
- "sha256:bf54103892a83c64db58125b3f2a43df6d2cb2d28889f14c78519394feb41492",
- "sha256:d9ac82be533394d341b41d78aca7ed0e0f4ba5a2231602e2f05aa87f25c51672",
- "sha256:e982fe07ede9fada6ff6705af70514a52beb1b2c3d25d4e873e82114cf3c5401",
- "sha256:edce2ea7f3dfc981c4ddc97add8a61381d9642dc3273737e756517cc03e84dd6",
- "sha256:efdc45ef1afc238db84cb4963aa689c0408912a0239b0721cb172b4016eb31d6",
- "sha256:f137c02498f8b935892d5c0172560d7ab54bc45039de8805075e19079c639a9c",
- "sha256:f82e347a72f955b7017a39708a3667f106e6ad4d10b25f237396a7115d8ed5fd",
- "sha256:fb7c206e01ad85ce57feeaaa0bf784b97fa3cad0d4a5737bc5295785f5c613a1"
- ],
- "version": "==1.1.0"
- },
- "more-itertools": {
- "hashes": [
- "sha256:0125e8f60e9e031347105eb1682cef932f5e97d7b9a1a28d9bf00c22a5daef40",
- "sha256:590044e3942351a1bdb1de960b739ff4ce277960f2425ad4509446dbace8d9d1"
- ],
- "version": "==6.0.0"
- },
- "motor": {
- "hashes": [
- "sha256:462fbb824f4289481c158227a2579d6adaf1ec7c70cf7ebe60ed6ceb321e5869",
- "sha256:d035c09ab422bc50bf3efb134f7405694cae76268545bd21e14fb22e2638f84e"
- ],
- "version": "==2.0.0"
- },
- "multidict": {
- "hashes": [
- "sha256:024b8129695a952ebd93373e45b5d341dbb87c17ce49637b34000093f243dd4f",
- "sha256:041e9442b11409be5e4fc8b6a97e4bcead758ab1e11768d1e69160bdde18acc3",
- "sha256:045b4dd0e5f6121e6f314d81759abd2c257db4634260abcfe0d3f7083c4908ef",
- "sha256:047c0a04e382ef8bd74b0de01407e8d8632d7d1b4db6f2561106af812a68741b",
- "sha256:068167c2d7bbeebd359665ac4fff756be5ffac9cda02375b5c5a7c4777038e73",
- "sha256:148ff60e0fffa2f5fad2eb25aae7bef23d8f3b8bdaf947a65cdbe84a978092bc",
- "sha256:1d1c77013a259971a72ddaa83b9f42c80a93ff12df6a4723be99d858fa30bee3",
- "sha256:1d48bc124a6b7a55006d97917f695effa9725d05abe8ee78fd60d6588b8344cd",
- "sha256:31dfa2fc323097f8ad7acd41aa38d7c614dd1960ac6681745b6da124093dc351",
- "sha256:34f82db7f80c49f38b032c5abb605c458bac997a6c3142e0d6c130be6fb2b941",
- "sha256:3d5dd8e5998fb4ace04789d1d008e2bb532de501218519d70bb672c4c5a2fc5d",
- "sha256:4a6ae52bd3ee41ee0f3acf4c60ceb3f44e0e3bc52ab7da1c2b2aa6703363a3d1",
- "sha256:4b02a3b2a2f01d0490dd39321c74273fed0568568ea0e7ea23e02bd1fb10a10b",
- "sha256:4b843f8e1dd6a3195679d9838eb4670222e8b8d01bc36c9894d6c3538316fa0a",
- "sha256:5de53a28f40ef3c4fd57aeab6b590c2c663de87a5af76136ced519923d3efbb3",
- "sha256:61b2b33ede821b94fa99ce0b09c9ece049c7067a33b279f343adfe35108a4ea7",
- "sha256:6a3a9b0f45fd75dc05d8e93dc21b18fc1670135ec9544d1ad4acbcf6b86781d0",
- "sha256:76ad8e4c69dadbb31bad17c16baee61c0d1a4a73bed2590b741b2e1a46d3edd0",
- "sha256:7ba19b777dc00194d1b473180d4ca89a054dd18de27d0ee2e42a103ec9b7d014",
- "sha256:7c1b7eab7a49aa96f3db1f716f0113a8a2e93c7375dd3d5d21c4941f1405c9c5",
- "sha256:7fc0eee3046041387cbace9314926aa48b681202f8897f8bff3809967a049036",
- "sha256:8ccd1c5fff1aa1427100ce188557fc31f1e0a383ad8ec42c559aabd4ff08802d",
- "sha256:8e08dd76de80539d613654915a2f5196dbccc67448df291e69a88712ea21e24a",
- "sha256:c18498c50c59263841862ea0501da9f2b3659c00db54abfbf823a80787fde8ce",
- "sha256:c49db89d602c24928e68c0d510f4fcf8989d77defd01c973d6cbe27e684833b1",
- "sha256:ce20044d0317649ddbb4e54dab3c1bcc7483c78c27d3f58ab3d0c7e6bc60d26a",
- "sha256:d1071414dd06ca2eafa90c85a079169bfeb0e5f57fd0b45d44c092546fcd6fd9",
- "sha256:d3be11ac43ab1a3e979dac80843b42226d5d3cccd3986f2e03152720a4297cd7",
- "sha256:db603a1c235d110c860d5f39988ebc8218ee028f07a7cbc056ba6424372ca31b"
- ],
- "version": "==4.5.2"
- },
- "packaging": {
- "hashes": [
- "sha256:0c98a5d0be38ed775798ece1b9727178c4469d9c3b4ada66e8e6b7849f8732af",
- "sha256:9e1cbf8c12b1f1ce0bb5344b8d7ecf66a6f8a6e91bcb0c84593ed6d3ab5c4ab3"
- ],
- "version": "==19.0"
- },
- "pluggy": {
- "hashes": [
- "sha256:8ddc32f03971bfdf900a81961a48ccf2fb677cf7715108f85295c67405798616",
- "sha256:980710797ff6a041e9a73a5787804f848996ecaa6f8a1b1e08224a5894f2074a"
- ],
- "version": "==0.8.1"
- },
- "py": {
- "hashes": [
- "sha256:bf92637198836372b520efcba9e020c330123be8ce527e535d185ed4b6f45694",
- "sha256:e76826342cefe3c3d5f7e8ee4316b80d1dd8a300781612ddbc765c17ba25a6c6"
- ],
- "version": "==1.7.0"
- },
- "pygments": {
- "hashes": [
- "sha256:5ffada19f6203563680669ee7f53b64dabbeb100eb51b61996085e99c03b284a",
- "sha256:e8218dd399a61674745138520d0d4cf2621d7e032439341bc3f647bff125818d"
- ],
- "version": "==2.3.1"
- },
- "pymongo": {
- "hashes": [
- "sha256:025f94fc1e1364f00e50badc88c47f98af20012f23317234e51a11333ef986e6",
- "sha256:02aa7fb282606331aefbc0586e2cf540e9dbe5e343493295e7f390936ad2738e",
- "sha256:057210e831573e932702cf332012ed39da78edf0f02d24a3f0b213264a87a397",
- "sha256:0d946b79c56187fe139276d4c8ed612a27a616966c8b9779d6b79e2053587c8b",
- "sha256:104790893b928d310aae8a955e0bdbaa442fb0ac0a33d1bbb0741c791a407778",
- "sha256:15527ef218d95a8717486106553b0d54ff2641e795b65668754e17ab9ca6e381",
- "sha256:1826527a0b032f6e20e7ac7f72d7c26dd476a5e5aa82c04aa1c7088a59fded7d",
- "sha256:22e3aa4ce1c3eebc7f70f9ca7fd4ce1ea33e8bdb7b61996806cd312f08f84a3a",
- "sha256:244e1101e9a48615b9a16cbd194f73c115fdfefc96894803158608115f703b26",
- "sha256:24b8c04fdb633a84829d03909752c385faef249c06114cc8d8e1700b95aae5c8",
- "sha256:2c276696350785d3104412cbe3ac70ab1e3a10c408e7b20599ee41403a3ed630",
- "sha256:2d8474dc833b1182b651b184ace997a7bd83de0f51244de988d3c30e49f07de3",
- "sha256:3119b57fe1d964781e91a53e81532c85ed1701baaddec592e22f6b77a9fdf3df",
- "sha256:3bee8e7e0709b0fcdaa498a3e513bde9ffc7cd09dbceb11e425bd91c89dbd5b6",
- "sha256:436c071e01a464753d30dbfc8768dd93aecf2a8e378e5314d130b95e77b4d612",
- "sha256:46635e3f19ad04d5a7d7cf23d232388ddbfccf46d9a3b7436b6abadda4e84813",
- "sha256:4772e0b679717e7ac4608d996f57b6f380748a919b457cb05bb941467b888b22",
- "sha256:4e2cd80e16f481a62c3175b607373200e714ed29025f21559ebf7524f295689f",
- "sha256:52732960efa0e003ca1c092dc0a3c65276e897681287a788a01ca78dda3b41f0",
- "sha256:55a7de51ec7d1731b2431886d0349146645f2816e5b8eb982d7c49f89472c9f3",
- "sha256:5f8ed5934197a2d4b2087646e98de3e099a237099dcf498b9e38dd3465f74ef4",
- "sha256:64b064124fcbc8eb04a155117dc4d9a336e3cda3f069958fbc44fe70c3c3d1e9",
- "sha256:65958b8e4319f992e85dad59d8081888b97fcdbde5f0d14bc28f2848b92d3ef1",
- "sha256:7683428862e20c6a790c19e64f8ccf487f613fbc83d47e3d532df9c81668d451",
- "sha256:78566d5570c75a127c2491e343dc006798a384f06be588fe9b0cbe5595711559",
- "sha256:7d1cb00c093dbf1d0b16ccf123e79dee3b82608e4a2a88947695f0460eef13ff",
- "sha256:8c74e2a9b594f7962c62cef7680a4cb92a96b4e6e3c2f970790da67cc0213a7e",
- "sha256:8e60aa7699170f55f4b0f56ee6f8415229777ac7e4b4b1aa41fc61eec08c1f1d",
- "sha256:9447b561529576d89d3bf973e5241a88cf76e45bd101963f5236888713dea774",
- "sha256:970055bfeb0be373f2f5299a3db8432444bad3bc2f198753ee6c2a3a781e0959",
- "sha256:a6344b8542e584e140dc3c651d68bde51270e79490aa9320f9e708f9b2c39bd5",
- "sha256:ce309ca470d747b02ba6069d286a17b7df8e9c94d10d727d9cf3a64e51d85184",
- "sha256:cfbd86ed4c2b2ac71bbdbcea6669bf295def7152e3722ddd9dda94ac7981f33d",
- "sha256:d7929c513732dff093481f4a0954ed5ff16816365842136b17caa0b4992e49d3"
- ],
- "version": "==3.7.2"
- },
- "pyparsing": {
- "hashes": [
- "sha256:66c9268862641abcac4a96ba74506e594c884e3f57690a696d21ad8210ed667a",
- "sha256:f6c5ef0d7480ad048c054c37632c67fca55299990fff127850181659eea33fc3"
- ],
- "version": "==2.3.1"
- },
- "pytest": {
- "hashes": [
- "sha256:65aeaa77ae87c7fc95de56285282546cfa9c886dc8e5dc78313db1c25e21bc07",
- "sha256:6ac6d467d9f053e95aaacd79f831dbecfe730f419c6c7022cb316b365cd9199d"
- ],
- "version": "==4.2.0"
- },
- "pytest-asyncio": {
- "hashes": [
- "sha256:9fac5100fd716cbecf6ef89233e8590a4ad61d729d1732e0a96b84182df1daaf",
- "sha256:d734718e25cfc32d2bf78d346e99d33724deeba774cc4afdf491530c6184b63b"
- ],
- "version": "==0.10.0"
- },
- "python-levenshtein-wheels": {
- "hashes": [
- "sha256:0065529c8aec4c044468286177761857d36981ba6f7fdb62d7d5f7ffd143de5d",
- "sha256:016924a59d689f9f47d5f7b26b70f31e309255e8dd72602c91e93ceb752b9f92",
- "sha256:089d046ea7727e583233c71fef1046663ed67b96967063ae8ddc9f551e86a4fc",
- "sha256:0aea217eab612acd45dcc3424a2e8dbd977cc309f80359d0c01971f1e65b9a9b",
- "sha256:0beb91ad80b1573829066e5af36b80190c367be6e0a65292f073353b0388c7fc",
- "sha256:0fa2ca69ef803bc6037a8c919e2e8a17b55e94c9c9ffcb4c21befbb15a1d0f40",
- "sha256:11c77d0d74ab7f46f89a58ae9c2d67349ebc1ae3e18636627f9939d810167c31",
- "sha256:19a68716a322486ddffc8bf7e5cf44a82f7700b05a10658e6e7fc5c7ae92b13d",
- "sha256:19a95a01d28d63b042438ba860c4ace90362906a038fa77962ba33325d377d10",
- "sha256:1a61f3a51e00a3608659bbaabb3f27af37c9dbe84d843369061a3e45cf0d5103",
- "sha256:1c50aebebab403fb2dd415d70355446ac364dece502b0e2737a1a085bb9a4aa4",
- "sha256:1e51cdc123625a28709662d24ea0cb4cf6f991845e6054d9f803c78da1d6b08f",
- "sha256:1f0056d3216b0fe38f25c6f8ebc84bd9f6d34c55a7a9414341b674fb98961399",
- "sha256:228b59460e9a786e498bdfc8011838b89c6054650b115c86c9c819a055a793b0",
- "sha256:23020f9ff2cb3457a926dcc470b84f9bd5b7646bd8b8e06b915bdbbc905cb23f",
- "sha256:3e6bcca97a7ff4e720352b57ddc26380c0583dcdd4b791acef7b574ad58468a7",
- "sha256:3ed88f9e638da57647149115c34e0e120cae6f3d35eee7d77e22cc9c1d8eced3",
- "sha256:445bf7941cb1fa05d6c2a4a502ad4868a5cacd92e8eb77b2bd008cdda9d37c55",
- "sha256:4ba5e147d76d7ee884fd6eae461438b080bcc9f2c6eb9b576811e1bcfe8f808e",
- "sha256:4bb128b719c30f3b9feacfe71a338ae07d39dbffc077139416f3535c89f12362",
- "sha256:53c0c9964390368fd64460b690f168221c669766b193b7e80ae3950c2b9551f8",
- "sha256:57c4edef81611098d37176278f2b6a3712bf864eed313496d7d80504805896d1",
- "sha256:7f7283dfe50eac8a8cd9b777de9eb50b1edf7dbb46fc7cc9d9b0050d0c135021",
- "sha256:7f9759095b3fc825464a72b1cae95125e610eba3c70f91557754c32a0bf32ea2",
- "sha256:98727050ba70eb8d318ec8a8203531c20119347fc8f281102b097326812742ab",
- "sha256:ac9cdf044dcb9481c7da782db01b50c1f0e7cdd78c8507b963b6d072829c0263",
- "sha256:b679f951f842c38665aa54bea4d7403099131f71fac6d8584f893a731fe1266d",
- "sha256:b8c183dc4aa4e95dc5c373eedc3d205c176805835611fcfec5d9050736c695c4",
- "sha256:c2c76f483d05eddec60a5cd89e92385adef565a4f243b1d9a6abe2f6bd2a7c0a",
- "sha256:c388baa3c04272a7c585d3da24030c142353eb26eb531dd2681502e6be7d7a26",
- "sha256:cb0f2a711db665b5bf8697b5af3b9884bb1139385c5c12c2e472e4bbee62da99",
- "sha256:cbac984d7b36e75b440d1c8ff9d3425d778364a0cbc23f8943383d4decd35d5e",
- "sha256:f9084ed3b8997ad4353d124b903f2860a9695b9e080663276d9e58c32e293244"
- ],
- "version": "==0.13.1"
- },
- "pytz": {
- "hashes": [
- "sha256:32b0891edff07e28efe91284ed9c31e123d84bea3fd98e1f72be2508f43ef8d9",
- "sha256:d5f05e487007e29e03409f9398d074e158d920d36eb82eaf66fb1136b0c5374c"
- ],
- "version": "==2018.9"
- },
- "pyyaml": {
- "hashes": [
- "sha256:3d7da3009c0f3e783b2c873687652d83b1bbfd5c88e9813fb7e5b03c0dd3108b",
- "sha256:3ef3092145e9b70e3ddd2c7ad59bdd0252a94dfe3949721633e41344de00a6bf",
- "sha256:40c71b8e076d0550b2e6380bada1f1cd1017b882f7e16f09a65be98e017f211a",
- "sha256:558dd60b890ba8fd982e05941927a3911dc409a63dcb8b634feaa0cda69330d3",
- "sha256:a7c28b45d9f99102fa092bb213aa12e0aaf9a6a1f5e395d36166639c1f96c3a1",
- "sha256:aa7dd4a6a427aed7df6fb7f08a580d68d9b118d90310374716ae90b710280af1",
- "sha256:bc558586e6045763782014934bfaf39d48b8ae85a2713117d16c39864085c613",
- "sha256:d46d7982b62e0729ad0175a9bc7e10a566fc07b224d2c79fafb5e032727eaa04",
- "sha256:d5eef459e30b09f5a098b9cea68bebfeb268697f78d647bd255a085371ac7f3f",
- "sha256:e01d3203230e1786cd91ccfdc8f8454c8069c91bee3962ad93b87a4b2860f537",
- "sha256:e170a9e6fcfd19021dd29845af83bb79236068bf5fd4df3327c1be18182b2531"
- ],
- "version": "==3.13"
- },
- "red-discordbot": {
- "editable": true,
- "extras": [
- "mongo"
- ],
- "path": "."
- },
- "red-lavalink": {
- "hashes": [
- "sha256:2a2f469c1feb72c2604795053a8823757ace85ed752eaf573c1d0daba29d1180",
- "sha256:4bc685a5d89660875d07f50060bacc820e69a763a581ce69375c792e16df4081"
- ],
- "version": "==0.3.0"
- },
- "requests": {
- "hashes": [
- "sha256:502a824f31acdacb3a35b6690b5fbf0bc41d63a24a45c4004352b0242707598e",
- "sha256:7bf2a778576d825600030a110f3c0e3e8edc51dfaafe1c146e39a2027784957b"
- ],
- "version": "==2.21.0"
- },
- "schema": {
- "hashes": [
- "sha256:d994b0dc4966000037b26898df638e3e2a694cc73636cb2050e652614a350687",
- "sha256:fa1a53fe5f3b6929725a4e81688c250f46838e25d8c1885a10a590c8c01a7b74"
- ],
- "version": "==0.6.8"
- },
- "six": {
- "hashes": [
- "sha256:3350809f0555b11f552448330d0b52d5f24c91a322ea4a15ef22629740f3761c",
- "sha256:d16a0141ec1a18405cd4ce8b4613101da75da0e9a7aec5bdd4fa804d0e0eba73"
- ],
- "version": "==1.12.0"
- },
- "snowballstemmer": {
- "hashes": [
- "sha256:919f26a68b2c17a7634da993d91339e288964f93c274f1343e3bbbe2096e1128",
- "sha256:9f3bcd3c401c3e862ec0ebe6d2c069ebc012ce142cce209c098ccb5b09136e89"
- ],
- "version": "==1.2.1"
- },
- "sphinx": {
- "hashes": [
- "sha256:b53904fa7cb4b06a39409a492b949193a1b68cc7241a1a8ce9974f86f0d24287",
- "sha256:c1c00fc4f6e8b101a0d037065043460dffc2d507257f2f11acaed71fd2b0c83c"
- ],
- "version": "==1.8.4"
- },
- "sphinx-rtd-theme": {
- "hashes": [
- "sha256:00cf895504a7895ee433807c62094cf1e95f065843bf3acd17037c3e9a2becd4",
- "sha256:728607e34d60456d736cc7991fd236afb828b21b82f956c5ea75f94c8414040a"
- ],
- "version": "==0.4.3"
- },
- "sphinxcontrib-asyncio": {
- "hashes": [
- "sha256:96627b1ec4eba08d09ad577ff9416c131910333ef37a2c82a2716e59646739f0"
- ],
- "version": "==0.2.0"
- },
- "sphinxcontrib-websupport": {
- "hashes": [
- "sha256:68ca7ff70785cbe1e7bccc71a48b5b6d965d79ca50629606c7861a21b206d9dd",
- "sha256:9de47f375baf1ea07cdb3436ff39d7a9c76042c10a769c52353ec46e4e8fc3b9"
- ],
- "version": "==1.1.0"
- },
- "toml": {
- "hashes": [
- "sha256:229f81c57791a41d65e399fc06bf0848bab550a9dfd5ed66df18ce5f05e73d5c",
- "sha256:235682dd292d5899d361a811df37e04a8828a5b1da3115886b73cf81ebc9100e"
- ],
- "version": "==0.10.0"
- },
- "tox": {
- "hashes": [
- "sha256:5d6b9e7ad99a93b00ecd509e13552600d38eedd2b035ba24709f850b23f51254",
- "sha256:fee5b4fa2fb1638b57879a1fcaefbfd16201d8d7ecb9956406855a85d518ac4c"
- ],
- "index": "pypi",
- "version": "==3.10.0"
- },
- "urllib3": {
- "hashes": [
- "sha256:4c291ca23bbb55c76518905869ef34bdd5f0e46af7afe6861e8375643ffee1a0",
- "sha256:9a247273df709c4fedb38c711e44292304f73f39ab01beda9f6b9fc375669ac3"
- ],
- "version": "==1.24.2"
- },
- "virtualenv": {
- "hashes": [
- "sha256:15ee248d13e4001a691d9583948ad3947bcb8a289775102e4c4aa98a8b7a6d73",
- "sha256:bfc98bb9b42a3029ee41b96dc00a34c2f254cbf7716bec824477b2c82741a5c4"
- ],
- "version": "==16.5.0"
- },
- "websockets": {
- "hashes": [
- "sha256:0e2f7d6567838369af074f0ef4d0b802d19fa1fee135d864acc656ceefa33136",
- "sha256:2a16dac282b2fdae75178d0ed3d5b9bc3258dabfae50196cbb30578d84b6f6a6",
- "sha256:5a1fa6072405648cb5b3688e9ed3b94be683ce4a4e5723e6f5d34859dee495c1",
- "sha256:5c1f55a1274df9d6a37553fef8cff2958515438c58920897675c9bc70f5a0538",
- "sha256:669d1e46f165e0ad152ed8197f7edead22854a6c90419f544e0f234cc9dac6c4",
- "sha256:695e34c4dbea18d09ab2c258994a8bf6a09564e762655408241f6a14592d2908",
- "sha256:6b2e03d69afa8d20253455e67b64de1a82ff8612db105113cccec35d3f8429f0",
- "sha256:79ca7cdda7ad4e3663ea3c43bfa8637fc5d5604c7737f19a8964781abbd1148d",
- "sha256:7fd2dd9a856f72e6ed06f82facfce01d119b88457cd4b47b7ae501e8e11eba9c",
- "sha256:82c0354ac39379d836719a77ee360ef865377aa6fdead87909d50248d0f05f4d",
- "sha256:8f3b956d11c5b301206382726210dc1d3bee1a9ccf7aadf895aaf31f71c3716c",
- "sha256:91ec98640220ae05b34b79ee88abf27f97ef7c61cf525eec57ea8fcea9f7dddb",
- "sha256:952be9540d83dba815569d5cb5f31708801e0bbfc3a8c5aef1890b57ed7e58bf",
- "sha256:99ac266af38ba1b1fe13975aea01ac0e14bb5f3a3200d2c69f05385768b8568e",
- "sha256:9fa122e7adb24232247f8a89f2d9070bf64b7869daf93ac5e19546b409e47e96",
- "sha256:a0873eadc4b8ca93e2e848d490809e0123eea154aa44ecd0109c4d0171869584",
- "sha256:cb998bd4d93af46b8b49ecf5a72c0a98e5cc6d57fdca6527ba78ad89d6606484",
- "sha256:e02e57346f6a68523e3c43bbdf35dde5c440318d1f827208ae455f6a2ace446d",
- "sha256:e79a5a896bcee7fff24a788d72e5c69f13e61369d055f28113e71945a7eb1559",
- "sha256:ee55eb6bcf23ecc975e6b47c127c201b913598f38b6a300075f84eeef2d3baff",
- "sha256:f1414e6cbcea8d22843e7eafdfdfae3dd1aba41d1945f6ca66e4806c07c4f454"
- ],
- "version": "==6.0"
- },
- "yarl": {
- "hashes": [
- "sha256:024ecdc12bc02b321bc66b41327f930d1c2c543fa9a561b39861da9388ba7aa9",
- "sha256:2f3010703295fbe1aec51023740871e64bb9664c789cba5a6bdf404e93f7568f",
- "sha256:3890ab952d508523ef4881457c4099056546593fa05e93da84c7250516e632eb",
- "sha256:3e2724eb9af5dc41648e5bb304fcf4891adc33258c6e14e2a7414ea32541e320",
- "sha256:5badb97dd0abf26623a9982cd448ff12cb39b8e4c94032ccdedf22ce01a64842",
- "sha256:73f447d11b530d860ca1e6b582f947688286ad16ca42256413083d13f260b7a0",
- "sha256:7ab825726f2940c16d92aaec7d204cfc34ac26c0040da727cf8ba87255a33829",
- "sha256:b25de84a8c20540531526dfbb0e2d2b648c13fd5dd126728c496d7c3fea33310",
- "sha256:c6e341f5a6562af74ba55205dbd56d248daf1b5748ec48a0200ba227bb9e33f4",
- "sha256:c9bb7c249c4432cd47e75af3864bc02d26c9594f49c82e2a28624417f0ae63b8",
- "sha256:e060906c0c585565c718d1c3841747b61c5439af2211e185f6739a9412dfbde1"
- ],
- "version": "==1.3.0"
- }
- }
-}
diff --git a/dev-requirements.txt b/dev-requirements.txt
new file mode 100644
index 000000000..dbacdc621
--- /dev/null
+++ b/dev-requirements.txt
@@ -0,0 +1,3 @@
+packaging
+tox
+-e .[docs,mongo,style,test]
diff --git a/docs/conf.py b/docs/conf.py
index 29afe6380..18d2855a9 100644
--- a/docs/conf.py
+++ b/docs/conf.py
@@ -40,7 +40,7 @@ extensions = [
"sphinx.ext.viewcode",
"sphinx.ext.napoleon",
"sphinx.ext.doctest",
- "sphinxcontrib.asyncio",
+ "sphinxcontrib_trio",
]
# Add any paths that contain templates here, relative to this directory.
@@ -100,6 +100,9 @@ default_role = "any"
#
html_theme = "sphinx_rtd_theme"
+# This will be needed until sphinx_rtd_theme supports the html5 writer
+html4_writer = True
+
# Theme options are theme-specific and customize the look and feel of a theme
# further. For a list of options available for each theme, see the
# documentation.
@@ -211,3 +214,7 @@ intersphinx_mapping = {
# If this string is non-empty, all blocks with ``>>>`` in them will be
# tested, not just the ones explicitly marked with ``.. doctest::``
doctest_test_doctest_blocks = ""
+
+# Autodoc options
+autodoc_default_flags = ["show-inheritance"]
+autodoc_typehints = "none"
diff --git a/make.bat b/make.bat
index 58ec5a985..cf71ab715 100644
--- a/make.bat
+++ b/make.bat
@@ -21,6 +21,12 @@ exit /B %ERRORLEVEL%
black -l 99 --check !PYFILES!
exit /B %ERRORLEVEL%
+:setupenv
+py -3.7 -m venv --clear .venv
+.\.venv\Scripts\python -m pip install -U pip setuptools
+.\.venv\Scripts\python -m pip install -Ur dev-requirements.txt
+exit /B %ERRORLEVEL%
+
:help
echo Usage:
echo make ^
@@ -28,3 +34,4 @@ echo.
echo Commands:
echo reformat Reformat all .py files being tracked by git.
echo stylecheck Check which tracked .py files need reformatting.
+echo setupenv Create or replace a virtual environment for development.
diff --git a/redbot/core/__init__.py b/redbot/core/__init__.py
index 7ac359734..2fa66696e 100644
--- a/redbot/core/__init__.py
+++ b/redbot/core/__init__.py
@@ -1,6 +1,5 @@
import colorama as _colorama
import discord as _discord
-import yaml as _yaml
from .. import __version__, version_info, VersionInfo
from .config import Config
@@ -12,6 +11,3 @@ _colorama.init()
# Prevent discord PyNaCl missing warning
_discord.voice_client.VoiceClient.warn_nacl = False
-
-# Warn on known unsafe usage of dependencies
-_yaml.load = _warn_unsafe(_yaml.load, "Use yaml.safe_load instead. See CVE-2017-18342")
diff --git a/redbot/core/modlog.py b/redbot/core/modlog.py
index 62dd1e03a..a804f7b40 100644
--- a/redbot/core/modlog.py
+++ b/redbot/core/modlog.py
@@ -742,7 +742,7 @@ async def register_casetype(
------
RuntimeError
If the case type is already registered
- TypeError:
+ TypeError
If a parameter is missing
ValueError
If a parameter's value is not valid
diff --git a/setup.cfg b/setup.cfg
index ed3044aa3..30386aea5 100644
--- a/setup.cfg
+++ b/setup.cfg
@@ -26,66 +26,81 @@ classifiers =
packages = find_namespace:
python_requires = >=3.7
install_requires =
- aiohttp-json-rpc==0.12.1
aiohttp==3.5.4
+ aiohttp-json-rpc==0.12.1
appdirs==1.4.3
async-timeout==3.0.1
- attrs==18.2.0
+ attrs==19.1.0
chardet==3.0.4
- click==7.0
+ Click==7.0
colorama==0.4.1
+ contextlib2==0.5.5
+ discord.py==1.2.3
distro==1.4.0; sys_platform == "linux"
fuzzywuzzy==0.17.0
- idna-ssl==1.1.0
idna==2.8
multidict==4.5.2
- python-levenshtein-wheels==0.13.1
- pyyaml==3.13
- red-lavalink>=0.3.0,<0.4
- schema==0.6.8
- tqdm==4.32.1
+ python-Levenshtein-wheels==0.13.1
+ PyYAML==5.1.1
+ Red-Lavalink==0.3.0
+ schema==0.7.0
+ tqdm==4.32.2
+ websockets==6.0
yarl==1.3.0
- discord.py==1.0.1
- websockets<7
[options.extras_require]
docs =
alabaster==0.7.12
- babel==2.6.0
- certifi==2018.11.29
+ Babel==2.7.0
+ certifi==2019.6.16
docutils==0.14
imagesize==1.1.0
Jinja2==2.10.1
- MarkupSafe==1.1.0
+ MarkupSafe==1.1.1
packaging==19.0
- pyparsing==2.3.1
- Pygments==2.3.1
- pytz==2018.9
- requests==2.21.0
+ Pygments==2.4.2
+ pyparsing==2.4.0
+ pytz==2019.1
+ requests==2.22.0
six==1.12.0
snowballstemmer==1.2.1
- sphinx==1.8.4
- sphinx_rtd_theme==0.4.3
- sphinxcontrib-asyncio==0.2.0
- sphinxcontrib-websupport==1.1.0
- urllib3==1.24.2
+ Sphinx==2.1.2
+ sphinx-rtd-theme==0.4.3
+ sphinxcontrib-applehelp==1.0.1
+ sphinxcontrib-devhelp==1.0.1
+ sphinxcontrib-htmlhelp==1.0.2
+ sphinxcontrib-jsmath==1.0.1
+ sphinxcontrib-qthelp==1.0.2
+ sphinxcontrib-serializinghtml==1.1.3
+ sphinxcontrib-trio==1.1.0
+ urllib3==1.25.3
mongo =
- motor==2.0.0
- pymongo==3.7.2
dnspython==1.16.0
+ motor==2.0.0
+ pymongo==3.8.0
style =
black==19.3b0
- click==7.0
toml==0.10.0
test =
+ astroid==2.2.5
atomicwrites==1.3.0
- more-itertools==6.0.0
- pluggy==0.8.1
- py==1.7.0
- pytest==4.2.0
+ importlib-metadata==0.18
+ isort==4.3.21
+ lazy-object-proxy==1.4.1
+ mccabe==0.6.1
+ more-itertools==7.0.0
+ packaging==19.0
+ pluggy==0.12.0
+ py==1.8.0
+ pylint==2.3.1
+ pyparsing==2.4.0
+ pytest==4.6.3
pytest-asyncio==0.10.0
six==1.12.0
- pylint==2.3.1
+ typed-ast==1.4.0
+ wcwidth==0.1.7
+ wrapt==1.11.2
+ zipp==0.5.1
[options.entry_points]
console_scripts =
diff --git a/tools/bumpdeps.py b/tools/bumpdeps.py
new file mode 100755
index 000000000..82df1da0c
--- /dev/null
+++ b/tools/bumpdeps.py
@@ -0,0 +1,171 @@
+#!/usr/bin/env python3.7
+"""Script to bump pinned dependencies in setup.cfg.
+
+This script aims to help update our list of pinned primary and
+secondary dependencies in *setup.cfg*, using the unpinned primary
+dependencies listed in *primary_deps.ini*.
+
+This script will not work when run on Windows.
+
+What this script does
+---------------------
+It prints to stdout all primary and secondary dependencies for Red,
+pinned to the latest possible version, within the constraints specified
+in ``primary_deps.ini``. The output should be suitable for copying and
+pasting into ``setup.cfg``. PEP 508 markers are preserved.
+
+How this script works
+---------------------
+Overview:
+1. Primary dependencies are read from primary_deps.ini using
+setuptools' config parser.
+2. A clean virtual environment is created in a temporary directory.
+3. Core primary dependencies are passed to the ``pip install`` command
+for that virtual environment.
+4. Pinned primary dependencies are obtained by reading the output of
+``pip freeze`` in that virtual environment, and any PEP 508 markers
+shown with the requirement in ``primary_deps.ini`` are preserved.
+5. Steps 2-4 are repeated for each extra requirement, but care is taken
+not to duplicate core dependencies (primary or secondary) in the final
+pinned extra dependencies.
+
+This script makes use of the *packaging* library to parse version
+specifiers and environment markers.
+
+Known Limitations
+-----------------
+These limitations don't stop this script from being helpful, but
+hopefully help explain in which situations some dependencies may need
+to be listed manually in ``setup.cfg``.
+
+1. Whilst environment markers of any primary dependencies specified in
+``primary_deps.ini`` are preserved in the output, they will not be
+added to secondary dependencies. So for example, if some package
+*dep1* has a dependency *dep2*, and *dep1* is listed as a primary
+dependency in ``primary_deps.ini`` like follows::
+ dep1; sys_platform == "linux"
+
+Then the output will look like this::
+ dep1==1.1.1; sys_platform == "linux"
+ dep2==2.2.2
+
+So even though ``dep1`` and its dependencies should only be installed on
+Linux, in reality, its dependencies will be installed regardless. To
+work around this, simply list the secondary dependencies in
+``primary_deps.ini`` as well, with the environment markers.
+
+2. If a core requirement and an extra requirement have a common
+sub-dependency, there is a chance the sub-dependency will have a version
+conflict unless it is manually held back. This script will issue a
+warning to stderr when it thinks this might be happening.
+
+3. Environment markers which exclude dependencies from the system
+running this script will cause those dependencies to be excluded from
+the output. So for example, if a dependency has the environment marker
+``sys_platform == "darwin"``, and the script is being run on linux, then
+this dependency will be ignored, and must be added to ``setup.cfg``
+manually.
+"""
+import shlex
+import sys
+import subprocess as sp
+import tempfile
+import textwrap
+import venv
+from pathlib import Path
+from typing import Sequence, Iterable, Dict
+
+import packaging.requirements
+import setuptools.config
+
+THIS_DIRECTORY = Path(__file__).parent
+REQUIREMENTS_INI_PTH: Path = THIS_DIRECTORY / "primary_deps.ini"
+
+PIP_INSTALL_ARGS = ("install", "--upgrade")
+PIP_FREEZE_ARGS = ("freeze", "--no-color")
+
+
+def main() -> int:
+ if not REQUIREMENTS_INI_PTH.is_file():
+ print("No primary_deps.ini found in the same directory as bumpdeps.py", file=sys.stderr)
+ return 1
+
+ primary_reqs_cfg = setuptools.config.read_configuration(str(REQUIREMENTS_INI_PTH))
+
+ print("[options]")
+ print("install_requires =")
+ core_primary_deps = primary_reqs_cfg["options"]["install_requires"]
+ full_core_reqs = get_all_reqs(core_primary_deps)
+ print(textwrap.indent("\n".join(map(str, full_core_reqs)), " " * 4))
+ print()
+
+ print("[options.extras_require]")
+ for extra, extra_primary_deps in primary_reqs_cfg["options"]["extras_require"].items():
+ print(extra, "=")
+ full_extra_reqs = get_all_reqs(
+ extra_primary_deps, all_core_deps={r.name.lower(): r for r in full_core_reqs}
+ )
+ print(textwrap.indent("\n".join(map(str, full_extra_reqs)), " " * 4))
+
+ return 0
+
+
+def get_all_reqs(
+ primary_deps: Iterable[str], all_core_deps: Dict[str, packaging.requirements.Requirement] = ()
+) -> Sequence[packaging.requirements.Requirement]:
+ reqs_dict = {r.name.lower(): r for r in map(packaging.requirements.Requirement, primary_deps)}
+ with tempfile.TemporaryDirectory() as tmpdir:
+ venv.create(tmpdir, system_site_packages=False, clear=True, with_pip=True)
+ tmpdir_pth = Path(tmpdir)
+
+ pip_exe_pth = tmpdir_pth / "bin" / "pip"
+
+ # Upgrade pip to latest version
+ sp.run((pip_exe_pth, *PIP_INSTALL_ARGS, "pip"), stdout=sp.DEVNULL, check=True)
+
+ # Install the primary dependencies
+ sp.run(
+ (pip_exe_pth, *PIP_INSTALL_ARGS, *map(str, reqs_dict.values())),
+ stdout=sp.DEVNULL,
+ check=True,
+ )
+
+ # Get pinned primary+secondary dependencies from pip freeze
+ proc = sp.run(
+ (pip_exe_pth, *PIP_FREEZE_ARGS), stdout=sp.PIPE, check=True, encoding="utf-8"
+ )
+
+ # Return Requirement objects
+ ret = []
+ for req_obj in map(packaging.requirements.Requirement, proc.stdout.strip().split("\n")):
+ dep_name = req_obj.name.lower()
+ # Don't include core dependencies if these are extra dependencies
+ if dep_name in all_core_deps:
+ if req_obj.specifier != all_core_deps[dep_name].specifier:
+ print(
+ f"[WARNING] {dep_name} is listed as both a core requirement and an extra "
+ f"requirement, and it's possible that their versions conflict!",
+ file=sys.stderr,
+ )
+ continue
+
+ # Preserve environment markers
+ if dep_name in reqs_dict:
+ req_obj.marker = reqs_dict[dep_name].marker
+
+ ret.append(req_obj)
+
+ return ret
+
+
+if __name__ == "__main__":
+ try:
+ exit_code = main()
+ except sp.CalledProcessError as exc:
+ cmd = " ".join(map(lambda c: shlex.quote(str(c)), exc.cmd))
+ print(
+ f"The following command failed with code {exc.returncode}:\n ", cmd, file=sys.stderr
+ )
+ exit_code = 1
+
+ sys.exit(exit_code)
diff --git a/tools/primary_deps.ini b/tools/primary_deps.ini
new file mode 100644
index 000000000..ef0a58cff
--- /dev/null
+++ b/tools/primary_deps.ini
@@ -0,0 +1,40 @@
+# primary_deps.ini
+# This file should list primary dependencies in terms of both core and
+# extras, in setup.cfg format. A primary dependency is one which is
+# used directly in Red, or otherwise is forced to be listed as a
+# dependency. Version specifiers should be as liberal as possible.
+
+[options]
+install_requires =
+ aiohttp
+ aiohttp-json-rpc
+ appdirs
+ click
+ colorama
+ discord.py
+ distro; sys_platform == "linux"
+ fuzzywuzzy
+ python-Levenshtein-wheels
+ PyYAML
+ Red-Lavalink
+ schema
+ tqdm
+ # Websockets is a secondary dependency, but until pip has a complete dependency resolver, we
+ # need to list it here to avoid an incompatible version being installed.
+ # See under point 2 here: https://pip.pypa.io/en/stable/user_guide/#requirements-files
+ websockets<7.0
+
+[options.extras_require]
+docs =
+ Sphinx
+ sphinx_rtd_theme
+ sphinxcontrib-trio
+mongo =
+ dnspython
+ motor
+style =
+ black
+test =
+ pylint
+ pytest
+ pytest-asyncio
From f3bbfdc64d3021f03da84f999e5cdcaebd7f6687 Mon Sep 17 00:00:00 2001
From: Toby Harradine
Date: Fri, 28 Jun 2019 03:31:44 +1000
Subject: [PATCH 055/183] Fix duplicate commands in fuzzy help (#2798)
* Fix duplicate commands in fuzzy help
Signed-off-by: Toby Harradine
* Use help command's filter for all fuzzy
Signed-off-by: Toby Harradine
---
redbot/core/commands/help.py | 5 +++--
redbot/core/events.py | 8 +++++++-
redbot/core/utils/__init__.py | 26 +++++++++++++++-----------
3 files changed, 25 insertions(+), 14 deletions(-)
diff --git a/redbot/core/commands/help.py b/redbot/core/commands/help.py
index 615cd8e03..befd8d97e 100644
--- a/redbot/core/commands/help.py
+++ b/redbot/core/commands/help.py
@@ -417,8 +417,9 @@ class RedHelpFormatter:
pages = [box(p) for p in pagify(to_page)]
await self.send_pages(ctx, pages, embed=False)
+ @staticmethod
async def help_filter_func(
- self, ctx, objects: Iterable[SupportsCanSee], bypass_hidden=False
+ ctx, objects: Iterable[SupportsCanSee], bypass_hidden=False
) -> AsyncIterator[SupportsCanSee]:
"""
This does most of actual filtering.
@@ -450,7 +451,7 @@ class RedHelpFormatter:
"""
Sends an error, fuzzy help, or stays quiet based on settings
"""
- coms = [c async for c in self.help_filter_func(ctx, ctx.bot.walk_commands())]
+ coms = {c async for c in self.help_filter_func(ctx, ctx.bot.walk_commands())}
fuzzy_commands = await fuzzy_command_search(ctx, help_for, commands=coms, min_score=75)
use_embeds = await ctx.embed_requested()
if fuzzy_commands:
diff --git a/redbot/core/events.py b/redbot/core/events.py
index bd0bff3cd..33f025789 100644
--- a/redbot/core/events.py
+++ b/redbot/core/events.py
@@ -13,6 +13,7 @@ import pkg_resources
from colorama import Fore, Style, init
from pkg_resources import DistributionNotFound
+from redbot.core.commands import RedHelpFormatter
from .. import __version__ as red_version, version_info as red_version_info, VersionInfo
from . import commands
from .config import get_latest_confs
@@ -201,7 +202,12 @@ def init_events(bot, cli_flags):
bot._last_exception = exception_log
await ctx.send(inline(message))
elif isinstance(error, commands.CommandNotFound):
- fuzzy_commands = await fuzzy_command_search(ctx)
+ fuzzy_commands = await fuzzy_command_search(
+ ctx,
+ commands={
+ c async for c in RedHelpFormatter.help_filter_func(ctx, bot.walk_commands())
+ },
+ )
if not fuzzy_commands:
pass
elif await ctx.embed_requested():
diff --git a/redbot/core/utils/__init__.py b/redbot/core/utils/__init__.py
index dc4d2fa8a..00a87d299 100644
--- a/redbot/core/utils/__init__.py
+++ b/redbot/core/utils/__init__.py
@@ -19,14 +19,18 @@ from typing import (
Tuple,
TypeVar,
Union,
+ Set,
+ TYPE_CHECKING,
)
import discord
from fuzzywuzzy import fuzz, process
-from redbot.core import commands
from .chat_formatting import box
+if TYPE_CHECKING:
+ from ..commands import Command, Context
+
__all__ = [
"bounded_gather",
"safe_delete",
@@ -180,12 +184,12 @@ async def async_enumerate(
async def fuzzy_command_search(
- ctx: commands.Context,
+ ctx: "Context",
term: Optional[str] = None,
*,
- commands: Optional[list] = None,
+ commands: Optional[Set["Command"]] = None,
min_score: int = 80,
-) -> Optional[List[commands.Command]]:
+) -> Optional[List["Command"]]:
"""Search for commands which are similar in name to the one invoked.
Returns a maximum of 5 commands which must all be at least matched
@@ -196,8 +200,11 @@ async def fuzzy_command_search(
ctx : `commands.Context `
The command invocation context.
term : Optional[str]
- The name of the invoked command. If ``None``, `Context.invoked_with`
- will be used instead.
+ The name of the invoked command. If ``None``,
+ `Context.invoked_with` will be used instead.
+ commands : Optional[Set[commands.Command]]
+ The commands available to choose from when doing a fuzzy match.
+ When omitted, `Bot.walk_commands` will be used instead.
min_score : int
The minimum score for matched commands to reach. Defaults to 80.
@@ -239,7 +246,7 @@ async def fuzzy_command_search(
# Do the scoring. `extracted` is a list of tuples in the form `(command, score)`
extracted = process.extract(
- term, (commands or ctx.bot.walk_commands()), limit=5, scorer=fuzz.QRatio
+ term, (commands or set(ctx.bot.walk_commands())), limit=5, scorer=fuzz.QRatio
)
if not extracted:
return
@@ -257,10 +264,7 @@ async def fuzzy_command_search(
async def format_fuzzy_results(
- ctx: commands.Context,
- matched_commands: List[commands.Command],
- *,
- embed: Optional[bool] = None,
+ ctx: "Context", matched_commands: List["Command"], *, embed: Optional[bool] = None
) -> Union[str, discord.Embed]:
"""Format the result of a fuzzy command search.
From bff7e214aba78c9be21f614c82e264587e72b9a3 Mon Sep 17 00:00:00 2001
From: Toby Harradine
Date: Fri, 28 Jun 2019 04:49:45 +1000
Subject: [PATCH 056/183] Kill JsonIO and fix JSON driver caching issues
(#2796)
* Kill JsonIO and fix JSON driver caching issues
Signed-off-by: Toby Harradine
* Ensure lock covers critical region in set()
Signed-off-by: Toby Harradine
* Make tests pass
Signed-off-by: Toby Harradine
* Use pickle over deepcopy in Config
Signed-off-by: Toby Harradine
* Fix temp instance creation
Signed-off-by: Toby Harradine
* Serialise value before doing anything in set()
Signed-off-by: Toby Harradine
---
.github/CODEOWNERS | 1 -
redbot/__main__.py | 5 +-
redbot/core/config.py | 20 ++---
redbot/core/core_commands.py | 4 +-
redbot/core/data_manager.py | 28 ++++---
redbot/core/drivers/red_json.py | 131 +++++++++++++++++++++++---------
redbot/core/json_io.py | 90 ----------------------
redbot/pytest/data_manager.py | 1 -
redbot/setup.py | 10 ++-
9 files changed, 133 insertions(+), 157 deletions(-)
delete mode 100644 redbot/core/json_io.py
diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS
index f1dc5b0cd..ef2d440ba 100644
--- a/.github/CODEOWNERS
+++ b/.github/CODEOWNERS
@@ -16,7 +16,6 @@ redbot/core/drivers/* @tekulvw
redbot/core/events.py @tekulvw
redbot/core/global_checks.py @tekulvw
redbot/core/i18n.py @tekulvw
-redbot/core/json_io.py @tekulvw
redbot/core/modlog.py @palmtree5
redbot/core/rpc.py @tekulvw
redbot/core/utils/chat_formatting.py @tekulvw
diff --git a/redbot/__main__.py b/redbot/__main__.py
index e64de887a..602a77489 100644
--- a/redbot/__main__.py
+++ b/redbot/__main__.py
@@ -3,6 +3,7 @@
# Discord Version check
import asyncio
+import json
import logging
import os
import sys
@@ -12,7 +13,6 @@ import discord
import redbot.logging
from redbot.core.bot import Red, ExitCodes
from redbot.core.cog_manager import CogManagerUI
-from redbot.core.json_io import JsonIO
from redbot.core.global_checks import init_global_checks
from redbot.core.events import init_events
from redbot.core.cli import interactive_config, confirm, parse_cli_flags
@@ -61,7 +61,8 @@ def list_instances():
)
sys.exit(1)
else:
- data = JsonIO(data_manager.config_file)._load_json()
+ with data_manager.config_file.open(encoding="utf-8") as fs:
+ data = json.load(fs)
text = "Configured Instances:\n\n"
for instance_name in sorted(data.keys()):
text += "{}\n".format(instance_name)
diff --git a/redbot/core/config.py b/redbot/core/config.py
index 569e33b70..00d9305a1 100644
--- a/redbot/core/config.py
+++ b/redbot/core/config.py
@@ -1,8 +1,8 @@
-import logging
import collections
-from copy import deepcopy
-from typing import Any, Union, Tuple, Dict, Awaitable, AsyncContextManager, TypeVar
+import logging
+import pickle
import weakref
+from typing import Any, Union, Tuple, Dict, Awaitable, AsyncContextManager, TypeVar
import discord
@@ -57,7 +57,7 @@ class _ValueCtxManager(Awaitable[_T], AsyncContextManager[_T]): # pylint: disab
"list or dict) in order to use a config value as "
"a context manager."
)
- self.__original_value = deepcopy(self.raw_value)
+ self.__original_value = pickle.loads(pickle.dumps(self.raw_value, -1))
return self.raw_value
async def __aexit__(self, exc_type, exc, tb):
@@ -204,7 +204,7 @@ class Group(Value):
@property
def defaults(self):
- return deepcopy(self._defaults)
+ return pickle.loads(pickle.dumps(self._defaults, -1))
async def _get(self, default: Dict[str, Any] = ...) -> Dict[str, Any]:
default = default if default is not ... else self.defaults
@@ -446,7 +446,7 @@ class Group(Value):
result = self.nested_update(value, defaults.get(key, {}))
defaults[key] = result
else:
- defaults[key] = deepcopy(current[key])
+ defaults[key] = pickle.loads(pickle.dumps(current[key], -1))
return defaults
async def set(self, value):
@@ -558,7 +558,7 @@ class Config:
@property
def defaults(self):
- return deepcopy(self._defaults)
+ return pickle.loads(pickle.dumps(self._defaults, -1))
@staticmethod
def _create_uuid(identifier: int):
@@ -727,7 +727,7 @@ class Config:
if key not in self._defaults:
self._defaults[key] = {}
- data = deepcopy(kwargs)
+ data = pickle.loads(pickle.dumps(kwargs, -1))
for k, v in data.items():
to_add = self._get_defaults_dict(k, v)
@@ -988,7 +988,7 @@ class Config:
pass
else:
for k, v in dict_.items():
- data = deepcopy(defaults)
+ data = pickle.loads(pickle.dumps(defaults, -1))
data.update(v)
ret[int(k)] = data
@@ -1066,7 +1066,7 @@ class Config:
ret = {}
defaults = self.defaults.get(self.MEMBER, {})
for member_id, member_data in guild_data.items():
- new_member_data = deepcopy(defaults)
+ new_member_data = pickle.loads(pickle.dumps(defaults, -1))
new_member_data.update(member_data)
ret[int(member_id)] = new_member_data
return ret
diff --git a/redbot/core/core_commands.py b/redbot/core/core_commands.py
index 3b4680864..7112a04ea 100644
--- a/redbot/core/core_commands.py
+++ b/redbot/core/core_commands.py
@@ -1359,9 +1359,9 @@ class Core(commands.Cog, CoreLogic):
docs = await db[c_name].find().to_list(None)
for item in docs:
item_id = str(item.pop("_id"))
- output = item
target = JSON(c_name, item_id, data_path_override=c_data_path)
- await target.jsonIO._threadsafe_save_json(output)
+ target.data = item
+ await target._save()
backup_filename = "redv3-{}-{}.tar.gz".format(
instance_name, ctx.message.created_at.strftime("%Y-%m-%d %H-%M-%S")
)
diff --git a/redbot/core/data_manager.py b/redbot/core/data_manager.py
index 0e0b58fdb..b031cd1cb 100644
--- a/redbot/core/data_manager.py
+++ b/redbot/core/data_manager.py
@@ -1,16 +1,17 @@
import inspect
+import json
import logging
import os
import sys
import tempfile
from copy import deepcopy
from pathlib import Path
+from typing import Any, Dict
import appdirs
from discord.utils import deprecated
from . import commands
-from .json_io import JsonIO
__all__ = [
"create_temp_config",
@@ -25,12 +26,15 @@ __all__ = [
log = logging.getLogger("red.data_manager")
-jsonio = None
basic_config = None
instance_name = None
-basic_config_default = {"DATA_PATH": None, "COG_PATH_APPEND": "cogs", "CORE_PATH_APPEND": "core"}
+basic_config_default: Dict[str, Any] = {
+ "DATA_PATH": None,
+ "COG_PATH_APPEND": "cogs",
+ "CORE_PATH_APPEND": "core",
+}
config_dir = None
appdir = appdirs.AppDirs("Red-DiscordBot")
@@ -57,9 +61,13 @@ def create_temp_config():
default_dirs["STORAGE_TYPE"] = "JSON"
default_dirs["STORAGE_DETAILS"] = {}
- config = JsonIO(config_file)._load_json()
+ with config_file.open("r", encoding="utf-8") as fs:
+ config = json.load(fs)
+
config[name] = default_dirs
- JsonIO(config_file)._save_json(config)
+
+ with config_file.open("w", encoding="utf-8") as fs:
+ json.dump(config, fs, indent=4)
def load_basic_configuration(instance_name_: str):
@@ -76,23 +84,21 @@ def load_basic_configuration(instance_name_: str):
The instance name given by CLI argument and created during
redbot setup.
"""
- global jsonio
global basic_config
global instance_name
-
- jsonio = JsonIO(config_file)
-
instance_name = instance_name_
try:
- config = jsonio._load_json()
- basic_config = config[instance_name]
+ with config_file.open(encoding="utf-8") as fs:
+ config = json.load(fs)
except (FileNotFoundError, KeyError):
print(
"You need to configure the bot instance using `redbot-setup`"
" prior to running the bot."
)
sys.exit(1)
+ else:
+ basic_config = config[instance_name]
def _base_data_path() -> Path:
diff --git a/redbot/core/drivers/red_json.py b/redbot/core/drivers/red_json.py
index 7e6f7c333..f598f6cf4 100644
--- a/redbot/core/drivers/red_json.py
+++ b/redbot/core/drivers/red_json.py
@@ -1,9 +1,12 @@
-from pathlib import Path
-import copy
-import weakref
+import asyncio
+import json
import logging
-
-from ..json_io import JsonIO
+import os
+import pickle
+import weakref
+from pathlib import Path
+from typing import Any, Dict
+from uuid import uuid4
from .red_base import BaseDriver, IdentifierData
@@ -59,13 +62,10 @@ class JSON(BaseDriver):
self.data_path = data_path_override
else:
self.data_path = Path.cwd() / "cogs" / ".data" / self.cog_name
-
self.data_path.mkdir(parents=True, exist_ok=True)
-
self.data_path = self.data_path / self.file_name
- self.jsonIO = JsonIO(self.data_path)
-
+ self._lock = asyncio.Lock()
self._load_data()
async def has_valid_connection(self) -> bool:
@@ -90,10 +90,12 @@ class JSON(BaseDriver):
return
try:
- self.data = self.jsonIO._load_json()
+ with self.data_path.open("r", encoding="utf-8") as fs:
+ self.data = json.load(fs)
except FileNotFoundError:
self.data = {}
- self.jsonIO._save_json(self.data)
+ with self.data_path.open("w", encoding="utf-8") as fs:
+ json.dump(self.data, fs, indent=4)
def migrate_identifier(self, raw_identifier: int):
if self.unique_cog_identifier in self.data:
@@ -104,7 +106,7 @@ class JSON(BaseDriver):
if ident in self.data:
self.data[self.unique_cog_identifier] = self.data[ident]
del self.data[ident]
- self.jsonIO._save_json(self.data)
+ _save_json(self.data_path, self.data)
break
async def get(self, identifier_data: IdentifierData):
@@ -112,18 +114,23 @@ class JSON(BaseDriver):
full_identifiers = identifier_data.to_tuple()
for i in full_identifiers:
partial = partial[i]
- return copy.deepcopy(partial)
+ return pickle.loads(pickle.dumps(partial, -1))
async def set(self, identifier_data: IdentifierData, value=None):
partial = self.data
full_identifiers = identifier_data.to_tuple()
- for i in full_identifiers[:-1]:
- if i not in partial:
- partial[i] = {}
- partial = partial[i]
+ # This is both our deepcopy() and our way of making sure this value is actually JSON
+ # serializable.
+ value_copy = json.loads(json.dumps(value))
- partial[full_identifiers[-1]] = copy.deepcopy(value)
- await self.jsonIO._threadsafe_save_json(self.data)
+ async with self._lock:
+ for i in full_identifiers[:-1]:
+ if i not in partial:
+ partial[i] = {}
+ partial = partial[i]
+ partial[full_identifiers[-1]] = value_copy
+
+ await self._save()
async def clear(self, identifier_data: IdentifierData):
partial = self.data
@@ -131,35 +138,87 @@ class JSON(BaseDriver):
try:
for i in full_identifiers[:-1]:
partial = partial[i]
- del partial[full_identifiers[-1]]
except KeyError:
pass
else:
- await self.jsonIO._threadsafe_save_json(self.data)
+ async with self._lock:
+ try:
+ del partial[full_identifiers[-1]]
+ except KeyError:
+ pass
+ else:
+ await self._save()
async def import_data(self, cog_data, custom_group_data):
- def update_write_data(identifier_data: IdentifierData, data):
+ def update_write_data(identifier_data: IdentifierData, _data):
partial = self.data
idents = identifier_data.to_tuple()
for ident in idents[:-1]:
if ident not in partial:
partial[ident] = {}
partial = partial[ident]
- partial[idents[-1]] = data
+ partial[idents[-1]] = _data
- for category, all_data in cog_data:
- splitted_pkey = self._split_primary_key(category, custom_group_data, all_data)
- for pkey, data in splitted_pkey:
- ident_data = IdentifierData(
- self.unique_cog_identifier,
- category,
- pkey,
- (),
- custom_group_data,
- is_custom=category in custom_group_data,
- )
- update_write_data(ident_data, data)
- await self.jsonIO._threadsafe_save_json(self.data)
+ async with self._lock:
+ for category, all_data in cog_data:
+ splitted_pkey = self._split_primary_key(category, custom_group_data, all_data)
+ for pkey, data in splitted_pkey:
+ ident_data = IdentifierData(
+ self.unique_cog_identifier,
+ category,
+ pkey,
+ (),
+ custom_group_data,
+ is_custom=category in custom_group_data,
+ )
+ update_write_data(ident_data, data)
+ await self._save()
+
+ async def _save(self) -> None:
+ loop = asyncio.get_running_loop()
+ await loop.run_in_executor(None, _save_json, self.data_path, self.data)
def get_config_details(self):
return
+
+
+def _save_json(path: Path, data: Dict[str, Any]) -> None:
+ """
+ This fsync stuff here is entirely neccessary.
+
+ On windows, it is not available in entirety.
+ If a windows user ends up with tons of temp files, they should consider hosting on
+ something POSIX compatible, or using the mongo backend instead.
+
+ Most users wont encounter this issue, but with high write volumes,
+ without the fsync on both the temp file, and after the replace on the directory,
+ There's no real durability or atomicity guarantee from the filesystem.
+
+ In depth overview of underlying reasons why this is needed:
+ https://lwn.net/Articles/457667/
+
+ Also see:
+ http://man7.org/linux/man-pages/man2/open.2.html#NOTES (synchronous I/O section)
+ And:
+ https://www.mjmwired.net/kernel/Documentation/filesystems/ext4.txt#310
+ """
+ filename = path.stem
+ tmp_file = "{}-{}.tmp".format(filename, uuid4().fields[0])
+ tmp_path = path.parent / tmp_file
+ with tmp_path.open(encoding="utf-8", mode="w") as fs:
+ json.dump(data, fs, indent=4)
+ fs.flush() # This does get closed on context exit, ...
+ os.fsync(fs.fileno()) # but that needs to happen prior to this line
+
+ tmp_path.replace(path)
+
+ try:
+ flag = os.O_DIRECTORY # pylint: disable=no-member
+ except AttributeError:
+ pass
+ else:
+ fd = os.open(path.parent, flag)
+ try:
+ os.fsync(fd)
+ finally:
+ os.close(fd)
diff --git a/redbot/core/json_io.py b/redbot/core/json_io.py
deleted file mode 100644
index d209a1ad9..000000000
--- a/redbot/core/json_io.py
+++ /dev/null
@@ -1,90 +0,0 @@
-import functools
-import json
-import os
-import asyncio
-import logging
-from copy import deepcopy
-from uuid import uuid4
-
-# This is basically our old DataIO and just a base for much more elaborate classes
-# This still isn't completely threadsafe, (do not use config in threads)
-from pathlib import Path
-
-log = logging.getLogger("red")
-
-PRETTY = {"indent": 4, "sort_keys": False, "separators": (",", " : ")}
-MINIFIED = {"sort_keys": False, "separators": (",", ":")}
-
-
-class JsonIO:
- """Basic functions for atomic saving / loading of json files"""
-
- def __init__(self, path: Path = Path.cwd()):
- """
- :param path: Full path to file.
- """
- self._lock = asyncio.Lock()
- self.path = path
-
- # noinspection PyUnresolvedReferences
- def _save_json(self, data, settings=PRETTY):
- """
- This fsync stuff here is entirely neccessary.
-
- On windows, it is not available in entirety.
- If a windows user ends up with tons of temp files, they should consider hosting on
- something POSIX compatible, or using the mongo backend instead.
-
- Most users wont encounter this issue, but with high write volumes,
- without the fsync on both the temp file, and after the replace on the directory,
- There's no real durability or atomicity guarantee from the filesystem.
-
- In depth overview of underlying reasons why this is needed:
- https://lwn.net/Articles/457667/
-
- Also see:
- http://man7.org/linux/man-pages/man2/open.2.html#NOTES (synchronous I/O section)
- And:
- https://www.mjmwired.net/kernel/Documentation/filesystems/ext4.txt#310
- """
- filename = self.path.stem
- tmp_file = "{}-{}.tmp".format(filename, uuid4().fields[0])
- tmp_path = self.path.parent / tmp_file
- with tmp_path.open(encoding="utf-8", mode="w") as f:
- json.dump(data, f, **settings)
- f.flush() # This does get closed on context exit, ...
- os.fsync(f.fileno()) # but that needs to happen prior to this line
-
- tmp_path.replace(self.path)
-
- # pylint: disable=no-member
- try:
- fd = os.open(self.path.parent, os.O_DIRECTORY)
- os.fsync(fd)
- except AttributeError:
- fd = None
- finally:
- if fd is not None:
- os.close(fd)
-
- async def _threadsafe_save_json(self, data, settings=PRETTY):
- loop = asyncio.get_event_loop()
- # the deepcopy is needed here. otherwise,
- # the dict can change during serialization
- # and this will break the encoder.
- data_copy = deepcopy(data)
- func = functools.partial(self._save_json, data_copy, settings)
- async with self._lock:
- await loop.run_in_executor(None, func)
-
- # noinspection PyUnresolvedReferences
- def _load_json(self):
- with self.path.open(encoding="utf-8", mode="r") as f:
- data = json.load(f)
- return data
-
- async def _threadsafe_load_json(self, path):
- loop = asyncio.get_event_loop()
- func = functools.partial(self._load_json, path)
- async with self._lock:
- return await loop.run_in_executor(None, func)
diff --git a/redbot/pytest/data_manager.py b/redbot/pytest/data_manager.py
index d1a68c06b..5a069674f 100644
--- a/redbot/pytest/data_manager.py
+++ b/redbot/pytest/data_manager.py
@@ -8,7 +8,6 @@ __all__ = ["cleanup_datamanager", "data_mgr_config", "cog_instance"]
@pytest.fixture(autouse=True)
def cleanup_datamanager():
data_manager.basic_config = None
- data_manager.jsonio = None
@pytest.fixture()
diff --git a/redbot/setup.py b/redbot/setup.py
index 61a3b834d..20e2c848f 100644
--- a/redbot/setup.py
+++ b/redbot/setup.py
@@ -23,7 +23,6 @@ from redbot.core.data_manager import (
core_data_path,
storage_details,
)
-from redbot.core.json_io import JsonIO
from redbot.core.utils import safe_delete
from redbot.core import Config
from redbot.core.drivers import BackendType, IdentifierData
@@ -50,7 +49,8 @@ def load_existing_config():
if not config_file.exists():
return {}
- return JsonIO(config_file)._load_json()
+ with config_file.open(encoding="utf-8") as fs:
+ return json.load(fs)
instance_data = load_existing_config()
@@ -74,7 +74,9 @@ def save_config(name, data, remove=False):
print("Not continuing")
sys.exit(0)
config[name] = data
- JsonIO(config_file)._save_json(config)
+
+ with config_file.open("w", encoding="utf-8") as fs:
+ json.dump(config, fs, indent=4)
def get_data_dir():
@@ -220,7 +222,7 @@ async def json_to_mongov2(instance):
if "." in cog_name:
# Garbage handler
continue
- with p.open(mode="r") as f:
+ with p.open(mode="r", encoding="utf-8") as f:
cog_data = json.load(f)
for identifier, all_data in cog_data.items():
try:
From 8637f8a85276e4a5862f9345946d5e9bfbca4c38 Mon Sep 17 00:00:00 2001
From: Michael H
Date: Sat, 29 Jun 2019 10:30:09 -0400
Subject: [PATCH 057/183] [Filter] Fix cache invalidation (#2810)
---
redbot/cogs/filter/filter.py | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/redbot/cogs/filter/filter.py b/redbot/cogs/filter/filter.py
index fae8cab8e..e81494234 100644
--- a/redbot/cogs/filter/filter.py
+++ b/redbot/cogs/filter/filter.py
@@ -286,6 +286,10 @@ class Filter(commands.Cog):
def invalidate_cache(self, guild: discord.Guild, channel: discord.TextChannel = None):
""" Invalidate a cached pattern"""
self.pattern_cache.pop((guild, channel), None)
+ if channel is None:
+ for keyset in list(self.pattern_cache.keys()): # cast needed, no remove
+ if guild in keyset:
+ self.pattern_cache.pop(keyset, None)
async def add_to_filter(
self, server_or_channel: Union[discord.Guild, discord.TextChannel], words: list
From 8bf86f33a381043544088ca82b36f51182380fcb Mon Sep 17 00:00:00 2001
From: Ryan
Date: Sat, 29 Jun 2019 10:33:41 -0400
Subject: [PATCH 058/183] [Readme] Update RTD and d.py URLs (#2771)
---
README.md | 24 ++++++++++++------------
1 file changed, 12 insertions(+), 12 deletions(-)
diff --git a/README.md b/README.md
index aaf513f80..9275c8ef6 100644
--- a/README.md
+++ b/README.md
@@ -21,7 +21,7 @@
-
+
@@ -29,8 +29,8 @@
-
-
+
+
@@ -45,7 +45,7 @@
•
Installation
•
- Documentation
+ Documentation
•
Plugins
•
@@ -83,13 +83,13 @@ community of cog repositories.**
**The following platforms are officially supported:**
-- [Windows](https://red-discordbot.readthedocs.io/en/v3-develop/install_windows.html)
-- [MacOS](https://red-discordbot.readthedocs.io/en/v3-develop/install_linux_mac.html)
-- [Ubuntu](https://red-discordbot.readthedocs.io/en/v3-develop/install_linux_mac.html)
-- [Debian Stretch](https://red-discordbot.readthedocs.io/en/v3-develop/install_linux_mac.html)
-- [CentOS 7](https://red-discordbot.readthedocs.io/en/v3-develop/install_linux_mac.html)
-- [Arch Linux](https://red-discordbot.readthedocs.io/en/v3-develop/install_linux_mac.html)
-- [Raspbian Stretch](https://red-discordbot.readthedocs.io/en/v3-develop/install_linux_mac.html)
+- [Windows](https://red-discordbot.readthedocs.io/en/stable/install_windows.html)
+- [MacOS](https://red-discordbot.readthedocs.io/en/stable/install_linux_mac.html)
+- [Ubuntu](https://red-discordbot.readthedocs.io/en/stable/install_linux_mac.html)
+- [Debian Stretch](https://red-discordbot.readthedocs.io/en/stable/install_linux_mac.html)
+- [CentOS 7](https://red-discordbot.readthedocs.io/en/stable/install_linux_mac.html)
+- [Arch Linux](https://red-discordbot.readthedocs.io/en/stable/install_linux_mac.html)
+- [Raspbian Stretch](https://red-discordbot.readthedocs.io/en/stable/install_linux_mac.html)
If after reading the guide you are still experiencing issues, feel free to join the
@@ -117,7 +117,7 @@ available 3rd party cogs!
**Red** is in continuous development, and it’s supported by an active community which produces new
content (cogs/plugins) for everyone to enjoy. New features are constantly added. If you can’t
[find](https://cogboard.red/t/approved-repositories/210) the cog you’re looking for,
-consult our [guide](https://red-discordbot.readthedocs.io/en/v3-develop/guide_cog_creation.html) on
+consult our [guide](https://red-discordbot.readthedocs.io/en/stable/guide_cog_creation.html) on
building your own cogs!
Join us on our [Official Discord Server](https://discord.gg/red)!
From 8a72840de0c5287803a530b54c0c09e9e371fd28 Mon Sep 17 00:00:00 2001
From: Michael H
Date: Sat, 29 Jun 2019 10:45:44 -0400
Subject: [PATCH 059/183] [Utils] Modify chmod use in `safe_delete` (#2701)
- Takes a pessmisitc approach that it's possible chmod succeeds, but
deletion fails and does not make the entire dir world writeable
---
redbot/core/utils/__init__.py | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/redbot/core/utils/__init__.py b/redbot/core/utils/__init__.py
index 00a87d299..4dc805109 100644
--- a/redbot/core/utils/__init__.py
+++ b/redbot/core/utils/__init__.py
@@ -62,13 +62,13 @@ logging.getLogger().addFilter(_fuzzy_log_filter)
def safe_delete(pth: Path):
if pth.exists():
for root, dirs, files in os.walk(str(pth)):
- os.chmod(root, 0o755)
+ os.chmod(root, 0o700)
for d in dirs:
- os.chmod(os.path.join(root, d), 0o755)
+ os.chmod(os.path.join(root, d), 0o700)
for f in files:
- os.chmod(os.path.join(root, f), 0o755)
+ os.chmod(os.path.join(root, f), 0o700)
shutil.rmtree(str(pth), ignore_errors=True)
From 03fe3ee720ad836b9b442460abd1821e3599e9cf Mon Sep 17 00:00:00 2001
From: PredaaA <46051820+PredaaA@users.noreply.github.com>
Date: Sat, 29 Jun 2019 17:13:53 +0200
Subject: [PATCH 060/183] [i18n] Fix some missing i18n strings in the whole bot
(#2633)
---
redbot/cogs/general/general.py | 6 ++++-
redbot/cogs/mod/kickban.py | 2 +-
redbot/cogs/mod/names.py | 2 +-
redbot/cogs/modlog/modlog.py | 4 +--
redbot/cogs/streams/streams.py | 8 +++---
redbot/cogs/streams/streamtypes.py | 29 ++++++++++++---------
redbot/core/dev_commands.py | 2 +-
redbot/core/modlog.py | 42 ++++++++++++++++++------------
8 files changed, 56 insertions(+), 39 deletions(-)
diff --git a/redbot/cogs/general/general.py b/redbot/cogs/general/general.py
index 133ca58ba..4c85da434 100644
--- a/redbot/cogs/general/general.py
+++ b/redbot/cogs/general/general.py
@@ -122,7 +122,11 @@ class General(commands.Cog):
author = ctx.author
player_choice = your_choice.choice
if not player_choice:
- return await ctx.send("This isn't a valid option. Try rock, paper, or scissors.")
+ return await ctx.send(
+ _("This isn't a valid option. Try {r}, {p}, or {s}.").format(
+ r="rock", p="paper", s="scissors"
+ )
+ )
red_choice = choice((RPS.rock, RPS.paper, RPS.scissors))
cond = {
(RPS.rock, RPS.paper): False,
diff --git a/redbot/cogs/mod/kickban.py b/redbot/cogs/mod/kickban.py
index dc7c9e7da..f408f5c47 100644
--- a/redbot/cogs/mod/kickban.py
+++ b/redbot/cogs/mod/kickban.py
@@ -249,7 +249,7 @@ class KickBanMixin(MixinMeta):
errors = {}
async def show_results():
- text = _("Banned {num} users from the server.".format(num=len(banned)))
+ text = _("Banned {num} users from the server.").format(num=len(banned))
if errors:
text += _("\nErrors:\n")
text += "\n".join(errors.values())
diff --git a/redbot/cogs/mod/names.py b/redbot/cogs/mod/names.py
index e3e7a269b..6c44bab1b 100644
--- a/redbot/cogs/mod/names.py
+++ b/redbot/cogs/mod/names.py
@@ -101,7 +101,7 @@ class ModInfo(MixinMeta):
user_joined = joined_at.strftime("%d %b %Y %H:%M")
else:
since_joined = "?"
- user_joined = "Unknown"
+ user_joined = _("Unknown")
user_created = user.created_at.strftime("%d %b %Y %H:%M")
voice_state = user.voice
member_number = (
diff --git a/redbot/cogs/modlog/modlog.py b/redbot/cogs/modlog/modlog.py
index 3bb0fb9f0..2b1b3e36f 100644
--- a/redbot/cogs/modlog/modlog.py
+++ b/redbot/cogs/modlog/modlog.py
@@ -66,7 +66,7 @@ class ModLog(commands.Cog):
await ctx.send_help()
lines = []
for ct in casetypes:
- enabled = "enabled" if await ct.is_enabled() else "disabled"
+ enabled = _("enabled") if await ct.is_enabled() else _("disabled")
lines.append(f"{ct.name} : {enabled}")
await ctx.send(_("Current settings:\n") + box("\n".join(lines)))
@@ -80,7 +80,7 @@ class ModLog(commands.Cog):
await casetype.set_enabled(not enabled)
await ctx.send(
_("Case creation for {action_name} actions is now {enabled}.").format(
- action_name=action, enabled="enabled" if not enabled else "disabled"
+ action_name=action, enabled=_("enabled") if not enabled else _("disabled")
)
)
diff --git a/redbot/cogs/streams/streams.py b/redbot/cogs/streams/streams.py
index 83a67f4fc..cfb591c95 100644
--- a/redbot/cogs/streams/streams.py
+++ b/redbot/cogs/streams/streams.py
@@ -183,7 +183,9 @@ class Streams(commands.Cog):
async def twitch_alert_channel(self, ctx: commands.Context, channel_name: str):
"""Toggle alerts in this channel for a Twitch stream."""
if re.fullmatch(r"<#\d+>", channel_name):
- await ctx.send("Please supply the name of a *Twitch* channel, not a Discord channel.")
+ await ctx.send(
+ _("Please supply the name of a *Twitch* channel, not a Discord channel.")
+ )
return
await self.stream_alert(ctx, TwitchStream, channel_name.lower())
@@ -374,7 +376,7 @@ class Streams(commands.Cog):
if message is not None:
guild = ctx.guild
await self.db.guild(guild).live_message_mention.set(message)
- await ctx.send(_("stream alert message set!"))
+ await ctx.send(_("Stream alert message set!"))
else:
await ctx.send_help()
@@ -390,7 +392,7 @@ class Streams(commands.Cog):
if message is not None:
guild = ctx.guild
await self.db.guild(guild).live_message_nomention.set(message)
- await ctx.send(_("stream alert message set!"))
+ await ctx.send(_("Stream alert message set!"))
else:
await ctx.send_help()
diff --git a/redbot/cogs/streams/streamtypes.py b/redbot/cogs/streams/streamtypes.py
index 6c6a6c681..45e83661c 100644
--- a/redbot/cogs/streams/streamtypes.py
+++ b/redbot/cogs/streams/streamtypes.py
@@ -5,6 +5,7 @@ from .errors import (
InvalidYoutubeCredentials,
InvalidTwitchCredentials,
)
+from redbot.core.i18n import Translator
from random import choice, sample
from string import ascii_letters
from typing import ClassVar, Optional
@@ -22,6 +23,8 @@ YOUTUBE_CHANNELS_ENDPOINT = YOUTUBE_BASE_URL + "/channels"
YOUTUBE_SEARCH_ENDPOINT = YOUTUBE_BASE_URL + "/search"
YOUTUBE_VIDEOS_ENDPOINT = YOUTUBE_BASE_URL + "/videos"
+_ = Translator("Streams", __file__)
+
def rnd(url):
"""Appends a random parameter to the url to avoid Discord's caching"""
@@ -217,13 +220,13 @@ class TwitchStream(Stream):
status += " - Rerun"
embed = discord.Embed(title=status, url=url, color=0x6441A4)
embed.set_author(name=channel["display_name"])
- embed.add_field(name="Followers", value=channel["followers"])
- embed.add_field(name="Total views", value=channel["views"])
+ embed.add_field(name=_("Followers"), value=channel["followers"])
+ embed.add_field(name=_("Total views"), value=channel["views"])
embed.set_thumbnail(url=logo)
if data["stream"]["preview"]["medium"]:
embed.set_image(url=rnd(data["stream"]["preview"]["medium"]))
if channel["game"]:
- embed.set_footer(text="Playing: " + channel["game"])
+ embed.set_footer(text=_("Playing: ") + channel["game"])
return embed
@@ -261,11 +264,11 @@ class HitboxStream(Stream):
url = channel["channel_link"]
embed = discord.Embed(title=livestream["media_status"], url=url, color=0x98CB00)
embed.set_author(name=livestream["media_name"])
- embed.add_field(name="Followers", value=channel["followers"])
+ embed.add_field(name=_("Followers"), value=channel["followers"])
embed.set_thumbnail(url=base_url + channel["user_logo"])
if livestream["media_thumbnail"]:
embed.set_image(url=rnd(base_url + livestream["media_thumbnail"]))
- embed.set_footer(text="Playing: " + livestream["category_name"])
+ embed.set_footer(text=_("Playing: ") + livestream["category_name"])
return embed
@@ -300,8 +303,8 @@ class MixerStream(Stream):
url = "https://mixer.com/" + data["token"]
embed = discord.Embed(title=data["name"], url=url)
embed.set_author(name=user["username"])
- embed.add_field(name="Followers", value=data["numFollowers"])
- embed.add_field(name="Total views", value=data["viewersTotal"])
+ embed.add_field(name=_("Followers"), value=data["numFollowers"])
+ embed.add_field(name=_("Total views"), value=data["viewersTotal"])
if user["avatarUrl"]:
embed.set_thumbnail(url=user["avatarUrl"])
else:
@@ -310,7 +313,7 @@ class MixerStream(Stream):
embed.set_image(url=rnd(data["thumbnail"]["url"]))
embed.color = 0x4C90F3 # pylint: disable=assigning-non-slot
if data["type"] is not None:
- embed.set_footer(text="Playing: " + data["type"]["name"])
+ embed.set_footer(text=_("Playing: ") + data["type"]["name"])
return embed
@@ -346,18 +349,18 @@ class PicartoStream(Stream):
embed = discord.Embed(title=data["title"], url=url, color=0x4C90F3)
embed.set_author(name=data["name"])
embed.set_image(url=rnd(thumbnail))
- embed.add_field(name="Followers", value=data["followers"])
- embed.add_field(name="Total views", value=data["viewers_total"])
+ embed.add_field(name=_("Followers"), value=data["followers"])
+ embed.add_field(name=_("Total views"), value=data["viewers_total"])
embed.set_thumbnail(url=avatar)
data["tags"] = ", ".join(data["tags"])
if not data["tags"]:
- data["tags"] = "None"
+ data["tags"] = _("None")
if data["adult"]:
- data["adult"] = "NSFW | "
+ data["adult"] = _("NSFW | ")
else:
data["adult"] = ""
- embed.set_footer(text="{adult}Category: {category} | Tags: {tags}".format(**data))
+ embed.set_footer(text=_("{adult}Category: {category} | Tags: {tags}").format(**data))
return embed
diff --git a/redbot/core/dev_commands.py b/redbot/core/dev_commands.py
index e7e5c74e1..488d13f03 100644
--- a/redbot/core/dev_commands.py
+++ b/redbot/core/dev_commands.py
@@ -233,7 +233,7 @@ class Dev(commands.Cog):
cleaned = self.cleanup_code(response.content)
if cleaned in ("quit", "exit", "exit()"):
- await ctx.send("Exiting.")
+ await ctx.send(_("Exiting."))
self.sessions.remove(ctx.channel.id)
return
diff --git a/redbot/core/modlog.py b/redbot/core/modlog.py
index a804f7b40..a834c3d8d 100644
--- a/redbot/core/modlog.py
+++ b/redbot/core/modlog.py
@@ -12,6 +12,7 @@ from .utils.common_filters import (
filter_urls,
escape_spoilers,
)
+from .i18n import Translator
__all__ = [
"Case",
@@ -37,6 +38,9 @@ _CASES = "CASES"
_SCHEMA_VERSION = 2
+_ = Translator("ModLog", __file__)
+
+
async def _init():
global _conf
_conf = Config.get_conf(None, 1354799444, cog_name="ModLog")
@@ -158,18 +162,18 @@ class Case:
"""
casetype = await get_casetype(self.action_type)
title = "{}".format(
- "Case #{} | {} {}".format(self.case_number, casetype.case_str, casetype.image)
+ _("Case #{} | {} {}").format(self.case_number, casetype.case_str, casetype.image)
)
if self.reason:
- reason = "**Reason:** {}".format(self.reason)
+ reason = _("**Reason:** {}").format(self.reason)
else:
- reason = "**Reason:** Use the `reason` command to add it"
+ reason = _("**Reason:** Use the `reason` command to add it")
if self.moderator is not None:
moderator = escape_spoilers(f"{self.moderator} ({self.moderator.id})")
else:
- moderator = "Unknown"
+ moderator = _("Unknown")
until = None
duration = None
if self.until:
@@ -209,36 +213,40 @@ class Case:
if avatar_url is not None:
emb.set_author(name=user, icon_url=avatar_url)
- emb.add_field(name="Moderator", value=moderator, inline=False)
+ emb.add_field(name=_("Moderator"), value=moderator, inline=False)
if until and duration:
- emb.add_field(name="Until", value=until)
- emb.add_field(name="Duration", value=duration)
+ emb.add_field(name=_("Until"), value=until)
+ emb.add_field(name=_("Duration"), value=duration)
if isinstance(self.channel, int):
- emb.add_field(name="Channel", value=f"{self.channel} (deleted)", inline=False)
+ emb.add_field(
+ name=_("Channel"),
+ value=_("{channel} (deleted)").format(channel=self.channel),
+ inline=False,
+ )
elif self.channel is not None:
- emb.add_field(name="Channel", value=self.channel.name, inline=False)
+ emb.add_field(name=_("Channel"), value=self.channel.name, inline=False)
if amended_by:
- emb.add_field(name="Amended by", value=amended_by)
+ emb.add_field(name=_("Amended by"), value=amended_by)
if last_modified:
- emb.add_field(name="Last modified at", value=last_modified)
+ emb.add_field(name=_("Last modified at"), value=last_modified)
emb.timestamp = datetime.fromtimestamp(self.created_at)
return emb
else:
user = filter_mass_mentions(filter_urls(user)) # Further sanitization outside embeds
case_text = ""
case_text += "{}\n".format(title)
- case_text += "**User:** {}\n".format(user)
- case_text += "**Moderator:** {}\n".format(moderator)
+ case_text += _("**User:** {}\n").format(user)
+ case_text += _("**Moderator:** {}\n").format(moderator)
case_text += "{}\n".format(reason)
if until and duration:
- case_text += "**Until:** {}\n**Duration:** {}\n".format(until, duration)
+ case_text += _("**Until:** {}\n**Duration:** {}\n").format(until, duration)
if self.channel:
- case_text += "**Channel**: {}\n".format(self.channel.name)
+ case_text += _("**Channel**: {}\n").format(self.channel.name)
if amended_by:
- case_text += "**Amended by:** {}\n".format(amended_by)
+ case_text += _("**Amended by:** {}\n").format(amended_by)
if last_modified:
- case_text += "**Last modified at:** {}\n".format(last_modified)
+ case_text += _("**Last modified at:** {}\n").format(last_modified)
return case_text.strip()
def to_json(self) -> dict:
From 2f8b1a21c786b069bd14e23a9bf4d3726a034a18 Mon Sep 17 00:00:00 2001
From: PredaaA <46051820+PredaaA@users.noreply.github.com>
Date: Sat, 29 Jun 2019 17:28:29 +0200
Subject: [PATCH 061/183] [Audio] Fix config set in shuffle and repeat commands
(#2812)
Resolves #2811 and also the same thing in repeat command.
---
redbot/cogs/audio/audio.py | 18 ++++++++++--------
1 file changed, 10 insertions(+), 8 deletions(-)
diff --git a/redbot/cogs/audio/audio.py b/redbot/cogs/audio/audio.py
index eb43d5f70..42a84a241 100644
--- a/redbot/cogs/audio/audio.py
+++ b/redbot/cogs/audio/audio.py
@@ -2819,9 +2819,6 @@ class Audio(commands.Cog):
ctx, ctx.author
):
return await self._embed_msg(ctx, _("You need the DJ role to toggle repeat."))
- repeat = await self.config.guild(ctx.guild).repeat()
- await self.config.guild(ctx.guild).repeat.set(not repeat)
- repeat = await self.config.guild(ctx.guild).repeat()
if self._player_check(ctx):
await self._data_check(ctx)
player = lavalink.get_player(ctx.guild.id)
@@ -2831,9 +2828,13 @@ class Audio(commands.Cog):
return await self._embed_msg(
ctx, _("You must be in the voice channel to toggle repeat.")
)
+
+ repeat = await self.config.guild(ctx.guild).repeat()
+ await self.config.guild(ctx.guild).repeat.set(not repeat)
await self._embed_msg(
- ctx, _("Repeat tracks: {true_or_false}.").format(true_or_false=repeat)
+ ctx, _("Repeat tracks: {true_or_false}.").format(true_or_false=not repeat)
)
+ await self._data_check(ctx)
@commands.command()
@commands.guild_only()
@@ -3245,9 +3246,6 @@ class Audio(commands.Cog):
if dj_enabled:
if not await self._can_instaskip(ctx, ctx.author):
return await self._embed_msg(ctx, _("You need the DJ role to toggle shuffle."))
- shuffle = await self.config.guild(ctx.guild).shuffle()
- await self.config.guild(ctx.guild).shuffle.set(not shuffle)
- shuffle = await self.config.guild(ctx.guild).shuffle()
if self._player_check(ctx):
await self._data_check(ctx)
player = lavalink.get_player(ctx.guild.id)
@@ -3257,9 +3255,13 @@ class Audio(commands.Cog):
return await self._embed_msg(
ctx, _("You must be in the voice channel to toggle shuffle.")
)
+
+ shuffle = await self.config.guild(ctx.guild).shuffle()
+ await self.config.guild(ctx.guild).shuffle.set(not shuffle)
await self._embed_msg(
- ctx, _("Shuffle tracks: {true_or_false}.").format(true_or_false=shuffle)
+ ctx, _("Shuffle tracks: {true_or_false}.").format(true_or_false=not shuffle)
)
+ await self._data_check(ctx)
@commands.command()
@commands.guild_only()
From 10412c4f51bfd93e182ca7ad03319f2c85a080ff Mon Sep 17 00:00:00 2001
From: Elizabeth Sherrock
Date: Sat, 29 Jun 2019 11:35:47 -0400
Subject: [PATCH 062/183] Fix broken link in `set color` docstring (#2803)
---
redbot/core/core_commands.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/redbot/core/core_commands.py b/redbot/core/core_commands.py
index 7112a04ea..8ed69dd5b 100644
--- a/redbot/core/core_commands.py
+++ b/redbot/core/core_commands.py
@@ -850,7 +850,7 @@ class Core(commands.Cog, CoreLogic):
Acceptable values for the colour parameter can be found at:
- http://discordpy.readthedocs.io/en/rewrite/ext/commands/api.html#discord.ext.commands.ColourConverter
+ https://discordpy.readthedocs.io/en/stable/ext/commands/api.html#discord.ext.commands.ColourConverter
"""
if colour is None:
ctx.bot.color = discord.Color.red()
From 098540b9e51157692c327fb8b3c3e01b9d87db20 Mon Sep 17 00:00:00 2001
From: Michael H
Date: Sat, 29 Jun 2019 12:16:28 -0400
Subject: [PATCH 063/183] [Core] Fix user output on cog load/reload (#2767)
* [Core] Fix user output on cog load/reload
- Properly fixes the load/reload exception handling
- Fixes some i18n use here to not make assumptions about other
languages pluralization rules.
* Fix some typos
* Address Flame's Feedback
* It's important to save before committing ...
* formatting
* Fix some formats...
---
redbot/core/bot.py | 2 +-
redbot/core/core_commands.py | 177 ++++++++++++++++++++++-------------
2 files changed, 114 insertions(+), 65 deletions(-)
diff --git a/redbot/core/bot.py b/redbot/core/bot.py
index f6d872b46..26a928c30 100644
--- a/redbot/core/bot.py
+++ b/redbot/core/bot.py
@@ -303,7 +303,7 @@ class RedBase(commands.GroupMixin, commands.bot.BotBase, RPCMixin): # pylint: d
except Exception as e:
self._remove_module_references(lib.__name__)
self._call_module_finalizers(lib, name)
- raise errors.CogLoadError(e) from e
+ raise
else:
self._BotBase__extensions[name] = lib
diff --git a/redbot/core/core_commands.py b/redbot/core/core_commands.py
index 8ed69dd5b..01b65dc87 100644
--- a/redbot/core/core_commands.py
+++ b/redbot/core/core_commands.py
@@ -34,9 +34,9 @@ from redbot.core import (
)
from .utils.predicates import MessagePredicate
from .utils.chat_formatting import humanize_timedelta, pagify, box, inline, humanize_list
-
from .commands.requires import PrivilegeLevel
+
if TYPE_CHECKING:
from redbot.core.bot import Red
@@ -149,25 +149,6 @@ class CoreLogic:
for child_name, lib in children.items():
importlib._bootstrap._exec(lib.__spec__, lib)
- @staticmethod
- def _get_package_strings(
- packages: List[str], fmt: str, other: Optional[Tuple[str, ...]] = None
- ) -> str:
- """
- Gets the strings needed for the load, unload and reload commands
- """
- packages = [inline(name) for name in packages]
-
- if other is None:
- other = ("", "")
- plural = "s" if len(packages) > 1 else ""
- use_and, other = ("", other[0]) if len(packages) == 1 else (" and ", other[1])
- packages_string = ", ".join(packages[:-1]) + use_and + packages[-1]
-
- form = {"plural": plural, "packs": packages_string, "other": other}
- final_string = fmt.format(**form)
- return final_string
-
async def _unload(self, cog_names: Iterable[str]) -> Tuple[List[str], List[str]]:
"""
Unloads cogs with the given names.
@@ -586,38 +567,64 @@ class Core(commands.Cog, CoreLogic):
async with ctx.typing():
loaded, failed, not_found, already_loaded, failed_with_reason = await self._load(cogs)
+ output = []
+
if loaded:
- fmt = _("Loaded {packs}.")
- formed = self._get_package_strings(loaded, fmt)
- await ctx.send(formed)
+ loaded_packages = humanize_list([inline(package) for package in loaded])
+ formed = _("Loaded {packs}.").format(packs=loaded_packages)
+ output.append(formed)
if already_loaded:
- fmt = _("The package{plural} {packs} {other} already loaded.")
- formed = self._get_package_strings(already_loaded, fmt, (_("is"), _("are")))
- await ctx.send(formed)
+ if len(already_loaded) == 1:
+ formed = _("The following package is already loaded: {pack}").format(
+ pack=inline(already_loaded[0])
+ )
+ else:
+ formed = _("The following packages are already loaded: {packs}").format(
+ packs=humanize_list([inline(package) for package in already_loaded])
+ )
+ output.append(formed)
if failed:
- fmt = _(
- "Failed to load package{plural} {packs}. Check your console or "
- "logs for details."
- )
- formed = self._get_package_strings(failed, fmt)
- await ctx.send(formed)
+ if len(failed) == 1:
+ formed = _(
+ "Failed to load the following package: {pack}."
+ "\nCheck your console or logs for details."
+ ).format(pack=inline(failed[0]))
+ else:
+ formed = _(
+ "Failed to load the following packages: {packs}"
+ "\nCheck your console or logs for details."
+ ).format(packs=humanize_list([inline(package) for package in failed]))
+ output.append(formed)
if not_found:
- fmt = _("The package{plural} {packs} {other} not found in any cog path.")
- formed = self._get_package_strings(not_found, fmt, (_("was"), _("were")))
- await ctx.send(formed)
+ if len(not_found) == 1:
+ formed = _("The following package was not found in any cog path: {pack}.").format(
+ pack=inline(not_found[0])
+ )
+ else:
+ formed = _(
+ "The following packages were not found in any cog path: {packs}"
+ ).format(packs=humanize_list([inline(package) for package in not_found]))
+ output.append(formed)
if failed_with_reason:
- fmt = _(
- "{other} package{plural} could not be loaded for the following reason{plural}:\n\n"
- )
reasons = "\n".join([f"`{x}`: {y}" for x, y in failed_with_reason])
- formed = self._get_package_strings(
- [x for x, y in failed_with_reason], fmt, (_("This"), _("These"))
- )
- await ctx.send(formed + reasons)
+ if len(failed_with_reason) == 1:
+ formed = _(
+ "This package could not be loaded for the following reason:\n\n{reason}"
+ ).format(reason=reasons)
+ else:
+ formed = _(
+ "These packages could not be loaded for the following reasons:\n\n{reasons}"
+ ).format(reasons=reasons)
+ output.append(formed)
+
+ if output:
+ total_message = "\n\n".join(output)
+ for page in pagify(total_message):
+ await ctx.send(page)
@commands.command()
@checks.is_owner()
@@ -628,15 +635,34 @@ class Core(commands.Cog, CoreLogic):
cogs = tuple(map(lambda cog: cog.rstrip(","), cogs))
unloaded, failed = await self._unload(cogs)
+ output = []
+
if unloaded:
- fmt = _("Package{plural} {packs} {other} unloaded.")
- formed = self._get_package_strings(unloaded, fmt, (_("was"), _("were")))
- await ctx.send(formed)
+ if len(unloaded) == 1:
+ formed = _("The following package was unloaded: {pack}.").format(
+ pack=inline(unloaded[0])
+ )
+ else:
+ formed = _("The following packages were unloaded: {packs}.").format(
+ packs=humanize_list([inline(package) for package in unloaded])
+ )
+ output.append(formed)
if failed:
- fmt = _("The package{plural} {packs} {other} not loaded.")
- formed = self._get_package_strings(failed, fmt, (_("is"), _("are")))
- await ctx.send(formed)
+ if len(failed) == 1:
+ formed = _("The following package was not loaded: {pack}.").format(
+ pack=inline(failed[0])
+ )
+ else:
+ formed = _("The following packages were not loaded: {packs}.").format(
+ packs=humanize_list([inline(package) for package in failed])
+ )
+ output.append(formed)
+
+ if output:
+ total_message = "\n\n".join(output)
+ for page in pagify(total_message):
+ await ctx.send(page)
@commands.command(name="reload")
@checks.is_owner()
@@ -650,30 +676,53 @@ class Core(commands.Cog, CoreLogic):
cogs
)
+ output = []
+
if loaded:
- fmt = _("Package{plural} {packs} {other} reloaded.")
- formed = self._get_package_strings(loaded, fmt, (_("was"), _("were")))
- await ctx.send(formed)
+ loaded_packages = humanize_list([inline(package) for package in loaded])
+ formed = _("Reloaded {packs}.").format(packs=loaded_packages)
+ output.append(formed)
if failed:
- fmt = _("Failed to reload package{plural} {packs}. Check your logs for details")
- formed = self._get_package_strings(failed, fmt)
- await ctx.send(formed)
+ if len(failed) == 1:
+ formed = _(
+ "Failed to reload the following package: {pack}."
+ "\nCheck your console or logs for details."
+ ).format(pack=inline(failed[0]))
+ else:
+ formed = _(
+ "Failed to reload the following packages: {packs}"
+ "\nCheck your console or logs for details."
+ ).format(packs=humanize_list([inline(package) for package in failed]))
+ output.append(formed)
if not_found:
- fmt = _("The package{plural} {packs} {other} not found in any cog path.")
- formed = self._get_package_strings(not_found, fmt, (_("was"), _("were")))
- await ctx.send(formed)
+ if len(not_found) == 1:
+ formed = _("The following package was not found in any cog path: {pack}.").format(
+ pack=inline(not_found[0])
+ )
+ else:
+ formed = _(
+ "The following packages were not found in any cog path: {packs}"
+ ).format(packs=humanize_list([inline(package) for package in not_found]))
+ output.append(formed)
if failed_with_reason:
- fmt = _(
- "{other} package{plural} could not be reloaded for the following reason{plural}:\n\n"
- )
reasons = "\n".join([f"`{x}`: {y}" for x, y in failed_with_reason])
- formed = self._get_package_strings(
- [x for x, y in failed_with_reason], fmt, (_("This"), _("These"))
- )
- await ctx.send(formed + reasons)
+ if len(failed_with_reason) == 1:
+ formed = _(
+ "This package could not be reloaded for the following reason:\n\n{reason}"
+ ).format(reason=reasons)
+ else:
+ formed = _(
+ "These packages could not be reloaded for the following reasons:\n\n{reasons}"
+ ).format(reasons=reasons)
+ output.append(formed)
+
+ if output:
+ total_message = "\n\n".join(output)
+ for page in pagify(total_message):
+ await ctx.send(page)
@commands.command(name="shutdown")
@checks.is_owner()
From 7323e8eb67de910868c87d5f150f7e71e67fc9df Mon Sep 17 00:00:00 2001
From: Flame442 <34169552+Flame442@users.noreply.github.com>
Date: Sun, 30 Jun 2019 19:29:26 -0400
Subject: [PATCH 064/183] [Trivia] Beethoven corrections for entertainment list
(#2823)
---
redbot/cogs/trivia/data/lists/entertainment.yaml | 11 ++++++-----
1 file changed, 6 insertions(+), 5 deletions(-)
diff --git a/redbot/cogs/trivia/data/lists/entertainment.yaml b/redbot/cogs/trivia/data/lists/entertainment.yaml
index 5cccb7ee2..b7726b848 100644
--- a/redbot/cogs/trivia/data/lists/entertainment.yaml
+++ b/redbot/cogs/trivia/data/lists/entertainment.yaml
@@ -137,6 +137,7 @@ He was the voice of draco the dragon in the movie Dragonheart?:
- Sean Connery
He wrote the operas "The Magic Flute" and "The Marriage of Figaro"?:
- Wolfgang Amadeus Mozart
+- Mozart
"His films include: Giant, Written on the Wind, and A Farewell to Arms?":
- Rock Hudson
His films include?:
@@ -169,8 +170,8 @@ How many strings does a harp have?:
- 47
- Forty Seven
How many symphonies did Beethoven complete?:
-- Eight
-- 8
+- Nine
+- 9
How old was Leann Rhimes when she recorded her first album?:
- Eleven
- 11
@@ -931,9 +932,9 @@ Which movie is the highest grossing movie of all time?:
Which native of Flint, Michigan, once advised us to "drive your Chevrolet through the USA"?:
- Pat Boone
Which of Beethoven's symphonies was the legendary "Incomplete"?:
-- The 9th Symphony
-- 9th
-- 9
+- The 10th Symphony
+- 10th
+- 10
Which of Paul Simon's musical characters was told to hop on the bus?:
- Gus
Which planet was the "Planet of the Apes"?:
From 55e309125e70c66df3b5ab69eab003dc92ae218b Mon Sep 17 00:00:00 2001
From: Toby Harradine
Date: Tue, 2 Jul 2019 11:53:38 +1000
Subject: [PATCH 065/183] Add uvloop as Posix+CPython dependency and tweak new
Make recipes (#2819)
- uvloop is now a dependency on non-Windows CPython systems
- `make setupenv` renamed to `make newenv`
- `make syncenv` added to sync local venv to current dependencies
- `dev-requirements.txt` moved into `tools` directory
---
.github/CONTRIBUTING.md | 9 +++++----
Makefile | 6 ++++--
make.bat | 11 ++++++++---
setup.cfg | 7 ++++---
dev-requirements.txt => tools/dev-requirements.txt | 0
tools/primary_deps.ini | 1 +
6 files changed, 22 insertions(+), 12 deletions(-)
rename dev-requirements.txt => tools/dev-requirements.txt (100%)
diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md
index 0858e15df..308b1d4ec 100644
--- a/.github/CONTRIBUTING.md
+++ b/.github/CONTRIBUTING.md
@@ -62,7 +62,7 @@ If you're not on Windows, you should also have GNU make installed, and you can o
1. Fork and clone the repository to a directory on your local machine.
2. Open a command line in that directory and execute the following command:
```bash
- make setupenv
+ make newenv
```
Red, its dependencies, and all required development tools, are now installed to a virtual environment located in the `.venv` subdirectory. Red is installed in editable mode, meaning that edits you make to the source code in the repository will be reflected when you run Red.
3. Activate the new virtual environment with one of the following commands:
@@ -76,7 +76,7 @@ If you're not on Windows, you should also have GNU make installed, and you can o
```
Each time you open a new command line, you should execute this command first. From here onwards, we will assume you are executing commands from within this activated virtual environment.
-**Note:** If you're comfortable with setting up virtual environments yourself and would rather do it manually, just run `pip install -r dev-requirements.txt` after setting it up.
+**Note:** If you're comfortable with setting up virtual environments yourself and would rather do it manually, just run `pip install -Ur tools/dev-requirements.txt` after setting it up.
### 4.2 Testing
We've recently started using [tox](https://github.com/tox-dev/tox) to run all of our tests. It's extremely simple to use, and if you followed the previous section correctly, it is already installed to your virtual environment.
@@ -101,10 +101,11 @@ Use the command `black --help` to see how to use this tool. The full style guide
You may have noticed we have a `Makefile` and a `make.bat` in the top-level directory. For now, you can do three things with them:
1. `make reformat`: Reformat all python files in the project with Black
2. `make stylecheck`: Check if any `.py` files in the project need reformatting
-3. `make setupenv`: Set up a new virtual environment in the `.venv` subdirectory, and install Red and its dependencies. If one already exists, it is cleared out and replaced.
+3. `make newenv`: Set up a new virtual environment in the `.venv` subdirectory, and install Red and its dependencies. If one already exists, it is cleared out and replaced.
+4. `make syncenv`: Sync your environment with Red's latest dependencies.
### 4.5 Keeping your dependencies up to date
-Whenever you pull from upstream (V3/develop on the main repository) and you notice either of the files `setup.cfg` or `dev-requirements.txt` have been changed, it can often mean some package dependencies have been updated, added or removed. To make sure you're testing and formatting with the most up-to-date versions of our dependencies, run `make setupenv` to recreate your virtual environment. You could also simply do `pip install -Ur dev-requirements.txt`, but you will still have any dependencies which may have been removed previously.
+Whenever you pull from upstream (V3/develop on the main repository) and you notice either of the files `setup.cfg` or `tools/dev-requirements.txt` have been changed, it can often mean some package dependencies have been updated, added or removed. To make sure you're testing and formatting with the most up-to-date versions of our dependencies, run `make syncenv`. You could also simply do `make newenv` to install them to a clean new virtual environment.
### 4.6 To contribute changes
diff --git a/Makefile b/Makefile
index 6280b2bfb..a39d615e7 100644
--- a/Makefile
+++ b/Makefile
@@ -18,7 +18,9 @@ bumpdeps:
python tools/bumpdeps.py
# Development environment
-setupenv:
+newenv:
python3.7 -m venv --clear .venv
.venv/bin/pip install -U pip setuptools
- .venv/bin/pip install -Ur dev-requirements.txt
+ $(MAKE) syncenv
+syncenv:
+ .venv/bin/pip install -Ur ./tools/dev-requirements.txt
diff --git a/make.bat b/make.bat
index cf71ab715..7f9b79df6 100644
--- a/make.bat
+++ b/make.bat
@@ -21,10 +21,13 @@ exit /B %ERRORLEVEL%
black -l 99 --check !PYFILES!
exit /B %ERRORLEVEL%
-:setupenv
+:newenv
py -3.7 -m venv --clear .venv
.\.venv\Scripts\python -m pip install -U pip setuptools
-.\.venv\Scripts\python -m pip install -Ur dev-requirements.txt
+goto syncenv
+
+:syncenv
+.\.venv\Scripts\python -m pip install -Ur .\tools\dev-requirements.txt
exit /B %ERRORLEVEL%
:help
@@ -34,4 +37,6 @@ echo.
echo Commands:
echo reformat Reformat all .py files being tracked by git.
echo stylecheck Check which tracked .py files need reformatting.
-echo setupenv Create or replace a virtual environment for development.
+echo newenv Create or replace this project's virtual environment.
+echo syncenv Sync this project's virtual environment to Red's latest
+echo dependencies.
diff --git a/setup.cfg b/setup.cfg
index 30386aea5..6f1c51690 100644
--- a/setup.cfg
+++ b/setup.cfg
@@ -45,6 +45,7 @@ install_requires =
Red-Lavalink==0.3.0
schema==0.7.0
tqdm==4.32.2
+ uvloop==0.12.2; sys_platform != "win32" and platform_python_implementation == "CPython"
websockets==6.0
yarl==1.3.0
@@ -63,7 +64,7 @@ docs =
pytz==2019.1
requests==2.22.0
six==1.12.0
- snowballstemmer==1.2.1
+ snowballstemmer==1.9.0
Sphinx==2.1.2
sphinx-rtd-theme==0.4.3
sphinxcontrib-applehelp==1.0.1
@@ -88,13 +89,13 @@ test =
isort==4.3.21
lazy-object-proxy==1.4.1
mccabe==0.6.1
- more-itertools==7.0.0
+ more-itertools==7.1.0
packaging==19.0
pluggy==0.12.0
py==1.8.0
pylint==2.3.1
pyparsing==2.4.0
- pytest==4.6.3
+ pytest==5.0.0
pytest-asyncio==0.10.0
six==1.12.0
typed-ast==1.4.0
diff --git a/dev-requirements.txt b/tools/dev-requirements.txt
similarity index 100%
rename from dev-requirements.txt
rename to tools/dev-requirements.txt
diff --git a/tools/primary_deps.ini b/tools/primary_deps.ini
index ef0a58cff..f35aa103c 100644
--- a/tools/primary_deps.ini
+++ b/tools/primary_deps.ini
@@ -19,6 +19,7 @@ install_requires =
Red-Lavalink
schema
tqdm
+ uvloop; sys_platform != "win32" and platform_python_implementation == "CPython"
# Websockets is a secondary dependency, but until pip has a complete dependency resolver, we
# need to list it here to avoid an incompatible version being installed.
# See under point 2 here: https://pip.pypa.io/en/stable/user_guide/#requirements-files
From 081bf663a4a3eea2e865ff0a75c1b2bef73a1e3e Mon Sep 17 00:00:00 2001
From: jack1142 <6032823+jack1142@users.noreply.github.com>
Date: Tue, 2 Jul 2019 03:54:56 +0200
Subject: [PATCH 066/183] test(core): ignore pylint's ImportErrors for `distro`
package (#2830)
---
redbot/core/core_commands.py | 2 +-
redbot/launcher.py | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/redbot/core/core_commands.py b/redbot/core/core_commands.py
index 01b65dc87..df07caad9 100644
--- a/redbot/core/core_commands.py
+++ b/redbot/core/core_commands.py
@@ -1652,7 +1652,7 @@ class Core(commands.Cog, CoreLogic):
"""Shows debug information useful for debugging.."""
if sys.platform == "linux":
- import distro
+ import distro # pylint: disable=import-error
IS_WINDOWS = os.name == "nt"
IS_MAC = sys.platform == "darwin"
diff --git a/redbot/launcher.py b/redbot/launcher.py
index 602e8528e..03e4b49ef 100644
--- a/redbot/launcher.py
+++ b/redbot/launcher.py
@@ -20,7 +20,7 @@ from redbot.core import __version__, version_info as red_version_info, VersionIn
from redbot.core.cli import confirm
if sys.platform == "linux":
- import distro
+ import distro # pylint: disable=import-error
INTERACTIVE_MODE = not len(sys.argv) > 1 # CLI flags = non-interactive
From 942dca43d3995ba3cd01fd2c5084699a752a5897 Mon Sep 17 00:00:00 2001
From: jack1142 <6032823+jack1142@users.noreply.github.com>
Date: Tue, 2 Jul 2019 03:57:30 +0200
Subject: [PATCH 067/183] [Downloader]: RepoManager: don't load repos in
__init__ (#2829)
Loading repos is already done in initialize() method.
This could actually turn out badly
if both
of git processes would touch the same repo at the same time.
This also fixes create_backup in
setup.py - now it properly generates repos.json
---
redbot/cogs/downloader/repo_manager.py | 3 ---
redbot/setup.py | 3 ++-
2 files changed, 2 insertions(+), 4 deletions(-)
diff --git a/redbot/cogs/downloader/repo_manager.py b/redbot/cogs/downloader/repo_manager.py
index a12ec9030..9985e08bd 100644
--- a/redbot/cogs/downloader/repo_manager.py
+++ b/redbot/cogs/downloader/repo_manager.py
@@ -540,9 +540,6 @@ class RepoManager:
def __init__(self):
self._repos = {}
- loop = asyncio.get_event_loop()
- loop.create_task(self._load_repos(set=True)) # str_name: Repo
-
async def initialize(self):
await self._load_repos(set=True)
diff --git a/redbot/setup.py b/redbot/setup.py
index 20e2c848f..797cbd841 100644
--- a/redbot/setup.py
+++ b/redbot/setup.py
@@ -409,8 +409,9 @@ async def create_backup(instance):
from redbot.cogs.downloader.repo_manager import RepoManager
repo_mgr = RepoManager()
+ await repo_mgr.initialize()
repo_output = []
- for _, repo in repo_mgr._repos:
+ for repo in repo_mgr._repos.values():
repo_output.append({"url": repo.url, "name": repo.name, "branch": repo.branch})
repo_filename = pth / "cogs" / "RepoManager" / "repos.json"
with open(str(repo_filename), "w") as f:
From 142fb0ad08265062db83793b37d99c613f2ed1bc Mon Sep 17 00:00:00 2001
From: Flame442 <34169552+Flame442@users.noreply.github.com>
Date: Mon, 1 Jul 2019 22:03:12 -0400
Subject: [PATCH 068/183] [Trivia] Car list fixes (#2825)
---
redbot/cogs/trivia/data/lists/cars.yaml | 30 +++++++++++++++++++------
1 file changed, 23 insertions(+), 7 deletions(-)
diff --git a/redbot/cogs/trivia/data/lists/cars.yaml b/redbot/cogs/trivia/data/lists/cars.yaml
index 59b1a8b1a..651f5ec04 100644
--- a/redbot/cogs/trivia/data/lists/cars.yaml
+++ b/redbot/cogs/trivia/data/lists/cars.yaml
@@ -43,6 +43,7 @@ What car is this? http://i.imgur.com/91Qr2qU.jpg:
- Atom
What car is this? http://i.imgur.com/98oRdwe.jpg:
- Mazda 6
+- Mazda6
What car is this? http://i.imgur.com/ByN5HvO.jpg:
- Jaguar F-TYPE
- Jaguar F TYPE
@@ -54,6 +55,7 @@ What car is this? http://i.imgur.com/Em4lvkt.jpg:
What car is this? http://i.imgur.com/F1dO1Zv.jpg:
- Jeep Wrangler
- Wrangler
+- JK
What car is this? http://i.imgur.com/FUhK0aW.jpg:
- Honda Civic
- Civic
@@ -90,6 +92,8 @@ What car is this? http://i.imgur.com/LwMyFVe.jpg:
- Miata
- Mazda MX5
- MX5
+- Mazda MX-5
+- MX-5
What car is this? http://i.imgur.com/MT6vGov.jpg:
- Subaru WRX STI
- WRX STI
@@ -117,6 +121,7 @@ What car is this? http://i.imgur.com/Sx277Np.jpg:
- Jeep Grand Cherokee
- Grand Cherokee
- Cherokee
+- WK2
What car is this? http://i.imgur.com/UDNVozm.jpg:
- BMW 135i
- 135i
@@ -147,9 +152,9 @@ What car is this? http://i.imgur.com/Z359mLS.jpg:
- A45 AMG
- A45
What car is this? http://i.imgur.com/ZLzZkiQ.jpg:
-- Ferrari 451 Italia
-- 451 Italia
-- 451
+- Ferrari 458 Italia
+- 458 Italia
+- 458
What car is this? http://i.imgur.com/ZRW6msa.jpg:
- Audi TT
- TT
@@ -164,6 +169,8 @@ What car is this? http://i.imgur.com/bCq4ePD.jpg:
What car is this? http://i.imgur.com/cOXNsmp.jpg:
- Mitsubishi 3000GT
- 3000GT
+- GTO
+- Mitsubishi GTO
What car is this? http://i.imgur.com/cyLaOzo.jpg:
- Ford GT40
- GT40
@@ -184,6 +191,7 @@ What car is this? http://i.imgur.com/j9YLUhp.jpg:
- Venom GT
What car is this? http://i.imgur.com/kYXfqli.jpg:
- Mazda 3
+- Mazda3
What car is this? http://i.imgur.com/lEqHceK.jpg:
- BMW M5
- M5
@@ -208,8 +216,10 @@ What car is this? http://i.imgur.com/qxG9gDx.jpg:
- Shelby Cobra
- Cobra
What car is this? http://i.imgur.com/qyWZlNp.jpg:
-- Toyota FT86
-- FT86
+- Toyota GT86
+- GT86
+- Toyota 86
+- 86
What car is this? http://i.imgur.com/rl6uDya.jpg:
- Nissan Skyline R33 GTR
- Skyline R33 GTR
@@ -229,9 +239,11 @@ What car is this? http://i.imgur.com/tfmqVrR.jpg:
- Lancer Evolution
- Lancer Evo
- Evo
+- Evo X
What car is this? http://i.imgur.com/tz6AaI5.jpg:
-- Holden Marloo
-- Marloo
+- Holden Maloo
+- Maloo
+- HSV Maloo
What car is this? http://i.imgur.com/u18TuTM.jpg:
- Honda Odyssey
- Odyssey
@@ -248,6 +260,9 @@ What car is this? http://i.imgur.com/xODGOOa.jpg:
What car is this? http://i.imgur.com/yUzmtGU.jpg:
- Toyota Landcruiser
- Landcruiser
+- Toyota Land cruiser
+- Land cruiser
+- J200
What car is this? http://i.imgur.com/yXgbowC.jpg:
- Toyota Celica
- Celica
@@ -260,6 +275,7 @@ What car is this? http://i.imgur.com/ze0s5Kl.jpg:
- Nissan 350 Z
- 350Z
- 350 Z
+- Z33
What car is this? https://i.imgur.com/STHmXOc.jpg:
- Factory Five
- 818C
From 93391d028c9b457564db9e7501bbaab791117f58 Mon Sep 17 00:00:00 2001
From: aikaterna <20862007+aikaterna@users.noreply.github.com>
Date: Mon, 1 Jul 2019 20:11:44 -0700
Subject: [PATCH 069/183] [Audio] _enqueue_tracks clarification/fix (#2822)
Resolves #2820.
Added some comments to clear up a little of the mystery in a couple places.
---
redbot/cogs/audio/audio.py | 15 ++++++++++++++-
1 file changed, 14 insertions(+), 1 deletion(-)
diff --git a/redbot/cogs/audio/audio.py b/redbot/cogs/audio/audio.py
index 42a84a241..29a17e678 100644
--- a/redbot/cogs/audio/audio.py
+++ b/redbot/cogs/audio/audio.py
@@ -1638,6 +1638,7 @@ class Audio(commands.Cog):
async def _enqueue_tracks(self, ctx, query):
player = lavalink.get_player(ctx.guild.id)
guild_data = await self.config.guild(ctx.guild).all()
+ first_track_only = False
if type(query) is not list:
if not (
query.startswith("http")
@@ -1645,6 +1646,8 @@ class Audio(commands.Cog):
or query.startswith("ytsearch:")
):
query = f"ytsearch:{query}"
+ if query.startswith(("ytsearch", "localtracks")):
+ first_track_only = True
tracks = await player.get_tracks(query)
if not tracks:
return await self._embed_msg(ctx, _("Nothing found."))
@@ -1655,7 +1658,11 @@ class Audio(commands.Cog):
queue_total_duration = lavalink.utils.format_time(queue_duration)
before_queue_length = len(player.queue)
- if ("ytsearch:" or "localtrack") not in query and len(tracks) > 1:
+ if not first_track_only and len(tracks) > 1:
+ # a list of Tracks where all should be enqueued
+ # this is a Spotify playlist aleady made into a list of Tracks or a
+ # url where Lavalink handles providing all Track objects to use, like a
+ # YouTube or Soundcloud playlist
track_len = 0
for track in tracks:
if guild_data["maxlength"] > 0:
@@ -1688,6 +1695,9 @@ class Audio(commands.Cog):
if not player.current:
await player.play()
else:
+ # a ytsearch: prefixed item where we only need the first Track returned
+ # this is in the case of [p]play , a single Spotify url/code
+ # or this is a localtrack item
try:
single_track = tracks[0]
if guild_data["maxlength"] > 0:
@@ -3077,14 +3087,17 @@ class Audio(commands.Cog):
except AttributeError:
if command == "search":
+ # [p]local search
return await ctx.invoke(self.play, query=("localtracks/{}".format(search_choice)))
search_choice = search_choice.replace("localtrack:", "")
local_path = await self.config.localpath()
if not search_choice.startswith(local_path):
+ # folder display for [p]local play
return await ctx.invoke(
self.search, query=("localfolder:{}".format(search_choice))
)
else:
+ # file display for a chosen folder in the [p]local play menus
return await ctx.invoke(self.play, query=("localtrack:{}".format(search_choice)))
embed = discord.Embed(
From d1593b8069ba582be2af1bc7d73e29dafe8d7e9b Mon Sep 17 00:00:00 2001
From: aikaterna <20862007+aikaterna@users.noreply.github.com>
Date: Mon, 1 Jul 2019 20:15:34 -0700
Subject: [PATCH 070/183] [Audio] Catch unhandled internal folder types (#2824)
The `folder:` and `localfolder:` prefixes are used internally with some localtracks strings to define what to do with the item when it's cycled through the search function. Users theoretically should have never seen this issue as [p]search is used on the user side for YouTube and Soundcloud searching and not local searching, but this handles the issue where a folder is being passed to these functions that doesn't exist.
---
redbot/cogs/audio/audio.py | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/redbot/cogs/audio/audio.py b/redbot/cogs/audio/audio.py
index 29a17e678..df63891a0 100644
--- a/redbot/cogs/audio/audio.py
+++ b/redbot/cogs/audio/audio.py
@@ -1211,6 +1211,8 @@ class Audio(commands.Cog):
async def _folder_list(self, ctx, folder):
if not await self._localtracks_check(ctx):
return
+ if not os.path.isdir(os.getcwd() + "/localtracks/{}/".format(folder)):
+ return
allowed_files = (".mp3", ".flac", ".ogg")
folder_list = sorted(
(
@@ -1237,6 +1239,8 @@ class Audio(commands.Cog):
async def _folder_tracks(self, ctx, player, folder):
if not await self._localtracks_check(ctx):
return
+ if not os.path.isdir(os.getcwd() + "/localtracks/{}/".format(folder)):
+ return
local_tracks = []
for local_file in await self._all_folder_tracks(ctx, folder):
track = await player.get_tracks("localtracks/{}/{}".format(folder, local_file))
From 0eb22c84ff554aa1a898e0a87e8e235afc1b1a61 Mon Sep 17 00:00:00 2001
From: Michael H
Date: Tue, 2 Jul 2019 20:07:19 -0400
Subject: [PATCH 071/183] [Bank API] Add cost decorator (#2761)
---
docs/framework_bank.rst | 4 ++
redbot/core/bank.py | 75 +++++++++++++++++++++++++++++++++-
redbot/core/commands/errors.py | 10 ++++-
redbot/core/events.py | 3 ++
4 files changed, 90 insertions(+), 2 deletions(-)
diff --git a/docs/framework_bank.rst b/docs/framework_bank.rst
index 393fff631..b6cfb4ec4 100644
--- a/docs/framework_bank.rst
+++ b/docs/framework_bank.rst
@@ -40,3 +40,7 @@ Bank
.. automodule:: redbot.core.bank
:members:
+ :exclude-members: cost
+
+ .. autofunction:: cost
+ :decorator:
diff --git a/redbot/core/bank.py b/redbot/core/bank.py
index 442af8026..3b08a5083 100644
--- a/redbot/core/bank.py
+++ b/redbot/core/bank.py
@@ -1,9 +1,14 @@
+import asyncio
import datetime
from typing import Union, List, Optional
+from functools import wraps
import discord
-from . import Config, errors
+from . import Config, errors, commands
+from .i18n import Translator
+
+_ = Translator("Bank API", __file__)
__all__ = [
"MAX_BALANCE",
@@ -24,6 +29,8 @@ __all__ = [
"set_currency_name",
"get_default_balance",
"set_default_balance",
+ "cost",
+ "AbortPurchase",
]
MAX_BALANCE = 2 ** 63 - 1
@@ -669,3 +676,69 @@ async def set_default_balance(amount: int, guild: discord.Guild = None) -> int:
raise RuntimeError("Guild is missing and required.")
return amount
+
+
+class AbortPurchase(Exception):
+ pass
+
+
+def cost(amount: int):
+ """
+ Decorates a coroutine-function or command to have a cost.
+
+ If the command raises an exception, the cost will be refunded.
+
+ You can intentionally refund by raising `AbortPurchase`
+ (this error will be consumed and not show to users)
+
+ Other exceptions will propogate and will be handled by Red's (and/or
+ any other configured) error handling.
+ """
+ if not isinstance(amount, int) or amount < 0:
+ raise ValueError("This decorator requires an integer cost greater than or equal to zero")
+
+ def deco(coro_or_command):
+ is_command = isinstance(coro_or_command, commands.Command)
+ if not is_command and not asyncio.iscoroutinefunction(coro_or_command):
+ raise TypeError("@bank.cost() can only be used on commands or `async def` functions")
+
+ coro = coro_or_command.callback if is_command else coro_or_command
+
+ @wraps(coro)
+ async def wrapped(*args, **kwargs):
+ context: commands.Context = None
+ for arg in args:
+ if isinstance(arg, commands.Context):
+ context = arg
+ break
+
+ if not context.guild and not await is_global():
+ raise commands.UserFeedbackCheckFailure(
+ _("Can't pay for this command in DM without a global bank.")
+ )
+ try:
+ await withdraw_credits(context.author, amount)
+ except Exception:
+ credits_name = await get_currency_name(context.guild)
+ raise commands.UserFeedbackCheckFailure(
+ _("You need at least {cost} {currency} to use this command.").format(
+ cost=amount, currency=credits_name
+ )
+ )
+ else:
+ try:
+ return await coro(*args, **kwargs)
+ except AbortPurchase:
+ await deposit_credits(context.author, amount)
+ except Exception:
+ await deposit_credits(context.author, amount)
+ raise
+
+ if not is_command:
+ return wrapped
+ else:
+ wrapped.__module__ = coro_or_command.callback.__module__
+ coro_or_command.callback = wrapped
+ return coro_or_command
+
+ return deco
diff --git a/redbot/core/commands/errors.py b/redbot/core/commands/errors.py
index 5eb0b70bb..5c264c83e 100644
--- a/redbot/core/commands/errors.py
+++ b/redbot/core/commands/errors.py
@@ -3,7 +3,7 @@ import inspect
import discord
from discord.ext import commands
-__all__ = ["ConversionFailure", "BotMissingPermissions"]
+__all__ = ["ConversionFailure", "BotMissingPermissions", "UserFeedbackCheckFailure"]
class ConversionFailure(commands.BadArgument):
@@ -22,3 +22,11 @@ class BotMissingPermissions(commands.CheckFailure):
def __init__(self, missing: discord.Permissions, *args):
self.missing: discord.Permissions = missing
super().__init__(*args)
+
+
+class UserFeedbackCheckFailure(commands.CheckFailure):
+ """A version of CheckFailure which isn't suppressed."""
+
+ def __init__(self, message=None, *args):
+ self.message = message
+ super().__init__(message, *args)
diff --git a/redbot/core/events.py b/redbot/core/events.py
index 33f025789..62f53af56 100644
--- a/redbot/core/events.py
+++ b/redbot/core/events.py
@@ -224,6 +224,9 @@ def init_events(bot, cli_flags):
perms=format_perms_list(error.missing), plural=plural
)
)
+ elif isinstance(error, commands.UserFeedbackCheckFailure):
+ if error.message:
+ await ctx.send(error.message)
elif isinstance(error, commands.CheckFailure):
pass
elif isinstance(error, commands.NoPrivateMessage):
From a89a156f8eafe7f1c6753a5fb079b37306188929 Mon Sep 17 00:00:00 2001
From: Draper
Date: Wed, 3 Jul 2019 20:26:22 +0100
Subject: [PATCH 072/183] [Context] Adds react_quietly method to context
(#2834)
* [Context] Adds react_quietly method to context
This allows developers to emojis to command messages
This is a modified version of tick()
It accepts True/False for Tick/Cross emoji and in addition to that any other emoji the bot can see
* Removed True/False support from react quietly
* Stopped catching InvalidArgument on react_quietly so that is propagated to devs
---
redbot/core/commands/context.py | 18 +++++++++++++++++-
1 file changed, 17 insertions(+), 1 deletion(-)
diff --git a/redbot/core/commands/context.py b/redbot/core/commands/context.py
index 32a3a2439..63bfe8707 100644
--- a/redbot/core/commands/context.py
+++ b/redbot/core/commands/context.py
@@ -1,6 +1,6 @@
import asyncio
import contextlib
-from typing import Iterable, List
+from typing import Iterable, List, Union
import discord
from discord.ext import commands
@@ -86,6 +86,22 @@ class Context(commands.Context):
else:
return True
+ async def react_quietly(
+ self, reaction: Union[discord.Emoji, discord.Reaction, discord.PartialEmoji, str]
+ ) -> bool:
+ """Adds a reaction to to the command message.
+ Returns
+ -------
+ bool
+ :code:`True` if adding the reaction succeeded.
+ """
+ try:
+ await self.message.add_reaction(reaction)
+ except discord.HTTPException:
+ return False
+ else:
+ return True
+
async def send_interactive(
self, messages: Iterable[str], box_lang: str = None, timeout: int = 15
) -> List[discord.Message]:
From 03e59ea9d3f9740dedf886b674910ef36a7eddab Mon Sep 17 00:00:00 2001
From: Cog-Creators Bot <51291613+Cog-CreatorsBot@users.noreply.github.com>
Date: Fri, 5 Jul 2019 20:21:25 +0200
Subject: [PATCH 073/183] Update Crowdin configuration file
---
crowdin.yml | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/crowdin.yml b/crowdin.yml
index 457cf1ea4..b6a113ca4 100644
--- a/crowdin.yml
+++ b/crowdin.yml
@@ -2,7 +2,7 @@ api_key_env: CROWDIN_API_KEY
project_identifier_env: CROWDIN_PROJECT_ID
base_path: ./redbot/
files:
- - source: cogs/**/messages.pot
+ - source: cogs/**/locales/messages.pot
translation: /%original_path%/%locale%.po
- - source: core/**/messages.pot
+ - source: core/**/locales/messages.pot
translation: /%original_path%/%locale%.po
From f2039300c266788a8693c44b296bfc04572d052b Mon Sep 17 00:00:00 2001
From: Toby Harradine
Date: Sat, 6 Jul 2019 08:02:18 +1000
Subject: [PATCH 074/183] [Mongo] Use escaped identifiers to extract inner
value (#2832)
This was causing a KeyError to be raised whenever a key containing $ or . was part of the identifiers path, even if the value was actually in the dict.
Signed-off-by: Toby Harradine
---
redbot/core/drivers/red_mongo.py | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/redbot/core/drivers/red_mongo.py b/redbot/core/drivers/red_mongo.py
index aabd36adf..d500f32db 100644
--- a/redbot/core/drivers/red_mongo.py
+++ b/redbot/core/drivers/red_mongo.py
@@ -119,9 +119,9 @@ class Mongo(BaseDriver):
mongo_collection = self.get_collection(identifier_data.category)
pkey_filter = self.generate_primary_key_filter(identifier_data)
+ escaped_identifiers = list(map(self._escape_key, identifier_data.identifiers))
if len(identifier_data.identifiers) > 0:
- dot_identifiers = ".".join(map(self._escape_key, identifier_data.identifiers))
- proj = {"_id": False, dot_identifiers: True}
+ proj = {"_id": False, ".".join(escaped_identifiers): True}
partial = await mongo_collection.find_one(filter=pkey_filter, projection=proj)
else:
@@ -132,7 +132,7 @@ class Mongo(BaseDriver):
if partial is None:
raise KeyError("No matching document was found and Config expects a KeyError.")
- for i in identifier_data.identifiers:
+ for i in escaped_identifiers:
partial = partial[i]
if isinstance(partial, dict):
return self._unescape_dict_keys(partial)
From 2bdc3ac10c370f5478131c81f47b8564274fd46d Mon Sep 17 00:00:00 2001
From: Toby Harradine
Date: Sun, 7 Jul 2019 18:51:36 +1000
Subject: [PATCH 075/183] [General] Fix KeyError in [p]urban
Resolves #2841.
Signed-off-by: Toby Harradine
---
redbot/cogs/general/general.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/redbot/cogs/general/general.py b/redbot/cogs/general/general.py
index 4c85da434..5d6d0e519 100644
--- a/redbot/cogs/general/general.py
+++ b/redbot/cogs/general/general.py
@@ -274,7 +274,7 @@ class General(commands.Cog):
return
if data.get("error") != 404:
- if not data["list"]:
+ if not data.get("list"):
return await ctx.send(_("No Urban Dictionary entries were found."))
if await ctx.embed_requested():
# a list of embeds
From 55ff9bedb753f35bb91cf02714614915eb86e5e1 Mon Sep 17 00:00:00 2001
From: aikaterna <20862007+aikaterna@users.noreply.github.com>
Date: Sun, 7 Jul 2019 20:17:50 -0700
Subject: [PATCH 076/183] [Audio] Check for player when not connected (#2842)
---
redbot/cogs/audio/audio.py | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)
diff --git a/redbot/cogs/audio/audio.py b/redbot/cogs/audio/audio.py
index df63891a0..9eff8d947 100644
--- a/redbot/cogs/audio/audio.py
+++ b/redbot/cogs/audio/audio.py
@@ -2848,7 +2848,8 @@ class Audio(commands.Cog):
await self._embed_msg(
ctx, _("Repeat tracks: {true_or_false}.").format(true_or_false=not repeat)
)
- await self._data_check(ctx)
+ if self._player_check(ctx):
+ await self._data_check(ctx)
@commands.command()
@commands.guild_only()
@@ -3278,7 +3279,8 @@ class Audio(commands.Cog):
await self._embed_msg(
ctx, _("Shuffle tracks: {true_or_false}.").format(true_or_false=not shuffle)
)
- await self._data_check(ctx)
+ if self._player_check(ctx):
+ await self._data_check(ctx)
@commands.command()
@commands.guild_only()
From 776c75ba86f153ebadfc2050e98d583567a2d4f9 Mon Sep 17 00:00:00 2001
From: DevilXD
Date: Tue, 9 Jul 2019 09:22:52 +0200
Subject: [PATCH 077/183] Fixed [p] not being replaced in code blocks (#2846)
---
redbot/core/commands/help.py | 11 ++++++++++-
1 file changed, 10 insertions(+), 1 deletion(-)
diff --git a/redbot/core/commands/help.py b/redbot/core/commands/help.py
index befd8d97e..9b5c405c3 100644
--- a/redbot/core/commands/help.py
+++ b/redbot/core/commands/help.py
@@ -218,7 +218,16 @@ class RedHelpFormatter:
)
to_page = "\n\n".join(
- filter(None, (description, signature[1:-1], command.help, subtext_header, subtext))
+ filter(
+ None,
+ (
+ description,
+ signature[1:-1],
+ command.help.replace("[p]", ctx.clean_prefix),
+ subtext_header,
+ subtext,
+ ),
+ )
)
pages = [box(p) for p in pagify(to_page)]
await self.send_pages(ctx, pages, embed=False)
From 687b88ca6f0deadaef9af86b0de0e89421ace1c5 Mon Sep 17 00:00:00 2001
From: Flame442 <34169552+Flame442@users.noreply.github.com>
Date: Fri, 12 Jul 2019 18:29:27 -0400
Subject: [PATCH 078/183] Added some periods to some strings (#2852)
---
redbot/cogs/modlog/modlog.py | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/redbot/cogs/modlog/modlog.py b/redbot/cogs/modlog/modlog.py
index 2b1b3e36f..d365353a5 100644
--- a/redbot/cogs/modlog/modlog.py
+++ b/redbot/cogs/modlog/modlog.py
@@ -38,7 +38,7 @@ class ModLog(commands.Cog):
if channel.permissions_for(guild.me).send_messages:
await modlog.set_modlog_channel(guild, channel)
await ctx.send(
- _("Mod events will be sent to {channel}").format(channel=channel.mention)
+ _("Mod events will be sent to {channel}.").format(channel=channel.mention)
)
else:
await ctx.send(
@@ -74,7 +74,7 @@ class ModLog(commands.Cog):
casetype = await modlog.get_casetype(action, guild)
if not casetype:
- await ctx.send(_("That action is not registered"))
+ await ctx.send(_("That action is not registered."))
else:
enabled = await casetype.is_enabled()
await casetype.set_enabled(not enabled)
@@ -99,7 +99,7 @@ class ModLog(commands.Cog):
try:
case = await modlog.get_case(number, ctx.guild, self.bot)
except RuntimeError:
- await ctx.send(_("That case does not exist for that server"))
+ await ctx.send(_("That case does not exist for that server."))
return
else:
if await ctx.embed_requested():
From e34eca557bfeb4268fe64976d575a7a73925d4d6 Mon Sep 17 00:00:00 2001
From: Toby Harradine
Date: Sat, 13 Jul 2019 10:17:00 +1000
Subject: [PATCH 079/183] [ModLog] Prevent duplicate kwarg error (#2848)
* [ModLog] Prevent duplicate kwarg error
The `name` key used to be set in the Config for casetypes.
Signed-off-by: Toby Harradine
* Don't mutate `data` argument
Signed-off-by: Toby Harradine
---
redbot/core/modlog.py | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/redbot/core/modlog.py b/redbot/core/modlog.py
index a834c3d8d..70f44ff6c 100644
--- a/redbot/core/modlog.py
+++ b/redbot/core/modlog.py
@@ -463,7 +463,9 @@ class CaseType:
CaseType
"""
- return cls(name=name, **data, **kwargs)
+ data_copy = data.copy()
+ data_copy.pop(name, None)
+ return cls(name=name, **data_copy, **kwargs)
async def get_next_case_number(guild: discord.Guild) -> int:
From ac2813012acf3e9a7f87606e6ec820782168458c Mon Sep 17 00:00:00 2001
From: Michael H
Date: Fri, 12 Jul 2019 22:11:06 -0400
Subject: [PATCH 080/183] [Core] Cog load fixes (#2854)
* split out some fixes from red#2853
* address feedback
* feedback
---
redbot/core/bot.py | 60 ++++++++++++++++++++++++++++++----------------
1 file changed, 39 insertions(+), 21 deletions(-)
diff --git a/redbot/core/bot.py b/redbot/core/bot.py
index 26a928c30..a6d48a0c9 100644
--- a/redbot/core/bot.py
+++ b/redbot/core/bot.py
@@ -407,32 +407,50 @@ class RedBase(commands.GroupMixin, commands.bot.BotBase, RPCMixin): # pylint: d
f"not inherit from the commands.Cog base class. The cog author must update "
f"the cog to adhere to this requirement."
)
+ if cog.__cog_name__ in self.cogs:
+ raise RuntimeError(f"There is already a cog named {cog.__cog_name__} loaded.")
if not hasattr(cog, "requires"):
commands.Cog.__init__(cog)
- for cls in inspect.getmro(cog.__class__):
- try:
- hook = getattr(cog, f"_{cls.__name__}__permissions_hook")
- except AttributeError:
- pass
- else:
- self.add_permissions_hook(hook)
+ added_hooks = []
- for command in cog.__cog_commands__:
+ try:
+ for cls in inspect.getmro(cog.__class__):
+ try:
+ hook = getattr(cog, f"_{cls.__name__}__permissions_hook")
+ except AttributeError:
+ pass
+ else:
+ self.add_permissions_hook(hook)
+ added_hooks.append(hook)
- if not isinstance(command, commands.Command):
- raise RuntimeError(
- f"The {cog.__class__.__name__} cog in the {cog.__module__} package,"
- " is not using Red's command module, and cannot be added. "
- "If this is your cog, please use `from redbot.core import commands`"
- "in place of `from discord.ext import commands`. For more details on "
- "this requirement, see this page: "
- "http://red-discordbot.readthedocs.io/en/v3-develop/framework_commands.html"
- )
- super().add_cog(cog)
- self.dispatch("cog_add", cog)
- for command in cog.__cog_commands__:
- self.dispatch("command_add", command)
+ for command in cog.__cog_commands__:
+
+ if not isinstance(command, commands.Command):
+ raise RuntimeError(
+ f"The {cog.__class__.__name__} cog in the {cog.__module__} package,"
+ " is not using Red's command module, and cannot be added. "
+ "If this is your cog, please use `from redbot.core import commands`"
+ "in place of `from discord.ext import commands`. For more details on "
+ "this requirement, see this page: "
+ "http://red-discordbot.readthedocs.io/en/v3-develop/framework_commands.html"
+ )
+ super().add_cog(cog)
+ self.dispatch("cog_add", cog)
+ for command in cog.__cog_commands__:
+ self.dispatch("command_add", command)
+ except Exception:
+ for hook in added_hooks:
+ try:
+ self.remove_permissions_hook(hook)
+ except Exception:
+ # This shouldn't be possible
+ log.exception(
+ "A hook got extremely screwed up, "
+ "and could not be removed properly during another error in cog load."
+ )
+ del cog
+ raise
def clear_permission_rules(self, guild_id: Optional[int]) -> None:
"""Clear all permission overrides in a scope.
From 03e0683dd779c928409581e29837b1e779eff943 Mon Sep 17 00:00:00 2001
From: Toby Harradine
Date: Sat, 13 Jul 2019 14:39:50 +1000
Subject: [PATCH 081/183] [ModLog] Actually prevent duplicate kwarg error
Signed-off-by: Toby Harradine
---
redbot/core/modlog.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/redbot/core/modlog.py b/redbot/core/modlog.py
index 70f44ff6c..0f2d2a843 100644
--- a/redbot/core/modlog.py
+++ b/redbot/core/modlog.py
@@ -464,7 +464,7 @@ class CaseType:
"""
data_copy = data.copy()
- data_copy.pop(name, None)
+ data_copy.pop("name", None)
return cls(name=name, **data_copy, **kwargs)
From 21a6384ebff228848fb361c40b248876fe2a4eb5 Mon Sep 17 00:00:00 2001
From: Michael H
Date: Sat, 13 Jul 2019 20:47:16 -0400
Subject: [PATCH 082/183] [Modlog] Fix get_case for missing cases (#2858)
Due to the modlog redesign, the detection for a missing case changed. This fixes `get_case` for this.
This resolves #2844.
---
redbot/core/modlog.py | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/redbot/core/modlog.py b/redbot/core/modlog.py
index 0f2d2a843..065d87848 100644
--- a/redbot/core/modlog.py
+++ b/redbot/core/modlog.py
@@ -514,10 +514,10 @@ async def get_case(case_number: int, guild: discord.Guild, bot: Red) -> Case:
If there is no case for the specified number
"""
- try:
- case = await _conf.custom(_CASES, str(guild.id), str(case_number)).all()
- except KeyError as e:
- raise RuntimeError("That case does not exist for guild {}".format(guild.name)) from e
+
+ case = await _conf.custom(_CASES, str(guild.id), str(case_number)).all()
+ if not case["case_number"]:
+ raise RuntimeError("That case does not exist for guild {}".format(guild.name))
mod_channel = await get_modlog_channel(guild)
return await Case.from_json(mod_channel, bot, case_number, case)
From f83f378528d10a729d5ca1673295e819f64e929f Mon Sep 17 00:00:00 2001
From: Toby Harradine
Date: Sun, 14 Jul 2019 10:47:40 +1000
Subject: [PATCH 083/183] [Core] Make Requires.verify() wait until rules are
loaded (#2857)
* Make Requires.verify() wait until rules are loaded
Also ensures `Requires` objects are reset when unloaded, particularly in case a `Command` object manages to stay in memory between cog unload and load, and its permissions rules change between those events.
Also, this PR re-ordered some of the event loop policy stuff, because it was required that the event loop policy be set before creating any `Requires` objects. This may or may not have an effect on other `get_event_loop()` calls elsewhere (either in our code, a dependency's, or asyncio's). Either way, these effects would be a *correction*, and any bugs that arise from it are likely to have been occurring silently beforehand.
Signed-off-by: Toby Harradine
* Remove calls to `remove_listener()` in permissions
Signed-off-by: Toby Harradine
* Fix adding rules for permissions cog/commands itself
Also addresses feedback
Signed-off-by: Toby Harradine
* Clean up indentation when setting uvloop policy
Signed-off-by: Toby Harradine
* Use `set(walk_commands())` to traverse `Group` subcommands
Signed-off-by: Toby Harradine
---
redbot/__main__.py | 27 +++++++++--------
redbot/cogs/permissions/__init__.py | 11 ++++---
redbot/cogs/permissions/permissions.py | 36 ++++++++++++++---------
redbot/core/bot.py | 40 +++++++++++++++++---------
redbot/core/commands/requires.py | 19 ++++++++++++
5 files changed, 88 insertions(+), 45 deletions(-)
diff --git a/redbot/__main__.py b/redbot/__main__.py
index 602a77489..6f7a6935d 100644
--- a/redbot/__main__.py
+++ b/redbot/__main__.py
@@ -10,6 +10,21 @@ import sys
import discord
+# Set the event loop policies here so any subsequent `get_event_loop()`
+# calls, in particular those as a result of the following imports,
+# return the correct loop object.
+if sys.platform == "win32":
+ asyncio.set_event_loop_policy(asyncio.WindowsProactorEventLoopPolicy())
+elif sys.implementation.name == "cpython":
+ # Let's not force this dependency, uvloop is much faster on cpython
+ try:
+ import uvloop
+ except ImportError:
+ uvloop = None
+ pass
+ else:
+ asyncio.set_event_loop_policy(uvloop.EventLoopPolicy())
+
import redbot.logging
from redbot.core.bot import Red, ExitCodes
from redbot.core.cog_manager import CogManagerUI
@@ -21,18 +36,6 @@ from redbot.core.dev_commands import Dev
from redbot.core import __version__, modlog, bank, data_manager
from signal import SIGTERM
-# Let's not force this dependency, uvloop is much faster on cpython
-if sys.implementation.name == "cpython":
- try:
- import uvloop
- except ImportError:
- uvloop = None
- pass
- else:
- asyncio.set_event_loop_policy(uvloop.EventLoopPolicy())
-
-if sys.platform == "win32":
- asyncio.set_event_loop(asyncio.ProactorEventLoop())
log = logging.getLogger("red.main")
diff --git a/redbot/cogs/permissions/__init__.py b/redbot/cogs/permissions/__init__.py
index 2159535c4..fa080cb1f 100644
--- a/redbot/cogs/permissions/__init__.py
+++ b/redbot/cogs/permissions/__init__.py
@@ -4,10 +4,9 @@ from .permissions import Permissions
async def setup(bot):
cog = Permissions(bot)
await cog.initialize()
- # It's important that these listeners are added prior to load, so
- # the permissions commands themselves have rules added.
- # Automatic listeners being added in add_cog happen in arbitrary
- # order, so we want to circumvent that.
- bot.add_listener(cog.red_cog_added, "on_cog_add")
- bot.add_listener(cog.red_command_added, "on_command_add")
+ # We should add the rules for the Permissions cog and its own commands *before* adding the cog.
+ # The actual listeners ought to skip the ones we're passing here.
+ await cog._on_cog_add(cog)
+ for command in cog.__cog_commands__:
+ await cog._on_command_add(command)
bot.add_cog(cog)
diff --git a/redbot/cogs/permissions/permissions.py b/redbot/cogs/permissions/permissions.py
index 6e14cb650..bb27669b1 100644
--- a/redbot/cogs/permissions/permissions.py
+++ b/redbot/cogs/permissions/permissions.py
@@ -436,31 +436,41 @@ class Permissions(commands.Cog):
await self._clear_rules(guild_id=ctx.guild.id)
await ctx.tick()
- async def red_cog_added(self, cog: commands.Cog) -> None:
+ @commands.Cog.listener()
+ async def on_cog_add(self, cog: commands.Cog) -> None:
"""Event listener for `cog_add`.
This loads rules whenever a new cog is added.
-
- Do not convert to using Cog.listener decorator !!
- This *must* be added manually prior to cog load, and removed at unload
"""
+ if cog is self:
+ # This cog has its rules loaded manually in setup()
+ return
+ await self._on_cog_add(cog)
+
+ @commands.Cog.listener()
+ async def on_command_add(self, command: commands.Command) -> None:
+ """Event listener for `command_add`.
+
+ This loads rules whenever a new command is added.
+ """
+ if command.cog is self:
+ # This cog's commands have their rules loaded manually in setup()
+ return
+ await self._on_command_add(command)
+
+ async def _on_cog_add(self, cog: commands.Cog) -> None:
self._load_rules_for(
cog_or_command=cog,
rule_dict=await self.config.custom(COG, cog.__class__.__name__).all(),
)
+ cog.requires.ready_event.set()
- async def red_command_added(self, command: commands.Command) -> None:
- """Event listener for `command_add`.
-
- This loads rules whenever a new command is added.
-
- Do not convert to using Cog.listener decorator !!
- This *must* be added manually prior to cog load, and removed at unload
- """
+ async def _on_command_add(self, command: commands.Command) -> None:
self._load_rules_for(
cog_or_command=command,
rule_dict=await self.config.custom(COMMAND, command.qualified_name).all(),
)
+ command.requires.ready_event.set()
async def _add_rule(
self, rule: bool, cog_or_cmd: CogOrCommand, model_id: int, guild_id: int
@@ -708,8 +718,6 @@ class Permissions(commands.Cog):
cog_or_command.deny_to(model_id, guild_id=guild_id)
def cog_unload(self) -> None:
- self.bot.remove_listener(self.red_cog_added, "on_cog_add")
- self.bot.remove_listener(self.red_command_added, "on_command_add")
self.bot.loop.create_task(self._unload_all_rules())
async def _unload_all_rules(self) -> None:
diff --git a/redbot/core/bot.py b/redbot/core/bot.py
index a6d48a0c9..b54e11f77 100644
--- a/redbot/core/bot.py
+++ b/redbot/core/bot.py
@@ -322,6 +322,8 @@ class RedBase(commands.GroupMixin, commands.bot.BotBase, RPCMixin): # pylint: d
super().remove_cog(cogname)
+ cog.requires.reset()
+
for meth in self.rpc_handlers.pop(cogname.upper(), ()):
self.unregister_rpc_handler(meth)
@@ -424,21 +426,10 @@ class RedBase(commands.GroupMixin, commands.bot.BotBase, RPCMixin): # pylint: d
self.add_permissions_hook(hook)
added_hooks.append(hook)
- for command in cog.__cog_commands__:
-
- if not isinstance(command, commands.Command):
- raise RuntimeError(
- f"The {cog.__class__.__name__} cog in the {cog.__module__} package,"
- " is not using Red's command module, and cannot be added. "
- "If this is your cog, please use `from redbot.core import commands`"
- "in place of `from discord.ext import commands`. For more details on "
- "this requirement, see this page: "
- "http://red-discordbot.readthedocs.io/en/v3-develop/framework_commands.html"
- )
super().add_cog(cog)
self.dispatch("cog_add", cog)
- for command in cog.__cog_commands__:
- self.dispatch("command_add", command)
+ if "permissions" not in self.extensions:
+ cog.requires.ready_event.set()
except Exception:
for hook in added_hooks:
try:
@@ -452,6 +443,29 @@ class RedBase(commands.GroupMixin, commands.bot.BotBase, RPCMixin): # pylint: d
del cog
raise
+ def add_command(self, command: commands.Command) -> None:
+ if not isinstance(command, commands.Command):
+ raise RuntimeError("Commands must be instances of `redbot.core.commands.Command`")
+
+ super().add_command(command)
+
+ permissions_not_loaded = "permissions" not in self.extensions
+ self.dispatch("command_add", command)
+ if permissions_not_loaded:
+ command.requires.ready_event.set()
+ if isinstance(command, commands.Group):
+ for subcommand in set(command.walk_commands()):
+ self.dispatch("command_add", subcommand)
+ if permissions_not_loaded:
+ command.requires.ready_event.set()
+
+ def remove_command(self, name: str) -> None:
+ command = super().remove_command(name)
+ command.requires.reset()
+ if isinstance(command, commands.Group):
+ for subcommand in set(command.walk_commands()):
+ subcommand.requires.reset()
+
def clear_permission_rules(self, guild_id: Optional[int]) -> None:
"""Clear all permission overrides in a scope.
diff --git a/redbot/core/commands/requires.py b/redbot/core/commands/requires.py
index db06bc1d5..75a0e351c 100644
--- a/redbot/core/commands/requires.py
+++ b/redbot/core/commands/requires.py
@@ -272,6 +272,12 @@ class Requires:
`user_perms` will be used exclusively, otherwise, for levels
other than bot owner, the user can still run the command if
they have the required `user_perms`.
+ ready_event : asyncio.Event
+ Event for when this Requires object has had its rules loaded.
+ If permissions is loaded, this should be set when permissions
+ has finished loading rules into this object. If permissions
+ is not loaded, it should be set as soon as the command or cog
+ is added.
user_perms : Optional[discord.Permissions]
The required permissions for users to execute the command. Can
be ``None``, in which case the `privilege_level` will be used
@@ -300,6 +306,7 @@ class Requires:
):
self.checks: List[CheckPredicate] = checks
self.privilege_level: Optional[PrivilegeLevel] = privilege_level
+ self.ready_event = asyncio.Event()
if isinstance(user_perms, dict):
self.user_perms: Optional[discord.Permissions] = discord.Permissions.none()
@@ -413,6 +420,16 @@ class Requires:
if default is not None:
rules[self.DEFAULT] = default
+ def reset(self) -> None:
+ """Reset this Requires object to its original state.
+
+ This will clear all rules, including defaults. It also resets
+ the `Requires.ready_event`.
+ """
+ self._guild_rules.clear() # pylint: disable=no-member
+ self._global_rules.clear() # pylint: disable=no-member
+ self.ready_event.clear()
+
async def verify(self, ctx: "Context") -> bool:
"""Check if the given context passes the requirements.
@@ -438,6 +455,8 @@ class Requires:
Propogated from any permissions checks.
"""
+ if not self.ready_event.is_set():
+ await self.ready_event.wait()
await self._verify_bot(ctx)
# Owner should never be locked out of commands for user permissions.
From be184b57dd52b4c303ee5a95881fdf4b896e2b61 Mon Sep 17 00:00:00 2001
From: aikaterna <20862007+aikaterna@users.noreply.github.com>
Date: Sat, 13 Jul 2019 17:48:13 -0700
Subject: [PATCH 084/183] [Audio] Update equalizer permissions (#2813)
* [Audio] Update equalizer permissions
* Reformat header on eq list for i18n
* Style
---
redbot/cogs/audio/audio.py | 134 ++++++++++++++++++++++++++++---------
1 file changed, 101 insertions(+), 33 deletions(-)
diff --git a/redbot/cogs/audio/audio.py b/redbot/cogs/audio/audio.py
index 9eff8d947..59a8ce059 100644
--- a/redbot/cogs/audio/audio.py
+++ b/redbot/cogs/audio/audio.py
@@ -840,44 +840,63 @@ class Audio(commands.Cog):
@commands.guild_only()
@commands.cooldown(1, 15, discord.ext.commands.BucketType.guild)
@commands.bot_has_permissions(embed_links=True, add_reactions=True)
- @checks.mod_or_permissions(administrator=True)
async def eq(self, ctx):
"""Equalizer management."""
if not self._player_check(ctx):
return await self._embed_msg(ctx, _("Nothing playing."))
+ dj_enabled = await self.config.guild(ctx.guild).dj_enabled()
player = lavalink.get_player(ctx.guild.id)
eq = player.fetch("eq", Equalizer())
reactions = ["◀", "⬅", "⏫", "🔼", "🔽", "⏬", "➡", "▶", "⏺", "ℹ"]
await self._eq_msg_clear(player.fetch("eq_message"))
eq_message = await ctx.send(box(eq.visualise(), lang="ini"))
- player.store("eq_message", eq_message)
- for reaction in reactions:
+ if dj_enabled and not await self._can_instaskip(ctx, ctx.author):
try:
- await eq_message.add_reaction(reaction)
+ await eq_message.add_reaction("ℹ")
except discord.errors.NotFound:
pass
+ else:
+ for reaction in reactions:
+ try:
+ await eq_message.add_reaction(reaction)
+ except discord.errors.NotFound:
+ pass
- await self._eq_interact(ctx, player, eq, eq_message, 0)
+ eq_msg_with_reacts = await ctx.fetch_message(eq_message.id)
+ player.store("eq_message", eq_msg_with_reacts)
+ await self._eq_interact(ctx, player, eq, eq_msg_with_reacts, 0)
@eq.command(name="delete")
async def _eq_delete(self, ctx, eq_preset: str):
"""Delete a saved eq preset."""
- eq_presets = await self.config.custom("EQUALIZER", ctx.guild.id).eq_presets()
- eq_preset = eq_preset.lower()
- try:
- del eq_presets[eq_preset]
- except KeyError:
- return await self._embed_msg(
- ctx,
- _(
- "{eq_preset} is not in the eq preset list.".format(
- eq_preset=eq_preset.capitalize()
+ async with self.config.custom("EQUALIZER", ctx.guild.id).eq_presets() as eq_presets:
+ eq_preset = eq_preset.lower()
+ try:
+ if eq_presets[eq_preset][
+ "author"
+ ] != ctx.author.id and not await self._can_instaskip(ctx, ctx.author):
+ return await self._embed_msg(
+ ctx, _("You are not the author of that preset setting.")
+ )
+ del eq_presets[eq_preset]
+ except KeyError:
+ return await self._embed_msg(
+ ctx,
+ _(
+ "{eq_preset} is not in the eq preset list.".format(
+ eq_preset=eq_preset.capitalize()
+ )
+ ),
+ )
+ except TypeError:
+ if await self._can_instaskip(ctx, ctx.author):
+ del eq_presets[eq_preset]
+ else:
+ return await self._embed_msg(
+ ctx, _("You are not the author of that preset setting.")
)
- ),
- )
- await self.config.custom("EQUALIZER", ctx.guild.id).eq_presets.set(eq_presets)
await self._embed_msg(
ctx, _("The {preset_name} preset was deleted.".format(preset_name=eq_preset))
)
@@ -888,14 +907,36 @@ class Audio(commands.Cog):
eq_presets = await self.config.custom("EQUALIZER", ctx.guild.id).eq_presets()
if not eq_presets.keys():
return await self._embed_msg(ctx, _("No saved equalizer presets."))
- eq_list = "\n".join(list(sorted(eq_presets.keys())))
+
+ space = "\N{EN SPACE}"
+ header_name = _("Preset Name")
+ header_author = _("Author")
+ header = box(
+ "[{header_name}]{space}[{header_author}]\n".format(
+ header_name=header_name, space=space * 9, header_author=header_author
+ ),
+ lang="ini",
+ )
+ preset_list = ""
+ for preset, bands in eq_presets.items():
+ try:
+ bands["author"]
+ author = self.bot.get_user(bands["author"])
+ except TypeError:
+ author = "None"
+ msg = f"{preset}{space*(22 - len(preset))}{author}\n"
+ preset_list += msg
+
page_list = []
- for page in pagify(eq_list, delims=[", "], page_length=1000):
+ for page in pagify(preset_list, delims=[", "], page_length=1000):
+ formatted_page = box(page, lang="ini")
embed = discord.Embed(
- colour=await ctx.embed_colour(), title="Equalizer presets:", description=page
+ colour=await ctx.embed_colour(), description=(f"{header}\n{formatted_page}")
)
embed.set_footer(text=_("{num} preset(s)").format(num=len(list(eq_presets.keys()))))
page_list.append(embed)
+ if len(page_list) == 1:
+ return await ctx.send(embed=page_list[0])
await menu(ctx, page_list, DEFAULT_CONTROLS)
@eq.command(name="load")
@@ -904,15 +945,26 @@ class Audio(commands.Cog):
eq_preset = eq_preset.lower()
eq_presets = await self.config.custom("EQUALIZER", ctx.guild.id).eq_presets()
try:
- eq_values = eq_presets[eq_preset]
+ eq_values = eq_presets[eq_preset]["bands"]
except KeyError:
return await self._embed_msg(
ctx, _("No preset named {eq_preset}.".format(eq_preset=eq_preset))
)
- await self.config.custom("EQUALIZER", ctx.guild.id).eq_bands.set(eq_values)
+ except TypeError:
+ eq_values = eq_presets[eq_preset]
+
if not self._player_check(ctx):
return await self._embed_msg(ctx, _("Nothing playing."))
+
+ dj_enabled = await self.config.guild(ctx.guild).dj_enabled()
player = lavalink.get_player(ctx.guild.id)
+ if dj_enabled:
+ if not await self._can_instaskip(ctx, ctx.author):
+ return await self._embed_msg(
+ ctx, _("You need the DJ role to load equalizer presets.")
+ )
+
+ await self.config.custom("EQUALIZER", ctx.guild.id).eq_bands.set(eq_values)
await self._eq_check(ctx, player)
eq = player.fetch("eq", Equalizer())
await self._eq_msg_clear(player.fetch("eq_message"))
@@ -930,6 +982,12 @@ class Audio(commands.Cog):
"""Reset the eq to 0 across all bands."""
if not self._player_check(ctx):
return await self._embed_msg(ctx, _("Nothing playing."))
+ dj_enabled = await self.config.guild(ctx.guild).dj_enabled()
+ if dj_enabled:
+ if not await self._can_instaskip(ctx, ctx.author):
+ return await self._embed_msg(
+ ctx, _("You need the DJ role to reset the equalizer.")
+ )
player = lavalink.get_player(ctx.guild.id)
eq = player.fetch("eq", Equalizer())
@@ -954,18 +1012,20 @@ class Audio(commands.Cog):
"""Save the current eq settings to a preset."""
if not self._player_check(ctx):
return await self._embed_msg(ctx, _("Nothing playing."))
+ dj_enabled = await self.config.guild(ctx.guild).dj_enabled()
+ if dj_enabled:
+ if not await self._can_instaskip(ctx, ctx.author):
+ return await self._embed_msg(
+ ctx, _("You need the DJ role to save equalizer presets.")
+ )
if not eq_preset:
await self._embed_msg(ctx, _("Please enter a name for this equalizer preset."))
try:
-
- def pred(m):
- return (
- m.channel == ctx.channel
- and m.author == ctx.author
- and not m.content.startswith(ctx.prefix)
- )
-
- eq_name_msg = await ctx.bot.wait_for("message", timeout=15.0, check=pred)
+ eq_name_msg = await ctx.bot.wait_for(
+ "message",
+ timeout=15.0,
+ check=MessagePredicate.regex(fr"^(?!{re.escape(ctx.prefix)})", ctx),
+ )
eq_preset = eq_name_msg.content.split(" ")[0].strip('"').lower()
except asyncio.TimeoutError:
return await self._embed_msg(
@@ -997,7 +1057,7 @@ class Audio(commands.Cog):
player = lavalink.get_player(ctx.guild.id)
eq = player.fetch("eq", Equalizer())
- to_append = {eq_preset: eq.bands}
+ to_append = {eq_preset: {"author": ctx.author.id, "bands": eq.bands}}
new_eq_presets = {**eq_presets, **to_append}
await self.config.custom("EQUALIZER", ctx.guild.id).eq_presets.set(new_eq_presets)
embed3 = discord.Embed(
@@ -1024,6 +1084,14 @@ class Audio(commands.Cog):
"""
if not self._player_check(ctx):
return await self._embed_msg(ctx, _("Nothing playing."))
+
+ dj_enabled = await self.config.guild(ctx.guild).dj_enabled()
+ if dj_enabled:
+ if not await self._can_instaskip(ctx, ctx.author):
+ return await self._embed_msg(
+ ctx, _("You need the DJ role to set equalizer presets.")
+ )
+
player = lavalink.get_player(ctx.guild.id)
band_names = [
"25",
From 3e80edcdfdc334156e3051827040669296e55883 Mon Sep 17 00:00:00 2001
From: jack1142 <6032823+jack1142@users.noreply.github.com>
Date: Sun, 14 Jul 2019 03:30:11 +0200
Subject: [PATCH 085/183] [Docs] Add awaits and missing imports in usage
examples (#2860)
Well, the modlog examples had to be changed a lot, because `await` obviously won't work in regular method.
---
docs/framework_bank.rst | 11 +++---
docs/framework_modlog.rst | 71 ++++++++++++++++++++++++---------------
2 files changed, 49 insertions(+), 33 deletions(-)
diff --git a/docs/framework_bank.rst b/docs/framework_bank.rst
index b6cfb4ec4..9f5e676f8 100644
--- a/docs/framework_bank.rst
+++ b/docs/framework_bank.rst
@@ -16,15 +16,16 @@ Basic Usage
.. code-block:: python
- from redbot.core import bank
+ from redbot.core import bank, commands
+ import discord
- class MyCog:
+ class MyCog(commands.Cog):
@commands.command()
- async def balance(self, ctx, user: discord.Member=None):
+ async def balance(self, ctx, user: discord.Member = None):
if user is None:
user = ctx.author
- bal = bank.get_balance(user)
- currency = bank.get_currency_name(ctx.guild)
+ bal = await bank.get_balance(user)
+ currency = await bank.get_currency_name(ctx.guild)
await ctx.send(
"{}'s balance is {} {}".format(
user.display_name, bal, currency
diff --git a/docs/framework_modlog.rst b/docs/framework_modlog.rst
index 5baa45ffe..a9f66d817 100644
--- a/docs/framework_modlog.rst
+++ b/docs/framework_modlog.rst
@@ -16,17 +16,17 @@ Basic Usage
.. code-block:: python
- from redbot.core import modlog
+ from redbot.core import commands, modlog
import discord
- class MyCog:
+ class MyCog(commands.Cog):
@commands.command()
@checks.admin_or_permissions(ban_members=True)
- async def ban(self, ctx, user: discord.Member, reason: str=None):
+ async def ban(self, ctx, user: discord.Member, reason: str = None):
await ctx.guild.ban(user)
- case = modlog.create_case(
- ctx.guild, ctx.message.created_at, "ban", user,
- ctx.author, reason, until=None, channel=None
+ case = await modlog.create_case(
+ ctx.bot, ctx.guild, ctx.message.created_at, action="ban",
+ user=user, moderator=ctx.author, reason=reason
)
await ctx.send("Done. It was about time.")
@@ -35,50 +35,65 @@ Basic Usage
Registering Case types
**********************
-To register a single case type:
+To register case types, use an asynchronous ``initialize()`` method and call
+it from your setup function:
.. code-block:: python
- from redbot.core import modlog
+ # mycog/mycog.py
+ from redbot.core import modlog, commands
import discord
- class MyCog:
- def __init__(self, bot):
+ class MyCog(commands.Cog):
+
+ async def initialize(self):
+ await self.register_casetypes()
+
+ @staticmethod
+ async def register_casetypes():
+ # Registering a single casetype
ban_case = {
"name": "ban",
"default_setting": True,
- "image": ":hammer:",
+ "image": "\N{HAMMER}",
"case_str": "Ban",
- "audit_type": "ban"
+ # audit_type should be omitted if the action doesn't show
+ # up in the audit log.
+ "audit_type": "ban",
}
- modlog.register_casetype(**ban_case)
+ try:
+ await modlog.register_casetype(**ban_case)
+ except RuntimeError:
+ pass
-To register multiple case types:
-
-.. code-block:: python
-
- from redbot.core import modlog
- import discord
-
- class MyCog:
- def __init__(self, bot):
+ # Registering multiple casetypes
new_types = [
{
- "name": "ban",
+ "name": "hackban",
"default_setting": True,
- "image": ":hammer:",
- "case_str": "Ban",
- "audit_type": "ban"
+ "image": "\N{BUST IN SILHOUETTE}\N{HAMMER}",
+ "case_str": "Hackban",
+ "audit_type": "ban",
},
{
"name": "kick",
"default_setting": True,
- "image": ":boot:",
+ "image": "\N{WOMANS BOOTS}",
"case_str": "Kick",
"audit_type": "kick"
}
]
- modlog.register_casetypes(new_types)
+ await modlog.register_casetypes(new_types)
+
+.. code-block:: python
+
+ # mycog/__init__.py
+ from .mycog import MyCog
+
+ async def setup(bot):
+ cog = MyCog()
+ await cog.initialize()
+ bot.add_cog(cog)
.. important::
Image should be the emoji you want to represent your case type with.
From 1d2980f8fa45e3f089b9369d2ef19f7dd4c51d2c Mon Sep 17 00:00:00 2001
From: Toby Harradine
Date: Sun, 14 Jul 2019 11:52:28 +1000
Subject: [PATCH 086/183] [Permissions] Send help on missing argument (#2865)
* [Permissions] Send help on missing argument
Resolves #2851.
Signed-off-by: Toby Harradine
* [Permissions] Use varargs instead of Greedy converter
Signed-off-by: Toby Harradine
---
redbot/cogs/permissions/permissions.py | 20 ++++++++++++++++----
1 file changed, 16 insertions(+), 4 deletions(-)
diff --git a/redbot/cogs/permissions/permissions.py b/redbot/cogs/permissions/permissions.py
index bb27669b1..2af4cfc88 100644
--- a/redbot/cogs/permissions/permissions.py
+++ b/redbot/cogs/permissions/permissions.py
@@ -283,7 +283,7 @@ class Permissions(commands.Cog):
ctx: commands.Context,
allow_or_deny: RuleType,
cog_or_command: CogOrCommand,
- who_or_what: commands.Greedy[GlobalUniqueObjectFinder],
+ *who_or_what: GlobalUniqueObjectFinder,
):
"""Add a global rule to a command.
@@ -294,6 +294,9 @@ class Permissions(commands.Cog):
`` is one or more users, channels or roles the rule is for.
"""
+ if not who_or_what:
+ await ctx.send_help()
+ return
for w in who_or_what:
await self._add_rule(
rule=cast(bool, allow_or_deny),
@@ -311,7 +314,7 @@ class Permissions(commands.Cog):
ctx: commands.Context,
allow_or_deny: RuleType,
cog_or_command: CogOrCommand,
- who_or_what: commands.Greedy[GuildUniqueObjectFinder],
+ *who_or_what: GuildUniqueObjectFinder,
):
"""Add a rule to a command in this server.
@@ -322,6 +325,9 @@ class Permissions(commands.Cog):
`` is one or more users, channels or roles the rule is for.
"""
+ if not who_or_what:
+ await ctx.send_help()
+ return
for w in who_or_what:
await self._add_rule(
rule=cast(bool, allow_or_deny),
@@ -337,7 +343,7 @@ class Permissions(commands.Cog):
self,
ctx: commands.Context,
cog_or_command: CogOrCommand,
- who_or_what: commands.Greedy[GlobalUniqueObjectFinder],
+ *who_or_what: GlobalUniqueObjectFinder,
):
"""Remove a global rule from a command.
@@ -346,6 +352,9 @@ class Permissions(commands.Cog):
`` is one or more users, channels or roles the rule is for.
"""
+ if not who_or_what:
+ await ctx.send_help()
+ return
for w in who_or_what:
await self._remove_rule(cog_or_cmd=cog_or_command, model_id=w.id, guild_id=GLOBAL)
await ctx.send(_("Rule removed."))
@@ -357,7 +366,7 @@ class Permissions(commands.Cog):
self,
ctx: commands.Context,
cog_or_command: CogOrCommand,
- who_or_what: commands.Greedy[GlobalUniqueObjectFinder],
+ *who_or_what: GlobalUniqueObjectFinder,
):
"""Remove a server rule from a command.
@@ -366,6 +375,9 @@ class Permissions(commands.Cog):
`` is one or more users, channels or roles the rule is for.
"""
+ if not who_or_what:
+ await ctx.send_help()
+ return
for w in who_or_what:
await self._remove_rule(
cog_or_cmd=cog_or_command, model_id=w.id, guild_id=ctx.guild.id
From d5c412e3dfa23b2c45c0ebaf7c637e3dc38ed5ad Mon Sep 17 00:00:00 2001
From: Toby Harradine
Date: Sun, 14 Jul 2019 13:05:07 +1000
Subject: [PATCH 087/183] [Permissions] Fix Requires.ready_event.set() on
subcommands (#2868)
Signed-off-by: Toby Harradine
---
redbot/core/bot.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/redbot/core/bot.py b/redbot/core/bot.py
index b54e11f77..ceeb05ff0 100644
--- a/redbot/core/bot.py
+++ b/redbot/core/bot.py
@@ -457,7 +457,7 @@ class RedBase(commands.GroupMixin, commands.bot.BotBase, RPCMixin): # pylint: d
for subcommand in set(command.walk_commands()):
self.dispatch("command_add", subcommand)
if permissions_not_loaded:
- command.requires.ready_event.set()
+ subcommand.requires.ready_event.set()
def remove_command(self, name: str) -> None:
command = super().remove_command(name)
From 8676dd3ce3581361cd1697c9c381174b98dadc42 Mon Sep 17 00:00:00 2001
From: Toby Harradine
Date: Sun, 14 Jul 2019 13:52:18 +1000
Subject: [PATCH 088/183] [i18n] Update translation catalogs (#2867)
* [i18n] Update translation catalogs
Signed-off-by: Toby Harradine
* Install redgettext 3.1 in travis crowdin deployment
Last time the catalog templates were updated, redgettext 3.0 was used. I'd rather Travis didn't upload them after extracting with an older version.
Signed-off-by: Toby Harradine
---
.travis.yml | 2 +-
redbot/cogs/admin/locales/ar-SA.po | 174 +-
redbot/cogs/admin/locales/bg-BG.po | 143 +-
redbot/cogs/admin/locales/cs-CZ.po | 186 +++
redbot/cogs/admin/locales/da-DK.po | 141 +-
redbot/cogs/admin/locales/de-DE.po | 176 +-
redbot/cogs/admin/locales/el-GR.po | 141 +-
redbot/cogs/admin/locales/en-PT.po | 143 +-
redbot/cogs/admin/locales/es-ES.po | 174 +-
redbot/cogs/admin/locales/fi-FI.po | 159 +-
redbot/cogs/admin/locales/fr-FR.po | 185 +-
redbot/cogs/admin/locales/hu-HU.po | 143 +-
redbot/cogs/admin/locales/id-ID.po | 141 +-
redbot/cogs/admin/locales/it-IT.po | 187 +--
redbot/cogs/admin/locales/ja-JP.po | 143 +-
redbot/cogs/admin/locales/ko-KR.po | 148 +-
redbot/cogs/admin/locales/lol-US.po | 141 +-
redbot/cogs/admin/locales/nl-NL.po | 171 +-
redbot/cogs/admin/locales/no-NO.po | 143 +-
redbot/cogs/admin/locales/pl-PL.po | 143 +-
redbot/cogs/admin/locales/pt-BR.po | 147 +-
redbot/cogs/admin/locales/pt-PT.po | 178 +-
redbot/cogs/admin/locales/ro-RO.po | 186 +++
redbot/cogs/admin/locales/ru-RU.po | 196 +--
redbot/cogs/admin/locales/sk-SK.po | 141 +-
redbot/cogs/admin/locales/sv-SE.po | 147 +-
redbot/cogs/admin/locales/tr-TR.po | 143 +-
redbot/cogs/admin/locales/zh-CN.po | 143 +-
redbot/cogs/admin/locales/zh-TW.po | 186 +++
redbot/cogs/alias/locales/ar-SA.po | 84 +-
redbot/cogs/alias/locales/bg-BG.po | 84 +-
redbot/cogs/alias/locales/cs-CZ.po | 154 ++
redbot/cogs/alias/locales/da-DK.po | 84 +-
redbot/cogs/alias/locales/de-DE.po | 92 +-
redbot/cogs/alias/locales/el-GR.po | 84 +-
redbot/cogs/alias/locales/en-PT.po | 84 +-
redbot/cogs/alias/locales/es-ES.po | 84 +-
redbot/cogs/alias/locales/fi-FI.po | 84 +-
redbot/cogs/alias/locales/fr-FR.po | 92 +-
redbot/cogs/alias/locales/hu-HU.po | 84 +-
redbot/cogs/alias/locales/id-ID.po | 84 +-
redbot/cogs/alias/locales/it-IT.po | 132 +-
redbot/cogs/alias/locales/ja-JP.po | 84 +-
redbot/cogs/alias/locales/ko-KR.po | 84 +-
redbot/cogs/alias/locales/lol-US.po | 84 +-
redbot/cogs/alias/locales/nl-NL.po | 92 +-
redbot/cogs/alias/locales/no-NO.po | 88 +-
redbot/cogs/alias/locales/pl-PL.po | 86 +-
redbot/cogs/alias/locales/pt-BR.po | 84 +-
redbot/cogs/alias/locales/pt-PT.po | 84 +-
redbot/cogs/alias/locales/ro-RO.po | 154 ++
redbot/cogs/alias/locales/ru-RU.po | 108 +-
redbot/cogs/alias/locales/sk-SK.po | 84 +-
redbot/cogs/alias/locales/sv-SE.po | 84 +-
redbot/cogs/alias/locales/tr-TR.po | 84 +-
redbot/cogs/alias/locales/zh-CN.po | 84 +-
redbot/cogs/alias/locales/zh-TW.po | 154 ++
redbot/cogs/audio/locales/ar-SA.po | 998 +++++++----
redbot/cogs/audio/locales/bg-BG.po | 998 +++++++----
redbot/cogs/audio/locales/cs-CZ.po | 1290 ++++++++++++++
redbot/cogs/audio/locales/da-DK.po | 998 +++++++----
redbot/cogs/audio/locales/de-DE.po | 1766 ++++++++++++--------
redbot/cogs/audio/locales/el-GR.po | 998 +++++++----
redbot/cogs/audio/locales/en-PT.po | 998 +++++++----
redbot/cogs/audio/locales/es-ES.po | 1110 +++++++-----
redbot/cogs/audio/locales/fi-FI.po | 998 +++++++----
redbot/cogs/audio/locales/fr-FR.po | 1094 +++++++-----
redbot/cogs/audio/locales/hu-HU.po | 998 +++++++----
redbot/cogs/audio/locales/id-ID.po | 998 +++++++----
redbot/cogs/audio/locales/it-IT.po | 998 +++++++----
redbot/cogs/audio/locales/ja-JP.po | 1023 ++++++++----
redbot/cogs/audio/locales/ko-KR.po | 998 +++++++----
redbot/cogs/audio/locales/lol-US.po | 998 +++++++----
redbot/cogs/audio/locales/nl-NL.po | 1123 ++++++++-----
redbot/cogs/audio/locales/no-NO.po | 998 +++++++----
redbot/cogs/audio/locales/pl-PL.po | 998 +++++++----
redbot/cogs/audio/locales/pt-BR.po | 1024 ++++++++----
redbot/cogs/audio/locales/pt-PT.po | 998 +++++++----
redbot/cogs/audio/locales/ro-RO.po | 1290 ++++++++++++++
redbot/cogs/audio/locales/ru-RU.po | 1634 ++++++++++--------
redbot/cogs/audio/locales/sk-SK.po | 998 +++++++----
redbot/cogs/audio/locales/sv-SE.po | 998 +++++++----
redbot/cogs/audio/locales/tr-TR.po | 998 +++++++----
redbot/cogs/audio/locales/zh-CN.po | 998 +++++++----
redbot/cogs/audio/locales/zh-TW.po | 1290 ++++++++++++++
redbot/cogs/bank/locales/ar-SA.po | 42 +-
redbot/cogs/bank/locales/bg-BG.po | 42 +-
redbot/cogs/bank/locales/cs-CZ.po | 71 +
redbot/cogs/bank/locales/da-DK.po | 42 +-
redbot/cogs/bank/locales/de-DE.po | 52 +-
redbot/cogs/bank/locales/el-GR.po | 42 +-
redbot/cogs/bank/locales/en-PT.po | 42 +-
redbot/cogs/bank/locales/es-ES.po | 42 +-
redbot/cogs/bank/locales/fi-FI.po | 42 +-
redbot/cogs/bank/locales/fr-FR.po | 52 +-
redbot/cogs/bank/locales/hu-HU.po | 42 +-
redbot/cogs/bank/locales/id-ID.po | 42 +-
redbot/cogs/bank/locales/it-IT.po | 42 +-
redbot/cogs/bank/locales/ja-JP.po | 42 +-
redbot/cogs/bank/locales/ko-KR.po | 42 +-
redbot/cogs/bank/locales/lol-US.po | 42 +-
redbot/cogs/bank/locales/nl-NL.po | 52 +-
redbot/cogs/bank/locales/no-NO.po | 42 +-
redbot/cogs/bank/locales/pl-PL.po | 48 +-
redbot/cogs/bank/locales/pt-BR.po | 42 +-
redbot/cogs/bank/locales/pt-PT.po | 42 +-
redbot/cogs/bank/locales/ro-RO.po | 71 +
redbot/cogs/bank/locales/ru-RU.po | 56 +-
redbot/cogs/bank/locales/sk-SK.po | 42 +-
redbot/cogs/bank/locales/sv-SE.po | 42 +-
redbot/cogs/bank/locales/tr-TR.po | 52 +-
redbot/cogs/bank/locales/zh-CN.po | 42 +-
redbot/cogs/bank/locales/zh-TW.po | 71 +
redbot/cogs/cleanup/locales/ar-SA.po | 79 +-
redbot/cogs/cleanup/locales/bg-BG.po | 79 +-
redbot/cogs/cleanup/locales/cs-CZ.po | 84 +
redbot/cogs/cleanup/locales/da-DK.po | 79 +-
redbot/cogs/cleanup/locales/de-DE.po | 107 +-
redbot/cogs/cleanup/locales/el-GR.po | 79 +-
redbot/cogs/cleanup/locales/en-PT.po | 79 +-
redbot/cogs/cleanup/locales/es-ES.po | 85 +-
redbot/cogs/cleanup/locales/fi-FI.po | 79 +-
redbot/cogs/cleanup/locales/fr-FR.po | 120 +-
redbot/cogs/cleanup/locales/hu-HU.po | 79 +-
redbot/cogs/cleanup/locales/id-ID.po | 79 +-
redbot/cogs/cleanup/locales/it-IT.po | 79 +-
redbot/cogs/cleanup/locales/ja-JP.po | 79 +-
redbot/cogs/cleanup/locales/ko-KR.po | 79 +-
redbot/cogs/cleanup/locales/lol-US.po | 79 +-
redbot/cogs/cleanup/locales/nl-NL.po | 113 +-
redbot/cogs/cleanup/locales/no-NO.po | 79 +-
redbot/cogs/cleanup/locales/pl-PL.po | 81 +-
redbot/cogs/cleanup/locales/pt-BR.po | 79 +-
redbot/cogs/cleanup/locales/pt-PT.po | 79 +-
redbot/cogs/cleanup/locales/ro-RO.po | 84 +
redbot/cogs/cleanup/locales/ru-RU.po | 122 +-
redbot/cogs/cleanup/locales/sk-SK.po | 79 +-
redbot/cogs/cleanup/locales/sv-SE.po | 79 +-
redbot/cogs/cleanup/locales/tr-TR.po | 115 +-
redbot/cogs/cleanup/locales/zh-CN.po | 79 +-
redbot/cogs/cleanup/locales/zh-TW.po | 84 +
redbot/cogs/customcom/locales/ar-SA.po | 162 +-
redbot/cogs/customcom/locales/bg-BG.po | 162 +-
redbot/cogs/customcom/locales/cs-CZ.po | 193 +++
redbot/cogs/customcom/locales/da-DK.po | 162 +-
redbot/cogs/customcom/locales/de-DE.po | 202 +--
redbot/cogs/customcom/locales/el-GR.po | 162 +-
redbot/cogs/customcom/locales/en-PT.po | 162 +-
redbot/cogs/customcom/locales/es-ES.po | 162 +-
redbot/cogs/customcom/locales/fi-FI.po | 162 +-
redbot/cogs/customcom/locales/fr-FR.po | 202 +--
redbot/cogs/customcom/locales/hu-HU.po | 162 +-
redbot/cogs/customcom/locales/id-ID.po | 162 +-
redbot/cogs/customcom/locales/it-IT.po | 162 +-
redbot/cogs/customcom/locales/ja-JP.po | 162 +-
redbot/cogs/customcom/locales/ko-KR.po | 162 +-
redbot/cogs/customcom/locales/lol-US.po | 162 +-
redbot/cogs/customcom/locales/nl-NL.po | 162 +-
redbot/cogs/customcom/locales/no-NO.po | 162 +-
redbot/cogs/customcom/locales/pl-PL.po | 162 +-
redbot/cogs/customcom/locales/pt-BR.po | 162 +-
redbot/cogs/customcom/locales/pt-PT.po | 162 +-
redbot/cogs/customcom/locales/ro-RO.po | 193 +++
redbot/cogs/customcom/locales/ru-RU.po | 199 +--
redbot/cogs/customcom/locales/sk-SK.po | 162 +-
redbot/cogs/customcom/locales/sv-SE.po | 162 +-
redbot/cogs/customcom/locales/tr-TR.po | 162 +-
redbot/cogs/customcom/locales/zh-CN.po | 162 +-
redbot/cogs/customcom/locales/zh-TW.po | 193 +++
redbot/cogs/downloader/locales/ar-SA.po | 157 +-
redbot/cogs/downloader/locales/bg-BG.po | 159 +-
redbot/cogs/downloader/locales/cs-CZ.po | 236 +++
redbot/cogs/downloader/locales/da-DK.po | 157 +-
redbot/cogs/downloader/locales/de-DE.po | 231 ++-
redbot/cogs/downloader/locales/el-GR.po | 157 +-
redbot/cogs/downloader/locales/en-PT.po | 159 +-
redbot/cogs/downloader/locales/es-ES.po | 159 +-
redbot/cogs/downloader/locales/fi-FI.po | 157 +-
redbot/cogs/downloader/locales/fr-FR.po | 259 ++-
redbot/cogs/downloader/locales/hu-HU.po | 159 +-
redbot/cogs/downloader/locales/id-ID.po | 159 +-
redbot/cogs/downloader/locales/it-IT.po | 161 +-
redbot/cogs/downloader/locales/ja-JP.po | 159 +-
redbot/cogs/downloader/locales/ko-KR.po | 159 +-
redbot/cogs/downloader/locales/lol-US.po | 157 +-
redbot/cogs/downloader/locales/nl-NL.po | 204 ++-
redbot/cogs/downloader/locales/no-NO.po | 159 +-
redbot/cogs/downloader/locales/pl-PL.po | 165 +-
redbot/cogs/downloader/locales/pt-BR.po | 161 +-
redbot/cogs/downloader/locales/pt-PT.po | 157 +-
redbot/cogs/downloader/locales/ro-RO.po | 236 +++
redbot/cogs/downloader/locales/ru-RU.po | 254 ++-
redbot/cogs/downloader/locales/sk-SK.po | 157 +-
redbot/cogs/downloader/locales/sv-SE.po | 159 +-
redbot/cogs/downloader/locales/tr-TR.po | 197 +--
redbot/cogs/downloader/locales/zh-CN.po | 159 +-
redbot/cogs/downloader/locales/zh-TW.po | 236 +++
redbot/cogs/economy/locales/ar-SA.po | 172 +-
redbot/cogs/economy/locales/bg-BG.po | 181 +-
redbot/cogs/economy/locales/cs-CZ.po | 296 ++++
redbot/cogs/economy/locales/da-DK.po | 172 +-
redbot/cogs/economy/locales/de-DE.po | 257 ++-
redbot/cogs/economy/locales/el-GR.po | 172 +-
redbot/cogs/economy/locales/en-PT.po | 181 +-
redbot/cogs/economy/locales/es-ES.po | 181 +-
redbot/cogs/economy/locales/fi-FI.po | 172 +-
redbot/cogs/economy/locales/fr-FR.po | 271 ++-
redbot/cogs/economy/locales/hu-HU.po | 172 +-
redbot/cogs/economy/locales/id-ID.po | 181 +-
redbot/cogs/economy/locales/it-IT.po | 181 +-
redbot/cogs/economy/locales/ja-JP.po | 181 +-
redbot/cogs/economy/locales/ko-KR.po | 179 +-
redbot/cogs/economy/locales/lol-US.po | 172 +-
redbot/cogs/economy/locales/nl-NL.po | 180 +-
redbot/cogs/economy/locales/no-NO.po | 181 +-
redbot/cogs/economy/locales/pl-PL.po | 183 +-
redbot/cogs/economy/locales/pt-BR.po | 181 +-
redbot/cogs/economy/locales/pt-PT.po | 172 +-
redbot/cogs/economy/locales/ro-RO.po | 296 ++++
redbot/cogs/economy/locales/ru-RU.po | 214 +--
redbot/cogs/economy/locales/sk-SK.po | 172 +-
redbot/cogs/economy/locales/sv-SE.po | 181 +-
redbot/cogs/economy/locales/tr-TR.po | 146 +-
redbot/cogs/economy/locales/zh-CN.po | 181 +-
redbot/cogs/economy/locales/zh-TW.po | 296 ++++
redbot/cogs/filter/locales/ar-SA.po | 130 +-
redbot/cogs/filter/locales/bg-BG.po | 130 +-
redbot/cogs/filter/locales/cs-CZ.po | 149 ++
redbot/cogs/filter/locales/da-DK.po | 130 +-
redbot/cogs/filter/locales/de-DE.po | 154 +-
redbot/cogs/filter/locales/el-GR.po | 130 +-
redbot/cogs/filter/locales/en-PT.po | 130 +-
redbot/cogs/filter/locales/es-ES.po | 130 +-
redbot/cogs/filter/locales/fi-FI.po | 130 +-
redbot/cogs/filter/locales/fr-FR.po | 176 +-
redbot/cogs/filter/locales/hu-HU.po | 130 +-
redbot/cogs/filter/locales/id-ID.po | 130 +-
redbot/cogs/filter/locales/it-IT.po | 130 +-
redbot/cogs/filter/locales/ja-JP.po | 130 +-
redbot/cogs/filter/locales/ko-KR.po | 130 +-
redbot/cogs/filter/locales/lol-US.po | 130 +-
redbot/cogs/filter/locales/nl-NL.po | 124 +-
redbot/cogs/filter/locales/no-NO.po | 130 +-
redbot/cogs/filter/locales/pl-PL.po | 130 +-
redbot/cogs/filter/locales/pt-BR.po | 130 +-
redbot/cogs/filter/locales/pt-PT.po | 130 +-
redbot/cogs/filter/locales/ro-RO.po | 149 ++
redbot/cogs/filter/locales/ru-RU.po | 182 +-
redbot/cogs/filter/locales/sk-SK.po | 130 +-
redbot/cogs/filter/locales/sv-SE.po | 130 +-
redbot/cogs/filter/locales/tr-TR.po | 130 +-
redbot/cogs/filter/locales/zh-CN.po | 130 +-
redbot/cogs/filter/locales/zh-TW.po | 149 ++
redbot/cogs/general/locales/ar-SA.po | 109 +-
redbot/cogs/general/locales/bg-BG.po | 105 +-
redbot/cogs/general/locales/cs-CZ.po | 269 +++
redbot/cogs/general/locales/da-DK.po | 109 +-
redbot/cogs/general/locales/de-DE.po | 139 +-
redbot/cogs/general/locales/el-GR.po | 109 +-
redbot/cogs/general/locales/en-PT.po | 105 +-
redbot/cogs/general/locales/es-ES.po | 105 +-
redbot/cogs/general/locales/fi-FI.po | 109 +-
redbot/cogs/general/locales/fr-FR.po | 149 +-
redbot/cogs/general/locales/hu-HU.po | 109 +-
redbot/cogs/general/locales/id-ID.po | 129 +-
redbot/cogs/general/locales/it-IT.po | 105 +-
redbot/cogs/general/locales/ja-JP.po | 105 +-
redbot/cogs/general/locales/ko-KR.po | 105 +-
redbot/cogs/general/locales/lol-US.po | 109 +-
redbot/cogs/general/locales/nl-NL.po | 135 +-
redbot/cogs/general/locales/no-NO.po | 105 +-
redbot/cogs/general/locales/pl-PL.po | 129 +-
redbot/cogs/general/locales/pt-BR.po | 109 +-
redbot/cogs/general/locales/pt-PT.po | 109 +-
redbot/cogs/general/locales/ro-RO.po | 269 +++
redbot/cogs/general/locales/ru-RU.po | 150 +-
redbot/cogs/general/locales/sk-SK.po | 105 +-
redbot/cogs/general/locales/sv-SE.po | 105 +-
redbot/cogs/general/locales/tr-TR.po | 137 +-
redbot/cogs/general/locales/zh-CN.po | 105 +-
redbot/cogs/general/locales/zh-TW.po | 269 +++
redbot/cogs/image/locales/ar-SA.po | 86 +-
redbot/cogs/image/locales/bg-BG.po | 88 +-
redbot/cogs/image/locales/cs-CZ.po | 103 ++
redbot/cogs/image/locales/da-DK.po | 86 +-
redbot/cogs/image/locales/de-DE.po | 100 +-
redbot/cogs/image/locales/el-GR.po | 86 +-
redbot/cogs/image/locales/en-PT.po | 88 +-
redbot/cogs/image/locales/es-ES.po | 88 +-
redbot/cogs/image/locales/fi-FI.po | 86 +-
redbot/cogs/image/locales/fr-FR.po | 117 +-
redbot/cogs/image/locales/hu-HU.po | 88 +-
redbot/cogs/image/locales/id-ID.po | 88 +-
redbot/cogs/image/locales/it-IT.po | 88 +-
redbot/cogs/image/locales/ja-JP.po | 88 +-
redbot/cogs/image/locales/ko-KR.po | 88 +-
redbot/cogs/image/locales/lol-US.po | 86 +-
redbot/cogs/image/locales/nl-NL.po | 117 +-
redbot/cogs/image/locales/no-NO.po | 88 +-
redbot/cogs/image/locales/pl-PL.po | 90 +-
redbot/cogs/image/locales/pt-BR.po | 86 +-
redbot/cogs/image/locales/pt-PT.po | 86 +-
redbot/cogs/image/locales/ro-RO.po | 103 ++
redbot/cogs/image/locales/ru-RU.po | 117 +-
redbot/cogs/image/locales/sk-SK.po | 86 +-
redbot/cogs/image/locales/sv-SE.po | 88 +-
redbot/cogs/image/locales/tr-TR.po | 115 +-
redbot/cogs/image/locales/zh-CN.po | 88 +-
redbot/cogs/image/locales/zh-TW.po | 103 ++
redbot/cogs/mod/locales/ar-SA.po | 857 +++++-----
redbot/cogs/mod/locales/bg-BG.po | 859 +++++-----
redbot/cogs/mod/locales/cs-CZ.po | 647 +++++++
redbot/cogs/mod/locales/da-DK.po | 857 +++++-----
redbot/cogs/mod/locales/de-DE.po | 917 +++++-----
redbot/cogs/mod/locales/el-GR.po | 857 +++++-----
redbot/cogs/mod/locales/en-PT.po | 865 +++++-----
redbot/cogs/mod/locales/es-ES.po | 867 +++++-----
redbot/cogs/mod/locales/fi-FI.po | 857 +++++-----
redbot/cogs/mod/locales/fr-FR.po | 902 +++++-----
redbot/cogs/mod/locales/hu-HU.po | 857 +++++-----
redbot/cogs/mod/locales/id-ID.po | 867 +++++-----
redbot/cogs/mod/locales/it-IT.po | 859 +++++-----
redbot/cogs/mod/locales/ja-JP.po | 859 +++++-----
redbot/cogs/mod/locales/ko-KR.po | 867 +++++-----
redbot/cogs/mod/locales/lol-US.po | 857 +++++-----
redbot/cogs/mod/locales/nl-NL.po | 867 +++++-----
redbot/cogs/mod/locales/no-NO.po | 859 +++++-----
redbot/cogs/mod/locales/pl-PL.po | 859 +++++-----
redbot/cogs/mod/locales/pt-BR.po | 857 +++++-----
redbot/cogs/mod/locales/pt-PT.po | 857 +++++-----
redbot/cogs/mod/locales/ro-RO.po | 647 +++++++
redbot/cogs/mod/locales/ru-RU.po | 1049 ++++++------
redbot/cogs/mod/locales/sk-SK.po | 859 +++++-----
redbot/cogs/mod/locales/sv-SE.po | 859 +++++-----
redbot/cogs/mod/locales/tr-TR.po | 861 +++++-----
redbot/cogs/mod/locales/zh-CN.po | 859 +++++-----
redbot/cogs/mod/locales/zh-TW.po | 647 +++++++
redbot/cogs/modlog/locales/ar-SA.po | 81 +-
redbot/cogs/modlog/locales/bg-BG.po | 81 +-
redbot/cogs/modlog/locales/cs-CZ.po | 122 ++
redbot/cogs/modlog/locales/da-DK.po | 81 +-
redbot/cogs/modlog/locales/de-DE.po | 99 +-
redbot/cogs/modlog/locales/el-GR.po | 81 +-
redbot/cogs/modlog/locales/en-PT.po | 81 +-
redbot/cogs/modlog/locales/es-ES.po | 81 +-
redbot/cogs/modlog/locales/fi-FI.po | 81 +-
redbot/cogs/modlog/locales/fr-FR.po | 107 +-
redbot/cogs/modlog/locales/hu-HU.po | 81 +-
redbot/cogs/modlog/locales/id-ID.po | 81 +-
redbot/cogs/modlog/locales/it-IT.po | 81 +-
redbot/cogs/modlog/locales/ja-JP.po | 81 +-
redbot/cogs/modlog/locales/ko-KR.po | 81 +-
redbot/cogs/modlog/locales/lol-US.po | 81 +-
redbot/cogs/modlog/locales/nl-NL.po | 81 +-
redbot/cogs/modlog/locales/no-NO.po | 81 +-
redbot/cogs/modlog/locales/pl-PL.po | 81 +-
redbot/cogs/modlog/locales/pt-BR.po | 81 +-
redbot/cogs/modlog/locales/pt-PT.po | 81 +-
redbot/cogs/modlog/locales/ro-RO.po | 122 ++
redbot/cogs/modlog/locales/ru-RU.po | 109 +-
redbot/cogs/modlog/locales/sk-SK.po | 81 +-
redbot/cogs/modlog/locales/sv-SE.po | 81 +-
redbot/cogs/modlog/locales/tr-TR.po | 81 +-
redbot/cogs/modlog/locales/zh-CN.po | 81 +-
redbot/cogs/modlog/locales/zh-TW.po | 122 ++
redbot/cogs/permissions/locales/ar-SA.po | 212 +--
redbot/cogs/permissions/locales/bg-BG.po | 212 +--
redbot/cogs/permissions/locales/cs-CZ.po | 244 +++
redbot/cogs/permissions/locales/da-DK.po | 212 +--
redbot/cogs/permissions/locales/de-DE.po | 286 ++--
redbot/cogs/permissions/locales/el-GR.po | 212 +--
redbot/cogs/permissions/locales/en-PT.po | 212 +--
redbot/cogs/permissions/locales/es-ES.po | 212 +--
redbot/cogs/permissions/locales/fi-FI.po | 212 +--
redbot/cogs/permissions/locales/fr-FR.po | 286 ++--
redbot/cogs/permissions/locales/hu-HU.po | 220 +--
redbot/cogs/permissions/locales/id-ID.po | 212 +--
redbot/cogs/permissions/locales/it-IT.po | 214 +--
redbot/cogs/permissions/locales/ja-JP.po | 212 +--
redbot/cogs/permissions/locales/ko-KR.po | 212 +--
redbot/cogs/permissions/locales/lol-US.po | 212 +--
redbot/cogs/permissions/locales/nl-NL.po | 212 +--
redbot/cogs/permissions/locales/no-NO.po | 212 +--
redbot/cogs/permissions/locales/pl-PL.po | 214 +--
redbot/cogs/permissions/locales/pt-BR.po | 214 +--
redbot/cogs/permissions/locales/pt-PT.po | 212 +--
redbot/cogs/permissions/locales/ro-RO.po | 244 +++
redbot/cogs/permissions/locales/ru-RU.po | 286 ++--
redbot/cogs/permissions/locales/sk-SK.po | 212 +--
redbot/cogs/permissions/locales/sv-SE.po | 212 +--
redbot/cogs/permissions/locales/tr-TR.po | 214 +--
redbot/cogs/permissions/locales/zh-CN.po | 212 +--
redbot/cogs/permissions/locales/zh-TW.po | 244 +++
redbot/cogs/reports/locales/ar-SA.po | 89 +-
redbot/cogs/reports/locales/bg-BG.po | 89 +-
redbot/cogs/reports/locales/cs-CZ.po | 147 ++
redbot/cogs/reports/locales/da-DK.po | 89 +-
redbot/cogs/reports/locales/de-DE.po | 149 +-
redbot/cogs/reports/locales/el-GR.po | 89 +-
redbot/cogs/reports/locales/en-PT.po | 89 +-
redbot/cogs/reports/locales/es-ES.po | 91 +-
redbot/cogs/reports/locales/fi-FI.po | 89 +-
redbot/cogs/reports/locales/fr-FR.po | 149 +-
redbot/cogs/reports/locales/hu-HU.po | 89 +-
redbot/cogs/reports/locales/id-ID.po | 89 +-
redbot/cogs/reports/locales/it-IT.po | 89 +-
redbot/cogs/reports/locales/ja-JP.po | 89 +-
redbot/cogs/reports/locales/ko-KR.po | 89 +-
redbot/cogs/reports/locales/lol-US.po | 89 +-
redbot/cogs/reports/locales/nl-NL.po | 97 +-
redbot/cogs/reports/locales/no-NO.po | 89 +-
redbot/cogs/reports/locales/pl-PL.po | 89 +-
redbot/cogs/reports/locales/pt-BR.po | 89 +-
redbot/cogs/reports/locales/pt-PT.po | 89 +-
redbot/cogs/reports/locales/ro-RO.po | 147 ++
redbot/cogs/reports/locales/ru-RU.po | 149 +-
redbot/cogs/reports/locales/sk-SK.po | 89 +-
redbot/cogs/reports/locales/sv-SE.po | 89 +-
redbot/cogs/reports/locales/tr-TR.po | 89 +-
redbot/cogs/reports/locales/zh-CN.po | 89 +-
redbot/cogs/reports/locales/zh-TW.po | 147 ++
redbot/cogs/streams/locales/ar-SA.po | 258 +--
redbot/cogs/streams/locales/bg-BG.po | 258 +--
redbot/cogs/streams/locales/cs-CZ.po | 300 ++++
redbot/cogs/streams/locales/da-DK.po | 258 +--
redbot/cogs/streams/locales/de-DE.po | 293 ++--
redbot/cogs/streams/locales/el-GR.po | 258 +--
redbot/cogs/streams/locales/en-PT.po | 258 +--
redbot/cogs/streams/locales/es-ES.po | 258 +--
redbot/cogs/streams/locales/fi-FI.po | 258 +--
redbot/cogs/streams/locales/fr-FR.po | 358 ++--
redbot/cogs/streams/locales/hu-HU.po | 258 +--
redbot/cogs/streams/locales/id-ID.po | 258 +--
redbot/cogs/streams/locales/it-IT.po | 258 +--
redbot/cogs/streams/locales/ja-JP.po | 258 +--
redbot/cogs/streams/locales/ko-KR.po | 258 +--
redbot/cogs/streams/locales/lol-US.po | 258 +--
redbot/cogs/streams/locales/nl-NL.po | 258 +--
redbot/cogs/streams/locales/no-NO.po | 258 +--
redbot/cogs/streams/locales/pl-PL.po | 258 +--
redbot/cogs/streams/locales/pt-BR.po | 258 +--
redbot/cogs/streams/locales/pt-PT.po | 258 +--
redbot/cogs/streams/locales/ro-RO.po | 300 ++++
redbot/cogs/streams/locales/ru-RU.po | 352 ++--
redbot/cogs/streams/locales/sk-SK.po | 258 +--
redbot/cogs/streams/locales/sv-SE.po | 258 +--
redbot/cogs/streams/locales/tr-TR.po | 258 +--
redbot/cogs/streams/locales/zh-CN.po | 258 +--
redbot/cogs/streams/locales/zh-TW.po | 300 ++++
redbot/cogs/trivia/locales/ar-SA.po | 62 +-
redbot/cogs/trivia/locales/bg-BG.po | 62 +-
redbot/cogs/trivia/locales/cs-CZ.po | 281 ++++
redbot/cogs/trivia/locales/da-DK.po | 62 +-
redbot/cogs/trivia/locales/de-DE.po | 170 +-
redbot/cogs/trivia/locales/el-GR.po | 62 +-
redbot/cogs/trivia/locales/en-PT.po | 62 +-
redbot/cogs/trivia/locales/es-ES.po | 62 +-
redbot/cogs/trivia/locales/fi-FI.po | 62 +-
redbot/cogs/trivia/locales/fr-FR.po | 117 +-
redbot/cogs/trivia/locales/hu-HU.po | 62 +-
redbot/cogs/trivia/locales/id-ID.po | 62 +-
redbot/cogs/trivia/locales/it-IT.po | 170 +-
redbot/cogs/trivia/locales/ja-JP.po | 62 +-
redbot/cogs/trivia/locales/ko-KR.po | 62 +-
redbot/cogs/trivia/locales/lol-US.po | 62 +-
redbot/cogs/trivia/locales/nl-NL.po | 62 +-
redbot/cogs/trivia/locales/no-NO.po | 62 +-
redbot/cogs/trivia/locales/pl-PL.po | 62 +-
redbot/cogs/trivia/locales/pt-BR.po | 62 +-
redbot/cogs/trivia/locales/pt-PT.po | 62 +-
redbot/cogs/trivia/locales/ro-RO.po | 281 ++++
redbot/cogs/trivia/locales/ru-RU.po | 170 +-
redbot/cogs/trivia/locales/sk-SK.po | 62 +-
redbot/cogs/trivia/locales/sv-SE.po | 62 +-
redbot/cogs/trivia/locales/tr-TR.po | 62 +-
redbot/cogs/trivia/locales/zh-CN.po | 62 +-
redbot/cogs/trivia/locales/zh-TW.po | 281 ++++
redbot/cogs/warnings/locales/ar-SA.po | 184 +-
redbot/cogs/warnings/locales/bg-BG.po | 184 +-
redbot/cogs/warnings/locales/cs-CZ.po | 233 +++
redbot/cogs/warnings/locales/da-DK.po | 184 +-
redbot/cogs/warnings/locales/de-DE.po | 252 ++-
redbot/cogs/warnings/locales/el-GR.po | 184 +-
redbot/cogs/warnings/locales/en-PT.po | 184 +-
redbot/cogs/warnings/locales/es-ES.po | 184 +-
redbot/cogs/warnings/locales/fi-FI.po | 184 +-
redbot/cogs/warnings/locales/fr-FR.po | 300 ++--
redbot/cogs/warnings/locales/hu-HU.po | 184 +-
redbot/cogs/warnings/locales/id-ID.po | 184 +-
redbot/cogs/warnings/locales/it-IT.po | 302 ++--
redbot/cogs/warnings/locales/ja-JP.po | 184 +-
redbot/cogs/warnings/locales/ko-KR.po | 184 +-
redbot/cogs/warnings/locales/lol-US.po | 184 +-
redbot/cogs/warnings/locales/nl-NL.po | 184 +-
redbot/cogs/warnings/locales/no-NO.po | 184 +-
redbot/cogs/warnings/locales/pl-PL.po | 184 +-
redbot/cogs/warnings/locales/pt-BR.po | 184 +-
redbot/cogs/warnings/locales/pt-PT.po | 184 +-
redbot/cogs/warnings/locales/ro-RO.po | 233 +++
redbot/cogs/warnings/locales/ru-RU.po | 286 ++--
redbot/cogs/warnings/locales/sk-SK.po | 184 +-
redbot/cogs/warnings/locales/sv-SE.po | 184 +-
redbot/cogs/warnings/locales/tr-TR.po | 184 +-
redbot/cogs/warnings/locales/zh-CN.po | 184 +-
redbot/cogs/warnings/locales/zh-TW.po | 233 +++
redbot/core/commands/locales/ar-SA.po | 41 +-
redbot/core/commands/locales/bg-BG.po | 41 +-
redbot/core/commands/locales/cs-CZ.po | 51 +
redbot/core/commands/locales/da-DK.po | 41 +-
redbot/core/commands/locales/de-DE.po | 45 +-
redbot/core/commands/locales/el-GR.po | 41 +-
redbot/core/commands/locales/en-PT.po | 41 +-
redbot/core/commands/locales/es-ES.po | 41 +-
redbot/core/commands/locales/fi-FI.po | 41 +-
redbot/core/commands/locales/fr-FR.po | 45 +-
redbot/core/commands/locales/hu-HU.po | 41 +-
redbot/core/commands/locales/id-ID.po | 41 +-
redbot/core/commands/locales/it-IT.po | 41 +-
redbot/core/commands/locales/ja-JP.po | 41 +-
redbot/core/commands/locales/ko-KR.po | 41 +-
redbot/core/commands/locales/lol-US.po | 41 +-
redbot/core/commands/locales/nl-NL.po | 45 +-
redbot/core/commands/locales/no-NO.po | 41 +-
redbot/core/commands/locales/pl-PL.po | 41 +-
redbot/core/commands/locales/pt-BR.po | 41 +-
redbot/core/commands/locales/pt-PT.po | 43 +-
redbot/core/commands/locales/ro-RO.po | 51 +
redbot/core/commands/locales/ru-RU.po | 45 +-
redbot/core/commands/locales/sk-SK.po | 41 +-
redbot/core/commands/locales/sv-SE.po | 41 +-
redbot/core/commands/locales/tr-TR.po | 41 +-
redbot/core/commands/locales/zh-CN.po | 41 +-
redbot/core/commands/locales/zh-TW.po | 51 +
redbot/core/locales/ar-SA.po | 1415 +++++++++-------
redbot/core/locales/bg-BG.po | 1274 ++++++++------
redbot/core/locales/cs-CZ.po | 1411 ++++++++++++++++
redbot/core/locales/da-DK.po | 1415 +++++++++-------
redbot/core/locales/de-DE.po | 1523 ++++++++++-------
redbot/core/locales/el-GR.po | 1415 +++++++++-------
redbot/core/locales/en-PT.po | 1274 ++++++++------
redbot/core/locales/es-ES.po | 1300 ++++++++------
redbot/core/locales/fi-FI.po | 1415 +++++++++-------
redbot/core/locales/fr-FR.po | 1661 ++++++++++--------
redbot/core/locales/hu-HU.po | 1322 +++++++++------
redbot/core/locales/id-ID.po | 1292 ++++++++------
redbot/core/locales/it-IT.po | 1858 ++++++++++++---------
redbot/core/locales/ja-JP.po | 1415 +++++++++-------
redbot/core/locales/ko-KR.po | 1295 ++++++++------
redbot/core/locales/lol-US.po | 1429 +++++++++-------
redbot/core/locales/nl-NL.po | 1354 ++++++++-------
redbot/core/locales/no-NO.po | 1292 ++++++++------
redbot/core/locales/pl-PL.po | 1476 +++++++++-------
redbot/core/locales/pt-BR.po | 1563 ++++++++++-------
redbot/core/locales/pt-PT.po | 1465 +++++++++-------
redbot/core/locales/ro-RO.po | 1411 ++++++++++++++++
redbot/core/locales/ru-RU.po | 1621 +++++++++---------
redbot/core/locales/sk-SK.po | 1415 +++++++++-------
redbot/core/locales/sv-SE.po | 1292 ++++++++------
redbot/core/locales/tr-TR.po | 1604 +++++++++---------
redbot/core/locales/zh-CN.po | 1273 ++++++++------
redbot/core/locales/zh-TW.po | 1411 ++++++++++++++++
redbot/core/utils/locales/ar-SA.po | 58 +-
redbot/core/utils/locales/bg-BG.po | 58 +-
redbot/core/utils/locales/cs-CZ.po | 70 +
redbot/core/utils/locales/da-DK.po | 58 +-
redbot/core/utils/locales/de-DE.po | 58 +-
redbot/core/utils/locales/el-GR.po | 58 +-
redbot/core/utils/locales/en-PT.po | 58 +-
redbot/core/utils/locales/es-ES.po | 58 +-
redbot/core/utils/locales/fi-FI.po | 58 +-
redbot/core/utils/locales/fr-FR.po | 58 +-
redbot/core/utils/locales/hu-HU.po | 58 +-
redbot/core/utils/locales/id-ID.po | 58 +-
redbot/core/utils/locales/it-IT.po | 60 +-
redbot/core/utils/locales/ja-JP.po | 58 +-
redbot/core/utils/locales/ko-KR.po | 58 +-
redbot/core/utils/locales/lol-US.po | 58 +-
redbot/core/utils/locales/nl-NL.po | 58 +-
redbot/core/utils/locales/no-NO.po | 58 +-
redbot/core/utils/locales/pl-PL.po | 58 +-
redbot/core/utils/locales/pt-BR.po | 58 +-
redbot/core/utils/locales/pt-PT.po | 58 +-
redbot/core/utils/locales/ro-RO.po | 70 +
redbot/core/utils/locales/ru-RU.po | 58 +-
redbot/core/utils/locales/sk-SK.po | 58 +-
redbot/core/utils/locales/sv-SE.po | 58 +-
redbot/core/utils/locales/tr-TR.po | 58 +-
redbot/core/utils/locales/zh-CN.po | 58 +-
redbot/core/utils/locales/zh-TW.po | 70 +
589 files changed, 95310 insertions(+), 65686 deletions(-)
create mode 100644 redbot/cogs/admin/locales/cs-CZ.po
create mode 100644 redbot/cogs/admin/locales/ro-RO.po
create mode 100644 redbot/cogs/admin/locales/zh-TW.po
create mode 100644 redbot/cogs/alias/locales/cs-CZ.po
create mode 100644 redbot/cogs/alias/locales/ro-RO.po
create mode 100644 redbot/cogs/alias/locales/zh-TW.po
create mode 100644 redbot/cogs/audio/locales/cs-CZ.po
create mode 100644 redbot/cogs/audio/locales/ro-RO.po
create mode 100644 redbot/cogs/audio/locales/zh-TW.po
create mode 100644 redbot/cogs/bank/locales/cs-CZ.po
create mode 100644 redbot/cogs/bank/locales/ro-RO.po
create mode 100644 redbot/cogs/bank/locales/zh-TW.po
create mode 100644 redbot/cogs/cleanup/locales/cs-CZ.po
create mode 100644 redbot/cogs/cleanup/locales/ro-RO.po
create mode 100644 redbot/cogs/cleanup/locales/zh-TW.po
create mode 100644 redbot/cogs/customcom/locales/cs-CZ.po
create mode 100644 redbot/cogs/customcom/locales/ro-RO.po
create mode 100644 redbot/cogs/customcom/locales/zh-TW.po
create mode 100644 redbot/cogs/downloader/locales/cs-CZ.po
create mode 100644 redbot/cogs/downloader/locales/ro-RO.po
create mode 100644 redbot/cogs/downloader/locales/zh-TW.po
create mode 100644 redbot/cogs/economy/locales/cs-CZ.po
create mode 100644 redbot/cogs/economy/locales/ro-RO.po
create mode 100644 redbot/cogs/economy/locales/zh-TW.po
create mode 100644 redbot/cogs/filter/locales/cs-CZ.po
create mode 100644 redbot/cogs/filter/locales/ro-RO.po
create mode 100644 redbot/cogs/filter/locales/zh-TW.po
create mode 100644 redbot/cogs/general/locales/cs-CZ.po
create mode 100644 redbot/cogs/general/locales/ro-RO.po
create mode 100644 redbot/cogs/general/locales/zh-TW.po
create mode 100644 redbot/cogs/image/locales/cs-CZ.po
create mode 100644 redbot/cogs/image/locales/ro-RO.po
create mode 100644 redbot/cogs/image/locales/zh-TW.po
create mode 100644 redbot/cogs/mod/locales/cs-CZ.po
create mode 100644 redbot/cogs/mod/locales/ro-RO.po
create mode 100644 redbot/cogs/mod/locales/zh-TW.po
create mode 100644 redbot/cogs/modlog/locales/cs-CZ.po
create mode 100644 redbot/cogs/modlog/locales/ro-RO.po
create mode 100644 redbot/cogs/modlog/locales/zh-TW.po
create mode 100644 redbot/cogs/permissions/locales/cs-CZ.po
create mode 100644 redbot/cogs/permissions/locales/ro-RO.po
create mode 100644 redbot/cogs/permissions/locales/zh-TW.po
create mode 100644 redbot/cogs/reports/locales/cs-CZ.po
create mode 100644 redbot/cogs/reports/locales/ro-RO.po
create mode 100644 redbot/cogs/reports/locales/zh-TW.po
create mode 100644 redbot/cogs/streams/locales/cs-CZ.po
create mode 100644 redbot/cogs/streams/locales/ro-RO.po
create mode 100644 redbot/cogs/streams/locales/zh-TW.po
create mode 100644 redbot/cogs/trivia/locales/cs-CZ.po
create mode 100644 redbot/cogs/trivia/locales/ro-RO.po
create mode 100644 redbot/cogs/trivia/locales/zh-TW.po
create mode 100644 redbot/cogs/warnings/locales/cs-CZ.po
create mode 100644 redbot/cogs/warnings/locales/ro-RO.po
create mode 100644 redbot/cogs/warnings/locales/zh-TW.po
create mode 100644 redbot/core/commands/locales/cs-CZ.po
create mode 100644 redbot/core/commands/locales/ro-RO.po
create mode 100644 redbot/core/commands/locales/zh-TW.po
create mode 100644 redbot/core/locales/cs-CZ.po
create mode 100644 redbot/core/locales/ro-RO.po
create mode 100644 redbot/core/locales/zh-TW.po
create mode 100644 redbot/core/utils/locales/cs-CZ.po
create mode 100644 redbot/core/utils/locales/ro-RO.po
create mode 100644 redbot/core/utils/locales/zh-TW.po
diff --git a/.travis.yml b/.travis.yml
index 66a386d16..11bc49b0a 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -50,7 +50,7 @@ jobs:
- echo "deb https://artifacts.crowdin.com/repo/deb/ /" | sudo tee -a /etc/apt/sources.list
- sudo apt-get update -qq
- sudo apt-get install -y crowdin
- - pip install redgettext==2.2
+ - pip install redgettext==3.1
deploy:
- provider: script
script: make upload_translations
diff --git a/redbot/cogs/admin/locales/ar-SA.po b/redbot/cogs/admin/locales/ar-SA.po
index b6ad903c0..5d00c2df2 100644
--- a/redbot/cogs/admin/locales/ar-SA.po
+++ b/redbot/cogs/admin/locales/ar-SA.po
@@ -1,14 +1,14 @@
msgid ""
msgstr ""
"Project-Id-Version: red-discordbot\n"
-"POT-Creation-Date: 2019-01-11 02:18+0000\n"
-"PO-Revision-Date: 2019-02-25 03:06\n"
-"Last-Translator: Kowlin \n"
+"POT-Creation-Date: 2019-07-05 22:33+0200\n"
+"PO-Revision-Date: 2019-07-06 16:12\n"
+"Last-Translator: Robert Jansen (Kowlin)\n"
"Language-Team: Arabic\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"Generated-By: redgettext 2.2\n"
+"Generated-By: redgettext 3.0\n"
"Plural-Forms: nplurals=6; plural=(n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5);\n"
"X-Generator: crowdin.com\n"
"X-Crowdin-Project: red-discordbot\n"
@@ -21,192 +21,154 @@ msgid "I attempted to do something that Discord denied me permissions for. Your
msgstr "حاولت القيام بشيء لا أملك تصريح من ديسكورد لفعله. فشل أمرك في إكمال نجاحه."
#: redbot/cogs/admin/admin.py:22
-msgid "I tried to add {role.name} to {member.display_name} but that role is higher than my highest role in the Discord hierarchy so I was unable to successfully add it. Please give me a higher role and try again."
-msgstr "حاولت إضافة {role.name} إلى {member.display_name} ولكن هذه الرتبة هي أعلى من رتبتي في قائمة الرتب في السيرفر, لذلك فشل الأمر. حاول رفع رتبتي والمحاولة مجدداً."
+msgid "I tried to {verb} {role.name} to {member.display_name} but that role is higher than my highest role in the Discord hierarchy so I was unable to successfully add it. Please give me a higher role and try again."
+msgstr ""
#: redbot/cogs/admin/admin.py:29
-msgid "I tried to add {role.name} to {member.display_name} but that role is higher than your highest role in the Discord hierarchy so I was unable to successfully add it. Please get a higher role and try again."
-msgstr "لقد حاولت إضافة {role.name} إلى {member.display_name} ولكن هذه الرتبة هي أعلى من رتبتك في قائمة الرتب في السيرفر, لذلك فشل الأمر. حاول رفع رتبتي والمحاولة مجدداً."
+msgid "I tried to {verb} {role.name} to {member.display_name} but that role is higher than your highest role in the Discord hierarchy so I was unable to successfully add it. Please get a higher role and try again."
+msgstr ""
#: redbot/cogs/admin/admin.py:36
+msgid "I tried to edit {role.name} but that role is higher than your highest role in the Discord hierarchy so I was unable to successfully add it. Please get a higher role and try again."
+msgstr ""
+
+#: redbot/cogs/admin/admin.py:43
msgid "I am already announcing something. If you would like to make a different announcement please use `{prefix}announce cancel` first."
msgstr "أنا بالفعل أُعلن شيئاً. إذا كنت ترغب في إصدار إعلان مختلف الرجاء إستخدام `{prefix}announce cancel` أولاً."
-#: redbot/cogs/admin/admin.py:46
+#: redbot/cogs/admin/admin.py:53
#, docstring
msgid "A collection of server administration utilities."
msgstr "مجموعة من أدوات إدارة السيرفر."
-#: redbot/cogs/admin/admin.py:112
+#: redbot/cogs/admin/admin.py:115 redbot/cogs/admin/admin.py:160
+msgid "add"
+msgstr ""
+
+#: redbot/cogs/admin/admin.py:121
msgid "I successfully added {role.name} to {member.display_name}"
msgstr "لقد قمت بنجاح بإضافة {role.name} إلى {member.display_name}"
-#: redbot/cogs/admin/admin.py:127
+#: redbot/cogs/admin/admin.py:132 redbot/cogs/admin/admin.py:180
+msgid "remove"
+msgstr ""
+
+#: redbot/cogs/admin/admin.py:138
msgid "I successfully removed {role.name} from {member.display_name}"
msgstr "لقد قمت بنجاح بإزالة {role.name} من {member.display_name}"
-#: redbot/cogs/admin/admin.py:138
+#: redbot/cogs/admin/admin.py:149
#, docstring
-msgid "Add a role to a user.\n\n"
-" If user is left blank it defaults to the author of the command.\n"
-" "
-msgstr " إذا تم ترك المستخدم فارغ, فسيكون إفتراضياً صاحب الأمر.\n"
-" "
+msgid "Add a role to a user.\\n\\n If user is left blank it defaults to the author of the command.\\n "
+msgstr ""
-#: redbot/cogs/admin/admin.py:156
+#: redbot/cogs/admin/admin.py:169
#, docstring
-msgid "Remove a role from a user.\n\n"
-" If user is left blank it defaults to the author of the command.\n"
-" "
-msgstr " إذا تم ترك المستخدم فارغ, فسيكون إفتراضياً صاحب الأمر.\n"
-" "
+msgid "Remove a role from a user.\\n\\n If user is left blank it defaults to the author of the command.\\n "
+msgstr ""
-#: redbot/cogs/admin/admin.py:172
+#: redbot/cogs/admin/admin.py:187
#, docstring
msgid "Edit role settings."
msgstr "تعديل إعدادات الرتبة."
-#: redbot/cogs/admin/admin.py:179
+#: redbot/cogs/admin/admin.py:194
#, docstring
-msgid "Edit a role's colour.\n\n"
-" Use double quotes if the role contains spaces.\n"
-" Colour must be in hexadecimal format.\n"
-" [Online colour picker](http://www.w3schools.com/colors/colors_picker.asp)\n\n"
-" Examples:\n"
-" `[p]editrole colour \"The Transistor\" #ff0000`\n"
-" `[p]editrole colour Test #ff9900`\n"
-" "
-msgstr " استخدم علامة اقتباس مزدوجة إذا كانت الرتبة تحتوي على مسافات.\n"
-" يجب أن يكون اللون بتنسيق سداسي عشري.\n"
-" موقع لإختيار الألوان (http://www.w3schools.com/colors/colors_picker.asp)\n\n"
-" أمثلة:\n"
-" `[p]editrole colour \"The Transistor\" #ff0000` \n"
-" `[p]editrole colour Test #ff9900`\n"
-" "
+msgid "Edit a role's colour.\\n\\n Use double quotes if the role contains spaces.\\n Colour must be in hexadecimal format.\\n [Online colour picker](http://www.w3schools.com/colors/colors_picker.asp)\\n\\n Examples:\\n `[p]editrole colour \\\"The Transistor\\\" #ff0000`\\n `[p]editrole colour Test #ff9900`\\n "
+msgstr ""
-#: redbot/cogs/admin/admin.py:202 redbot/cogs/admin/admin.py:230
+#: redbot/cogs/admin/admin.py:217 redbot/cogs/admin/admin.py:245
msgid "Done."
msgstr "تم."
-#: redbot/cogs/admin/admin.py:207
+#: redbot/cogs/admin/admin.py:222
#, docstring
-msgid "Edit a role's name.\n\n"
-" Use double quotes if the role or the name contain spaces.\n\n"
-" Examples:\n"
-" `[p]editrole name \"The Transistor\" Test`\n"
-" "
-msgstr "تعديل إسم الرتبة.\n\n"
-" استخدم علامة اقتباس مزدوجة إذا كانت الرتبة تحتوي على مسافات.\n\n"
-" أمثلة:\n"
-" `[p]editrole name \"The Transistor\" Test`\n"
-" "
+msgid "Edit a role's name.\\n\\n Use double quotes if the role or the name contain spaces.\\n\\n Examples:\\n `[p]editrole name \\\"The Transistor\\\" Test`\\n "
+msgstr ""
-#: redbot/cogs/admin/admin.py:235
+#: redbot/cogs/admin/admin.py:250
#, docstring
msgid "Announce a message to all servers the bot is in."
msgstr "الإعلان عن رسالة إلى جميع السيرفرات المتواجد بها البوت."
-#: redbot/cogs/admin/admin.py:242
+#: redbot/cogs/admin/admin.py:257
msgid "The announcement has begun."
msgstr "تم البدء في الإعلان."
-#: redbot/cogs/admin/admin.py:250
+#: redbot/cogs/admin/admin.py:265
#, docstring
msgid "Cancel a running announce."
msgstr "إلغاء إعلان جارٍ."
-#: redbot/cogs/admin/admin.py:256
+#: redbot/cogs/admin/admin.py:271
msgid "The current announcement has been cancelled."
msgstr "تم إلغاء الإعلان الحالي."
-#: redbot/cogs/admin/admin.py:262
+#: redbot/cogs/admin/admin.py:277
#, docstring
msgid "Change the channel to which the bot makes announcements."
msgstr "تعديل القناة التي يستخدمها البوت للإعلانات."
-#: redbot/cogs/admin/admin.py:268
+#: redbot/cogs/admin/admin.py:283
msgid "The announcement channel has been set to {channel.mention}"
msgstr "تم تحديث قناة الإعلانات إلى {channel.mention}"
-#: redbot/cogs/admin/admin.py:275
+#: redbot/cogs/admin/admin.py:290
#, docstring
msgid "Toggle announcements being enabled this server."
msgstr "تم تمكين الإعلانات في السيرفر."
-#: redbot/cogs/admin/admin.py:281
+#: redbot/cogs/admin/admin.py:296
msgid "The server {guild.name} will receive announcements."
msgstr "سيرفر {guild.name} سيتلقى إعلانات الآن."
-#: redbot/cogs/admin/admin.py:285
+#: redbot/cogs/admin/admin.py:300
msgid "The server {guild.name} will not receive announcements."
msgstr "سيرفر {guild.name} لن يتلقى إعلانات."
-#: redbot/cogs/admin/admin.py:311
+#: redbot/cogs/admin/admin.py:326
#, docstring
-msgid "Add a role to yourself.\n\n"
-" Server admins must have configured the role as user settable.\n\n"
-" NOTE: The role is case sensitive!\n"
-" "
-msgstr "إضافة رتبة لنفسك.\n\n"
-" يجب على أدمن السيرفر أولاً إضافة الرتبة.\n\n"
-" ملاحظة: الرتبة حساسة لحالة الأحرف!\n"
-" "
+msgid "Add a role to yourself.\\n\\n Server admins must have configured the role as user settable.\\n\\n NOTE: The role is case sensitive!\\n "
+msgstr ""
-#: redbot/cogs/admin/admin.py:322
+#: redbot/cogs/admin/admin.py:337
#, docstring
-msgid "Remove a selfrole from yourself.\n\n"
-" NOTE: The role is case sensitive!\n"
-" "
-msgstr "إزالة رتبة ذاتية من نفسك.\n\n"
-" ملاحظة: الرتبة حساسة لحالة الأحرف!\n"
-" "
+msgid "Remove a selfrole from yourself.\\n\\n NOTE: The role is case sensitive!\\n "
+msgstr ""
-#: redbot/cogs/admin/admin.py:332
+#: redbot/cogs/admin/admin.py:347
#, docstring
-msgid "Add a role to the list of available selfroles.\n\n"
-" NOTE: The role is case sensitive!\n"
-" "
-msgstr "إضافة رتبة إلى قائمة الرتب الذاتية.\n\n"
-" ملاحظة: الرتبة حساسة لحالة الأحرف!\n"
-" "
+msgid "Add a role to the list of available selfroles.\\n\\n NOTE: The role is case sensitive!\\n "
+msgstr ""
-#: redbot/cogs/admin/admin.py:340 redbot/cogs/admin/admin.py:352
+#: redbot/cogs/admin/admin.py:355 redbot/cogs/admin/admin.py:367
msgid "The selfroles list has been successfully modified."
msgstr "تم تحديث/تعديل قائمة الرتب الذاتية بنجاح."
-#: redbot/cogs/admin/admin.py:345
+#: redbot/cogs/admin/admin.py:360
#, docstring
-msgid "Remove a role from the list of available selfroles.\n\n"
-" NOTE: The role is case sensitive!\n"
-" "
-msgstr "إزالة الرتبة من قائمة الرتب الذاتية.\n\n"
-" ملاحظة: الرتبة حساسة لحالة الأحرف!\n"
-" "
+msgid "Remove a role from the list of available selfroles.\\n\\n NOTE: The role is case sensitive!\\n "
+msgstr ""
-#: redbot/cogs/admin/admin.py:356
+#: redbot/cogs/admin/admin.py:371
#, docstring
-msgid "\n"
-" Lists all available selfroles.\n"
-" "
-msgstr "\n"
-"قائمة بجميع الرتب الذاتية. "
+msgid "\\n Lists all available selfroles.\\n "
+msgstr ""
-#: redbot/cogs/admin/admin.py:362
-msgid "Available Selfroles:\n"
-"{selfroles}"
-msgstr "الرتب الذاتية المتوفرة:\n"
-"{selfroles}"
+#: redbot/cogs/admin/admin.py:377
+msgid "Available Selfroles:\\n{selfroles}"
+msgstr ""
-#: redbot/cogs/admin/admin.py:379
+#: redbot/cogs/admin/admin.py:394
#, docstring
msgid "Lock a bot to its current servers only."
msgstr "قفل البوت للسيرفر الحالي فقط."
-#: redbot/cogs/admin/admin.py:384
+#: redbot/cogs/admin/admin.py:399
msgid "The bot is no longer serverlocked."
msgstr "لم يعد البوت مقفول للسيرفر الحالي فقط."
-#: redbot/cogs/admin/admin.py:386
+#: redbot/cogs/admin/admin.py:401
msgid "The bot is now serverlocked."
msgstr "لقد تم قفل البوت للسيرفر الحالي فقط."
diff --git a/redbot/cogs/admin/locales/bg-BG.po b/redbot/cogs/admin/locales/bg-BG.po
index 90928144f..acd706665 100644
--- a/redbot/cogs/admin/locales/bg-BG.po
+++ b/redbot/cogs/admin/locales/bg-BG.po
@@ -1,14 +1,14 @@
msgid ""
msgstr ""
"Project-Id-Version: red-discordbot\n"
-"POT-Creation-Date: 2019-01-11 02:18+0000\n"
-"PO-Revision-Date: 2019-02-25 03:06\n"
-"Last-Translator: Kowlin \n"
+"POT-Creation-Date: 2019-07-05 22:33+0200\n"
+"PO-Revision-Date: 2019-07-06 16:12\n"
+"Last-Translator: Robert Jansen (Kowlin)\n"
"Language-Team: Bulgarian\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"Generated-By: redgettext 2.2\n"
+"Generated-By: redgettext 3.0\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: crowdin.com\n"
"X-Crowdin-Project: red-discordbot\n"
@@ -21,169 +21,154 @@ msgid "I attempted to do something that Discord denied me permissions for. Your
msgstr ""
#: redbot/cogs/admin/admin.py:22
-msgid "I tried to add {role.name} to {member.display_name} but that role is higher than my highest role in the Discord hierarchy so I was unable to successfully add it. Please give me a higher role and try again."
+msgid "I tried to {verb} {role.name} to {member.display_name} but that role is higher than my highest role in the Discord hierarchy so I was unable to successfully add it. Please give me a higher role and try again."
msgstr ""
#: redbot/cogs/admin/admin.py:29
-msgid "I tried to add {role.name} to {member.display_name} but that role is higher than your highest role in the Discord hierarchy so I was unable to successfully add it. Please get a higher role and try again."
+msgid "I tried to {verb} {role.name} to {member.display_name} but that role is higher than your highest role in the Discord hierarchy so I was unable to successfully add it. Please get a higher role and try again."
msgstr ""
#: redbot/cogs/admin/admin.py:36
+msgid "I tried to edit {role.name} but that role is higher than your highest role in the Discord hierarchy so I was unable to successfully add it. Please get a higher role and try again."
+msgstr ""
+
+#: redbot/cogs/admin/admin.py:43
msgid "I am already announcing something. If you would like to make a different announcement please use `{prefix}announce cancel` first."
msgstr ""
-#: redbot/cogs/admin/admin.py:46
+#: redbot/cogs/admin/admin.py:53
#, docstring
msgid "A collection of server administration utilities."
msgstr ""
-#: redbot/cogs/admin/admin.py:112
+#: redbot/cogs/admin/admin.py:115 redbot/cogs/admin/admin.py:160
+msgid "add"
+msgstr ""
+
+#: redbot/cogs/admin/admin.py:121
msgid "I successfully added {role.name} to {member.display_name}"
msgstr ""
-#: redbot/cogs/admin/admin.py:127
-msgid "I successfully removed {role.name} from {member.display_name}"
+#: redbot/cogs/admin/admin.py:132 redbot/cogs/admin/admin.py:180
+msgid "remove"
msgstr ""
#: redbot/cogs/admin/admin.py:138
-#, docstring
-msgid "Add a role to a user.\n\n"
-" If user is left blank it defaults to the author of the command.\n"
-" "
+msgid "I successfully removed {role.name} from {member.display_name}"
msgstr ""
-#: redbot/cogs/admin/admin.py:156
+#: redbot/cogs/admin/admin.py:149
#, docstring
-msgid "Remove a role from a user.\n\n"
-" If user is left blank it defaults to the author of the command.\n"
-" "
+msgid "Add a role to a user.\\n\\n If user is left blank it defaults to the author of the command.\\n "
msgstr ""
-#: redbot/cogs/admin/admin.py:172
+#: redbot/cogs/admin/admin.py:169
+#, docstring
+msgid "Remove a role from a user.\\n\\n If user is left blank it defaults to the author of the command.\\n "
+msgstr ""
+
+#: redbot/cogs/admin/admin.py:187
#, docstring
msgid "Edit role settings."
msgstr ""
-#: redbot/cogs/admin/admin.py:179
+#: redbot/cogs/admin/admin.py:194
#, docstring
-msgid "Edit a role's colour.\n\n"
-" Use double quotes if the role contains spaces.\n"
-" Colour must be in hexadecimal format.\n"
-" [Online colour picker](http://www.w3schools.com/colors/colors_picker.asp)\n\n"
-" Examples:\n"
-" `[p]editrole colour \"The Transistor\" #ff0000`\n"
-" `[p]editrole colour Test #ff9900`\n"
-" "
+msgid "Edit a role's colour.\\n\\n Use double quotes if the role contains spaces.\\n Colour must be in hexadecimal format.\\n [Online colour picker](http://www.w3schools.com/colors/colors_picker.asp)\\n\\n Examples:\\n `[p]editrole colour \\\"The Transistor\\\" #ff0000`\\n `[p]editrole colour Test #ff9900`\\n "
msgstr ""
-#: redbot/cogs/admin/admin.py:202 redbot/cogs/admin/admin.py:230
+#: redbot/cogs/admin/admin.py:217 redbot/cogs/admin/admin.py:245
msgid "Done."
-msgstr ""
+msgstr "Завършено."
-#: redbot/cogs/admin/admin.py:207
+#: redbot/cogs/admin/admin.py:222
#, docstring
-msgid "Edit a role's name.\n\n"
-" Use double quotes if the role or the name contain spaces.\n\n"
-" Examples:\n"
-" `[p]editrole name \"The Transistor\" Test`\n"
-" "
-msgstr ""
-
-#: redbot/cogs/admin/admin.py:235
-#, docstring
-msgid "Announce a message to all servers the bot is in."
-msgstr ""
-
-#: redbot/cogs/admin/admin.py:242
-msgid "The announcement has begun."
+msgid "Edit a role's name.\\n\\n Use double quotes if the role or the name contain spaces.\\n\\n Examples:\\n `[p]editrole name \\\"The Transistor\\\" Test`\\n "
msgstr ""
#: redbot/cogs/admin/admin.py:250
#, docstring
+msgid "Announce a message to all servers the bot is in."
+msgstr ""
+
+#: redbot/cogs/admin/admin.py:257
+msgid "The announcement has begun."
+msgstr ""
+
+#: redbot/cogs/admin/admin.py:265
+#, docstring
msgid "Cancel a running announce."
msgstr ""
-#: redbot/cogs/admin/admin.py:256
+#: redbot/cogs/admin/admin.py:271
msgid "The current announcement has been cancelled."
msgstr ""
-#: redbot/cogs/admin/admin.py:262
+#: redbot/cogs/admin/admin.py:277
#, docstring
msgid "Change the channel to which the bot makes announcements."
msgstr ""
-#: redbot/cogs/admin/admin.py:268
+#: redbot/cogs/admin/admin.py:283
msgid "The announcement channel has been set to {channel.mention}"
msgstr ""
-#: redbot/cogs/admin/admin.py:275
+#: redbot/cogs/admin/admin.py:290
#, docstring
msgid "Toggle announcements being enabled this server."
msgstr ""
-#: redbot/cogs/admin/admin.py:281
+#: redbot/cogs/admin/admin.py:296
msgid "The server {guild.name} will receive announcements."
msgstr ""
-#: redbot/cogs/admin/admin.py:285
+#: redbot/cogs/admin/admin.py:300
msgid "The server {guild.name} will not receive announcements."
msgstr ""
-#: redbot/cogs/admin/admin.py:311
+#: redbot/cogs/admin/admin.py:326
#, docstring
-msgid "Add a role to yourself.\n\n"
-" Server admins must have configured the role as user settable.\n\n"
-" NOTE: The role is case sensitive!\n"
-" "
+msgid "Add a role to yourself.\\n\\n Server admins must have configured the role as user settable.\\n\\n NOTE: The role is case sensitive!\\n "
msgstr ""
-#: redbot/cogs/admin/admin.py:322
+#: redbot/cogs/admin/admin.py:337
#, docstring
-msgid "Remove a selfrole from yourself.\n\n"
-" NOTE: The role is case sensitive!\n"
-" "
+msgid "Remove a selfrole from yourself.\\n\\n NOTE: The role is case sensitive!\\n "
msgstr ""
-#: redbot/cogs/admin/admin.py:332
+#: redbot/cogs/admin/admin.py:347
#, docstring
-msgid "Add a role to the list of available selfroles.\n\n"
-" NOTE: The role is case sensitive!\n"
-" "
+msgid "Add a role to the list of available selfroles.\\n\\n NOTE: The role is case sensitive!\\n "
msgstr ""
-#: redbot/cogs/admin/admin.py:340 redbot/cogs/admin/admin.py:352
+#: redbot/cogs/admin/admin.py:355 redbot/cogs/admin/admin.py:367
msgid "The selfroles list has been successfully modified."
msgstr ""
-#: redbot/cogs/admin/admin.py:345
+#: redbot/cogs/admin/admin.py:360
#, docstring
-msgid "Remove a role from the list of available selfroles.\n\n"
-" NOTE: The role is case sensitive!\n"
-" "
+msgid "Remove a role from the list of available selfroles.\\n\\n NOTE: The role is case sensitive!\\n "
msgstr ""
-#: redbot/cogs/admin/admin.py:356
+#: redbot/cogs/admin/admin.py:371
#, docstring
-msgid "\n"
-" Lists all available selfroles.\n"
-" "
+msgid "\\n Lists all available selfroles.\\n "
msgstr ""
-#: redbot/cogs/admin/admin.py:362
-msgid "Available Selfroles:\n"
-"{selfroles}"
+#: redbot/cogs/admin/admin.py:377
+msgid "Available Selfroles:\\n{selfroles}"
msgstr ""
-#: redbot/cogs/admin/admin.py:379
+#: redbot/cogs/admin/admin.py:394
#, docstring
msgid "Lock a bot to its current servers only."
msgstr ""
-#: redbot/cogs/admin/admin.py:384
+#: redbot/cogs/admin/admin.py:399
msgid "The bot is no longer serverlocked."
msgstr ""
-#: redbot/cogs/admin/admin.py:386
+#: redbot/cogs/admin/admin.py:401
msgid "The bot is now serverlocked."
msgstr ""
diff --git a/redbot/cogs/admin/locales/cs-CZ.po b/redbot/cogs/admin/locales/cs-CZ.po
new file mode 100644
index 000000000..c44c33354
--- /dev/null
+++ b/redbot/cogs/admin/locales/cs-CZ.po
@@ -0,0 +1,186 @@
+msgid ""
+msgstr ""
+"Project-Id-Version: red-discordbot\n"
+"POT-Creation-Date: 2019-07-05 22:33+0200\n"
+"PO-Revision-Date: 2019-07-14 02:15\n"
+"Last-Translator: Robert Jansen (Kowlin)\n"
+"Language-Team: Czech\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: redgettext 3.0\n"
+"Plural-Forms: nplurals=4; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 3;\n"
+"X-Generator: crowdin.com\n"
+"X-Crowdin-Project: red-discordbot\n"
+"X-Crowdin-Language: cs\n"
+"X-Crowdin-File: /cogs/admin/locales/messages.pot\n"
+"Language: cs_CZ\n"
+
+#: redbot/cogs/admin/admin.py:17
+msgid "I attempted to do something that Discord denied me permissions for. Your command failed to successfully complete."
+msgstr "Pokusil jsem se udělat něco, co mi Discord odepřel. Tvůj příkaz se nepodažilo úspěšně dokončit."
+
+#: redbot/cogs/admin/admin.py:22
+msgid "I tried to {verb} {role.name} to {member.display_name} but that role is higher than my highest role in the Discord hierarchy so I was unable to successfully add it. Please give me a higher role and try again."
+msgstr ""
+
+#: redbot/cogs/admin/admin.py:29
+msgid "I tried to {verb} {role.name} to {member.display_name} but that role is higher than your highest role in the Discord hierarchy so I was unable to successfully add it. Please get a higher role and try again."
+msgstr ""
+
+#: redbot/cogs/admin/admin.py:36
+msgid "I tried to edit {role.name} but that role is higher than your highest role in the Discord hierarchy so I was unable to successfully add it. Please get a higher role and try again."
+msgstr ""
+
+#: redbot/cogs/admin/admin.py:43
+msgid "I am already announcing something. If you would like to make a different announcement please use `{prefix}announce cancel` first."
+msgstr "Už něco oznamuji. Pokud bys rád provedl jiné oznámení, nejdříve použij `{prefix}announce cancel`."
+
+#: redbot/cogs/admin/admin.py:53
+#, docstring
+msgid "A collection of server administration utilities."
+msgstr "Kolekce nástrojů pro správu serveru."
+
+#: redbot/cogs/admin/admin.py:115 redbot/cogs/admin/admin.py:160
+msgid "add"
+msgstr ""
+
+#: redbot/cogs/admin/admin.py:121
+msgid "I successfully added {role.name} to {member.display_name}"
+msgstr "Úspěšně jsem přidal {role.name} k {member.display_name}"
+
+#: redbot/cogs/admin/admin.py:132 redbot/cogs/admin/admin.py:180
+msgid "remove"
+msgstr ""
+
+#: redbot/cogs/admin/admin.py:138
+msgid "I successfully removed {role.name} from {member.display_name}"
+msgstr "Úspěšně jsem odstranil {role.name} od {member.display_name}"
+
+#: redbot/cogs/admin/admin.py:149
+#, docstring
+msgid "Add a role to a user.\\n\\n If user is left blank it defaults to the author of the command.\\n "
+msgstr ""
+
+#: redbot/cogs/admin/admin.py:169
+#, docstring
+msgid "Remove a role from a user.\\n\\n If user is left blank it defaults to the author of the command.\\n "
+msgstr ""
+
+#: redbot/cogs/admin/admin.py:187
+#, docstring
+msgid "Edit role settings."
+msgstr "Upraví nastavení role."
+
+#: redbot/cogs/admin/admin.py:194
+#, docstring
+msgid "Edit a role's colour.\\n\\n Use double quotes if the role contains spaces.\\n Colour must be in hexadecimal format.\\n [Online colour picker](http://www.w3schools.com/colors/colors_picker.asp)\\n\\n Examples:\\n `[p]editrole colour \\\"The Transistor\\\" #ff0000`\\n `[p]editrole colour Test #ff9900`\\n "
+msgstr ""
+
+#: redbot/cogs/admin/admin.py:217 redbot/cogs/admin/admin.py:245
+msgid "Done."
+msgstr "Hotovo."
+
+#: redbot/cogs/admin/admin.py:222
+#, docstring
+msgid "Edit a role's name.\\n\\n Use double quotes if the role or the name contain spaces.\\n\\n Examples:\\n `[p]editrole name \\\"The Transistor\\\" Test`\\n "
+msgstr ""
+
+#: redbot/cogs/admin/admin.py:250
+#, docstring
+msgid "Announce a message to all servers the bot is in."
+msgstr ""
+
+#: redbot/cogs/admin/admin.py:257
+msgid "The announcement has begun."
+msgstr ""
+
+#: redbot/cogs/admin/admin.py:265
+#, docstring
+msgid "Cancel a running announce."
+msgstr ""
+
+#: redbot/cogs/admin/admin.py:271
+msgid "The current announcement has been cancelled."
+msgstr ""
+
+#: redbot/cogs/admin/admin.py:277
+#, docstring
+msgid "Change the channel to which the bot makes announcements."
+msgstr ""
+
+#: redbot/cogs/admin/admin.py:283
+msgid "The announcement channel has been set to {channel.mention}"
+msgstr ""
+
+#: redbot/cogs/admin/admin.py:290
+#, docstring
+msgid "Toggle announcements being enabled this server."
+msgstr ""
+
+#: redbot/cogs/admin/admin.py:296
+msgid "The server {guild.name} will receive announcements."
+msgstr ""
+
+#: redbot/cogs/admin/admin.py:300
+msgid "The server {guild.name} will not receive announcements."
+msgstr ""
+
+#: redbot/cogs/admin/admin.py:326
+#, docstring
+msgid "Add a role to yourself.\\n\\n Server admins must have configured the role as user settable.\\n\\n NOTE: The role is case sensitive!\\n "
+msgstr ""
+
+#: redbot/cogs/admin/admin.py:337
+#, docstring
+msgid "Remove a selfrole from yourself.\\n\\n NOTE: The role is case sensitive!\\n "
+msgstr ""
+
+#: redbot/cogs/admin/admin.py:347
+#, docstring
+msgid "Add a role to the list of available selfroles.\\n\\n NOTE: The role is case sensitive!\\n "
+msgstr ""
+
+#: redbot/cogs/admin/admin.py:355 redbot/cogs/admin/admin.py:367
+msgid "The selfroles list has been successfully modified."
+msgstr ""
+
+#: redbot/cogs/admin/admin.py:360
+#, docstring
+msgid "Remove a role from the list of available selfroles.\\n\\n NOTE: The role is case sensitive!\\n "
+msgstr ""
+
+#: redbot/cogs/admin/admin.py:371
+#, docstring
+msgid "\\n Lists all available selfroles.\\n "
+msgstr ""
+
+#: redbot/cogs/admin/admin.py:377
+msgid "Available Selfroles:\\n{selfroles}"
+msgstr ""
+
+#: redbot/cogs/admin/admin.py:394
+#, docstring
+msgid "Lock a bot to its current servers only."
+msgstr ""
+
+#: redbot/cogs/admin/admin.py:399
+msgid "The bot is no longer serverlocked."
+msgstr ""
+
+#: redbot/cogs/admin/admin.py:401
+msgid "The bot is now serverlocked."
+msgstr ""
+
+#: redbot/cogs/admin/announcer.py:70
+msgid "I could not announce to server: {server.id}"
+msgstr ""
+
+#: redbot/cogs/admin/converters.py:25
+msgid "The Admin cog is not loaded."
+msgstr ""
+
+#: redbot/cogs/admin/converters.py:34
+msgid "The provided role is not a valid selfrole."
+msgstr ""
+
diff --git a/redbot/cogs/admin/locales/da-DK.po b/redbot/cogs/admin/locales/da-DK.po
index b69bcc917..55068b9f3 100644
--- a/redbot/cogs/admin/locales/da-DK.po
+++ b/redbot/cogs/admin/locales/da-DK.po
@@ -1,14 +1,14 @@
msgid ""
msgstr ""
"Project-Id-Version: red-discordbot\n"
-"POT-Creation-Date: 2019-01-11 02:18+0000\n"
-"PO-Revision-Date: 2019-02-25 03:07\n"
-"Last-Translator: Kowlin \n"
+"POT-Creation-Date: 2019-07-05 22:33+0200\n"
+"PO-Revision-Date: 2019-07-06 16:12\n"
+"Last-Translator: Robert Jansen (Kowlin)\n"
"Language-Team: Danish\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"Generated-By: redgettext 2.2\n"
+"Generated-By: redgettext 3.0\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: crowdin.com\n"
"X-Crowdin-Project: red-discordbot\n"
@@ -21,169 +21,154 @@ msgid "I attempted to do something that Discord denied me permissions for. Your
msgstr ""
#: redbot/cogs/admin/admin.py:22
-msgid "I tried to add {role.name} to {member.display_name} but that role is higher than my highest role in the Discord hierarchy so I was unable to successfully add it. Please give me a higher role and try again."
+msgid "I tried to {verb} {role.name} to {member.display_name} but that role is higher than my highest role in the Discord hierarchy so I was unable to successfully add it. Please give me a higher role and try again."
msgstr ""
#: redbot/cogs/admin/admin.py:29
-msgid "I tried to add {role.name} to {member.display_name} but that role is higher than your highest role in the Discord hierarchy so I was unable to successfully add it. Please get a higher role and try again."
+msgid "I tried to {verb} {role.name} to {member.display_name} but that role is higher than your highest role in the Discord hierarchy so I was unable to successfully add it. Please get a higher role and try again."
msgstr ""
#: redbot/cogs/admin/admin.py:36
+msgid "I tried to edit {role.name} but that role is higher than your highest role in the Discord hierarchy so I was unable to successfully add it. Please get a higher role and try again."
+msgstr ""
+
+#: redbot/cogs/admin/admin.py:43
msgid "I am already announcing something. If you would like to make a different announcement please use `{prefix}announce cancel` first."
msgstr ""
-#: redbot/cogs/admin/admin.py:46
+#: redbot/cogs/admin/admin.py:53
#, docstring
msgid "A collection of server administration utilities."
msgstr ""
-#: redbot/cogs/admin/admin.py:112
+#: redbot/cogs/admin/admin.py:115 redbot/cogs/admin/admin.py:160
+msgid "add"
+msgstr ""
+
+#: redbot/cogs/admin/admin.py:121
msgid "I successfully added {role.name} to {member.display_name}"
msgstr ""
-#: redbot/cogs/admin/admin.py:127
-msgid "I successfully removed {role.name} from {member.display_name}"
+#: redbot/cogs/admin/admin.py:132 redbot/cogs/admin/admin.py:180
+msgid "remove"
msgstr ""
#: redbot/cogs/admin/admin.py:138
-#, docstring
-msgid "Add a role to a user.\n\n"
-" If user is left blank it defaults to the author of the command.\n"
-" "
+msgid "I successfully removed {role.name} from {member.display_name}"
msgstr ""
-#: redbot/cogs/admin/admin.py:156
+#: redbot/cogs/admin/admin.py:149
#, docstring
-msgid "Remove a role from a user.\n\n"
-" If user is left blank it defaults to the author of the command.\n"
-" "
+msgid "Add a role to a user.\\n\\n If user is left blank it defaults to the author of the command.\\n "
msgstr ""
-#: redbot/cogs/admin/admin.py:172
+#: redbot/cogs/admin/admin.py:169
+#, docstring
+msgid "Remove a role from a user.\\n\\n If user is left blank it defaults to the author of the command.\\n "
+msgstr ""
+
+#: redbot/cogs/admin/admin.py:187
#, docstring
msgid "Edit role settings."
msgstr ""
-#: redbot/cogs/admin/admin.py:179
+#: redbot/cogs/admin/admin.py:194
#, docstring
-msgid "Edit a role's colour.\n\n"
-" Use double quotes if the role contains spaces.\n"
-" Colour must be in hexadecimal format.\n"
-" [Online colour picker](http://www.w3schools.com/colors/colors_picker.asp)\n\n"
-" Examples:\n"
-" `[p]editrole colour \"The Transistor\" #ff0000`\n"
-" `[p]editrole colour Test #ff9900`\n"
-" "
+msgid "Edit a role's colour.\\n\\n Use double quotes if the role contains spaces.\\n Colour must be in hexadecimal format.\\n [Online colour picker](http://www.w3schools.com/colors/colors_picker.asp)\\n\\n Examples:\\n `[p]editrole colour \\\"The Transistor\\\" #ff0000`\\n `[p]editrole colour Test #ff9900`\\n "
msgstr ""
-#: redbot/cogs/admin/admin.py:202 redbot/cogs/admin/admin.py:230
+#: redbot/cogs/admin/admin.py:217 redbot/cogs/admin/admin.py:245
msgid "Done."
msgstr ""
-#: redbot/cogs/admin/admin.py:207
+#: redbot/cogs/admin/admin.py:222
#, docstring
-msgid "Edit a role's name.\n\n"
-" Use double quotes if the role or the name contain spaces.\n\n"
-" Examples:\n"
-" `[p]editrole name \"The Transistor\" Test`\n"
-" "
-msgstr ""
-
-#: redbot/cogs/admin/admin.py:235
-#, docstring
-msgid "Announce a message to all servers the bot is in."
-msgstr ""
-
-#: redbot/cogs/admin/admin.py:242
-msgid "The announcement has begun."
+msgid "Edit a role's name.\\n\\n Use double quotes if the role or the name contain spaces.\\n\\n Examples:\\n `[p]editrole name \\\"The Transistor\\\" Test`\\n "
msgstr ""
#: redbot/cogs/admin/admin.py:250
#, docstring
+msgid "Announce a message to all servers the bot is in."
+msgstr ""
+
+#: redbot/cogs/admin/admin.py:257
+msgid "The announcement has begun."
+msgstr ""
+
+#: redbot/cogs/admin/admin.py:265
+#, docstring
msgid "Cancel a running announce."
msgstr ""
-#: redbot/cogs/admin/admin.py:256
+#: redbot/cogs/admin/admin.py:271
msgid "The current announcement has been cancelled."
msgstr ""
-#: redbot/cogs/admin/admin.py:262
+#: redbot/cogs/admin/admin.py:277
#, docstring
msgid "Change the channel to which the bot makes announcements."
msgstr ""
-#: redbot/cogs/admin/admin.py:268
+#: redbot/cogs/admin/admin.py:283
msgid "The announcement channel has been set to {channel.mention}"
msgstr ""
-#: redbot/cogs/admin/admin.py:275
+#: redbot/cogs/admin/admin.py:290
#, docstring
msgid "Toggle announcements being enabled this server."
msgstr ""
-#: redbot/cogs/admin/admin.py:281
+#: redbot/cogs/admin/admin.py:296
msgid "The server {guild.name} will receive announcements."
msgstr ""
-#: redbot/cogs/admin/admin.py:285
+#: redbot/cogs/admin/admin.py:300
msgid "The server {guild.name} will not receive announcements."
msgstr ""
-#: redbot/cogs/admin/admin.py:311
+#: redbot/cogs/admin/admin.py:326
#, docstring
-msgid "Add a role to yourself.\n\n"
-" Server admins must have configured the role as user settable.\n\n"
-" NOTE: The role is case sensitive!\n"
-" "
+msgid "Add a role to yourself.\\n\\n Server admins must have configured the role as user settable.\\n\\n NOTE: The role is case sensitive!\\n "
msgstr ""
-#: redbot/cogs/admin/admin.py:322
+#: redbot/cogs/admin/admin.py:337
#, docstring
-msgid "Remove a selfrole from yourself.\n\n"
-" NOTE: The role is case sensitive!\n"
-" "
+msgid "Remove a selfrole from yourself.\\n\\n NOTE: The role is case sensitive!\\n "
msgstr ""
-#: redbot/cogs/admin/admin.py:332
+#: redbot/cogs/admin/admin.py:347
#, docstring
-msgid "Add a role to the list of available selfroles.\n\n"
-" NOTE: The role is case sensitive!\n"
-" "
+msgid "Add a role to the list of available selfroles.\\n\\n NOTE: The role is case sensitive!\\n "
msgstr ""
-#: redbot/cogs/admin/admin.py:340 redbot/cogs/admin/admin.py:352
+#: redbot/cogs/admin/admin.py:355 redbot/cogs/admin/admin.py:367
msgid "The selfroles list has been successfully modified."
msgstr ""
-#: redbot/cogs/admin/admin.py:345
+#: redbot/cogs/admin/admin.py:360
#, docstring
-msgid "Remove a role from the list of available selfroles.\n\n"
-" NOTE: The role is case sensitive!\n"
-" "
+msgid "Remove a role from the list of available selfroles.\\n\\n NOTE: The role is case sensitive!\\n "
msgstr ""
-#: redbot/cogs/admin/admin.py:356
+#: redbot/cogs/admin/admin.py:371
#, docstring
-msgid "\n"
-" Lists all available selfroles.\n"
-" "
+msgid "\\n Lists all available selfroles.\\n "
msgstr ""
-#: redbot/cogs/admin/admin.py:362
-msgid "Available Selfroles:\n"
-"{selfroles}"
+#: redbot/cogs/admin/admin.py:377
+msgid "Available Selfroles:\\n{selfroles}"
msgstr ""
-#: redbot/cogs/admin/admin.py:379
+#: redbot/cogs/admin/admin.py:394
#, docstring
msgid "Lock a bot to its current servers only."
msgstr ""
-#: redbot/cogs/admin/admin.py:384
+#: redbot/cogs/admin/admin.py:399
msgid "The bot is no longer serverlocked."
msgstr ""
-#: redbot/cogs/admin/admin.py:386
+#: redbot/cogs/admin/admin.py:401
msgid "The bot is now serverlocked."
msgstr ""
diff --git a/redbot/cogs/admin/locales/de-DE.po b/redbot/cogs/admin/locales/de-DE.po
index f07f5d486..486659d2d 100644
--- a/redbot/cogs/admin/locales/de-DE.po
+++ b/redbot/cogs/admin/locales/de-DE.po
@@ -1,14 +1,14 @@
msgid ""
msgstr ""
"Project-Id-Version: red-discordbot\n"
-"POT-Creation-Date: 2019-01-11 02:18+0000\n"
-"PO-Revision-Date: 2019-02-25 03:07\n"
-"Last-Translator: Kowlin \n"
+"POT-Creation-Date: 2019-07-05 22:33+0200\n"
+"PO-Revision-Date: 2019-07-06 16:12\n"
+"Last-Translator: Robert Jansen (Kowlin)\n"
"Language-Team: German\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"Generated-By: redgettext 2.2\n"
+"Generated-By: redgettext 3.0\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: crowdin.com\n"
"X-Crowdin-Project: red-discordbot\n"
@@ -21,194 +21,154 @@ msgid "I attempted to do something that Discord denied me permissions for. Your
msgstr "Ich habe versucht etwas zu tun, für das mir Discord die Befugnis verweigerte. Dein Befehl konnte nicht erfolgreich ausgeführt werden."
#: redbot/cogs/admin/admin.py:22
-msgid "I tried to add {role.name} to {member.display_name} but that role is higher than my highest role in the Discord hierarchy so I was unable to successfully add it. Please give me a higher role and try again."
-msgstr "Ich versuchte die Rolle {role.name} an {member.display_name} zu geben, aber die Rolle ist höher als meine höchste Rolle in der Discord Hierarchie, daher war es mir nicht möglich sie hinzuzufügen. Bitte gib mir eine höhere Rolle und versuche es erneut."
+msgid "I tried to {verb} {role.name} to {member.display_name} but that role is higher than my highest role in the Discord hierarchy so I was unable to successfully add it. Please give me a higher role and try again."
+msgstr "Ich habe versucht {member.display_name} er Rolle: {role.name} {verb}, aber diese Rolle hat höhere Rechte als ich. Also war es nicht möglich die Rolle erfolgreich hinzuzufügen. Bitte geb mir eine höhere Rolle und versuche es erneut."
#: redbot/cogs/admin/admin.py:29
-msgid "I tried to add {role.name} to {member.display_name} but that role is higher than your highest role in the Discord hierarchy so I was unable to successfully add it. Please get a higher role and try again."
-msgstr "Ich versuchte die Rolle {role.name} an {member.display_name} zu geben, aber die Rolle ist höher als deine höchste Rolle in der Discord Hierarchie, daher war es mir nicht möglich sie hinzuzufügen. Bitte gib dir selbst eine höhere Rolle und versuche es erneut."
+msgid "I tried to {verb} {role.name} to {member.display_name} but that role is higher than your highest role in the Discord hierarchy so I was unable to successfully add it. Please get a higher role and try again."
+msgstr "Ich habe versucht die Rolle {role.name} an {member.display_name} zu {verb}, aber die Rolle ist höher als meine Rolle in der Discord Hierarchie, daher war es mir nicht möglich sie hinzuzufügen. Bitte gib mir eine höhere Rolle und versuche es erneut."
#: redbot/cogs/admin/admin.py:36
+msgid "I tried to edit {role.name} but that role is higher than your highest role in the Discord hierarchy so I was unable to successfully add it. Please get a higher role and try again."
+msgstr "Ich habe versucht {role.name} zu bearbeiten, aber die Rolle ist höher als deine höhste Rolle im Discord. Also konnte ich dies nicht erfolgreich hinzufügen. Versuche es mit einer höheren Rolle erneut."
+
+#: redbot/cogs/admin/admin.py:43
msgid "I am already announcing something. If you would like to make a different announcement please use `{prefix}announce cancel` first."
msgstr "Ich kündige bereits etwas an. Wenn du eine andere Ankündigung machen willst, benutze bitte zuerst `{prefix}announce cancel`."
-#: redbot/cogs/admin/admin.py:46
+#: redbot/cogs/admin/admin.py:53
#, docstring
msgid "A collection of server administration utilities."
msgstr "Eine Sammlung von administrativen Server-Verwaltungsprogramme."
-#: redbot/cogs/admin/admin.py:112
+#: redbot/cogs/admin/admin.py:115 redbot/cogs/admin/admin.py:160
+msgid "add"
+msgstr "hinzuzufügen"
+
+#: redbot/cogs/admin/admin.py:121
msgid "I successfully added {role.name} to {member.display_name}"
msgstr "Ich habe erfolgreich {role.name} zu {member.display_name} hinzugefügt"
-#: redbot/cogs/admin/admin.py:127
+#: redbot/cogs/admin/admin.py:132 redbot/cogs/admin/admin.py:180
+msgid "remove"
+msgstr "entfernen"
+
+#: redbot/cogs/admin/admin.py:138
msgid "I successfully removed {role.name} from {member.display_name}"
msgstr "Ich habe erfolgreich {role.name} von {member.display_name} entfernt"
-#: redbot/cogs/admin/admin.py:138
+#: redbot/cogs/admin/admin.py:149
#, docstring
-msgid "Add a role to a user.\n\n"
-" If user is left blank it defaults to the author of the command.\n"
-" "
-msgstr "Gebe einem Benutzer ein Rolle.\n\n"
-" Wenn kein Benutzer angegeben wird, wird standardmäßig der Autor des Befehls gewählt.\n"
-" "
+msgid "Add a role to a user.\\n\\n If user is left blank it defaults to the author of the command.\\n "
+msgstr ""
-#: redbot/cogs/admin/admin.py:156
+#: redbot/cogs/admin/admin.py:169
#, docstring
-msgid "Remove a role from a user.\n\n"
-" If user is left blank it defaults to the author of the command.\n"
-" "
-msgstr "Entferne eine Rolle von einem Benutzer.\n\n"
-" Wenn kein Benutzer angegeben wird, wird standardmäßig der Autor des Befehls gewählt.\n"
-" "
+msgid "Remove a role from a user.\\n\\n If user is left blank it defaults to the author of the command.\\n "
+msgstr ""
-#: redbot/cogs/admin/admin.py:172
+#: redbot/cogs/admin/admin.py:187
#, docstring
msgid "Edit role settings."
msgstr "Bearbeiten der Rollen Einstellungen."
-#: redbot/cogs/admin/admin.py:179
+#: redbot/cogs/admin/admin.py:194
#, docstring
-msgid "Edit a role's colour.\n\n"
-" Use double quotes if the role contains spaces.\n"
-" Colour must be in hexadecimal format.\n"
-" [Online colour picker](http://www.w3schools.com/colors/colors_picker.asp)\n\n"
-" Examples:\n"
-" `[p]editrole colour \"The Transistor\" #ff0000`\n"
-" `[p]editrole colour Test #ff9900`\n"
-" "
-msgstr "Bearbeite die Farbe einer Rolle.\n\n"
-" Benutze Anführungszeichen wenn die Rolle ein Leerzeichen enthält.\n"
-" Die Farbe muss im Hexadezimal Format angegeben werden.\n"
-" [Online Farbwähler]()\n\n"
-" Beispiele:\n"
-" `[p]editrole colour \"The Transistor\" #ff0000`\n"
-" `[p]editrole colour Test #ff9900`\n"
-" "
+msgid "Edit a role's colour.\\n\\n Use double quotes if the role contains spaces.\\n Colour must be in hexadecimal format.\\n [Online colour picker](http://www.w3schools.com/colors/colors_picker.asp)\\n\\n Examples:\\n `[p]editrole colour \\\"The Transistor\\\" #ff0000`\\n `[p]editrole colour Test #ff9900`\\n "
+msgstr ""
-#: redbot/cogs/admin/admin.py:202 redbot/cogs/admin/admin.py:230
+#: redbot/cogs/admin/admin.py:217 redbot/cogs/admin/admin.py:245
msgid "Done."
msgstr "Erledigt."
-#: redbot/cogs/admin/admin.py:207
+#: redbot/cogs/admin/admin.py:222
#, docstring
-msgid "Edit a role's name.\n\n"
-" Use double quotes if the role or the name contain spaces.\n\n"
-" Examples:\n"
-" `[p]editrole name \"The Transistor\" Test`\n"
-" "
-msgstr "Bearbeite den Namen einer Rolle.\n\n"
-" Benutze Anführungszeichen wenn die Rolle Leerzeichen enthält.\n\n"
-" Beispiele:\n"
-" `[p]editrole name \"The Transistor\" Test`\n"
-" "
+msgid "Edit a role's name.\\n\\n Use double quotes if the role or the name contain spaces.\\n\\n Examples:\\n `[p]editrole name \\\"The Transistor\\\" Test`\\n "
+msgstr ""
-#: redbot/cogs/admin/admin.py:235
+#: redbot/cogs/admin/admin.py:250
#, docstring
msgid "Announce a message to all servers the bot is in."
msgstr "Mache eine Ankündigung auf allen Servern auf denen der Bot ist."
-#: redbot/cogs/admin/admin.py:242
+#: redbot/cogs/admin/admin.py:257
msgid "The announcement has begun."
msgstr "Die Ankündigung hat begonnen."
-#: redbot/cogs/admin/admin.py:250
+#: redbot/cogs/admin/admin.py:265
#, docstring
msgid "Cancel a running announce."
msgstr "Breche eine laufende Ankündigung ab."
-#: redbot/cogs/admin/admin.py:256
+#: redbot/cogs/admin/admin.py:271
msgid "The current announcement has been cancelled."
msgstr "Die aktuelle Ankündigung wurde abgebrochen."
-#: redbot/cogs/admin/admin.py:262
+#: redbot/cogs/admin/admin.py:277
#, docstring
msgid "Change the channel to which the bot makes announcements."
msgstr "Ändere den Kanal in dem der Bot Ankündigungen macht."
-#: redbot/cogs/admin/admin.py:268
+#: redbot/cogs/admin/admin.py:283
msgid "The announcement channel has been set to {channel.mention}"
msgstr "Der für Ankündigungen gewählte Kanal wurde festgelegt auf {channel.mention}"
-#: redbot/cogs/admin/admin.py:275
+#: redbot/cogs/admin/admin.py:290
#, docstring
msgid "Toggle announcements being enabled this server."
msgstr "Schaltet Ankündigungen auf diesem Server ein oder aus."
-#: redbot/cogs/admin/admin.py:281
+#: redbot/cogs/admin/admin.py:296
msgid "The server {guild.name} will receive announcements."
msgstr "Der Server {guild.name} wird Ankündigunen erhalten."
-#: redbot/cogs/admin/admin.py:285
+#: redbot/cogs/admin/admin.py:300
msgid "The server {guild.name} will not receive announcements."
msgstr "Der Server {guild.name} wird keine Ankündigunen erhalten."
-#: redbot/cogs/admin/admin.py:311
+#: redbot/cogs/admin/admin.py:326
#, docstring
-msgid "Add a role to yourself.\n\n"
-" Server admins must have configured the role as user settable.\n\n"
-" NOTE: The role is case sensitive!\n"
-" "
-msgstr "Gib dir selbst eine Rolle.\n\n"
-" Server Admins müssen die Rolle für Nutzer freigeben.\n\n"
-" HINWEIS: Die Rolle beachtet Groß- und Kleinschreibung!\n"
-" "
+msgid "Add a role to yourself.\\n\\n Server admins must have configured the role as user settable.\\n\\n NOTE: The role is case sensitive!\\n "
+msgstr ""
-#: redbot/cogs/admin/admin.py:322
+#: redbot/cogs/admin/admin.py:337
#, docstring
-msgid "Remove a selfrole from yourself.\n\n"
-" NOTE: The role is case sensitive!\n"
-" "
-msgstr "Entferne eine auswählbare Rolle von dir selbst.\n\n"
-" HINWEIS: Die Rolle beachtet Groß- und Kleinschreibung!\n"
-" "
+msgid "Remove a selfrole from yourself.\\n\\n NOTE: The role is case sensitive!\\n "
+msgstr ""
-#: redbot/cogs/admin/admin.py:332
+#: redbot/cogs/admin/admin.py:347
#, docstring
-msgid "Add a role to the list of available selfroles.\n\n"
-" NOTE: The role is case sensitive!\n"
-" "
-msgstr "Füge eine Rolle zur Liste der selbst auswählbaren Rollen hinzu.\n\n"
-" HINWEIS: Die Rolle beachtet Groß- und Kleinschreibung!\n"
-" "
+msgid "Add a role to the list of available selfroles.\\n\\n NOTE: The role is case sensitive!\\n "
+msgstr ""
-#: redbot/cogs/admin/admin.py:340 redbot/cogs/admin/admin.py:352
+#: redbot/cogs/admin/admin.py:355 redbot/cogs/admin/admin.py:367
msgid "The selfroles list has been successfully modified."
msgstr "Die Liste selbst auswählbarer Rollen wurde erfolgreich bearbeitet."
-#: redbot/cogs/admin/admin.py:345
+#: redbot/cogs/admin/admin.py:360
#, docstring
-msgid "Remove a role from the list of available selfroles.\n\n"
-" NOTE: The role is case sensitive!\n"
-" "
-msgstr "Entferne eine selbst auswählbare Rolle von der Liste für verfügbare Rollen.\n\n"
-" HINWEIS: Die Rolle beachtet Groß- und Kleinschreibung!\n"
-" "
+msgid "Remove a role from the list of available selfroles.\\n\\n NOTE: The role is case sensitive!\\n "
+msgstr ""
-#: redbot/cogs/admin/admin.py:356
+#: redbot/cogs/admin/admin.py:371
#, docstring
-msgid "\n"
-" Lists all available selfroles.\n"
-" "
-msgstr "\n"
-"Gibt eine Liste verfügbarer selbst auswählbarer Rollen aus. "
+msgid "\\n Lists all available selfroles.\\n "
+msgstr ""
-#: redbot/cogs/admin/admin.py:362
-msgid "Available Selfroles:\n"
-"{selfroles}"
-msgstr "Verfügbare selbst auswählbare Rollen: {selfroles}"
+#: redbot/cogs/admin/admin.py:377
+msgid "Available Selfroles:\\n{selfroles}"
+msgstr ""
-#: redbot/cogs/admin/admin.py:379
+#: redbot/cogs/admin/admin.py:394
#, docstring
msgid "Lock a bot to its current servers only."
msgstr "Sperrt den Bot neuen Servern beizutreten."
-#: redbot/cogs/admin/admin.py:384
+#: redbot/cogs/admin/admin.py:399
msgid "The bot is no longer serverlocked."
msgstr "Der Bot ist nicht länger gesperrt neuen Servern beizutreten."
-#: redbot/cogs/admin/admin.py:386
+#: redbot/cogs/admin/admin.py:401
msgid "The bot is now serverlocked."
msgstr "Der Bot ist jetzt gesperrt neuen Servern beizutreten."
diff --git a/redbot/cogs/admin/locales/el-GR.po b/redbot/cogs/admin/locales/el-GR.po
index 3766e63f0..1a913ff37 100644
--- a/redbot/cogs/admin/locales/el-GR.po
+++ b/redbot/cogs/admin/locales/el-GR.po
@@ -1,14 +1,14 @@
msgid ""
msgstr ""
"Project-Id-Version: red-discordbot\n"
-"POT-Creation-Date: 2019-01-11 02:18+0000\n"
-"PO-Revision-Date: 2019-02-25 03:07\n"
-"Last-Translator: Kowlin \n"
+"POT-Creation-Date: 2019-07-05 22:33+0200\n"
+"PO-Revision-Date: 2019-07-06 16:12\n"
+"Last-Translator: Robert Jansen (Kowlin)\n"
"Language-Team: Greek\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"Generated-By: redgettext 2.2\n"
+"Generated-By: redgettext 3.0\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: crowdin.com\n"
"X-Crowdin-Project: red-discordbot\n"
@@ -21,169 +21,154 @@ msgid "I attempted to do something that Discord denied me permissions for. Your
msgstr ""
#: redbot/cogs/admin/admin.py:22
-msgid "I tried to add {role.name} to {member.display_name} but that role is higher than my highest role in the Discord hierarchy so I was unable to successfully add it. Please give me a higher role and try again."
+msgid "I tried to {verb} {role.name} to {member.display_name} but that role is higher than my highest role in the Discord hierarchy so I was unable to successfully add it. Please give me a higher role and try again."
msgstr ""
#: redbot/cogs/admin/admin.py:29
-msgid "I tried to add {role.name} to {member.display_name} but that role is higher than your highest role in the Discord hierarchy so I was unable to successfully add it. Please get a higher role and try again."
+msgid "I tried to {verb} {role.name} to {member.display_name} but that role is higher than your highest role in the Discord hierarchy so I was unable to successfully add it. Please get a higher role and try again."
msgstr ""
#: redbot/cogs/admin/admin.py:36
+msgid "I tried to edit {role.name} but that role is higher than your highest role in the Discord hierarchy so I was unable to successfully add it. Please get a higher role and try again."
+msgstr ""
+
+#: redbot/cogs/admin/admin.py:43
msgid "I am already announcing something. If you would like to make a different announcement please use `{prefix}announce cancel` first."
msgstr ""
-#: redbot/cogs/admin/admin.py:46
+#: redbot/cogs/admin/admin.py:53
#, docstring
msgid "A collection of server administration utilities."
msgstr ""
-#: redbot/cogs/admin/admin.py:112
+#: redbot/cogs/admin/admin.py:115 redbot/cogs/admin/admin.py:160
+msgid "add"
+msgstr ""
+
+#: redbot/cogs/admin/admin.py:121
msgid "I successfully added {role.name} to {member.display_name}"
msgstr ""
-#: redbot/cogs/admin/admin.py:127
-msgid "I successfully removed {role.name} from {member.display_name}"
+#: redbot/cogs/admin/admin.py:132 redbot/cogs/admin/admin.py:180
+msgid "remove"
msgstr ""
#: redbot/cogs/admin/admin.py:138
-#, docstring
-msgid "Add a role to a user.\n\n"
-" If user is left blank it defaults to the author of the command.\n"
-" "
+msgid "I successfully removed {role.name} from {member.display_name}"
msgstr ""
-#: redbot/cogs/admin/admin.py:156
+#: redbot/cogs/admin/admin.py:149
#, docstring
-msgid "Remove a role from a user.\n\n"
-" If user is left blank it defaults to the author of the command.\n"
-" "
+msgid "Add a role to a user.\\n\\n If user is left blank it defaults to the author of the command.\\n "
msgstr ""
-#: redbot/cogs/admin/admin.py:172
+#: redbot/cogs/admin/admin.py:169
+#, docstring
+msgid "Remove a role from a user.\\n\\n If user is left blank it defaults to the author of the command.\\n "
+msgstr ""
+
+#: redbot/cogs/admin/admin.py:187
#, docstring
msgid "Edit role settings."
msgstr ""
-#: redbot/cogs/admin/admin.py:179
+#: redbot/cogs/admin/admin.py:194
#, docstring
-msgid "Edit a role's colour.\n\n"
-" Use double quotes if the role contains spaces.\n"
-" Colour must be in hexadecimal format.\n"
-" [Online colour picker](http://www.w3schools.com/colors/colors_picker.asp)\n\n"
-" Examples:\n"
-" `[p]editrole colour \"The Transistor\" #ff0000`\n"
-" `[p]editrole colour Test #ff9900`\n"
-" "
+msgid "Edit a role's colour.\\n\\n Use double quotes if the role contains spaces.\\n Colour must be in hexadecimal format.\\n [Online colour picker](http://www.w3schools.com/colors/colors_picker.asp)\\n\\n Examples:\\n `[p]editrole colour \\\"The Transistor\\\" #ff0000`\\n `[p]editrole colour Test #ff9900`\\n "
msgstr ""
-#: redbot/cogs/admin/admin.py:202 redbot/cogs/admin/admin.py:230
+#: redbot/cogs/admin/admin.py:217 redbot/cogs/admin/admin.py:245
msgid "Done."
msgstr ""
-#: redbot/cogs/admin/admin.py:207
+#: redbot/cogs/admin/admin.py:222
#, docstring
-msgid "Edit a role's name.\n\n"
-" Use double quotes if the role or the name contain spaces.\n\n"
-" Examples:\n"
-" `[p]editrole name \"The Transistor\" Test`\n"
-" "
-msgstr ""
-
-#: redbot/cogs/admin/admin.py:235
-#, docstring
-msgid "Announce a message to all servers the bot is in."
-msgstr ""
-
-#: redbot/cogs/admin/admin.py:242
-msgid "The announcement has begun."
+msgid "Edit a role's name.\\n\\n Use double quotes if the role or the name contain spaces.\\n\\n Examples:\\n `[p]editrole name \\\"The Transistor\\\" Test`\\n "
msgstr ""
#: redbot/cogs/admin/admin.py:250
#, docstring
+msgid "Announce a message to all servers the bot is in."
+msgstr ""
+
+#: redbot/cogs/admin/admin.py:257
+msgid "The announcement has begun."
+msgstr ""
+
+#: redbot/cogs/admin/admin.py:265
+#, docstring
msgid "Cancel a running announce."
msgstr ""
-#: redbot/cogs/admin/admin.py:256
+#: redbot/cogs/admin/admin.py:271
msgid "The current announcement has been cancelled."
msgstr ""
-#: redbot/cogs/admin/admin.py:262
+#: redbot/cogs/admin/admin.py:277
#, docstring
msgid "Change the channel to which the bot makes announcements."
msgstr ""
-#: redbot/cogs/admin/admin.py:268
+#: redbot/cogs/admin/admin.py:283
msgid "The announcement channel has been set to {channel.mention}"
msgstr ""
-#: redbot/cogs/admin/admin.py:275
+#: redbot/cogs/admin/admin.py:290
#, docstring
msgid "Toggle announcements being enabled this server."
msgstr ""
-#: redbot/cogs/admin/admin.py:281
+#: redbot/cogs/admin/admin.py:296
msgid "The server {guild.name} will receive announcements."
msgstr ""
-#: redbot/cogs/admin/admin.py:285
+#: redbot/cogs/admin/admin.py:300
msgid "The server {guild.name} will not receive announcements."
msgstr ""
-#: redbot/cogs/admin/admin.py:311
+#: redbot/cogs/admin/admin.py:326
#, docstring
-msgid "Add a role to yourself.\n\n"
-" Server admins must have configured the role as user settable.\n\n"
-" NOTE: The role is case sensitive!\n"
-" "
+msgid "Add a role to yourself.\\n\\n Server admins must have configured the role as user settable.\\n\\n NOTE: The role is case sensitive!\\n "
msgstr ""
-#: redbot/cogs/admin/admin.py:322
+#: redbot/cogs/admin/admin.py:337
#, docstring
-msgid "Remove a selfrole from yourself.\n\n"
-" NOTE: The role is case sensitive!\n"
-" "
+msgid "Remove a selfrole from yourself.\\n\\n NOTE: The role is case sensitive!\\n "
msgstr ""
-#: redbot/cogs/admin/admin.py:332
+#: redbot/cogs/admin/admin.py:347
#, docstring
-msgid "Add a role to the list of available selfroles.\n\n"
-" NOTE: The role is case sensitive!\n"
-" "
+msgid "Add a role to the list of available selfroles.\\n\\n NOTE: The role is case sensitive!\\n "
msgstr ""
-#: redbot/cogs/admin/admin.py:340 redbot/cogs/admin/admin.py:352
+#: redbot/cogs/admin/admin.py:355 redbot/cogs/admin/admin.py:367
msgid "The selfroles list has been successfully modified."
msgstr ""
-#: redbot/cogs/admin/admin.py:345
+#: redbot/cogs/admin/admin.py:360
#, docstring
-msgid "Remove a role from the list of available selfroles.\n\n"
-" NOTE: The role is case sensitive!\n"
-" "
+msgid "Remove a role from the list of available selfroles.\\n\\n NOTE: The role is case sensitive!\\n "
msgstr ""
-#: redbot/cogs/admin/admin.py:356
+#: redbot/cogs/admin/admin.py:371
#, docstring
-msgid "\n"
-" Lists all available selfroles.\n"
-" "
+msgid "\\n Lists all available selfroles.\\n "
msgstr ""
-#: redbot/cogs/admin/admin.py:362
-msgid "Available Selfroles:\n"
-"{selfroles}"
+#: redbot/cogs/admin/admin.py:377
+msgid "Available Selfroles:\\n{selfroles}"
msgstr ""
-#: redbot/cogs/admin/admin.py:379
+#: redbot/cogs/admin/admin.py:394
#, docstring
msgid "Lock a bot to its current servers only."
msgstr ""
-#: redbot/cogs/admin/admin.py:384
+#: redbot/cogs/admin/admin.py:399
msgid "The bot is no longer serverlocked."
msgstr ""
-#: redbot/cogs/admin/admin.py:386
+#: redbot/cogs/admin/admin.py:401
msgid "The bot is now serverlocked."
msgstr ""
diff --git a/redbot/cogs/admin/locales/en-PT.po b/redbot/cogs/admin/locales/en-PT.po
index 689ac1119..658118504 100644
--- a/redbot/cogs/admin/locales/en-PT.po
+++ b/redbot/cogs/admin/locales/en-PT.po
@@ -1,14 +1,14 @@
msgid ""
msgstr ""
"Project-Id-Version: red-discordbot\n"
-"POT-Creation-Date: 2019-01-11 02:18+0000\n"
-"PO-Revision-Date: 2019-02-25 03:08\n"
-"Last-Translator: Kowlin \n"
+"POT-Creation-Date: 2019-07-05 22:33+0200\n"
+"PO-Revision-Date: 2019-07-14 02:15\n"
+"Last-Translator: Robert Jansen (Kowlin)\n"
"Language-Team: Pirate English\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"Generated-By: redgettext 2.2\n"
+"Generated-By: redgettext 3.0\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: crowdin.com\n"
"X-Crowdin-Project: red-discordbot\n"
@@ -21,169 +21,154 @@ msgid "I attempted to do something that Discord denied me permissions for. Your
msgstr ""
#: redbot/cogs/admin/admin.py:22
-msgid "I tried to add {role.name} to {member.display_name} but that role is higher than my highest role in the Discord hierarchy so I was unable to successfully add it. Please give me a higher role and try again."
+msgid "I tried to {verb} {role.name} to {member.display_name} but that role is higher than my highest role in the Discord hierarchy so I was unable to successfully add it. Please give me a higher role and try again."
msgstr ""
#: redbot/cogs/admin/admin.py:29
-msgid "I tried to add {role.name} to {member.display_name} but that role is higher than your highest role in the Discord hierarchy so I was unable to successfully add it. Please get a higher role and try again."
+msgid "I tried to {verb} {role.name} to {member.display_name} but that role is higher than your highest role in the Discord hierarchy so I was unable to successfully add it. Please get a higher role and try again."
msgstr ""
#: redbot/cogs/admin/admin.py:36
+msgid "I tried to edit {role.name} but that role is higher than your highest role in the Discord hierarchy so I was unable to successfully add it. Please get a higher role and try again."
+msgstr ""
+
+#: redbot/cogs/admin/admin.py:43
msgid "I am already announcing something. If you would like to make a different announcement please use `{prefix}announce cancel` first."
msgstr ""
-#: redbot/cogs/admin/admin.py:46
+#: redbot/cogs/admin/admin.py:53
#, docstring
msgid "A collection of server administration utilities."
msgstr ""
-#: redbot/cogs/admin/admin.py:112
+#: redbot/cogs/admin/admin.py:115 redbot/cogs/admin/admin.py:160
+msgid "add"
+msgstr ""
+
+#: redbot/cogs/admin/admin.py:121
msgid "I successfully added {role.name} to {member.display_name}"
msgstr ""
-#: redbot/cogs/admin/admin.py:127
-msgid "I successfully removed {role.name} from {member.display_name}"
+#: redbot/cogs/admin/admin.py:132 redbot/cogs/admin/admin.py:180
+msgid "remove"
msgstr ""
#: redbot/cogs/admin/admin.py:138
-#, docstring
-msgid "Add a role to a user.\n\n"
-" If user is left blank it defaults to the author of the command.\n"
-" "
+msgid "I successfully removed {role.name} from {member.display_name}"
msgstr ""
-#: redbot/cogs/admin/admin.py:156
+#: redbot/cogs/admin/admin.py:149
#, docstring
-msgid "Remove a role from a user.\n\n"
-" If user is left blank it defaults to the author of the command.\n"
-" "
+msgid "Add a role to a user.\\n\\n If user is left blank it defaults to the author of the command.\\n "
msgstr ""
-#: redbot/cogs/admin/admin.py:172
+#: redbot/cogs/admin/admin.py:169
+#, docstring
+msgid "Remove a role from a user.\\n\\n If user is left blank it defaults to the author of the command.\\n "
+msgstr ""
+
+#: redbot/cogs/admin/admin.py:187
#, docstring
msgid "Edit role settings."
msgstr ""
-#: redbot/cogs/admin/admin.py:179
+#: redbot/cogs/admin/admin.py:194
#, docstring
-msgid "Edit a role's colour.\n\n"
-" Use double quotes if the role contains spaces.\n"
-" Colour must be in hexadecimal format.\n"
-" [Online colour picker](http://www.w3schools.com/colors/colors_picker.asp)\n\n"
-" Examples:\n"
-" `[p]editrole colour \"The Transistor\" #ff0000`\n"
-" `[p]editrole colour Test #ff9900`\n"
-" "
+msgid "Edit a role's colour.\\n\\n Use double quotes if the role contains spaces.\\n Colour must be in hexadecimal format.\\n [Online colour picker](http://www.w3schools.com/colors/colors_picker.asp)\\n\\n Examples:\\n `[p]editrole colour \\\"The Transistor\\\" #ff0000`\\n `[p]editrole colour Test #ff9900`\\n "
msgstr ""
-#: redbot/cogs/admin/admin.py:202 redbot/cogs/admin/admin.py:230
+#: redbot/cogs/admin/admin.py:217 redbot/cogs/admin/admin.py:245
msgid "Done."
-msgstr ""
+msgstr "Done."
-#: redbot/cogs/admin/admin.py:207
+#: redbot/cogs/admin/admin.py:222
#, docstring
-msgid "Edit a role's name.\n\n"
-" Use double quotes if the role or the name contain spaces.\n\n"
-" Examples:\n"
-" `[p]editrole name \"The Transistor\" Test`\n"
-" "
-msgstr ""
-
-#: redbot/cogs/admin/admin.py:235
-#, docstring
-msgid "Announce a message to all servers the bot is in."
-msgstr ""
-
-#: redbot/cogs/admin/admin.py:242
-msgid "The announcement has begun."
+msgid "Edit a role's name.\\n\\n Use double quotes if the role or the name contain spaces.\\n\\n Examples:\\n `[p]editrole name \\\"The Transistor\\\" Test`\\n "
msgstr ""
#: redbot/cogs/admin/admin.py:250
#, docstring
+msgid "Announce a message to all servers the bot is in."
+msgstr ""
+
+#: redbot/cogs/admin/admin.py:257
+msgid "The announcement has begun."
+msgstr ""
+
+#: redbot/cogs/admin/admin.py:265
+#, docstring
msgid "Cancel a running announce."
msgstr ""
-#: redbot/cogs/admin/admin.py:256
+#: redbot/cogs/admin/admin.py:271
msgid "The current announcement has been cancelled."
msgstr ""
-#: redbot/cogs/admin/admin.py:262
+#: redbot/cogs/admin/admin.py:277
#, docstring
msgid "Change the channel to which the bot makes announcements."
msgstr ""
-#: redbot/cogs/admin/admin.py:268
+#: redbot/cogs/admin/admin.py:283
msgid "The announcement channel has been set to {channel.mention}"
msgstr ""
-#: redbot/cogs/admin/admin.py:275
+#: redbot/cogs/admin/admin.py:290
#, docstring
msgid "Toggle announcements being enabled this server."
msgstr ""
-#: redbot/cogs/admin/admin.py:281
+#: redbot/cogs/admin/admin.py:296
msgid "The server {guild.name} will receive announcements."
msgstr ""
-#: redbot/cogs/admin/admin.py:285
+#: redbot/cogs/admin/admin.py:300
msgid "The server {guild.name} will not receive announcements."
msgstr ""
-#: redbot/cogs/admin/admin.py:311
+#: redbot/cogs/admin/admin.py:326
#, docstring
-msgid "Add a role to yourself.\n\n"
-" Server admins must have configured the role as user settable.\n\n"
-" NOTE: The role is case sensitive!\n"
-" "
+msgid "Add a role to yourself.\\n\\n Server admins must have configured the role as user settable.\\n\\n NOTE: The role is case sensitive!\\n "
msgstr ""
-#: redbot/cogs/admin/admin.py:322
+#: redbot/cogs/admin/admin.py:337
#, docstring
-msgid "Remove a selfrole from yourself.\n\n"
-" NOTE: The role is case sensitive!\n"
-" "
+msgid "Remove a selfrole from yourself.\\n\\n NOTE: The role is case sensitive!\\n "
msgstr ""
-#: redbot/cogs/admin/admin.py:332
+#: redbot/cogs/admin/admin.py:347
#, docstring
-msgid "Add a role to the list of available selfroles.\n\n"
-" NOTE: The role is case sensitive!\n"
-" "
+msgid "Add a role to the list of available selfroles.\\n\\n NOTE: The role is case sensitive!\\n "
msgstr ""
-#: redbot/cogs/admin/admin.py:340 redbot/cogs/admin/admin.py:352
+#: redbot/cogs/admin/admin.py:355 redbot/cogs/admin/admin.py:367
msgid "The selfroles list has been successfully modified."
msgstr ""
-#: redbot/cogs/admin/admin.py:345
+#: redbot/cogs/admin/admin.py:360
#, docstring
-msgid "Remove a role from the list of available selfroles.\n\n"
-" NOTE: The role is case sensitive!\n"
-" "
+msgid "Remove a role from the list of available selfroles.\\n\\n NOTE: The role is case sensitive!\\n "
msgstr ""
-#: redbot/cogs/admin/admin.py:356
+#: redbot/cogs/admin/admin.py:371
#, docstring
-msgid "\n"
-" Lists all available selfroles.\n"
-" "
+msgid "\\n Lists all available selfroles.\\n "
msgstr ""
-#: redbot/cogs/admin/admin.py:362
-msgid "Available Selfroles:\n"
-"{selfroles}"
+#: redbot/cogs/admin/admin.py:377
+msgid "Available Selfroles:\\n{selfroles}"
msgstr ""
-#: redbot/cogs/admin/admin.py:379
+#: redbot/cogs/admin/admin.py:394
#, docstring
msgid "Lock a bot to its current servers only."
msgstr ""
-#: redbot/cogs/admin/admin.py:384
+#: redbot/cogs/admin/admin.py:399
msgid "The bot is no longer serverlocked."
msgstr ""
-#: redbot/cogs/admin/admin.py:386
+#: redbot/cogs/admin/admin.py:401
msgid "The bot is now serverlocked."
msgstr ""
diff --git a/redbot/cogs/admin/locales/es-ES.po b/redbot/cogs/admin/locales/es-ES.po
index 5d169b6bb..d4c097747 100644
--- a/redbot/cogs/admin/locales/es-ES.po
+++ b/redbot/cogs/admin/locales/es-ES.po
@@ -1,14 +1,14 @@
msgid ""
msgstr ""
"Project-Id-Version: red-discordbot\n"
-"POT-Creation-Date: 2019-01-11 02:18+0000\n"
-"PO-Revision-Date: 2019-02-25 03:06\n"
-"Last-Translator: Kowlin \n"
+"POT-Creation-Date: 2019-07-05 22:33+0200\n"
+"PO-Revision-Date: 2019-07-14 02:14\n"
+"Last-Translator: Robert Jansen (Kowlin)\n"
"Language-Team: Spanish\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"Generated-By: redgettext 2.2\n"
+"Generated-By: redgettext 3.0\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: crowdin.com\n"
"X-Crowdin-Project: red-discordbot\n"
@@ -21,192 +21,166 @@ msgid "I attempted to do something that Discord denied me permissions for. Your
msgstr "Intenté hacer algo que Discord me ha negado el permiso. Su comando no se pudo completar."
#: redbot/cogs/admin/admin.py:22
-msgid "I tried to add {role.name} to {member.display_name} but that role is higher than my highest role in the Discord hierarchy so I was unable to successfully add it. Please give me a higher role and try again."
-msgstr "He intentado agregar {role.name} a {member.display_name} pero ese rol es más alto que mi rol en la jerarquía de Discord, por lo que no he podido añadirlo con éxito. Por favor dame un rol más alto y vuelva a intentarlo."
+msgid "I tried to {verb} {role.name} to {member.display_name} but that role is higher than my highest role in the Discord hierarchy so I was unable to successfully add it. Please give me a higher role and try again."
+msgstr "He intentado agregar {verb} {role.name} a {member.display_name} pero ese rol es más alto que mi rol en la jerarquía de Discord, por lo que no he podido añadirlo con éxito. Por favor dame un rol más alto y vuelva a intentarlo."
#: redbot/cogs/admin/admin.py:29
-msgid "I tried to add {role.name} to {member.display_name} but that role is higher than your highest role in the Discord hierarchy so I was unable to successfully add it. Please get a higher role and try again."
-msgstr ""
+msgid "I tried to {verb} {role.name} to {member.display_name} but that role is higher than your highest role in the Discord hierarchy so I was unable to successfully add it. Please get a higher role and try again."
+msgstr "He intentado agregar {verb} {role.name} a {member.display_name} pero ese rol es más alto que mi rol en la jerarquía de Discord, por lo que no he podido añadirlo con éxito. Por favor dame un rol más alto y vuelva a intentarlo."
#: redbot/cogs/admin/admin.py:36
-msgid "I am already announcing something. If you would like to make a different announcement please use `{prefix}announce cancel` first."
-msgstr ""
+msgid "I tried to edit {role.name} but that role is higher than your highest role in the Discord hierarchy so I was unable to successfully add it. Please get a higher role and try again."
+msgstr "He intentado agregar {role.name} a pero ese rol es más alto que mi rol en la jerarquía de Discord, por lo que no he podido añadirlo con éxito. Por favor dame un rol más alto y vuelva a intentarlo."
-#: redbot/cogs/admin/admin.py:46
+#: redbot/cogs/admin/admin.py:43
+msgid "I am already announcing something. If you would like to make a different announcement please use `{prefix}announce cancel` first."
+msgstr "Ya estoy anunciando algo. Si quieres hacer un anuncio diferente, por favor usa `{prefix}announce cancel` primero."
+
+#: redbot/cogs/admin/admin.py:53
#, docstring
msgid "A collection of server administration utilities."
-msgstr ""
+msgstr "Una colección de utilidades de administración de servidores."
-#: redbot/cogs/admin/admin.py:112
+#: redbot/cogs/admin/admin.py:115 redbot/cogs/admin/admin.py:160
+msgid "add"
+msgstr "añadir"
+
+#: redbot/cogs/admin/admin.py:121
msgid "I successfully added {role.name} to {member.display_name}"
msgstr "He añadido con éxito {role.name} a {member.display_name}"
-#: redbot/cogs/admin/admin.py:127
+#: redbot/cogs/admin/admin.py:132 redbot/cogs/admin/admin.py:180
+msgid "remove"
+msgstr "eliminar"
+
+#: redbot/cogs/admin/admin.py:138
msgid "I successfully removed {role.name} from {member.display_name}"
msgstr "He retirado con éxito {role.name} de {member.display_name}"
-#: redbot/cogs/admin/admin.py:138
+#: redbot/cogs/admin/admin.py:149
#, docstring
-msgid "Add a role to a user.\n\n"
-" If user is left blank it defaults to the author of the command.\n"
-" "
-msgstr ""
+msgid "Add a role to a user.\\n\\n If user is left blank it defaults to the author of the command.\\n "
+msgstr "Añadir un rol a un usuario.\\n\\n Si el usuario se deja en blanco, por defecto se convierte en autor del comando.\\n "
-#: redbot/cogs/admin/admin.py:156
+#: redbot/cogs/admin/admin.py:169
#, docstring
-msgid "Remove a role from a user.\n\n"
-" If user is left blank it defaults to the author of the command.\n"
-" "
-msgstr ""
+msgid "Remove a role from a user.\\n\\n If user is left blank it defaults to the author of the command.\\n "
+msgstr "Eliminar un rol de un usuario.\\n\\n Si el usuario se deja en blanco, por defecto se convierte en autor del comando.\\n "
-#: redbot/cogs/admin/admin.py:172
+#: redbot/cogs/admin/admin.py:187
#, docstring
msgid "Edit role settings."
msgstr "Editar configuración de rol."
-#: redbot/cogs/admin/admin.py:179
+#: redbot/cogs/admin/admin.py:194
#, docstring
-msgid "Edit a role's colour.\n\n"
-" Use double quotes if the role contains spaces.\n"
-" Colour must be in hexadecimal format.\n"
-" [Online colour picker](http://www.w3schools.com/colors/colors_picker.asp)\n\n"
-" Examples:\n"
-" `[p]editrole colour \"The Transistor\" #ff0000`\n"
-" `[p]editrole colour Test #ff9900`\n"
-" "
-msgstr "Editar el color de un rol.\n\n"
-" Usa comillas dobles si el rol contiene espacios.\n"
-" El color debe estar en formato hexadecimal.\n"
-" [Selector de color En-Linea](http://www.w3schools.com/colors/colors_picker.asp)\n\n"
-" Examples:\n"
-" `[p]editrole colour \"El Transistor\" #ff0000`\n"
-" `[p]editrole colour Test #ff9900`\n"
-" "
+msgid "Edit a role's colour.\\n\\n Use double quotes if the role contains spaces.\\n Colour must be in hexadecimal format.\\n [Online colour picker](http://www.w3schools.com/colors/colors_picker.asp)\\n\\n Examples:\\n `[p]editrole colour \\\"The Transistor\\\" #ff0000`\\n `[p]editrole colour Test #ff9900`\\n "
+msgstr ""
-#: redbot/cogs/admin/admin.py:202 redbot/cogs/admin/admin.py:230
+#: redbot/cogs/admin/admin.py:217 redbot/cogs/admin/admin.py:245
msgid "Done."
msgstr "Listo."
-#: redbot/cogs/admin/admin.py:207
+#: redbot/cogs/admin/admin.py:222
#, docstring
-msgid "Edit a role's name.\n\n"
-" Use double quotes if the role or the name contain spaces.\n\n"
-" Examples:\n"
-" `[p]editrole name \"The Transistor\" Test`\n"
-" "
-msgstr "Editar el nombre de un rol.\n\n"
-" Usa dobles comillas si el rol o el nombre contiene espacios.\n\n"
-" Ejemplos:\n"
-" `[p]editrole name \"El Transistor\" Test`\n"
-" "
-
-#: redbot/cogs/admin/admin.py:235
-#, docstring
-msgid "Announce a message to all servers the bot is in."
-msgstr "Anunciar un mensaje a todos los servidores en que el bot está."
-
-#: redbot/cogs/admin/admin.py:242
-msgid "The announcement has begun."
+msgid "Edit a role's name.\\n\\n Use double quotes if the role or the name contain spaces.\\n\\n Examples:\\n `[p]editrole name \\\"The Transistor\\\" Test`\\n "
msgstr ""
#: redbot/cogs/admin/admin.py:250
#, docstring
+msgid "Announce a message to all servers the bot is in."
+msgstr "Anunciar un mensaje a todos los servidores en que el bot está."
+
+#: redbot/cogs/admin/admin.py:257
+msgid "The announcement has begun."
+msgstr ""
+
+#: redbot/cogs/admin/admin.py:265
+#, docstring
msgid "Cancel a running announce."
msgstr ""
-#: redbot/cogs/admin/admin.py:256
+#: redbot/cogs/admin/admin.py:271
msgid "The current announcement has been cancelled."
msgstr ""
-#: redbot/cogs/admin/admin.py:262
+#: redbot/cogs/admin/admin.py:277
#, docstring
msgid "Change the channel to which the bot makes announcements."
msgstr ""
-#: redbot/cogs/admin/admin.py:268
+#: redbot/cogs/admin/admin.py:283
msgid "The announcement channel has been set to {channel.mention}"
msgstr ""
-#: redbot/cogs/admin/admin.py:275
+#: redbot/cogs/admin/admin.py:290
#, docstring
msgid "Toggle announcements being enabled this server."
msgstr ""
-#: redbot/cogs/admin/admin.py:281
+#: redbot/cogs/admin/admin.py:296
msgid "The server {guild.name} will receive announcements."
msgstr ""
-#: redbot/cogs/admin/admin.py:285
+#: redbot/cogs/admin/admin.py:300
msgid "The server {guild.name} will not receive announcements."
msgstr ""
-#: redbot/cogs/admin/admin.py:311
+#: redbot/cogs/admin/admin.py:326
#, docstring
-msgid "Add a role to yourself.\n\n"
-" Server admins must have configured the role as user settable.\n\n"
-" NOTE: The role is case sensitive!\n"
-" "
+msgid "Add a role to yourself.\\n\\n Server admins must have configured the role as user settable.\\n\\n NOTE: The role is case sensitive!\\n "
msgstr ""
-#: redbot/cogs/admin/admin.py:322
+#: redbot/cogs/admin/admin.py:337
#, docstring
-msgid "Remove a selfrole from yourself.\n\n"
-" NOTE: The role is case sensitive!\n"
-" "
+msgid "Remove a selfrole from yourself.\\n\\n NOTE: The role is case sensitive!\\n "
msgstr ""
-#: redbot/cogs/admin/admin.py:332
+#: redbot/cogs/admin/admin.py:347
#, docstring
-msgid "Add a role to the list of available selfroles.\n\n"
-" NOTE: The role is case sensitive!\n"
-" "
+msgid "Add a role to the list of available selfroles.\\n\\n NOTE: The role is case sensitive!\\n "
msgstr ""
-#: redbot/cogs/admin/admin.py:340 redbot/cogs/admin/admin.py:352
+#: redbot/cogs/admin/admin.py:355 redbot/cogs/admin/admin.py:367
msgid "The selfroles list has been successfully modified."
msgstr ""
-#: redbot/cogs/admin/admin.py:345
+#: redbot/cogs/admin/admin.py:360
#, docstring
-msgid "Remove a role from the list of available selfroles.\n\n"
-" NOTE: The role is case sensitive!\n"
-" "
+msgid "Remove a role from the list of available selfroles.\\n\\n NOTE: The role is case sensitive!\\n "
msgstr ""
-#: redbot/cogs/admin/admin.py:356
+#: redbot/cogs/admin/admin.py:371
#, docstring
-msgid "\n"
-" Lists all available selfroles.\n"
-" "
+msgid "\\n Lists all available selfroles.\\n "
msgstr ""
-#: redbot/cogs/admin/admin.py:362
-msgid "Available Selfroles:\n"
-"{selfroles}"
+#: redbot/cogs/admin/admin.py:377
+msgid "Available Selfroles:\\n{selfroles}"
msgstr ""
-#: redbot/cogs/admin/admin.py:379
+#: redbot/cogs/admin/admin.py:394
#, docstring
msgid "Lock a bot to its current servers only."
msgstr ""
-#: redbot/cogs/admin/admin.py:384
+#: redbot/cogs/admin/admin.py:399
msgid "The bot is no longer serverlocked."
msgstr ""
-#: redbot/cogs/admin/admin.py:386
+#: redbot/cogs/admin/admin.py:401
msgid "The bot is now serverlocked."
-msgstr ""
+msgstr "El bot está bloqueado por el servidor."
#: redbot/cogs/admin/announcer.py:70
msgid "I could not announce to server: {server.id}"
-msgstr ""
+msgstr "No pude anunciar en servidor: {server.id}"
#: redbot/cogs/admin/converters.py:25
msgid "The Admin cog is not loaded."
-msgstr ""
+msgstr "El cog Admin no está cargado."
#: redbot/cogs/admin/converters.py:34
msgid "The provided role is not a valid selfrole."
-msgstr ""
+msgstr "El rol proporcionado no es un selfrole válido."
diff --git a/redbot/cogs/admin/locales/fi-FI.po b/redbot/cogs/admin/locales/fi-FI.po
index d6eddf479..179bdf45b 100644
--- a/redbot/cogs/admin/locales/fi-FI.po
+++ b/redbot/cogs/admin/locales/fi-FI.po
@@ -1,14 +1,14 @@
msgid ""
msgstr ""
"Project-Id-Version: red-discordbot\n"
-"POT-Creation-Date: 2019-01-11 02:18+0000\n"
-"PO-Revision-Date: 2019-02-25 03:07\n"
-"Last-Translator: Kowlin \n"
+"POT-Creation-Date: 2019-07-05 22:33+0200\n"
+"PO-Revision-Date: 2019-07-14 02:15\n"
+"Last-Translator: Robert Jansen (Kowlin)\n"
"Language-Team: Finnish\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"Generated-By: redgettext 2.2\n"
+"Generated-By: redgettext 3.0\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: crowdin.com\n"
"X-Crowdin-Project: red-discordbot\n"
@@ -18,172 +18,157 @@ msgstr ""
#: redbot/cogs/admin/admin.py:17
msgid "I attempted to do something that Discord denied me permissions for. Your command failed to successfully complete."
-msgstr ""
+msgstr "Yritin tehdä jotain, jonka Discord kielsi minulle luvat. Komento epäonnistui onnistuneesti."
#: redbot/cogs/admin/admin.py:22
-msgid "I tried to add {role.name} to {member.display_name} but that role is higher than my highest role in the Discord hierarchy so I was unable to successfully add it. Please give me a higher role and try again."
-msgstr ""
+msgid "I tried to {verb} {role.name} to {member.display_name} but that role is higher than my highest role in the Discord hierarchy so I was unable to successfully add it. Please give me a higher role and try again."
+msgstr "Yritin {verb} {role.name} kohtaan {member.display_name}, mutta tämä rooli on suurempi kuin korkein roolini Discord-hierarkiassa, joten en voinut lisätä sitä onnistuneesti. Anna minulle suurempi rooli ja yritä uudelleen."
#: redbot/cogs/admin/admin.py:29
-msgid "I tried to add {role.name} to {member.display_name} but that role is higher than your highest role in the Discord hierarchy so I was unable to successfully add it. Please get a higher role and try again."
-msgstr ""
+msgid "I tried to {verb} {role.name} to {member.display_name} but that role is higher than your highest role in the Discord hierarchy so I was unable to successfully add it. Please get a higher role and try again."
+msgstr "Yritin {verb} {role.name} kohtaan {member.display_name}, mutta tämä rooli on korkeampi kuin korkein rooli Discord-hierarkiassa, joten en voinut lisätä sitä onnistuneesti. Hanki suurempi rooli ja yritä uudelleen."
#: redbot/cogs/admin/admin.py:36
-msgid "I am already announcing something. If you would like to make a different announcement please use `{prefix}announce cancel` first."
-msgstr ""
+msgid "I tried to edit {role.name} but that role is higher than your highest role in the Discord hierarchy so I was unable to successfully add it. Please get a higher role and try again."
+msgstr "Yritin muokata {role.name}, mutta tämä rooli on korkeampi kuin korkein rooli Discord-hierarkiassa, joten en voinut lisätä sitä onnistuneesti. Hanki suurempi rooli ja yritä uudelleen."
-#: redbot/cogs/admin/admin.py:46
+#: redbot/cogs/admin/admin.py:43
+msgid "I am already announcing something. If you would like to make a different announcement please use `{prefix}announce cancel` first."
+msgstr "Olen jo ilmoittanut jotain. Jos haluat tehdä toisen ilmoituksen, käytä ensin \"{prefix} announce cancel\"."
+
+#: redbot/cogs/admin/admin.py:53
#, docstring
msgid "A collection of server administration utilities."
-msgstr ""
+msgstr "Kokoelma palvelinhallintaohjelmia."
-#: redbot/cogs/admin/admin.py:112
+#: redbot/cogs/admin/admin.py:115 redbot/cogs/admin/admin.py:160
+msgid "add"
+msgstr "lisätä"
+
+#: redbot/cogs/admin/admin.py:121
msgid "I successfully added {role.name} to {member.display_name}"
-msgstr ""
+msgstr "Lisäsin {role.name} onnistuneesti {member.display_name}"
-#: redbot/cogs/admin/admin.py:127
-msgid "I successfully removed {role.name} from {member.display_name}"
-msgstr ""
+#: redbot/cogs/admin/admin.py:132 redbot/cogs/admin/admin.py:180
+msgid "remove"
+msgstr "poistaa"
#: redbot/cogs/admin/admin.py:138
+msgid "I successfully removed {role.name} from {member.display_name}"
+msgstr "Olen poistanut {role.name} onnistuneesti {member.display_name}"
+
+#: redbot/cogs/admin/admin.py:149
#, docstring
-msgid "Add a role to a user.\n\n"
-" If user is left blank it defaults to the author of the command.\n"
-" "
+msgid "Add a role to a user.\\n\\n If user is left blank it defaults to the author of the command.\\n "
msgstr ""
-#: redbot/cogs/admin/admin.py:156
+#: redbot/cogs/admin/admin.py:169
#, docstring
-msgid "Remove a role from a user.\n\n"
-" If user is left blank it defaults to the author of the command.\n"
-" "
+msgid "Remove a role from a user.\\n\\n If user is left blank it defaults to the author of the command.\\n "
msgstr ""
-#: redbot/cogs/admin/admin.py:172
+#: redbot/cogs/admin/admin.py:187
#, docstring
msgid "Edit role settings."
-msgstr ""
+msgstr "Muokkaa rooliasetuksia."
-#: redbot/cogs/admin/admin.py:179
+#: redbot/cogs/admin/admin.py:194
#, docstring
-msgid "Edit a role's colour.\n\n"
-" Use double quotes if the role contains spaces.\n"
-" Colour must be in hexadecimal format.\n"
-" [Online colour picker](http://www.w3schools.com/colors/colors_picker.asp)\n\n"
-" Examples:\n"
-" `[p]editrole colour \"The Transistor\" #ff0000`\n"
-" `[p]editrole colour Test #ff9900`\n"
-" "
+msgid "Edit a role's colour.\\n\\n Use double quotes if the role contains spaces.\\n Colour must be in hexadecimal format.\\n [Online colour picker](http://www.w3schools.com/colors/colors_picker.asp)\\n\\n Examples:\\n `[p]editrole colour \\\"The Transistor\\\" #ff0000`\\n `[p]editrole colour Test #ff9900`\\n "
msgstr ""
-#: redbot/cogs/admin/admin.py:202 redbot/cogs/admin/admin.py:230
+#: redbot/cogs/admin/admin.py:217 redbot/cogs/admin/admin.py:245
msgid "Done."
-msgstr ""
+msgstr "Tehty."
-#: redbot/cogs/admin/admin.py:207
+#: redbot/cogs/admin/admin.py:222
#, docstring
-msgid "Edit a role's name.\n\n"
-" Use double quotes if the role or the name contain spaces.\n\n"
-" Examples:\n"
-" `[p]editrole name \"The Transistor\" Test`\n"
-" "
-msgstr ""
-
-#: redbot/cogs/admin/admin.py:235
-#, docstring
-msgid "Announce a message to all servers the bot is in."
-msgstr ""
-
-#: redbot/cogs/admin/admin.py:242
-msgid "The announcement has begun."
+msgid "Edit a role's name.\\n\\n Use double quotes if the role or the name contain spaces.\\n\\n Examples:\\n `[p]editrole name \\\"The Transistor\\\" Test`\\n "
msgstr ""
#: redbot/cogs/admin/admin.py:250
#, docstring
+msgid "Announce a message to all servers the bot is in."
+msgstr "Ilmoita viesti kaikille palvelimille, joihin botti on."
+
+#: redbot/cogs/admin/admin.py:257
+msgid "The announcement has begun."
+msgstr ""
+
+#: redbot/cogs/admin/admin.py:265
+#, docstring
msgid "Cancel a running announce."
msgstr ""
-#: redbot/cogs/admin/admin.py:256
+#: redbot/cogs/admin/admin.py:271
msgid "The current announcement has been cancelled."
msgstr ""
-#: redbot/cogs/admin/admin.py:262
+#: redbot/cogs/admin/admin.py:277
#, docstring
msgid "Change the channel to which the bot makes announcements."
msgstr ""
-#: redbot/cogs/admin/admin.py:268
+#: redbot/cogs/admin/admin.py:283
msgid "The announcement channel has been set to {channel.mention}"
msgstr ""
-#: redbot/cogs/admin/admin.py:275
+#: redbot/cogs/admin/admin.py:290
#, docstring
msgid "Toggle announcements being enabled this server."
msgstr ""
-#: redbot/cogs/admin/admin.py:281
+#: redbot/cogs/admin/admin.py:296
msgid "The server {guild.name} will receive announcements."
msgstr ""
-#: redbot/cogs/admin/admin.py:285
+#: redbot/cogs/admin/admin.py:300
msgid "The server {guild.name} will not receive announcements."
msgstr ""
-#: redbot/cogs/admin/admin.py:311
+#: redbot/cogs/admin/admin.py:326
#, docstring
-msgid "Add a role to yourself.\n\n"
-" Server admins must have configured the role as user settable.\n\n"
-" NOTE: The role is case sensitive!\n"
-" "
+msgid "Add a role to yourself.\\n\\n Server admins must have configured the role as user settable.\\n\\n NOTE: The role is case sensitive!\\n "
msgstr ""
-#: redbot/cogs/admin/admin.py:322
+#: redbot/cogs/admin/admin.py:337
#, docstring
-msgid "Remove a selfrole from yourself.\n\n"
-" NOTE: The role is case sensitive!\n"
-" "
+msgid "Remove a selfrole from yourself.\\n\\n NOTE: The role is case sensitive!\\n "
msgstr ""
-#: redbot/cogs/admin/admin.py:332
+#: redbot/cogs/admin/admin.py:347
#, docstring
-msgid "Add a role to the list of available selfroles.\n\n"
-" NOTE: The role is case sensitive!\n"
-" "
+msgid "Add a role to the list of available selfroles.\\n\\n NOTE: The role is case sensitive!\\n "
msgstr ""
-#: redbot/cogs/admin/admin.py:340 redbot/cogs/admin/admin.py:352
+#: redbot/cogs/admin/admin.py:355 redbot/cogs/admin/admin.py:367
msgid "The selfroles list has been successfully modified."
msgstr ""
-#: redbot/cogs/admin/admin.py:345
+#: redbot/cogs/admin/admin.py:360
#, docstring
-msgid "Remove a role from the list of available selfroles.\n\n"
-" NOTE: The role is case sensitive!\n"
-" "
+msgid "Remove a role from the list of available selfroles.\\n\\n NOTE: The role is case sensitive!\\n "
msgstr ""
-#: redbot/cogs/admin/admin.py:356
+#: redbot/cogs/admin/admin.py:371
#, docstring
-msgid "\n"
-" Lists all available selfroles.\n"
-" "
+msgid "\\n Lists all available selfroles.\\n "
msgstr ""
-#: redbot/cogs/admin/admin.py:362
-msgid "Available Selfroles:\n"
-"{selfroles}"
+#: redbot/cogs/admin/admin.py:377
+msgid "Available Selfroles:\\n{selfroles}"
msgstr ""
-#: redbot/cogs/admin/admin.py:379
+#: redbot/cogs/admin/admin.py:394
#, docstring
msgid "Lock a bot to its current servers only."
msgstr ""
-#: redbot/cogs/admin/admin.py:384
+#: redbot/cogs/admin/admin.py:399
msgid "The bot is no longer serverlocked."
msgstr ""
-#: redbot/cogs/admin/admin.py:386
+#: redbot/cogs/admin/admin.py:401
msgid "The bot is now serverlocked."
msgstr ""
diff --git a/redbot/cogs/admin/locales/fr-FR.po b/redbot/cogs/admin/locales/fr-FR.po
index 987f1b687..c65638e2e 100644
--- a/redbot/cogs/admin/locales/fr-FR.po
+++ b/redbot/cogs/admin/locales/fr-FR.po
@@ -1,14 +1,14 @@
msgid ""
msgstr ""
"Project-Id-Version: red-discordbot\n"
-"POT-Creation-Date: 2019-01-11 02:18+0000\n"
-"PO-Revision-Date: 2019-02-25 03:06\n"
-"Last-Translator: Kowlin \n"
+"POT-Creation-Date: 2019-07-05 22:33+0200\n"
+"PO-Revision-Date: 2019-07-06 16:11\n"
+"Last-Translator: Robert Jansen (Kowlin)\n"
"Language-Team: French\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"Generated-By: redgettext 2.2\n"
+"Generated-By: redgettext 3.0\n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
"X-Generator: crowdin.com\n"
"X-Crowdin-Project: red-discordbot\n"
@@ -21,197 +21,156 @@ msgid "I attempted to do something that Discord denied me permissions for. Your
msgstr "J'ai tenté de faire quelque chose que pour lequel Discord m'a refusé les permissions. La commande a échoué."
#: redbot/cogs/admin/admin.py:22
-msgid "I tried to add {role.name} to {member.display_name} but that role is higher than my highest role in the Discord hierarchy so I was unable to successfully add it. Please give me a higher role and try again."
-msgstr "J'ai tenté d'ajouter le rôle {role.name} à {member.display_name} mais ce rôle est plus élevé que le mien dans la hiérarchie des rôles de ce serveur. Je n'ai donc pas pu l'ajouter. Tu peux réessayer en me donnant un rôle plus élevé."
+msgid "I tried to {verb} {role.name} to {member.display_name} but that role is higher than my highest role in the Discord hierarchy so I was unable to successfully add it. Please give me a higher role and try again."
+msgstr "J'ai essayé de {verb} {role.name} à {member.display_name} mais ce rôle est plus élevé que mon rôle le plus élevé dans la hiérarchie Discord, je n'ai donc pas réussi à l'ajouter. Donnez-moi un rôle plus élevé et réessayez."
#: redbot/cogs/admin/admin.py:29
-msgid "I tried to add {role.name} to {member.display_name} but that role is higher than your highest role in the Discord hierarchy so I was unable to successfully add it. Please get a higher role and try again."
-msgstr "J'ai tenté d'ajouter le rôle {role.name} à {member.display_name} mais ce rôle est plus élevé que le tien dans la hiérarchie des rôles de ce serveur. Je n'ai donc pas pu l'ajouter. Tu peux réessayer mais il faudra d'abord que tu obtiennes un rôle plus élevé."
+msgid "I tried to {verb} {role.name} to {member.display_name} but that role is higher than your highest role in the Discord hierarchy so I was unable to successfully add it. Please get a higher role and try again."
+msgstr "J'ai essayé de {verb} {role.name} à {member.display_name} mais ce rôle est plus élevé que votre rôle le plus élevé dans la hiérarchie Discord donc je n'ai pas réussi à l'ajouter. Essayez à nouveau avec un rôle plus élevé."
#: redbot/cogs/admin/admin.py:36
+msgid "I tried to edit {role.name} but that role is higher than your highest role in the Discord hierarchy so I was unable to successfully add it. Please get a higher role and try again."
+msgstr "J'ai essayé d'éditer {role.name} mais ce rôle est plus élevé que votre rôle le plus élevé dans la hiérarchie Discord et je n'ai donc pas réussi à l'ajouter. Essayez à nouveau avec un rôle plus élevé."
+
+#: redbot/cogs/admin/admin.py:43
msgid "I am already announcing something. If you would like to make a different announcement please use `{prefix}announce cancel` first."
msgstr "Je suis déjà en train d'annoncer quelque chose. Si tu souhaites faire une annonce différente, tu dois d'abord utiliser la commande `{prefix}announce cancel`."
-#: redbot/cogs/admin/admin.py:46
+#: redbot/cogs/admin/admin.py:53
#, docstring
msgid "A collection of server administration utilities."
msgstr "Un ensemble d'utilitaires d'administration du serveur."
-#: redbot/cogs/admin/admin.py:112
+#: redbot/cogs/admin/admin.py:115 redbot/cogs/admin/admin.py:160
+msgid "add"
+msgstr "ajouter"
+
+#: redbot/cogs/admin/admin.py:121
msgid "I successfully added {role.name} to {member.display_name}"
msgstr "J'ai bien ajouté le rôle {role.name} à {member.display_name}"
-#: redbot/cogs/admin/admin.py:127
+#: redbot/cogs/admin/admin.py:132 redbot/cogs/admin/admin.py:180
+msgid "remove"
+msgstr "supprimer"
+
+#: redbot/cogs/admin/admin.py:138
msgid "I successfully removed {role.name} from {member.display_name}"
msgstr "J'ai bien retiré le rôle {role.name} de {member.display_name}"
-#: redbot/cogs/admin/admin.py:138
+#: redbot/cogs/admin/admin.py:149
#, docstring
-msgid "Add a role to a user.\n\n"
-" If user is left blank it defaults to the author of the command.\n"
-" "
-msgstr "Ajouter un rôle à un utilisateur.\n\n"
-" Si aucun utilisateur n'est mentionné dans la commande, celle-ci fera effet sur l'auteur.\n"
-" "
+msgid "Add a role to a user.\\n\\n If user is left blank it defaults to the author of the command.\\n "
+msgstr "Ajouter un rôle à un utilisateur.\\n\\n Si aucun utilisateur n'est mentionné dans la commande, celui-ci fera effet sur l'auteur.\\n "
-#: redbot/cogs/admin/admin.py:156
+#: redbot/cogs/admin/admin.py:169
#, docstring
-msgid "Remove a role from a user.\n\n"
-" If user is left blank it defaults to the author of the command.\n"
-" "
-msgstr "Retirer un rôle à un utilisateur.\n\n"
-" Si aucun utilisateur n'est mentionné dans la commande, celle-ci fera effet sur l'auteur.\n"
-" "
+msgid "Remove a role from a user.\\n\\n If user is left blank it defaults to the author of the command.\\n "
+msgstr "Retirer un rôle à un utilisateur.\\n\\n Si aucun utilisateur n'est mentionné dans la commande, celui-ci fera effet sur l'auteur.\\n "
-#: redbot/cogs/admin/admin.py:172
+#: redbot/cogs/admin/admin.py:187
#, docstring
msgid "Edit role settings."
msgstr "Modifier les paramètres d'un rôle."
-#: redbot/cogs/admin/admin.py:179
+#: redbot/cogs/admin/admin.py:194
#, docstring
-msgid "Edit a role's colour.\n\n"
-" Use double quotes if the role contains spaces.\n"
-" Colour must be in hexadecimal format.\n"
-" [Online colour picker](http://www.w3schools.com/colors/colors_picker.asp)\n\n"
-" Examples:\n"
-" `[p]editrole colour \"The Transistor\" #ff0000`\n"
-" `[p]editrole colour Test #ff9900`\n"
-" "
-msgstr "Modifier la couleur d'un rôle.\n\n"
-" Utilise des guillemets si le nom du rôle contient des espaces.\n"
-" La couleur doit être au format hexadécimal\n"
-" [Sélecteur de couleur en ligne](http://www.w3schools.com/colors/colors_picker.asp)\n\n"
-" Exemples:\n"
-" `[p]editrole colour \"The Transistor\" #ff0000`\n"
-" `[p]editrole colour Test #ff9900`\n"
-" "
+msgid "Edit a role's colour.\\n\\n Use double quotes if the role contains spaces.\\n Colour must be in hexadecimal format.\\n [Online colour picker](http://www.w3schools.com/colors/colors_picker.asp)\\n\\n Examples:\\n `[p]editrole colour \\\"The Transistor\\\" #ff0000`\\n `[p]editrole colour Test #ff9900`\\n "
+msgstr "Modifier la couleur d'un rôle.\\n\\n Utilise des guillemets si le nom du rôle contient des espaces.\\n La couleur doit être au format hexadécimal\\n [Sélecteur de couleur en ligne](http://www.w3schools.com/colors/colors_picker.asp)\\n\\n Exemples:\\n `[p]editrole colour \\\"The Transistor\\\" #ff0000`\\n `[p]editrole colour Test #ff9900`\\n "
-#: redbot/cogs/admin/admin.py:202 redbot/cogs/admin/admin.py:230
+#: redbot/cogs/admin/admin.py:217 redbot/cogs/admin/admin.py:245
msgid "Done."
msgstr "Fait."
-#: redbot/cogs/admin/admin.py:207
+#: redbot/cogs/admin/admin.py:222
#, docstring
-msgid "Edit a role's name.\n\n"
-" Use double quotes if the role or the name contain spaces.\n\n"
-" Examples:\n"
-" `[p]editrole name \"The Transistor\" Test`\n"
-" "
-msgstr "Modifier le nom d'un rôle.\n\n"
-" Utilise des guillemets si le nom du rôle contient des espaces.\n\n"
-" Exemples:\n"
-" `[p]editrole name \"The Transistor\" Test`\n"
-" "
+msgid "Edit a role's name.\\n\\n Use double quotes if the role or the name contain spaces.\\n\\n Examples:\\n `[p]editrole name \\\"The Transistor\\\" Test`\\n "
+msgstr "Modifier le nom d'un rôle.\\n\\n Utilise des guillemets si le nom du rôle contient des espaces.\\n\\n Exemples:\\n `[p]editrole name \\\"The Transistor\\\" Test`\\n "
-#: redbot/cogs/admin/admin.py:235
+#: redbot/cogs/admin/admin.py:250
#, docstring
msgid "Announce a message to all servers the bot is in."
msgstr "Faire une annonce à tous les serveurs dans lesquels le bot se trouve."
-#: redbot/cogs/admin/admin.py:242
+#: redbot/cogs/admin/admin.py:257
msgid "The announcement has begun."
msgstr "L’annonce a commencé."
-#: redbot/cogs/admin/admin.py:250
+#: redbot/cogs/admin/admin.py:265
#, docstring
msgid "Cancel a running announce."
msgstr "Interrompre une annonce en cours."
-#: redbot/cogs/admin/admin.py:256
+#: redbot/cogs/admin/admin.py:271
msgid "The current announcement has been cancelled."
msgstr "L'annonce actuelle a été interrompue."
-#: redbot/cogs/admin/admin.py:262
+#: redbot/cogs/admin/admin.py:277
#, docstring
msgid "Change the channel to which the bot makes announcements."
msgstr "Changer le salon dans lequel le bot fait des annonces."
-#: redbot/cogs/admin/admin.py:268
+#: redbot/cogs/admin/admin.py:283
msgid "The announcement channel has been set to {channel.mention}"
msgstr "Les annonces seront maintenant faites dans {channel.mention}"
-#: redbot/cogs/admin/admin.py:275
+#: redbot/cogs/admin/admin.py:290
#, docstring
msgid "Toggle announcements being enabled this server."
msgstr "Activer ou désactiver les annonces sur ce serveur."
-#: redbot/cogs/admin/admin.py:281
+#: redbot/cogs/admin/admin.py:296
msgid "The server {guild.name} will receive announcements."
msgstr "Le serveur {guild.name} recevra maintenant les annonces."
-#: redbot/cogs/admin/admin.py:285
+#: redbot/cogs/admin/admin.py:300
msgid "The server {guild.name} will not receive announcements."
msgstr "Le serveur {guild.name} ne recevra plus les annonces."
-#: redbot/cogs/admin/admin.py:311
+#: redbot/cogs/admin/admin.py:326
#, docstring
-msgid "Add a role to yourself.\n\n"
-" Server admins must have configured the role as user settable.\n\n"
-" NOTE: The role is case sensitive!\n"
-" "
-msgstr "S'ajouter un rôle à soi-même.\n\n"
-" Les administrateurs du serveur doivent avoir configuré le rôle en tant qu'ajoutable par les utilisateurs.\n\n"
-" NOTE: Le nom du rôle est sensible à la casse!\n"
-" "
+msgid "Add a role to yourself.\\n\\n Server admins must have configured the role as user settable.\\n\\n NOTE: The role is case sensitive!\\n "
+msgstr "S'ajouter un rôle à soi-même.\\n\\n Les administrateurs du serveur doivent avoir configuré le rôle en tant qu'ajoutable par les utilisateurs.\\n\\n NOTE : Le nom du rôle est sensible aux majuscules et minuscules !\\n "
-#: redbot/cogs/admin/admin.py:322
+#: redbot/cogs/admin/admin.py:337
#, docstring
-msgid "Remove a selfrole from yourself.\n\n"
-" NOTE: The role is case sensitive!\n"
-" "
-msgstr "Se supprimer un auto-rôle.\n\n"
-" NOTE: Le rôle est sensible à la casse! "
+msgid "Remove a selfrole from yourself.\\n\\n NOTE: The role is case sensitive!\\n "
+msgstr "Se supprimer un auto-rôle.\\n\\n NOTE : Le rôle est sensible aux majuscules et minuscules !\\n "
-#: redbot/cogs/admin/admin.py:332
+#: redbot/cogs/admin/admin.py:347
#, docstring
-msgid "Add a role to the list of available selfroles.\n\n"
-" NOTE: The role is case sensitive!\n"
-" "
-msgstr "Ajouter un rôle à la liste des auto-rôles disponibles.\n\n"
-" NOTE : le nom du rôle est sensible à la casse !\n"
-" "
+msgid "Add a role to the list of available selfroles.\\n\\n NOTE: The role is case sensitive!\\n "
+msgstr "Ajouter un rôle à la liste des auto-rôles disponibles.\\n\\n NOTE : Le nom du rôle est sensible aux majuscules et minuscules !\\n "
-#: redbot/cogs/admin/admin.py:340 redbot/cogs/admin/admin.py:352
+#: redbot/cogs/admin/admin.py:355 redbot/cogs/admin/admin.py:367
msgid "The selfroles list has been successfully modified."
msgstr "La liste des auto-rôles a été modifiée avec succès."
-#: redbot/cogs/admin/admin.py:345
+#: redbot/cogs/admin/admin.py:360
#, docstring
-msgid "Remove a role from the list of available selfroles.\n\n"
-" NOTE: The role is case sensitive!\n"
-" "
-msgstr "Supprimer un rôle de la liste des auto-rôles.\n\n"
-" NOTE : Le nom du rôle est sensible à la casse !\n"
-" "
+msgid "Remove a role from the list of available selfroles.\\n\\n NOTE: The role is case sensitive!\\n "
+msgstr "Supprimer un rôle de la liste des auto-rôles.\\n\\n NOTE : Le nom du rôle est sensible aux majuscules et minuscules !\\n "
-#: redbot/cogs/admin/admin.py:356
+#: redbot/cogs/admin/admin.py:371
#, docstring
-msgid "\n"
-" Lists all available selfroles.\n"
-" "
-msgstr "\n"
-" Liste de tous les auto-rôles disponibles.\n"
-" "
+msgid "\\n Lists all available selfroles.\\n "
+msgstr "\\n Liste de tous les auto-rôles disponibles.\\n "
-#: redbot/cogs/admin/admin.py:362
-msgid "Available Selfroles:\n"
-"{selfroles}"
-msgstr "Auto-rôles disponibles :\n"
-"{selfroles}"
+#: redbot/cogs/admin/admin.py:377
+msgid "Available Selfroles:\\n{selfroles}"
+msgstr "Auto-rôles disponibles :\\n{selfroles}"
-#: redbot/cogs/admin/admin.py:379
+#: redbot/cogs/admin/admin.py:394
#, docstring
msgid "Lock a bot to its current servers only."
-msgstr "Verrouiller le bot sur les serveurs où il est actuellement présent."
+msgstr "Verrouiller un bot sur ses serveurs actuels uniquement."
-#: redbot/cogs/admin/admin.py:384
+#: redbot/cogs/admin/admin.py:399
msgid "The bot is no longer serverlocked."
-msgstr "Le bot n'est plus verrouillé sur ses serveurs."
+msgstr "Le bot n'est plus verrouillé sur ses serveurs actuels."
-#: redbot/cogs/admin/admin.py:386
+#: redbot/cogs/admin/admin.py:401
msgid "The bot is now serverlocked."
-msgstr "Le bot est maintenant verrouillé sur ses serveurs."
+msgstr "Le bot est maintenant verrouillé sur ses serveurs actuels."
#: redbot/cogs/admin/announcer.py:70
msgid "I could not announce to server: {server.id}"
@@ -219,7 +178,7 @@ msgstr "Je n'ai pas pu faire d'annonce dans le serveur: {server.id}"
#: redbot/cogs/admin/converters.py:25
msgid "The Admin cog is not loaded."
-msgstr "Le module Admin n'est pas chargé."
+msgstr "Le cog Admin n'est pas chargé."
#: redbot/cogs/admin/converters.py:34
msgid "The provided role is not a valid selfrole."
diff --git a/redbot/cogs/admin/locales/hu-HU.po b/redbot/cogs/admin/locales/hu-HU.po
index 2548a582a..a80949e88 100644
--- a/redbot/cogs/admin/locales/hu-HU.po
+++ b/redbot/cogs/admin/locales/hu-HU.po
@@ -1,14 +1,14 @@
msgid ""
msgstr ""
"Project-Id-Version: red-discordbot\n"
-"POT-Creation-Date: 2019-01-11 02:18+0000\n"
-"PO-Revision-Date: 2019-02-25 03:07\n"
-"Last-Translator: Kowlin \n"
+"POT-Creation-Date: 2019-07-05 22:33+0200\n"
+"PO-Revision-Date: 2019-07-06 16:13\n"
+"Last-Translator: Robert Jansen (Kowlin)\n"
"Language-Team: Hungarian\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"Generated-By: redgettext 2.2\n"
+"Generated-By: redgettext 3.0\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: crowdin.com\n"
"X-Crowdin-Project: red-discordbot\n"
@@ -21,169 +21,154 @@ msgid "I attempted to do something that Discord denied me permissions for. Your
msgstr ""
#: redbot/cogs/admin/admin.py:22
-msgid "I tried to add {role.name} to {member.display_name} but that role is higher than my highest role in the Discord hierarchy so I was unable to successfully add it. Please give me a higher role and try again."
+msgid "I tried to {verb} {role.name} to {member.display_name} but that role is higher than my highest role in the Discord hierarchy so I was unable to successfully add it. Please give me a higher role and try again."
msgstr ""
#: redbot/cogs/admin/admin.py:29
-msgid "I tried to add {role.name} to {member.display_name} but that role is higher than your highest role in the Discord hierarchy so I was unable to successfully add it. Please get a higher role and try again."
+msgid "I tried to {verb} {role.name} to {member.display_name} but that role is higher than your highest role in the Discord hierarchy so I was unable to successfully add it. Please get a higher role and try again."
msgstr ""
#: redbot/cogs/admin/admin.py:36
+msgid "I tried to edit {role.name} but that role is higher than your highest role in the Discord hierarchy so I was unable to successfully add it. Please get a higher role and try again."
+msgstr ""
+
+#: redbot/cogs/admin/admin.py:43
msgid "I am already announcing something. If you would like to make a different announcement please use `{prefix}announce cancel` first."
msgstr ""
-#: redbot/cogs/admin/admin.py:46
+#: redbot/cogs/admin/admin.py:53
#, docstring
msgid "A collection of server administration utilities."
msgstr ""
-#: redbot/cogs/admin/admin.py:112
+#: redbot/cogs/admin/admin.py:115 redbot/cogs/admin/admin.py:160
+msgid "add"
+msgstr ""
+
+#: redbot/cogs/admin/admin.py:121
msgid "I successfully added {role.name} to {member.display_name}"
msgstr ""
-#: redbot/cogs/admin/admin.py:127
-msgid "I successfully removed {role.name} from {member.display_name}"
+#: redbot/cogs/admin/admin.py:132 redbot/cogs/admin/admin.py:180
+msgid "remove"
msgstr ""
#: redbot/cogs/admin/admin.py:138
-#, docstring
-msgid "Add a role to a user.\n\n"
-" If user is left blank it defaults to the author of the command.\n"
-" "
+msgid "I successfully removed {role.name} from {member.display_name}"
msgstr ""
-#: redbot/cogs/admin/admin.py:156
+#: redbot/cogs/admin/admin.py:149
#, docstring
-msgid "Remove a role from a user.\n\n"
-" If user is left blank it defaults to the author of the command.\n"
-" "
+msgid "Add a role to a user.\\n\\n If user is left blank it defaults to the author of the command.\\n "
msgstr ""
-#: redbot/cogs/admin/admin.py:172
+#: redbot/cogs/admin/admin.py:169
+#, docstring
+msgid "Remove a role from a user.\\n\\n If user is left blank it defaults to the author of the command.\\n "
+msgstr ""
+
+#: redbot/cogs/admin/admin.py:187
#, docstring
msgid "Edit role settings."
msgstr ""
-#: redbot/cogs/admin/admin.py:179
+#: redbot/cogs/admin/admin.py:194
#, docstring
-msgid "Edit a role's colour.\n\n"
-" Use double quotes if the role contains spaces.\n"
-" Colour must be in hexadecimal format.\n"
-" [Online colour picker](http://www.w3schools.com/colors/colors_picker.asp)\n\n"
-" Examples:\n"
-" `[p]editrole colour \"The Transistor\" #ff0000`\n"
-" `[p]editrole colour Test #ff9900`\n"
-" "
+msgid "Edit a role's colour.\\n\\n Use double quotes if the role contains spaces.\\n Colour must be in hexadecimal format.\\n [Online colour picker](http://www.w3schools.com/colors/colors_picker.asp)\\n\\n Examples:\\n `[p]editrole colour \\\"The Transistor\\\" #ff0000`\\n `[p]editrole colour Test #ff9900`\\n "
msgstr ""
-#: redbot/cogs/admin/admin.py:202 redbot/cogs/admin/admin.py:230
+#: redbot/cogs/admin/admin.py:217 redbot/cogs/admin/admin.py:245
msgid "Done."
-msgstr ""
+msgstr "Kész."
-#: redbot/cogs/admin/admin.py:207
+#: redbot/cogs/admin/admin.py:222
#, docstring
-msgid "Edit a role's name.\n\n"
-" Use double quotes if the role or the name contain spaces.\n\n"
-" Examples:\n"
-" `[p]editrole name \"The Transistor\" Test`\n"
-" "
-msgstr ""
-
-#: redbot/cogs/admin/admin.py:235
-#, docstring
-msgid "Announce a message to all servers the bot is in."
-msgstr ""
-
-#: redbot/cogs/admin/admin.py:242
-msgid "The announcement has begun."
+msgid "Edit a role's name.\\n\\n Use double quotes if the role or the name contain spaces.\\n\\n Examples:\\n `[p]editrole name \\\"The Transistor\\\" Test`\\n "
msgstr ""
#: redbot/cogs/admin/admin.py:250
#, docstring
+msgid "Announce a message to all servers the bot is in."
+msgstr ""
+
+#: redbot/cogs/admin/admin.py:257
+msgid "The announcement has begun."
+msgstr ""
+
+#: redbot/cogs/admin/admin.py:265
+#, docstring
msgid "Cancel a running announce."
msgstr ""
-#: redbot/cogs/admin/admin.py:256
+#: redbot/cogs/admin/admin.py:271
msgid "The current announcement has been cancelled."
msgstr ""
-#: redbot/cogs/admin/admin.py:262
+#: redbot/cogs/admin/admin.py:277
#, docstring
msgid "Change the channel to which the bot makes announcements."
msgstr ""
-#: redbot/cogs/admin/admin.py:268
+#: redbot/cogs/admin/admin.py:283
msgid "The announcement channel has been set to {channel.mention}"
msgstr ""
-#: redbot/cogs/admin/admin.py:275
+#: redbot/cogs/admin/admin.py:290
#, docstring
msgid "Toggle announcements being enabled this server."
msgstr ""
-#: redbot/cogs/admin/admin.py:281
+#: redbot/cogs/admin/admin.py:296
msgid "The server {guild.name} will receive announcements."
msgstr ""
-#: redbot/cogs/admin/admin.py:285
+#: redbot/cogs/admin/admin.py:300
msgid "The server {guild.name} will not receive announcements."
msgstr ""
-#: redbot/cogs/admin/admin.py:311
+#: redbot/cogs/admin/admin.py:326
#, docstring
-msgid "Add a role to yourself.\n\n"
-" Server admins must have configured the role as user settable.\n\n"
-" NOTE: The role is case sensitive!\n"
-" "
+msgid "Add a role to yourself.\\n\\n Server admins must have configured the role as user settable.\\n\\n NOTE: The role is case sensitive!\\n "
msgstr ""
-#: redbot/cogs/admin/admin.py:322
+#: redbot/cogs/admin/admin.py:337
#, docstring
-msgid "Remove a selfrole from yourself.\n\n"
-" NOTE: The role is case sensitive!\n"
-" "
+msgid "Remove a selfrole from yourself.\\n\\n NOTE: The role is case sensitive!\\n "
msgstr ""
-#: redbot/cogs/admin/admin.py:332
+#: redbot/cogs/admin/admin.py:347
#, docstring
-msgid "Add a role to the list of available selfroles.\n\n"
-" NOTE: The role is case sensitive!\n"
-" "
+msgid "Add a role to the list of available selfroles.\\n\\n NOTE: The role is case sensitive!\\n "
msgstr ""
-#: redbot/cogs/admin/admin.py:340 redbot/cogs/admin/admin.py:352
+#: redbot/cogs/admin/admin.py:355 redbot/cogs/admin/admin.py:367
msgid "The selfroles list has been successfully modified."
msgstr ""
-#: redbot/cogs/admin/admin.py:345
+#: redbot/cogs/admin/admin.py:360
#, docstring
-msgid "Remove a role from the list of available selfroles.\n\n"
-" NOTE: The role is case sensitive!\n"
-" "
+msgid "Remove a role from the list of available selfroles.\\n\\n NOTE: The role is case sensitive!\\n "
msgstr ""
-#: redbot/cogs/admin/admin.py:356
+#: redbot/cogs/admin/admin.py:371
#, docstring
-msgid "\n"
-" Lists all available selfroles.\n"
-" "
+msgid "\\n Lists all available selfroles.\\n "
msgstr ""
-#: redbot/cogs/admin/admin.py:362
-msgid "Available Selfroles:\n"
-"{selfroles}"
+#: redbot/cogs/admin/admin.py:377
+msgid "Available Selfroles:\\n{selfroles}"
msgstr ""
-#: redbot/cogs/admin/admin.py:379
+#: redbot/cogs/admin/admin.py:394
#, docstring
msgid "Lock a bot to its current servers only."
msgstr ""
-#: redbot/cogs/admin/admin.py:384
+#: redbot/cogs/admin/admin.py:399
msgid "The bot is no longer serverlocked."
msgstr ""
-#: redbot/cogs/admin/admin.py:386
+#: redbot/cogs/admin/admin.py:401
msgid "The bot is now serverlocked."
msgstr ""
diff --git a/redbot/cogs/admin/locales/id-ID.po b/redbot/cogs/admin/locales/id-ID.po
index f4473c358..f5b2d5cf6 100644
--- a/redbot/cogs/admin/locales/id-ID.po
+++ b/redbot/cogs/admin/locales/id-ID.po
@@ -1,14 +1,14 @@
msgid ""
msgstr ""
"Project-Id-Version: red-discordbot\n"
-"POT-Creation-Date: 2019-01-11 02:18+0000\n"
-"PO-Revision-Date: 2019-02-25 03:08\n"
-"Last-Translator: Kowlin \n"
+"POT-Creation-Date: 2019-07-05 22:33+0200\n"
+"PO-Revision-Date: 2019-07-06 16:14\n"
+"Last-Translator: Robert Jansen (Kowlin)\n"
"Language-Team: Indonesian\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"Generated-By: redgettext 2.2\n"
+"Generated-By: redgettext 3.0\n"
"Plural-Forms: nplurals=1; plural=0;\n"
"X-Generator: crowdin.com\n"
"X-Crowdin-Project: red-discordbot\n"
@@ -21,169 +21,154 @@ msgid "I attempted to do something that Discord denied me permissions for. Your
msgstr ""
#: redbot/cogs/admin/admin.py:22
-msgid "I tried to add {role.name} to {member.display_name} but that role is higher than my highest role in the Discord hierarchy so I was unable to successfully add it. Please give me a higher role and try again."
+msgid "I tried to {verb} {role.name} to {member.display_name} but that role is higher than my highest role in the Discord hierarchy so I was unable to successfully add it. Please give me a higher role and try again."
msgstr ""
#: redbot/cogs/admin/admin.py:29
-msgid "I tried to add {role.name} to {member.display_name} but that role is higher than your highest role in the Discord hierarchy so I was unable to successfully add it. Please get a higher role and try again."
+msgid "I tried to {verb} {role.name} to {member.display_name} but that role is higher than your highest role in the Discord hierarchy so I was unable to successfully add it. Please get a higher role and try again."
msgstr ""
#: redbot/cogs/admin/admin.py:36
+msgid "I tried to edit {role.name} but that role is higher than your highest role in the Discord hierarchy so I was unable to successfully add it. Please get a higher role and try again."
+msgstr ""
+
+#: redbot/cogs/admin/admin.py:43
msgid "I am already announcing something. If you would like to make a different announcement please use `{prefix}announce cancel` first."
msgstr ""
-#: redbot/cogs/admin/admin.py:46
+#: redbot/cogs/admin/admin.py:53
#, docstring
msgid "A collection of server administration utilities."
msgstr ""
-#: redbot/cogs/admin/admin.py:112
+#: redbot/cogs/admin/admin.py:115 redbot/cogs/admin/admin.py:160
+msgid "add"
+msgstr "menambahkan"
+
+#: redbot/cogs/admin/admin.py:121
msgid "I successfully added {role.name} to {member.display_name}"
msgstr ""
-#: redbot/cogs/admin/admin.py:127
+#: redbot/cogs/admin/admin.py:132 redbot/cogs/admin/admin.py:180
+msgid "remove"
+msgstr "menghapus"
+
+#: redbot/cogs/admin/admin.py:138
msgid "I successfully removed {role.name} from {member.display_name}"
msgstr ""
-#: redbot/cogs/admin/admin.py:138
+#: redbot/cogs/admin/admin.py:149
#, docstring
-msgid "Add a role to a user.\n\n"
-" If user is left blank it defaults to the author of the command.\n"
-" "
+msgid "Add a role to a user.\\n\\n If user is left blank it defaults to the author of the command.\\n "
msgstr ""
-#: redbot/cogs/admin/admin.py:156
+#: redbot/cogs/admin/admin.py:169
#, docstring
-msgid "Remove a role from a user.\n\n"
-" If user is left blank it defaults to the author of the command.\n"
-" "
+msgid "Remove a role from a user.\\n\\n If user is left blank it defaults to the author of the command.\\n "
msgstr ""
-#: redbot/cogs/admin/admin.py:172
+#: redbot/cogs/admin/admin.py:187
#, docstring
msgid "Edit role settings."
msgstr ""
-#: redbot/cogs/admin/admin.py:179
+#: redbot/cogs/admin/admin.py:194
#, docstring
-msgid "Edit a role's colour.\n\n"
-" Use double quotes if the role contains spaces.\n"
-" Colour must be in hexadecimal format.\n"
-" [Online colour picker](http://www.w3schools.com/colors/colors_picker.asp)\n\n"
-" Examples:\n"
-" `[p]editrole colour \"The Transistor\" #ff0000`\n"
-" `[p]editrole colour Test #ff9900`\n"
-" "
+msgid "Edit a role's colour.\\n\\n Use double quotes if the role contains spaces.\\n Colour must be in hexadecimal format.\\n [Online colour picker](http://www.w3schools.com/colors/colors_picker.asp)\\n\\n Examples:\\n `[p]editrole colour \\\"The Transistor\\\" #ff0000`\\n `[p]editrole colour Test #ff9900`\\n "
msgstr ""
-#: redbot/cogs/admin/admin.py:202 redbot/cogs/admin/admin.py:230
+#: redbot/cogs/admin/admin.py:217 redbot/cogs/admin/admin.py:245
msgid "Done."
-msgstr ""
+msgstr "Selesai."
-#: redbot/cogs/admin/admin.py:207
+#: redbot/cogs/admin/admin.py:222
#, docstring
-msgid "Edit a role's name.\n\n"
-" Use double quotes if the role or the name contain spaces.\n\n"
-" Examples:\n"
-" `[p]editrole name \"The Transistor\" Test`\n"
-" "
-msgstr ""
-
-#: redbot/cogs/admin/admin.py:235
-#, docstring
-msgid "Announce a message to all servers the bot is in."
-msgstr ""
-
-#: redbot/cogs/admin/admin.py:242
-msgid "The announcement has begun."
+msgid "Edit a role's name.\\n\\n Use double quotes if the role or the name contain spaces.\\n\\n Examples:\\n `[p]editrole name \\\"The Transistor\\\" Test`\\n "
msgstr ""
#: redbot/cogs/admin/admin.py:250
#, docstring
+msgid "Announce a message to all servers the bot is in."
+msgstr ""
+
+#: redbot/cogs/admin/admin.py:257
+msgid "The announcement has begun."
+msgstr ""
+
+#: redbot/cogs/admin/admin.py:265
+#, docstring
msgid "Cancel a running announce."
msgstr ""
-#: redbot/cogs/admin/admin.py:256
+#: redbot/cogs/admin/admin.py:271
msgid "The current announcement has been cancelled."
msgstr ""
-#: redbot/cogs/admin/admin.py:262
+#: redbot/cogs/admin/admin.py:277
#, docstring
msgid "Change the channel to which the bot makes announcements."
msgstr ""
-#: redbot/cogs/admin/admin.py:268
+#: redbot/cogs/admin/admin.py:283
msgid "The announcement channel has been set to {channel.mention}"
msgstr ""
-#: redbot/cogs/admin/admin.py:275
+#: redbot/cogs/admin/admin.py:290
#, docstring
msgid "Toggle announcements being enabled this server."
msgstr ""
-#: redbot/cogs/admin/admin.py:281
+#: redbot/cogs/admin/admin.py:296
msgid "The server {guild.name} will receive announcements."
msgstr ""
-#: redbot/cogs/admin/admin.py:285
+#: redbot/cogs/admin/admin.py:300
msgid "The server {guild.name} will not receive announcements."
msgstr ""
-#: redbot/cogs/admin/admin.py:311
+#: redbot/cogs/admin/admin.py:326
#, docstring
-msgid "Add a role to yourself.\n\n"
-" Server admins must have configured the role as user settable.\n\n"
-" NOTE: The role is case sensitive!\n"
-" "
+msgid "Add a role to yourself.\\n\\n Server admins must have configured the role as user settable.\\n\\n NOTE: The role is case sensitive!\\n "
msgstr ""
-#: redbot/cogs/admin/admin.py:322
+#: redbot/cogs/admin/admin.py:337
#, docstring
-msgid "Remove a selfrole from yourself.\n\n"
-" NOTE: The role is case sensitive!\n"
-" "
+msgid "Remove a selfrole from yourself.\\n\\n NOTE: The role is case sensitive!\\n "
msgstr ""
-#: redbot/cogs/admin/admin.py:332
+#: redbot/cogs/admin/admin.py:347
#, docstring
-msgid "Add a role to the list of available selfroles.\n\n"
-" NOTE: The role is case sensitive!\n"
-" "
+msgid "Add a role to the list of available selfroles.\\n\\n NOTE: The role is case sensitive!\\n "
msgstr ""
-#: redbot/cogs/admin/admin.py:340 redbot/cogs/admin/admin.py:352
+#: redbot/cogs/admin/admin.py:355 redbot/cogs/admin/admin.py:367
msgid "The selfroles list has been successfully modified."
msgstr ""
-#: redbot/cogs/admin/admin.py:345
+#: redbot/cogs/admin/admin.py:360
#, docstring
-msgid "Remove a role from the list of available selfroles.\n\n"
-" NOTE: The role is case sensitive!\n"
-" "
+msgid "Remove a role from the list of available selfroles.\\n\\n NOTE: The role is case sensitive!\\n "
msgstr ""
-#: redbot/cogs/admin/admin.py:356
+#: redbot/cogs/admin/admin.py:371
#, docstring
-msgid "\n"
-" Lists all available selfroles.\n"
-" "
+msgid "\\n Lists all available selfroles.\\n "
msgstr ""
-#: redbot/cogs/admin/admin.py:362
-msgid "Available Selfroles:\n"
-"{selfroles}"
+#: redbot/cogs/admin/admin.py:377
+msgid "Available Selfroles:\\n{selfroles}"
msgstr ""
-#: redbot/cogs/admin/admin.py:379
+#: redbot/cogs/admin/admin.py:394
#, docstring
msgid "Lock a bot to its current servers only."
msgstr ""
-#: redbot/cogs/admin/admin.py:384
+#: redbot/cogs/admin/admin.py:399
msgid "The bot is no longer serverlocked."
msgstr ""
-#: redbot/cogs/admin/admin.py:386
+#: redbot/cogs/admin/admin.py:401
msgid "The bot is now serverlocked."
msgstr ""
diff --git a/redbot/cogs/admin/locales/it-IT.po b/redbot/cogs/admin/locales/it-IT.po
index 97d740500..0545fe696 100644
--- a/redbot/cogs/admin/locales/it-IT.po
+++ b/redbot/cogs/admin/locales/it-IT.po
@@ -1,14 +1,14 @@
msgid ""
msgstr ""
"Project-Id-Version: red-discordbot\n"
-"POT-Creation-Date: 2019-01-11 02:18+0000\n"
-"PO-Revision-Date: 2019-02-25 03:07\n"
-"Last-Translator: Kowlin \n"
+"POT-Creation-Date: 2019-07-05 22:33+0200\n"
+"PO-Revision-Date: 2019-07-06 16:13\n"
+"Last-Translator: Robert Jansen (Kowlin)\n"
"Language-Team: Italian\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"Generated-By: redgettext 2.2\n"
+"Generated-By: redgettext 3.0\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: crowdin.com\n"
"X-Crowdin-Project: red-discordbot\n"
@@ -18,184 +18,169 @@ msgstr ""
#: redbot/cogs/admin/admin.py:17
msgid "I attempted to do something that Discord denied me permissions for. Your command failed to successfully complete."
-msgstr ""
+msgstr "Ho cercato di fare qualcosa ma Discord mi ha negato i permessi per farla. Il tuo comando non è stato completato con successo."
#: redbot/cogs/admin/admin.py:22
-msgid "I tried to add {role.name} to {member.display_name} but that role is higher than my highest role in the Discord hierarchy so I was unable to successfully add it. Please give me a higher role and try again."
-msgstr ""
+msgid "I tried to {verb} {role.name} to {member.display_name} but that role is higher than my highest role in the Discord hierarchy so I was unable to successfully add it. Please give me a higher role and try again."
+msgstr "Ho cercato di {verb} {role.name} al gruppo {member.display_name} ma quel ruolo è più elevato del mio livello nella gerarchia di Discord quindi non sono stato in grado di aggiungerlo. prova a darmi un ruolo più alto e riprova."
#: redbot/cogs/admin/admin.py:29
-msgid "I tried to add {role.name} to {member.display_name} but that role is higher than your highest role in the Discord hierarchy so I was unable to successfully add it. Please get a higher role and try again."
-msgstr ""
+msgid "I tried to {verb} {role.name} to {member.display_name} but that role is higher than your highest role in the Discord hierarchy so I was unable to successfully add it. Please get a higher role and try again."
+msgstr "Ho cercato di {verb} {role.name} al gruppo {member.display_name} ma quel ruolo è più elevato del tuo livello nella gerarchia di Discord quindi non sono stato in grado di aggiungerlo. Raggiungi un ruolo più alto e riprova."
#: redbot/cogs/admin/admin.py:36
-msgid "I am already announcing something. If you would like to make a different announcement please use `{prefix}announce cancel` first."
-msgstr ""
+msgid "I tried to edit {role.name} but that role is higher than your highest role in the Discord hierarchy so I was unable to successfully add it. Please get a higher role and try again."
+msgstr "Ho cercato di modificare {role.name} ma quel ruolo è più elevato del tuo livello nella gerarchia di Discord quindi non sono stato in grado di aggiungerlo. Raggiungi un ruolo più alto e riprova."
-#: redbot/cogs/admin/admin.py:46
+#: redbot/cogs/admin/admin.py:43
+msgid "I am already announcing something. If you would like to make a different announcement please use `{prefix}announce cancel` first."
+msgstr "Sto già annunciando qualcosa. Se desideri fare un annuncio diverso, usa prima `{prefix}announce cancel`."
+
+#: redbot/cogs/admin/admin.py:53
#, docstring
msgid "A collection of server administration utilities."
-msgstr ""
+msgstr "Una collezione di servizi di amministrazione del server."
-#: redbot/cogs/admin/admin.py:112
+#: redbot/cogs/admin/admin.py:115 redbot/cogs/admin/admin.py:160
+msgid "add"
+msgstr "aggiungere"
+
+#: redbot/cogs/admin/admin.py:121
msgid "I successfully added {role.name} to {member.display_name}"
-msgstr ""
+msgstr "Ho aggiunto con successo {role.name} al gruppo {member.display_name}"
-#: redbot/cogs/admin/admin.py:127
-msgid "I successfully removed {role.name} from {member.display_name}"
-msgstr ""
+#: redbot/cogs/admin/admin.py:132 redbot/cogs/admin/admin.py:180
+msgid "remove"
+msgstr "rimuovere"
#: redbot/cogs/admin/admin.py:138
+msgid "I successfully removed {role.name} from {member.display_name}"
+msgstr "Ho rimosso con successo {role.name} dal gruppo {member.display_name}"
+
+#: redbot/cogs/admin/admin.py:149
#, docstring
-msgid "Add a role to a user.\n\n"
-" If user is left blank it defaults to the author of the command.\n"
-" "
+msgid "Add a role to a user.\\n\\n If user is left blank it defaults to the author of the command.\\n "
msgstr ""
-#: redbot/cogs/admin/admin.py:156
+#: redbot/cogs/admin/admin.py:169
#, docstring
-msgid "Remove a role from a user.\n\n"
-" If user is left blank it defaults to the author of the command.\n"
-" "
+msgid "Remove a role from a user.\\n\\n If user is left blank it defaults to the author of the command.\\n "
msgstr ""
-#: redbot/cogs/admin/admin.py:172
+#: redbot/cogs/admin/admin.py:187
#, docstring
msgid "Edit role settings."
-msgstr ""
+msgstr "Modifica impostazioni ruolo."
-#: redbot/cogs/admin/admin.py:179
+#: redbot/cogs/admin/admin.py:194
#, docstring
-msgid "Edit a role's colour.\n\n"
-" Use double quotes if the role contains spaces.\n"
-" Colour must be in hexadecimal format.\n"
-" [Online colour picker](http://www.w3schools.com/colors/colors_picker.asp)\n\n"
-" Examples:\n"
-" `[p]editrole colour \"The Transistor\" #ff0000`\n"
-" `[p]editrole colour Test #ff9900`\n"
-" "
+msgid "Edit a role's colour.\\n\\n Use double quotes if the role contains spaces.\\n Colour must be in hexadecimal format.\\n [Online colour picker](http://www.w3schools.com/colors/colors_picker.asp)\\n\\n Examples:\\n `[p]editrole colour \\\"The Transistor\\\" #ff0000`\\n `[p]editrole colour Test #ff9900`\\n "
msgstr ""
-#: redbot/cogs/admin/admin.py:202 redbot/cogs/admin/admin.py:230
+#: redbot/cogs/admin/admin.py:217 redbot/cogs/admin/admin.py:245
msgid "Done."
-msgstr ""
+msgstr "Fatto."
-#: redbot/cogs/admin/admin.py:207
+#: redbot/cogs/admin/admin.py:222
#, docstring
-msgid "Edit a role's name.\n\n"
-" Use double quotes if the role or the name contain spaces.\n\n"
-" Examples:\n"
-" `[p]editrole name \"The Transistor\" Test`\n"
-" "
-msgstr ""
-
-#: redbot/cogs/admin/admin.py:235
-#, docstring
-msgid "Announce a message to all servers the bot is in."
-msgstr ""
-
-#: redbot/cogs/admin/admin.py:242
-msgid "The announcement has begun."
+msgid "Edit a role's name.\\n\\n Use double quotes if the role or the name contain spaces.\\n\\n Examples:\\n `[p]editrole name \\\"The Transistor\\\" Test`\\n "
msgstr ""
#: redbot/cogs/admin/admin.py:250
#, docstring
+msgid "Announce a message to all servers the bot is in."
+msgstr "Invia un annuncio a tutti i server in cui si trova il bot."
+
+#: redbot/cogs/admin/admin.py:257
+msgid "The announcement has begun."
+msgstr "L'annuncio è partito."
+
+#: redbot/cogs/admin/admin.py:265
+#, docstring
msgid "Cancel a running announce."
-msgstr ""
+msgstr "Cancella un annuncio in corso."
-#: redbot/cogs/admin/admin.py:256
+#: redbot/cogs/admin/admin.py:271
msgid "The current announcement has been cancelled."
-msgstr ""
+msgstr "L'annuncio in corso è stato cancellato."
-#: redbot/cogs/admin/admin.py:262
+#: redbot/cogs/admin/admin.py:277
#, docstring
msgid "Change the channel to which the bot makes announcements."
-msgstr ""
+msgstr "Modifica il canale in cui il bot invia gli annunci."
-#: redbot/cogs/admin/admin.py:268
+#: redbot/cogs/admin/admin.py:283
msgid "The announcement channel has been set to {channel.mention}"
-msgstr ""
+msgstr "Il canale per gli annunci è stato impostato su {channel.mention}"
-#: redbot/cogs/admin/admin.py:275
+#: redbot/cogs/admin/admin.py:290
#, docstring
msgid "Toggle announcements being enabled this server."
-msgstr ""
+msgstr "Attiva/disattiva gli annunci in questo server."
-#: redbot/cogs/admin/admin.py:281
+#: redbot/cogs/admin/admin.py:296
msgid "The server {guild.name} will receive announcements."
-msgstr ""
+msgstr "Il server {guild.name} riceverà gli annunci."
-#: redbot/cogs/admin/admin.py:285
+#: redbot/cogs/admin/admin.py:300
msgid "The server {guild.name} will not receive announcements."
-msgstr ""
+msgstr "Il server {guild.name} non riceverà gli annunci."
-#: redbot/cogs/admin/admin.py:311
+#: redbot/cogs/admin/admin.py:326
#, docstring
-msgid "Add a role to yourself.\n\n"
-" Server admins must have configured the role as user settable.\n\n"
-" NOTE: The role is case sensitive!\n"
-" "
+msgid "Add a role to yourself.\\n\\n Server admins must have configured the role as user settable.\\n\\n NOTE: The role is case sensitive!\\n "
msgstr ""
-#: redbot/cogs/admin/admin.py:322
+#: redbot/cogs/admin/admin.py:337
#, docstring
-msgid "Remove a selfrole from yourself.\n\n"
-" NOTE: The role is case sensitive!\n"
-" "
+msgid "Remove a selfrole from yourself.\\n\\n NOTE: The role is case sensitive!\\n "
msgstr ""
-#: redbot/cogs/admin/admin.py:332
+#: redbot/cogs/admin/admin.py:347
#, docstring
-msgid "Add a role to the list of available selfroles.\n\n"
-" NOTE: The role is case sensitive!\n"
-" "
+msgid "Add a role to the list of available selfroles.\\n\\n NOTE: The role is case sensitive!\\n "
msgstr ""
-#: redbot/cogs/admin/admin.py:340 redbot/cogs/admin/admin.py:352
+#: redbot/cogs/admin/admin.py:355 redbot/cogs/admin/admin.py:367
msgid "The selfroles list has been successfully modified."
-msgstr ""
+msgstr "La lista dei ruoli autoassegnabili e stata modificata."
-#: redbot/cogs/admin/admin.py:345
+#: redbot/cogs/admin/admin.py:360
#, docstring
-msgid "Remove a role from the list of available selfroles.\n\n"
-" NOTE: The role is case sensitive!\n"
-" "
+msgid "Remove a role from the list of available selfroles.\\n\\n NOTE: The role is case sensitive!\\n "
msgstr ""
-#: redbot/cogs/admin/admin.py:356
+#: redbot/cogs/admin/admin.py:371
#, docstring
-msgid "\n"
-" Lists all available selfroles.\n"
-" "
+msgid "\\n Lists all available selfroles.\\n "
msgstr ""
-#: redbot/cogs/admin/admin.py:362
-msgid "Available Selfroles:\n"
-"{selfroles}"
+#: redbot/cogs/admin/admin.py:377
+msgid "Available Selfroles:\\n{selfroles}"
msgstr ""
-#: redbot/cogs/admin/admin.py:379
+#: redbot/cogs/admin/admin.py:394
#, docstring
msgid "Lock a bot to its current servers only."
-msgstr ""
+msgstr "Blocca un bot ai suoi server attuali."
-#: redbot/cogs/admin/admin.py:384
+#: redbot/cogs/admin/admin.py:399
msgid "The bot is no longer serverlocked."
-msgstr ""
+msgstr "Il bot non è più bloccato ai server."
-#: redbot/cogs/admin/admin.py:386
+#: redbot/cogs/admin/admin.py:401
msgid "The bot is now serverlocked."
-msgstr ""
+msgstr "Il bot è bloccato ai server."
#: redbot/cogs/admin/announcer.py:70
msgid "I could not announce to server: {server.id}"
-msgstr ""
+msgstr "Non ho potuto annunciare al server: {server.id}"
#: redbot/cogs/admin/converters.py:25
msgid "The Admin cog is not loaded."
-msgstr ""
+msgstr "Il cog Admin non è caricato."
#: redbot/cogs/admin/converters.py:34
msgid "The provided role is not a valid selfrole."
-msgstr ""
+msgstr "Il ruolo fornito non è un ruolo autoassegnabile valido."
diff --git a/redbot/cogs/admin/locales/ja-JP.po b/redbot/cogs/admin/locales/ja-JP.po
index fdc719b15..5a3b85266 100644
--- a/redbot/cogs/admin/locales/ja-JP.po
+++ b/redbot/cogs/admin/locales/ja-JP.po
@@ -1,14 +1,14 @@
msgid ""
msgstr ""
"Project-Id-Version: red-discordbot\n"
-"POT-Creation-Date: 2019-01-11 02:18+0000\n"
-"PO-Revision-Date: 2019-02-25 03:07\n"
-"Last-Translator: Kowlin \n"
+"POT-Creation-Date: 2019-07-05 22:33+0200\n"
+"PO-Revision-Date: 2019-07-06 16:13\n"
+"Last-Translator: Robert Jansen (Kowlin)\n"
"Language-Team: Japanese\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"Generated-By: redgettext 2.2\n"
+"Generated-By: redgettext 3.0\n"
"Plural-Forms: nplurals=1; plural=0;\n"
"X-Generator: crowdin.com\n"
"X-Crowdin-Project: red-discordbot\n"
@@ -21,169 +21,154 @@ msgid "I attempted to do something that Discord denied me permissions for. Your
msgstr "私は不和が私に権限を拒否した何かをしようとしました。コマンドを正常に完了できませんでした。"
#: redbot/cogs/admin/admin.py:22
-msgid "I tried to add {role.name} to {member.display_name} but that role is higher than my highest role in the Discord hierarchy so I was unable to successfully add it. Please give me a higher role and try again."
-msgstr "{member.display_name} に {role.name} を追加してみましたが、その役割は不和階層で私の最高の役割よりも高いので、それを正常に追加できませんでした。私に高い役割を与えるし、もう一度やり直してください。"
+msgid "I tried to {verb} {role.name} to {member.display_name} but that role is higher than my highest role in the Discord hierarchy so I was unable to successfully add it. Please give me a higher role and try again."
+msgstr ""
#: redbot/cogs/admin/admin.py:29
-msgid "I tried to add {role.name} to {member.display_name} but that role is higher than your highest role in the Discord hierarchy so I was unable to successfully add it. Please get a higher role and try again."
+msgid "I tried to {verb} {role.name} to {member.display_name} but that role is higher than your highest role in the Discord hierarchy so I was unable to successfully add it. Please get a higher role and try again."
msgstr ""
#: redbot/cogs/admin/admin.py:36
+msgid "I tried to edit {role.name} but that role is higher than your highest role in the Discord hierarchy so I was unable to successfully add it. Please get a higher role and try again."
+msgstr ""
+
+#: redbot/cogs/admin/admin.py:43
msgid "I am already announcing something. If you would like to make a different announcement please use `{prefix}announce cancel` first."
msgstr ""
-#: redbot/cogs/admin/admin.py:46
+#: redbot/cogs/admin/admin.py:53
#, docstring
msgid "A collection of server administration utilities."
msgstr ""
-#: redbot/cogs/admin/admin.py:112
+#: redbot/cogs/admin/admin.py:115 redbot/cogs/admin/admin.py:160
+msgid "add"
+msgstr ""
+
+#: redbot/cogs/admin/admin.py:121
msgid "I successfully added {role.name} to {member.display_name}"
msgstr ""
-#: redbot/cogs/admin/admin.py:127
-msgid "I successfully removed {role.name} from {member.display_name}"
+#: redbot/cogs/admin/admin.py:132 redbot/cogs/admin/admin.py:180
+msgid "remove"
msgstr ""
#: redbot/cogs/admin/admin.py:138
-#, docstring
-msgid "Add a role to a user.\n\n"
-" If user is left blank it defaults to the author of the command.\n"
-" "
+msgid "I successfully removed {role.name} from {member.display_name}"
msgstr ""
-#: redbot/cogs/admin/admin.py:156
+#: redbot/cogs/admin/admin.py:149
#, docstring
-msgid "Remove a role from a user.\n\n"
-" If user is left blank it defaults to the author of the command.\n"
-" "
+msgid "Add a role to a user.\\n\\n If user is left blank it defaults to the author of the command.\\n "
msgstr ""
-#: redbot/cogs/admin/admin.py:172
+#: redbot/cogs/admin/admin.py:169
+#, docstring
+msgid "Remove a role from a user.\\n\\n If user is left blank it defaults to the author of the command.\\n "
+msgstr ""
+
+#: redbot/cogs/admin/admin.py:187
#, docstring
msgid "Edit role settings."
msgstr ""
-#: redbot/cogs/admin/admin.py:179
+#: redbot/cogs/admin/admin.py:194
#, docstring
-msgid "Edit a role's colour.\n\n"
-" Use double quotes if the role contains spaces.\n"
-" Colour must be in hexadecimal format.\n"
-" [Online colour picker](http://www.w3schools.com/colors/colors_picker.asp)\n\n"
-" Examples:\n"
-" `[p]editrole colour \"The Transistor\" #ff0000`\n"
-" `[p]editrole colour Test #ff9900`\n"
-" "
+msgid "Edit a role's colour.\\n\\n Use double quotes if the role contains spaces.\\n Colour must be in hexadecimal format.\\n [Online colour picker](http://www.w3schools.com/colors/colors_picker.asp)\\n\\n Examples:\\n `[p]editrole colour \\\"The Transistor\\\" #ff0000`\\n `[p]editrole colour Test #ff9900`\\n "
msgstr ""
-#: redbot/cogs/admin/admin.py:202 redbot/cogs/admin/admin.py:230
+#: redbot/cogs/admin/admin.py:217 redbot/cogs/admin/admin.py:245
msgid "Done."
msgstr ""
-#: redbot/cogs/admin/admin.py:207
+#: redbot/cogs/admin/admin.py:222
#, docstring
-msgid "Edit a role's name.\n\n"
-" Use double quotes if the role or the name contain spaces.\n\n"
-" Examples:\n"
-" `[p]editrole name \"The Transistor\" Test`\n"
-" "
-msgstr ""
-
-#: redbot/cogs/admin/admin.py:235
-#, docstring
-msgid "Announce a message to all servers the bot is in."
-msgstr ""
-
-#: redbot/cogs/admin/admin.py:242
-msgid "The announcement has begun."
+msgid "Edit a role's name.\\n\\n Use double quotes if the role or the name contain spaces.\\n\\n Examples:\\n `[p]editrole name \\\"The Transistor\\\" Test`\\n "
msgstr ""
#: redbot/cogs/admin/admin.py:250
#, docstring
+msgid "Announce a message to all servers the bot is in."
+msgstr ""
+
+#: redbot/cogs/admin/admin.py:257
+msgid "The announcement has begun."
+msgstr ""
+
+#: redbot/cogs/admin/admin.py:265
+#, docstring
msgid "Cancel a running announce."
msgstr ""
-#: redbot/cogs/admin/admin.py:256
+#: redbot/cogs/admin/admin.py:271
msgid "The current announcement has been cancelled."
msgstr ""
-#: redbot/cogs/admin/admin.py:262
+#: redbot/cogs/admin/admin.py:277
#, docstring
msgid "Change the channel to which the bot makes announcements."
msgstr ""
-#: redbot/cogs/admin/admin.py:268
+#: redbot/cogs/admin/admin.py:283
msgid "The announcement channel has been set to {channel.mention}"
msgstr ""
-#: redbot/cogs/admin/admin.py:275
+#: redbot/cogs/admin/admin.py:290
#, docstring
msgid "Toggle announcements being enabled this server."
msgstr ""
-#: redbot/cogs/admin/admin.py:281
+#: redbot/cogs/admin/admin.py:296
msgid "The server {guild.name} will receive announcements."
msgstr ""
-#: redbot/cogs/admin/admin.py:285
+#: redbot/cogs/admin/admin.py:300
msgid "The server {guild.name} will not receive announcements."
msgstr ""
-#: redbot/cogs/admin/admin.py:311
+#: redbot/cogs/admin/admin.py:326
#, docstring
-msgid "Add a role to yourself.\n\n"
-" Server admins must have configured the role as user settable.\n\n"
-" NOTE: The role is case sensitive!\n"
-" "
+msgid "Add a role to yourself.\\n\\n Server admins must have configured the role as user settable.\\n\\n NOTE: The role is case sensitive!\\n "
msgstr ""
-#: redbot/cogs/admin/admin.py:322
+#: redbot/cogs/admin/admin.py:337
#, docstring
-msgid "Remove a selfrole from yourself.\n\n"
-" NOTE: The role is case sensitive!\n"
-" "
+msgid "Remove a selfrole from yourself.\\n\\n NOTE: The role is case sensitive!\\n "
msgstr ""
-#: redbot/cogs/admin/admin.py:332
+#: redbot/cogs/admin/admin.py:347
#, docstring
-msgid "Add a role to the list of available selfroles.\n\n"
-" NOTE: The role is case sensitive!\n"
-" "
+msgid "Add a role to the list of available selfroles.\\n\\n NOTE: The role is case sensitive!\\n "
msgstr ""
-#: redbot/cogs/admin/admin.py:340 redbot/cogs/admin/admin.py:352
+#: redbot/cogs/admin/admin.py:355 redbot/cogs/admin/admin.py:367
msgid "The selfroles list has been successfully modified."
msgstr ""
-#: redbot/cogs/admin/admin.py:345
+#: redbot/cogs/admin/admin.py:360
#, docstring
-msgid "Remove a role from the list of available selfroles.\n\n"
-" NOTE: The role is case sensitive!\n"
-" "
+msgid "Remove a role from the list of available selfroles.\\n\\n NOTE: The role is case sensitive!\\n "
msgstr ""
-#: redbot/cogs/admin/admin.py:356
+#: redbot/cogs/admin/admin.py:371
#, docstring
-msgid "\n"
-" Lists all available selfroles.\n"
-" "
+msgid "\\n Lists all available selfroles.\\n "
msgstr ""
-#: redbot/cogs/admin/admin.py:362
-msgid "Available Selfroles:\n"
-"{selfroles}"
+#: redbot/cogs/admin/admin.py:377
+msgid "Available Selfroles:\\n{selfroles}"
msgstr ""
-#: redbot/cogs/admin/admin.py:379
+#: redbot/cogs/admin/admin.py:394
#, docstring
msgid "Lock a bot to its current servers only."
msgstr ""
-#: redbot/cogs/admin/admin.py:384
+#: redbot/cogs/admin/admin.py:399
msgid "The bot is no longer serverlocked."
msgstr ""
-#: redbot/cogs/admin/admin.py:386
+#: redbot/cogs/admin/admin.py:401
msgid "The bot is now serverlocked."
msgstr ""
diff --git a/redbot/cogs/admin/locales/ko-KR.po b/redbot/cogs/admin/locales/ko-KR.po
index 06b99fc92..1cead1779 100644
--- a/redbot/cogs/admin/locales/ko-KR.po
+++ b/redbot/cogs/admin/locales/ko-KR.po
@@ -1,14 +1,14 @@
msgid ""
msgstr ""
"Project-Id-Version: red-discordbot\n"
-"POT-Creation-Date: 2019-01-11 02:18+0000\n"
-"PO-Revision-Date: 2019-02-25 03:07\n"
-"Last-Translator: Kowlin \n"
+"POT-Creation-Date: 2019-07-05 22:33+0200\n"
+"PO-Revision-Date: 2019-07-06 16:13\n"
+"Last-Translator: Robert Jansen (Kowlin)\n"
"Language-Team: Korean\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"Generated-By: redgettext 2.2\n"
+"Generated-By: redgettext 3.0\n"
"Plural-Forms: nplurals=1; plural=0;\n"
"X-Generator: crowdin.com\n"
"X-Crowdin-Project: red-discordbot\n"
@@ -21,170 +21,154 @@ msgid "I attempted to do something that Discord denied me permissions for. Your
msgstr ""
#: redbot/cogs/admin/admin.py:22
-msgid "I tried to add {role.name} to {member.display_name} but that role is higher than my highest role in the Discord hierarchy so I was unable to successfully add it. Please give me a higher role and try again."
+msgid "I tried to {verb} {role.name} to {member.display_name} but that role is higher than my highest role in the Discord hierarchy so I was unable to successfully add it. Please give me a higher role and try again."
msgstr ""
#: redbot/cogs/admin/admin.py:29
-msgid "I tried to add {role.name} to {member.display_name} but that role is higher than your highest role in the Discord hierarchy so I was unable to successfully add it. Please get a higher role and try again."
+msgid "I tried to {verb} {role.name} to {member.display_name} but that role is higher than your highest role in the Discord hierarchy so I was unable to successfully add it. Please get a higher role and try again."
msgstr ""
#: redbot/cogs/admin/admin.py:36
+msgid "I tried to edit {role.name} but that role is higher than your highest role in the Discord hierarchy so I was unable to successfully add it. Please get a higher role and try again."
+msgstr ""
+
+#: redbot/cogs/admin/admin.py:43
msgid "I am already announcing something. If you would like to make a different announcement please use `{prefix}announce cancel` first."
msgstr ""
-#: redbot/cogs/admin/admin.py:46
+#: redbot/cogs/admin/admin.py:53
#, docstring
msgid "A collection of server administration utilities."
msgstr ""
-#: redbot/cogs/admin/admin.py:112
+#: redbot/cogs/admin/admin.py:115 redbot/cogs/admin/admin.py:160
+msgid "add"
+msgstr ""
+
+#: redbot/cogs/admin/admin.py:121
msgid "I successfully added {role.name} to {member.display_name}"
msgstr ""
-#: redbot/cogs/admin/admin.py:127
-msgid "I successfully removed {role.name} from {member.display_name}"
+#: redbot/cogs/admin/admin.py:132 redbot/cogs/admin/admin.py:180
+msgid "remove"
msgstr ""
#: redbot/cogs/admin/admin.py:138
-#, docstring
-msgid "Add a role to a user.\n\n"
-" If user is left blank it defaults to the author of the command.\n"
-" "
+msgid "I successfully removed {role.name} from {member.display_name}"
msgstr ""
-#: redbot/cogs/admin/admin.py:156
+#: redbot/cogs/admin/admin.py:149
#, docstring
-msgid "Remove a role from a user.\n\n"
-" If user is left blank it defaults to the author of the command.\n"
-" "
+msgid "Add a role to a user.\\n\\n If user is left blank it defaults to the author of the command.\\n "
msgstr ""
-#: redbot/cogs/admin/admin.py:172
+#: redbot/cogs/admin/admin.py:169
+#, docstring
+msgid "Remove a role from a user.\\n\\n If user is left blank it defaults to the author of the command.\\n "
+msgstr ""
+
+#: redbot/cogs/admin/admin.py:187
#, docstring
msgid "Edit role settings."
msgstr ""
-#: redbot/cogs/admin/admin.py:179
+#: redbot/cogs/admin/admin.py:194
#, docstring
-msgid "Edit a role's colour.\n\n"
-" Use double quotes if the role contains spaces.\n"
-" Colour must be in hexadecimal format.\n"
-" [Online colour picker](http://www.w3schools.com/colors/colors_picker.asp)\n\n"
-" Examples:\n"
-" `[p]editrole colour \"The Transistor\" #ff0000`\n"
-" `[p]editrole colour Test #ff9900`\n"
-" "
+msgid "Edit a role's colour.\\n\\n Use double quotes if the role contains spaces.\\n Colour must be in hexadecimal format.\\n [Online colour picker](http://www.w3schools.com/colors/colors_picker.asp)\\n\\n Examples:\\n `[p]editrole colour \\\"The Transistor\\\" #ff0000`\\n `[p]editrole colour Test #ff9900`\\n "
msgstr ""
-#: redbot/cogs/admin/admin.py:202 redbot/cogs/admin/admin.py:230
+#: redbot/cogs/admin/admin.py:217 redbot/cogs/admin/admin.py:245
msgid "Done."
-msgstr ""
+msgstr "다 했어요."
-#: redbot/cogs/admin/admin.py:207
+#: redbot/cogs/admin/admin.py:222
#, docstring
-msgid "Edit a role's name.\n\n"
-" Use double quotes if the role or the name contain spaces.\n\n"
-" Examples:\n"
-" `[p]editrole name \"The Transistor\" Test`\n"
-" "
-msgstr ""
-
-#: redbot/cogs/admin/admin.py:235
-#, docstring
-msgid "Announce a message to all servers the bot is in."
-msgstr ""
-
-#: redbot/cogs/admin/admin.py:242
-msgid "The announcement has begun."
+msgid "Edit a role's name.\\n\\n Use double quotes if the role or the name contain spaces.\\n\\n Examples:\\n `[p]editrole name \\\"The Transistor\\\" Test`\\n "
msgstr ""
#: redbot/cogs/admin/admin.py:250
#, docstring
+msgid "Announce a message to all servers the bot is in."
+msgstr ""
+
+#: redbot/cogs/admin/admin.py:257
+msgid "The announcement has begun."
+msgstr ""
+
+#: redbot/cogs/admin/admin.py:265
+#, docstring
msgid "Cancel a running announce."
msgstr ""
-#: redbot/cogs/admin/admin.py:256
+#: redbot/cogs/admin/admin.py:271
msgid "The current announcement has been cancelled."
msgstr ""
-#: redbot/cogs/admin/admin.py:262
+#: redbot/cogs/admin/admin.py:277
#, docstring
msgid "Change the channel to which the bot makes announcements."
msgstr ""
-#: redbot/cogs/admin/admin.py:268
+#: redbot/cogs/admin/admin.py:283
msgid "The announcement channel has been set to {channel.mention}"
msgstr ""
-#: redbot/cogs/admin/admin.py:275
+#: redbot/cogs/admin/admin.py:290
#, docstring
msgid "Toggle announcements being enabled this server."
msgstr ""
-#: redbot/cogs/admin/admin.py:281
+#: redbot/cogs/admin/admin.py:296
msgid "The server {guild.name} will receive announcements."
msgstr ""
-#: redbot/cogs/admin/admin.py:285
+#: redbot/cogs/admin/admin.py:300
msgid "The server {guild.name} will not receive announcements."
msgstr ""
-#: redbot/cogs/admin/admin.py:311
+#: redbot/cogs/admin/admin.py:326
#, docstring
-msgid "Add a role to yourself.\n\n"
-" Server admins must have configured the role as user settable.\n\n"
-" NOTE: The role is case sensitive!\n"
-" "
+msgid "Add a role to yourself.\\n\\n Server admins must have configured the role as user settable.\\n\\n NOTE: The role is case sensitive!\\n "
msgstr ""
-#: redbot/cogs/admin/admin.py:322
+#: redbot/cogs/admin/admin.py:337
#, docstring
-msgid "Remove a selfrole from yourself.\n\n"
-" NOTE: The role is case sensitive!\n"
-" "
+msgid "Remove a selfrole from yourself.\\n\\n NOTE: The role is case sensitive!\\n "
msgstr ""
-#: redbot/cogs/admin/admin.py:332
+#: redbot/cogs/admin/admin.py:347
#, docstring
-msgid "Add a role to the list of available selfroles.\n\n"
-" NOTE: The role is case sensitive!\n"
-" "
+msgid "Add a role to the list of available selfroles.\\n\\n NOTE: The role is case sensitive!\\n "
msgstr ""
-#: redbot/cogs/admin/admin.py:340 redbot/cogs/admin/admin.py:352
+#: redbot/cogs/admin/admin.py:355 redbot/cogs/admin/admin.py:367
msgid "The selfroles list has been successfully modified."
msgstr ""
-#: redbot/cogs/admin/admin.py:345
+#: redbot/cogs/admin/admin.py:360
#, docstring
-msgid "Remove a role from the list of available selfroles.\n\n"
-" NOTE: The role is case sensitive!\n"
-" "
+msgid "Remove a role from the list of available selfroles.\\n\\n NOTE: The role is case sensitive!\\n "
msgstr ""
-#: redbot/cogs/admin/admin.py:356
+#: redbot/cogs/admin/admin.py:371
#, docstring
-msgid "\n"
-" Lists all available selfroles.\n"
-" "
-msgstr "\n"
-"사용 가능한 역할들을 모두 나열할게요. "
-
-#: redbot/cogs/admin/admin.py:362
-msgid "Available Selfroles:\n"
-"{selfroles}"
+msgid "\\n Lists all available selfroles.\\n "
msgstr ""
-#: redbot/cogs/admin/admin.py:379
+#: redbot/cogs/admin/admin.py:377
+msgid "Available Selfroles:\\n{selfroles}"
+msgstr ""
+
+#: redbot/cogs/admin/admin.py:394
#, docstring
msgid "Lock a bot to its current servers only."
msgstr ""
-#: redbot/cogs/admin/admin.py:384
+#: redbot/cogs/admin/admin.py:399
msgid "The bot is no longer serverlocked."
msgstr ""
-#: redbot/cogs/admin/admin.py:386
+#: redbot/cogs/admin/admin.py:401
msgid "The bot is now serverlocked."
msgstr ""
diff --git a/redbot/cogs/admin/locales/lol-US.po b/redbot/cogs/admin/locales/lol-US.po
index d4f29058a..235559d1b 100644
--- a/redbot/cogs/admin/locales/lol-US.po
+++ b/redbot/cogs/admin/locales/lol-US.po
@@ -1,14 +1,14 @@
msgid ""
msgstr ""
"Project-Id-Version: red-discordbot\n"
-"POT-Creation-Date: 2019-01-11 02:18+0000\n"
-"PO-Revision-Date: 2019-02-25 03:08\n"
-"Last-Translator: Kowlin \n"
+"POT-Creation-Date: 2019-07-05 22:33+0200\n"
+"PO-Revision-Date: 2019-07-06 16:14\n"
+"Last-Translator: Robert Jansen (Kowlin)\n"
"Language-Team: LOLCAT\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"Generated-By: redgettext 2.2\n"
+"Generated-By: redgettext 3.0\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: crowdin.com\n"
"X-Crowdin-Project: red-discordbot\n"
@@ -21,169 +21,154 @@ msgid "I attempted to do something that Discord denied me permissions for. Your
msgstr "Discord sayed I can't do sometingz. Ur command faild 2 complete."
#: redbot/cogs/admin/admin.py:22
-msgid "I tried to add {role.name} to {member.display_name} but that role is higher than my highest role in the Discord hierarchy so I was unable to successfully add it. Please give me a higher role and try again."
+msgid "I tried to {verb} {role.name} to {member.display_name} but that role is higher than my highest role in the Discord hierarchy so I was unable to successfully add it. Please give me a higher role and try again."
msgstr ""
#: redbot/cogs/admin/admin.py:29
-msgid "I tried to add {role.name} to {member.display_name} but that role is higher than your highest role in the Discord hierarchy so I was unable to successfully add it. Please get a higher role and try again."
+msgid "I tried to {verb} {role.name} to {member.display_name} but that role is higher than your highest role in the Discord hierarchy so I was unable to successfully add it. Please get a higher role and try again."
msgstr ""
#: redbot/cogs/admin/admin.py:36
+msgid "I tried to edit {role.name} but that role is higher than your highest role in the Discord hierarchy so I was unable to successfully add it. Please get a higher role and try again."
+msgstr ""
+
+#: redbot/cogs/admin/admin.py:43
msgid "I am already announcing something. If you would like to make a different announcement please use `{prefix}announce cancel` first."
msgstr ""
-#: redbot/cogs/admin/admin.py:46
+#: redbot/cogs/admin/admin.py:53
#, docstring
msgid "A collection of server administration utilities."
msgstr ""
-#: redbot/cogs/admin/admin.py:112
+#: redbot/cogs/admin/admin.py:115 redbot/cogs/admin/admin.py:160
+msgid "add"
+msgstr ""
+
+#: redbot/cogs/admin/admin.py:121
msgid "I successfully added {role.name} to {member.display_name}"
msgstr ""
-#: redbot/cogs/admin/admin.py:127
-msgid "I successfully removed {role.name} from {member.display_name}"
+#: redbot/cogs/admin/admin.py:132 redbot/cogs/admin/admin.py:180
+msgid "remove"
msgstr ""
#: redbot/cogs/admin/admin.py:138
-#, docstring
-msgid "Add a role to a user.\n\n"
-" If user is left blank it defaults to the author of the command.\n"
-" "
+msgid "I successfully removed {role.name} from {member.display_name}"
msgstr ""
-#: redbot/cogs/admin/admin.py:156
+#: redbot/cogs/admin/admin.py:149
#, docstring
-msgid "Remove a role from a user.\n\n"
-" If user is left blank it defaults to the author of the command.\n"
-" "
+msgid "Add a role to a user.\\n\\n If user is left blank it defaults to the author of the command.\\n "
msgstr ""
-#: redbot/cogs/admin/admin.py:172
+#: redbot/cogs/admin/admin.py:169
+#, docstring
+msgid "Remove a role from a user.\\n\\n If user is left blank it defaults to the author of the command.\\n "
+msgstr ""
+
+#: redbot/cogs/admin/admin.py:187
#, docstring
msgid "Edit role settings."
msgstr ""
-#: redbot/cogs/admin/admin.py:179
+#: redbot/cogs/admin/admin.py:194
#, docstring
-msgid "Edit a role's colour.\n\n"
-" Use double quotes if the role contains spaces.\n"
-" Colour must be in hexadecimal format.\n"
-" [Online colour picker](http://www.w3schools.com/colors/colors_picker.asp)\n\n"
-" Examples:\n"
-" `[p]editrole colour \"The Transistor\" #ff0000`\n"
-" `[p]editrole colour Test #ff9900`\n"
-" "
+msgid "Edit a role's colour.\\n\\n Use double quotes if the role contains spaces.\\n Colour must be in hexadecimal format.\\n [Online colour picker](http://www.w3schools.com/colors/colors_picker.asp)\\n\\n Examples:\\n `[p]editrole colour \\\"The Transistor\\\" #ff0000`\\n `[p]editrole colour Test #ff9900`\\n "
msgstr ""
-#: redbot/cogs/admin/admin.py:202 redbot/cogs/admin/admin.py:230
+#: redbot/cogs/admin/admin.py:217 redbot/cogs/admin/admin.py:245
msgid "Done."
msgstr ""
-#: redbot/cogs/admin/admin.py:207
+#: redbot/cogs/admin/admin.py:222
#, docstring
-msgid "Edit a role's name.\n\n"
-" Use double quotes if the role or the name contain spaces.\n\n"
-" Examples:\n"
-" `[p]editrole name \"The Transistor\" Test`\n"
-" "
-msgstr ""
-
-#: redbot/cogs/admin/admin.py:235
-#, docstring
-msgid "Announce a message to all servers the bot is in."
-msgstr ""
-
-#: redbot/cogs/admin/admin.py:242
-msgid "The announcement has begun."
+msgid "Edit a role's name.\\n\\n Use double quotes if the role or the name contain spaces.\\n\\n Examples:\\n `[p]editrole name \\\"The Transistor\\\" Test`\\n "
msgstr ""
#: redbot/cogs/admin/admin.py:250
#, docstring
+msgid "Announce a message to all servers the bot is in."
+msgstr ""
+
+#: redbot/cogs/admin/admin.py:257
+msgid "The announcement has begun."
+msgstr ""
+
+#: redbot/cogs/admin/admin.py:265
+#, docstring
msgid "Cancel a running announce."
msgstr ""
-#: redbot/cogs/admin/admin.py:256
+#: redbot/cogs/admin/admin.py:271
msgid "The current announcement has been cancelled."
msgstr ""
-#: redbot/cogs/admin/admin.py:262
+#: redbot/cogs/admin/admin.py:277
#, docstring
msgid "Change the channel to which the bot makes announcements."
msgstr ""
-#: redbot/cogs/admin/admin.py:268
+#: redbot/cogs/admin/admin.py:283
msgid "The announcement channel has been set to {channel.mention}"
msgstr ""
-#: redbot/cogs/admin/admin.py:275
+#: redbot/cogs/admin/admin.py:290
#, docstring
msgid "Toggle announcements being enabled this server."
msgstr ""
-#: redbot/cogs/admin/admin.py:281
+#: redbot/cogs/admin/admin.py:296
msgid "The server {guild.name} will receive announcements."
msgstr ""
-#: redbot/cogs/admin/admin.py:285
+#: redbot/cogs/admin/admin.py:300
msgid "The server {guild.name} will not receive announcements."
msgstr ""
-#: redbot/cogs/admin/admin.py:311
+#: redbot/cogs/admin/admin.py:326
#, docstring
-msgid "Add a role to yourself.\n\n"
-" Server admins must have configured the role as user settable.\n\n"
-" NOTE: The role is case sensitive!\n"
-" "
+msgid "Add a role to yourself.\\n\\n Server admins must have configured the role as user settable.\\n\\n NOTE: The role is case sensitive!\\n "
msgstr ""
-#: redbot/cogs/admin/admin.py:322
+#: redbot/cogs/admin/admin.py:337
#, docstring
-msgid "Remove a selfrole from yourself.\n\n"
-" NOTE: The role is case sensitive!\n"
-" "
+msgid "Remove a selfrole from yourself.\\n\\n NOTE: The role is case sensitive!\\n "
msgstr ""
-#: redbot/cogs/admin/admin.py:332
+#: redbot/cogs/admin/admin.py:347
#, docstring
-msgid "Add a role to the list of available selfroles.\n\n"
-" NOTE: The role is case sensitive!\n"
-" "
+msgid "Add a role to the list of available selfroles.\\n\\n NOTE: The role is case sensitive!\\n "
msgstr ""
-#: redbot/cogs/admin/admin.py:340 redbot/cogs/admin/admin.py:352
+#: redbot/cogs/admin/admin.py:355 redbot/cogs/admin/admin.py:367
msgid "The selfroles list has been successfully modified."
msgstr ""
-#: redbot/cogs/admin/admin.py:345
+#: redbot/cogs/admin/admin.py:360
#, docstring
-msgid "Remove a role from the list of available selfroles.\n\n"
-" NOTE: The role is case sensitive!\n"
-" "
+msgid "Remove a role from the list of available selfroles.\\n\\n NOTE: The role is case sensitive!\\n "
msgstr ""
-#: redbot/cogs/admin/admin.py:356
+#: redbot/cogs/admin/admin.py:371
#, docstring
-msgid "\n"
-" Lists all available selfroles.\n"
-" "
+msgid "\\n Lists all available selfroles.\\n "
msgstr ""
-#: redbot/cogs/admin/admin.py:362
-msgid "Available Selfroles:\n"
-"{selfroles}"
+#: redbot/cogs/admin/admin.py:377
+msgid "Available Selfroles:\\n{selfroles}"
msgstr ""
-#: redbot/cogs/admin/admin.py:379
+#: redbot/cogs/admin/admin.py:394
#, docstring
msgid "Lock a bot to its current servers only."
msgstr ""
-#: redbot/cogs/admin/admin.py:384
+#: redbot/cogs/admin/admin.py:399
msgid "The bot is no longer serverlocked."
msgstr ""
-#: redbot/cogs/admin/admin.py:386
+#: redbot/cogs/admin/admin.py:401
msgid "The bot is now serverlocked."
msgstr ""
diff --git a/redbot/cogs/admin/locales/nl-NL.po b/redbot/cogs/admin/locales/nl-NL.po
index 377f7d0e1..1c00f9f86 100644
--- a/redbot/cogs/admin/locales/nl-NL.po
+++ b/redbot/cogs/admin/locales/nl-NL.po
@@ -1,14 +1,14 @@
msgid ""
msgstr ""
"Project-Id-Version: red-discordbot\n"
-"POT-Creation-Date: 2019-01-11 02:18+0000\n"
-"PO-Revision-Date: 2019-02-25 03:07\n"
-"Last-Translator: Kowlin \n"
+"POT-Creation-Date: 2019-07-05 22:33+0200\n"
+"PO-Revision-Date: 2019-07-06 16:13\n"
+"Last-Translator: Robert Jansen (Kowlin)\n"
"Language-Team: Dutch\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"Generated-By: redgettext 2.2\n"
+"Generated-By: redgettext 3.0\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: crowdin.com\n"
"X-Crowdin-Project: red-discordbot\n"
@@ -21,189 +21,154 @@ msgid "I attempted to do something that Discord denied me permissions for. Your
msgstr "Ik probeerde iets te doen, maar Discord weigerde mij toestemming te geven. Je command is geslaagd te mislukken."
#: redbot/cogs/admin/admin.py:22
-msgid "I tried to add {role.name} to {member.display_name} but that role is higher than my highest role in the Discord hierarchy so I was unable to successfully add it. Please give me a higher role and try again."
-msgstr "Ik probeerder {role.name} toe te voegen aan {member.display_name}, maar die rol is waarschijnlijk een hogere rol dan die van mij. Ik kan de rol daarom niet toevoegen. Geef mij een hogere rol en probeer het nog eens."
+msgid "I tried to {verb} {role.name} to {member.display_name} but that role is higher than my highest role in the Discord hierarchy so I was unable to successfully add it. Please give me a higher role and try again."
+msgstr ""
#: redbot/cogs/admin/admin.py:29
-msgid "I tried to add {role.name} to {member.display_name} but that role is higher than your highest role in the Discord hierarchy so I was unable to successfully add it. Please get a higher role and try again."
-msgstr "Ik probeerder {role.name} toe te voegen aan {member.display_name}, maar die rol is waarschijnlijk een hogere rol dan die van jou. Ik kan de rol daarom niet toevoegen. Krijg een hogere rol en probeer het nog eens."
+msgid "I tried to {verb} {role.name} to {member.display_name} but that role is higher than your highest role in the Discord hierarchy so I was unable to successfully add it. Please get a higher role and try again."
+msgstr ""
#: redbot/cogs/admin/admin.py:36
+msgid "I tried to edit {role.name} but that role is higher than your highest role in the Discord hierarchy so I was unable to successfully add it. Please get a higher role and try again."
+msgstr ""
+
+#: redbot/cogs/admin/admin.py:43
msgid "I am already announcing something. If you would like to make a different announcement please use `{prefix}announce cancel` first."
msgstr "Ik ben al iets aan het aankondigen. Als je iets anders wilt aankondigen, voer dan eerst deze command uit: '{prefix}announce cancel'."
-#: redbot/cogs/admin/admin.py:46
+#: redbot/cogs/admin/admin.py:53
#, docstring
msgid "A collection of server administration utilities."
msgstr "Een collectie van de server administratie voorzieningen."
-#: redbot/cogs/admin/admin.py:112
+#: redbot/cogs/admin/admin.py:115 redbot/cogs/admin/admin.py:160
+msgid "add"
+msgstr ""
+
+#: redbot/cogs/admin/admin.py:121
msgid "I successfully added {role.name} to {member.display_name}"
msgstr "Ik heb succesvol {role.name} toegevoegd aan {member.display_name}"
-#: redbot/cogs/admin/admin.py:127
+#: redbot/cogs/admin/admin.py:132 redbot/cogs/admin/admin.py:180
+msgid "remove"
+msgstr ""
+
+#: redbot/cogs/admin/admin.py:138
msgid "I successfully removed {role.name} from {member.display_name}"
msgstr "Ik heb succesvol {role.name} verwijderd van {member.display_name}"
-#: redbot/cogs/admin/admin.py:138
+#: redbot/cogs/admin/admin.py:149
#, docstring
-msgid "Add a role to a user.\n\n"
-" If user is left blank it defaults to the author of the command.\n"
-" "
-msgstr "Een rol toevoegen aan een lid.\n\n"
-" Als je geen lid invult, dan is het automatisch de auteur van de command."
+msgid "Add a role to a user.\\n\\n If user is left blank it defaults to the author of the command.\\n "
+msgstr ""
-#: redbot/cogs/admin/admin.py:156
+#: redbot/cogs/admin/admin.py:169
#, docstring
-msgid "Remove a role from a user.\n\n"
-" If user is left blank it defaults to the author of the command.\n"
-" "
-msgstr "Een rol verwijderen van een lid.\n\n"
-" Als je geen lid invult, dan is het automatisch de auteur van de command."
+msgid "Remove a role from a user.\\n\\n If user is left blank it defaults to the author of the command.\\n "
+msgstr ""
-#: redbot/cogs/admin/admin.py:172
+#: redbot/cogs/admin/admin.py:187
#, docstring
msgid "Edit role settings."
msgstr "Rol instellingen bewerken."
-#: redbot/cogs/admin/admin.py:179
+#: redbot/cogs/admin/admin.py:194
#, docstring
-msgid "Edit a role's colour.\n\n"
-" Use double quotes if the role contains spaces.\n"
-" Colour must be in hexadecimal format.\n"
-" [Online colour picker](http://www.w3schools.com/colors/colors_picker.asp)\n\n"
-" Examples:\n"
-" `[p]editrole colour \"The Transistor\" #ff0000`\n"
-" `[p]editrole colour Test #ff9900`\n"
-" "
-msgstr "Een rolkleur bewerken.\n\n"
-" Gebruik dubbele aanhalingstekens als de rol een spatie bevat.\n"
-" Een kleur moet van heximaal formaat zijn.\n"
-" [Online colour picker](http://www.w3schools.com/colors/colors_picker.asp)\n\n"
-" Voorbeelden:\n"
-" `[p]editrole colour \"DP Bots\" #ff0000`\n"
-" `[p]editrole colour Teamlid #ff9900`\n"
-" "
+msgid "Edit a role's colour.\\n\\n Use double quotes if the role contains spaces.\\n Colour must be in hexadecimal format.\\n [Online colour picker](http://www.w3schools.com/colors/colors_picker.asp)\\n\\n Examples:\\n `[p]editrole colour \\\"The Transistor\\\" #ff0000`\\n `[p]editrole colour Test #ff9900`\\n "
+msgstr ""
-#: redbot/cogs/admin/admin.py:202 redbot/cogs/admin/admin.py:230
+#: redbot/cogs/admin/admin.py:217 redbot/cogs/admin/admin.py:245
msgid "Done."
msgstr "Klaar."
-#: redbot/cogs/admin/admin.py:207
+#: redbot/cogs/admin/admin.py:222
#, docstring
-msgid "Edit a role's name.\n\n"
-" Use double quotes if the role or the name contain spaces.\n\n"
-" Examples:\n"
-" `[p]editrole name \"The Transistor\" Test`\n"
-" "
-msgstr "Een rolnamen bewerken.\n\n"
-" Gebruik dubbele aanhalingstekens als de rol een spatie bevat.\n\n"
-" Voorbeeld: \n"
-" `[p]editrole name \"DP Bots\" Bots`\n"
-" "
+msgid "Edit a role's name.\\n\\n Use double quotes if the role or the name contain spaces.\\n\\n Examples:\\n `[p]editrole name \\\"The Transistor\\\" Test`\\n "
+msgstr ""
-#: redbot/cogs/admin/admin.py:235
+#: redbot/cogs/admin/admin.py:250
#, docstring
msgid "Announce a message to all servers the bot is in."
msgstr "Kondig een bericht aan in alle servers."
-#: redbot/cogs/admin/admin.py:242
+#: redbot/cogs/admin/admin.py:257
msgid "The announcement has begun."
msgstr "De aankondiging is begonnen."
-#: redbot/cogs/admin/admin.py:250
+#: redbot/cogs/admin/admin.py:265
#, docstring
msgid "Cancel a running announce."
msgstr "Annuleer een huidige aankondiging."
-#: redbot/cogs/admin/admin.py:256
+#: redbot/cogs/admin/admin.py:271
msgid "The current announcement has been cancelled."
msgstr "De huidige aankondiging is geannuleerd."
-#: redbot/cogs/admin/admin.py:262
+#: redbot/cogs/admin/admin.py:277
#, docstring
msgid "Change the channel to which the bot makes announcements."
msgstr "Bewerk het kanaal waar de bot aankondigingen maakt."
-#: redbot/cogs/admin/admin.py:268
+#: redbot/cogs/admin/admin.py:283
msgid "The announcement channel has been set to {channel.mention}"
msgstr "Het aankondigingskanaal is aangepast naar {channel.mention}"
-#: redbot/cogs/admin/admin.py:275
+#: redbot/cogs/admin/admin.py:290
#, docstring
msgid "Toggle announcements being enabled this server."
msgstr "Aankondigingen zijn geactiveerd in deze server."
-#: redbot/cogs/admin/admin.py:281
+#: redbot/cogs/admin/admin.py:296
msgid "The server {guild.name} will receive announcements."
msgstr "De server {guild.name} ontvangt aankondigingen."
-#: redbot/cogs/admin/admin.py:285
+#: redbot/cogs/admin/admin.py:300
msgid "The server {guild.name} will not receive announcements."
msgstr "De server {guild.name} ontvangt geen aankondigingen."
-#: redbot/cogs/admin/admin.py:311
+#: redbot/cogs/admin/admin.py:326
#, docstring
-msgid "Add a role to yourself.\n\n"
-" Server admins must have configured the role as user settable.\n\n"
-" NOTE: The role is case sensitive!\n"
-" "
-msgstr "Voeg een rol aan jezelf toe. \n\n"
-" Server teamleden moeten de rol als een user settable.\n\n"
-" LET OP: De rolnaam is hoofdlettergevoelig. "
+msgid "Add a role to yourself.\\n\\n Server admins must have configured the role as user settable.\\n\\n NOTE: The role is case sensitive!\\n "
+msgstr ""
-#: redbot/cogs/admin/admin.py:322
+#: redbot/cogs/admin/admin.py:337
#, docstring
-msgid "Remove a selfrole from yourself.\n\n"
-" NOTE: The role is case sensitive!\n"
-" "
-msgstr "Verwijder een rol van jezelf.\n\n"
-" LET OP: De rolnaam is hoofdlettergevoelig. "
+msgid "Remove a selfrole from yourself.\\n\\n NOTE: The role is case sensitive!\\n "
+msgstr ""
-#: redbot/cogs/admin/admin.py:332
+#: redbot/cogs/admin/admin.py:347
#, docstring
-msgid "Add a role to the list of available selfroles.\n\n"
-" NOTE: The role is case sensitive!\n"
-" "
-msgstr "Voeg een rol toe aan de lijst met beschikbare selfroles. \n\n"
-" OPMERKING: De rol is hoofdlettergevoelig!"
+msgid "Add a role to the list of available selfroles.\\n\\n NOTE: The role is case sensitive!\\n "
+msgstr ""
-#: redbot/cogs/admin/admin.py:340 redbot/cogs/admin/admin.py:352
+#: redbot/cogs/admin/admin.py:355 redbot/cogs/admin/admin.py:367
msgid "The selfroles list has been successfully modified."
msgstr "De selfroles lijst is succesvol aangepast."
-#: redbot/cogs/admin/admin.py:345
+#: redbot/cogs/admin/admin.py:360
#, docstring
-msgid "Remove a role from the list of available selfroles.\n\n"
-" NOTE: The role is case sensitive!\n"
-" "
-msgstr "Verwijder een rol uit de lijst met beschikbare selfroles. \n\n"
-" OPMERKING: De rol is hoofdlettergevoelig!"
+msgid "Remove a role from the list of available selfroles.\\n\\n NOTE: The role is case sensitive!\\n "
+msgstr ""
-#: redbot/cogs/admin/admin.py:356
+#: redbot/cogs/admin/admin.py:371
#, docstring
-msgid "\n"
-" Lists all available selfroles.\n"
-" "
-msgstr "\n"
-"Laat alle beschikbare selfroles zien."
+msgid "\\n Lists all available selfroles.\\n "
+msgstr ""
-#: redbot/cogs/admin/admin.py:362
-msgid "Available Selfroles:\n"
-"{selfroles}"
-msgstr "Beschikbare Selfroles:\n"
-"{selfroles}"
+#: redbot/cogs/admin/admin.py:377
+msgid "Available Selfroles:\\n{selfroles}"
+msgstr ""
-#: redbot/cogs/admin/admin.py:379
+#: redbot/cogs/admin/admin.py:394
#, docstring
msgid "Lock a bot to its current servers only."
msgstr "Vergrendel de bot voor alleen deze server."
-#: redbot/cogs/admin/admin.py:384
+#: redbot/cogs/admin/admin.py:399
msgid "The bot is no longer serverlocked."
msgstr "De bot is niet langer vergrendeld."
-#: redbot/cogs/admin/admin.py:386
+#: redbot/cogs/admin/admin.py:401
msgid "The bot is now serverlocked."
msgstr "De bot is vergrendeld."
diff --git a/redbot/cogs/admin/locales/no-NO.po b/redbot/cogs/admin/locales/no-NO.po
index d7a9d82cb..90a09eb83 100644
--- a/redbot/cogs/admin/locales/no-NO.po
+++ b/redbot/cogs/admin/locales/no-NO.po
@@ -1,14 +1,14 @@
msgid ""
msgstr ""
"Project-Id-Version: red-discordbot\n"
-"POT-Creation-Date: 2019-01-11 02:18+0000\n"
-"PO-Revision-Date: 2019-02-25 03:07\n"
-"Last-Translator: Kowlin \n"
+"POT-Creation-Date: 2019-07-05 22:33+0200\n"
+"PO-Revision-Date: 2019-07-06 16:13\n"
+"Last-Translator: Robert Jansen (Kowlin)\n"
"Language-Team: Norwegian\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"Generated-By: redgettext 2.2\n"
+"Generated-By: redgettext 3.0\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: crowdin.com\n"
"X-Crowdin-Project: red-discordbot\n"
@@ -21,169 +21,154 @@ msgid "I attempted to do something that Discord denied me permissions for. Your
msgstr ""
#: redbot/cogs/admin/admin.py:22
-msgid "I tried to add {role.name} to {member.display_name} but that role is higher than my highest role in the Discord hierarchy so I was unable to successfully add it. Please give me a higher role and try again."
+msgid "I tried to {verb} {role.name} to {member.display_name} but that role is higher than my highest role in the Discord hierarchy so I was unable to successfully add it. Please give me a higher role and try again."
msgstr ""
#: redbot/cogs/admin/admin.py:29
-msgid "I tried to add {role.name} to {member.display_name} but that role is higher than your highest role in the Discord hierarchy so I was unable to successfully add it. Please get a higher role and try again."
+msgid "I tried to {verb} {role.name} to {member.display_name} but that role is higher than your highest role in the Discord hierarchy so I was unable to successfully add it. Please get a higher role and try again."
msgstr ""
#: redbot/cogs/admin/admin.py:36
+msgid "I tried to edit {role.name} but that role is higher than your highest role in the Discord hierarchy so I was unable to successfully add it. Please get a higher role and try again."
+msgstr ""
+
+#: redbot/cogs/admin/admin.py:43
msgid "I am already announcing something. If you would like to make a different announcement please use `{prefix}announce cancel` first."
msgstr ""
-#: redbot/cogs/admin/admin.py:46
+#: redbot/cogs/admin/admin.py:53
#, docstring
msgid "A collection of server administration utilities."
msgstr ""
-#: redbot/cogs/admin/admin.py:112
+#: redbot/cogs/admin/admin.py:115 redbot/cogs/admin/admin.py:160
+msgid "add"
+msgstr ""
+
+#: redbot/cogs/admin/admin.py:121
msgid "I successfully added {role.name} to {member.display_name}"
msgstr ""
-#: redbot/cogs/admin/admin.py:127
-msgid "I successfully removed {role.name} from {member.display_name}"
+#: redbot/cogs/admin/admin.py:132 redbot/cogs/admin/admin.py:180
+msgid "remove"
msgstr ""
#: redbot/cogs/admin/admin.py:138
-#, docstring
-msgid "Add a role to a user.\n\n"
-" If user is left blank it defaults to the author of the command.\n"
-" "
+msgid "I successfully removed {role.name} from {member.display_name}"
msgstr ""
-#: redbot/cogs/admin/admin.py:156
+#: redbot/cogs/admin/admin.py:149
#, docstring
-msgid "Remove a role from a user.\n\n"
-" If user is left blank it defaults to the author of the command.\n"
-" "
+msgid "Add a role to a user.\\n\\n If user is left blank it defaults to the author of the command.\\n "
msgstr ""
-#: redbot/cogs/admin/admin.py:172
+#: redbot/cogs/admin/admin.py:169
+#, docstring
+msgid "Remove a role from a user.\\n\\n If user is left blank it defaults to the author of the command.\\n "
+msgstr ""
+
+#: redbot/cogs/admin/admin.py:187
#, docstring
msgid "Edit role settings."
msgstr ""
-#: redbot/cogs/admin/admin.py:179
+#: redbot/cogs/admin/admin.py:194
#, docstring
-msgid "Edit a role's colour.\n\n"
-" Use double quotes if the role contains spaces.\n"
-" Colour must be in hexadecimal format.\n"
-" [Online colour picker](http://www.w3schools.com/colors/colors_picker.asp)\n\n"
-" Examples:\n"
-" `[p]editrole colour \"The Transistor\" #ff0000`\n"
-" `[p]editrole colour Test #ff9900`\n"
-" "
+msgid "Edit a role's colour.\\n\\n Use double quotes if the role contains spaces.\\n Colour must be in hexadecimal format.\\n [Online colour picker](http://www.w3schools.com/colors/colors_picker.asp)\\n\\n Examples:\\n `[p]editrole colour \\\"The Transistor\\\" #ff0000`\\n `[p]editrole colour Test #ff9900`\\n "
msgstr ""
-#: redbot/cogs/admin/admin.py:202 redbot/cogs/admin/admin.py:230
+#: redbot/cogs/admin/admin.py:217 redbot/cogs/admin/admin.py:245
msgid "Done."
-msgstr ""
+msgstr "Ferdig."
-#: redbot/cogs/admin/admin.py:207
+#: redbot/cogs/admin/admin.py:222
#, docstring
-msgid "Edit a role's name.\n\n"
-" Use double quotes if the role or the name contain spaces.\n\n"
-" Examples:\n"
-" `[p]editrole name \"The Transistor\" Test`\n"
-" "
-msgstr ""
-
-#: redbot/cogs/admin/admin.py:235
-#, docstring
-msgid "Announce a message to all servers the bot is in."
-msgstr ""
-
-#: redbot/cogs/admin/admin.py:242
-msgid "The announcement has begun."
+msgid "Edit a role's name.\\n\\n Use double quotes if the role or the name contain spaces.\\n\\n Examples:\\n `[p]editrole name \\\"The Transistor\\\" Test`\\n "
msgstr ""
#: redbot/cogs/admin/admin.py:250
#, docstring
+msgid "Announce a message to all servers the bot is in."
+msgstr ""
+
+#: redbot/cogs/admin/admin.py:257
+msgid "The announcement has begun."
+msgstr ""
+
+#: redbot/cogs/admin/admin.py:265
+#, docstring
msgid "Cancel a running announce."
msgstr ""
-#: redbot/cogs/admin/admin.py:256
+#: redbot/cogs/admin/admin.py:271
msgid "The current announcement has been cancelled."
msgstr ""
-#: redbot/cogs/admin/admin.py:262
+#: redbot/cogs/admin/admin.py:277
#, docstring
msgid "Change the channel to which the bot makes announcements."
msgstr ""
-#: redbot/cogs/admin/admin.py:268
+#: redbot/cogs/admin/admin.py:283
msgid "The announcement channel has been set to {channel.mention}"
msgstr ""
-#: redbot/cogs/admin/admin.py:275
+#: redbot/cogs/admin/admin.py:290
#, docstring
msgid "Toggle announcements being enabled this server."
msgstr ""
-#: redbot/cogs/admin/admin.py:281
+#: redbot/cogs/admin/admin.py:296
msgid "The server {guild.name} will receive announcements."
msgstr ""
-#: redbot/cogs/admin/admin.py:285
+#: redbot/cogs/admin/admin.py:300
msgid "The server {guild.name} will not receive announcements."
msgstr ""
-#: redbot/cogs/admin/admin.py:311
+#: redbot/cogs/admin/admin.py:326
#, docstring
-msgid "Add a role to yourself.\n\n"
-" Server admins must have configured the role as user settable.\n\n"
-" NOTE: The role is case sensitive!\n"
-" "
+msgid "Add a role to yourself.\\n\\n Server admins must have configured the role as user settable.\\n\\n NOTE: The role is case sensitive!\\n "
msgstr ""
-#: redbot/cogs/admin/admin.py:322
+#: redbot/cogs/admin/admin.py:337
#, docstring
-msgid "Remove a selfrole from yourself.\n\n"
-" NOTE: The role is case sensitive!\n"
-" "
+msgid "Remove a selfrole from yourself.\\n\\n NOTE: The role is case sensitive!\\n "
msgstr ""
-#: redbot/cogs/admin/admin.py:332
+#: redbot/cogs/admin/admin.py:347
#, docstring
-msgid "Add a role to the list of available selfroles.\n\n"
-" NOTE: The role is case sensitive!\n"
-" "
+msgid "Add a role to the list of available selfroles.\\n\\n NOTE: The role is case sensitive!\\n "
msgstr ""
-#: redbot/cogs/admin/admin.py:340 redbot/cogs/admin/admin.py:352
+#: redbot/cogs/admin/admin.py:355 redbot/cogs/admin/admin.py:367
msgid "The selfroles list has been successfully modified."
msgstr ""
-#: redbot/cogs/admin/admin.py:345
+#: redbot/cogs/admin/admin.py:360
#, docstring
-msgid "Remove a role from the list of available selfroles.\n\n"
-" NOTE: The role is case sensitive!\n"
-" "
+msgid "Remove a role from the list of available selfroles.\\n\\n NOTE: The role is case sensitive!\\n "
msgstr ""
-#: redbot/cogs/admin/admin.py:356
+#: redbot/cogs/admin/admin.py:371
#, docstring
-msgid "\n"
-" Lists all available selfroles.\n"
-" "
+msgid "\\n Lists all available selfroles.\\n "
msgstr ""
-#: redbot/cogs/admin/admin.py:362
-msgid "Available Selfroles:\n"
-"{selfroles}"
+#: redbot/cogs/admin/admin.py:377
+msgid "Available Selfroles:\\n{selfroles}"
msgstr ""
-#: redbot/cogs/admin/admin.py:379
+#: redbot/cogs/admin/admin.py:394
#, docstring
msgid "Lock a bot to its current servers only."
msgstr ""
-#: redbot/cogs/admin/admin.py:384
+#: redbot/cogs/admin/admin.py:399
msgid "The bot is no longer serverlocked."
msgstr ""
-#: redbot/cogs/admin/admin.py:386
+#: redbot/cogs/admin/admin.py:401
msgid "The bot is now serverlocked."
msgstr ""
diff --git a/redbot/cogs/admin/locales/pl-PL.po b/redbot/cogs/admin/locales/pl-PL.po
index 3a1bd5607..efb659fd6 100644
--- a/redbot/cogs/admin/locales/pl-PL.po
+++ b/redbot/cogs/admin/locales/pl-PL.po
@@ -1,14 +1,14 @@
msgid ""
msgstr ""
"Project-Id-Version: red-discordbot\n"
-"POT-Creation-Date: 2019-01-11 02:18+0000\n"
-"PO-Revision-Date: 2019-02-25 03:07\n"
-"Last-Translator: Kowlin \n"
+"POT-Creation-Date: 2019-07-05 22:33+0200\n"
+"PO-Revision-Date: 2019-07-06 16:13\n"
+"Last-Translator: Robert Jansen (Kowlin)\n"
"Language-Team: Polish\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"Generated-By: redgettext 2.2\n"
+"Generated-By: redgettext 3.0\n"
"Plural-Forms: nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && (n%100<12 || n%100>14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);\n"
"X-Generator: crowdin.com\n"
"X-Crowdin-Project: red-discordbot\n"
@@ -21,169 +21,154 @@ msgid "I attempted to do something that Discord denied me permissions for. Your
msgstr ""
#: redbot/cogs/admin/admin.py:22
-msgid "I tried to add {role.name} to {member.display_name} but that role is higher than my highest role in the Discord hierarchy so I was unable to successfully add it. Please give me a higher role and try again."
-msgstr ""
+msgid "I tried to {verb} {role.name} to {member.display_name} but that role is higher than my highest role in the Discord hierarchy so I was unable to successfully add it. Please give me a higher role and try again."
+msgstr "Spróbowałam {verb} {role.name} na {member.display_name}, ale ta rola jest wyższa niż moja najwyższa rola w hierarchii Discorda, więc nie mogłam jej dodać. Daj mi proszę wyższą rolę i spróbuj ponownie."
#: redbot/cogs/admin/admin.py:29
-msgid "I tried to add {role.name} to {member.display_name} but that role is higher than your highest role in the Discord hierarchy so I was unable to successfully add it. Please get a higher role and try again."
-msgstr ""
+msgid "I tried to {verb} {role.name} to {member.display_name} but that role is higher than your highest role in the Discord hierarchy so I was unable to successfully add it. Please get a higher role and try again."
+msgstr "Spróbowałam {verb} {role.name} na {member.display_name}, ale ta rola jest wyższa niż twoja najwyższa rola w hierarchii Discorda, więc nie mogłam jej dodać. Uzyskaj proszę wyższą rolę i spróbuj ponownie."
#: redbot/cogs/admin/admin.py:36
+msgid "I tried to edit {role.name} but that role is higher than your highest role in the Discord hierarchy so I was unable to successfully add it. Please get a higher role and try again."
+msgstr "Spróbowałam zmienić {role.name}, ale ta rola jest wyższa niż twoja najwyższa rola w hierarchii Discorda, więc nie mogłam jej dodać. Uzyskaj proszę wyższą rolę i spróbuj ponownie."
+
+#: redbot/cogs/admin/admin.py:43
msgid "I am already announcing something. If you would like to make a different announcement please use `{prefix}announce cancel` first."
msgstr ""
-#: redbot/cogs/admin/admin.py:46
+#: redbot/cogs/admin/admin.py:53
#, docstring
msgid "A collection of server administration utilities."
msgstr ""
-#: redbot/cogs/admin/admin.py:112
+#: redbot/cogs/admin/admin.py:115 redbot/cogs/admin/admin.py:160
+msgid "add"
+msgstr "dodać"
+
+#: redbot/cogs/admin/admin.py:121
msgid "I successfully added {role.name} to {member.display_name}"
msgstr ""
-#: redbot/cogs/admin/admin.py:127
+#: redbot/cogs/admin/admin.py:132 redbot/cogs/admin/admin.py:180
+msgid "remove"
+msgstr "usunąć"
+
+#: redbot/cogs/admin/admin.py:138
msgid "I successfully removed {role.name} from {member.display_name}"
msgstr ""
-#: redbot/cogs/admin/admin.py:138
+#: redbot/cogs/admin/admin.py:149
#, docstring
-msgid "Add a role to a user.\n\n"
-" If user is left blank it defaults to the author of the command.\n"
-" "
+msgid "Add a role to a user.\\n\\n If user is left blank it defaults to the author of the command.\\n "
msgstr ""
-#: redbot/cogs/admin/admin.py:156
+#: redbot/cogs/admin/admin.py:169
#, docstring
-msgid "Remove a role from a user.\n\n"
-" If user is left blank it defaults to the author of the command.\n"
-" "
+msgid "Remove a role from a user.\\n\\n If user is left blank it defaults to the author of the command.\\n "
msgstr ""
-#: redbot/cogs/admin/admin.py:172
+#: redbot/cogs/admin/admin.py:187
#, docstring
msgid "Edit role settings."
msgstr ""
-#: redbot/cogs/admin/admin.py:179
+#: redbot/cogs/admin/admin.py:194
#, docstring
-msgid "Edit a role's colour.\n\n"
-" Use double quotes if the role contains spaces.\n"
-" Colour must be in hexadecimal format.\n"
-" [Online colour picker](http://www.w3schools.com/colors/colors_picker.asp)\n\n"
-" Examples:\n"
-" `[p]editrole colour \"The Transistor\" #ff0000`\n"
-" `[p]editrole colour Test #ff9900`\n"
-" "
+msgid "Edit a role's colour.\\n\\n Use double quotes if the role contains spaces.\\n Colour must be in hexadecimal format.\\n [Online colour picker](http://www.w3schools.com/colors/colors_picker.asp)\\n\\n Examples:\\n `[p]editrole colour \\\"The Transistor\\\" #ff0000`\\n `[p]editrole colour Test #ff9900`\\n "
msgstr ""
-#: redbot/cogs/admin/admin.py:202 redbot/cogs/admin/admin.py:230
+#: redbot/cogs/admin/admin.py:217 redbot/cogs/admin/admin.py:245
msgid "Done."
msgstr "Gotowe."
-#: redbot/cogs/admin/admin.py:207
+#: redbot/cogs/admin/admin.py:222
#, docstring
-msgid "Edit a role's name.\n\n"
-" Use double quotes if the role or the name contain spaces.\n\n"
-" Examples:\n"
-" `[p]editrole name \"The Transistor\" Test`\n"
-" "
-msgstr ""
-
-#: redbot/cogs/admin/admin.py:235
-#, docstring
-msgid "Announce a message to all servers the bot is in."
-msgstr ""
-
-#: redbot/cogs/admin/admin.py:242
-msgid "The announcement has begun."
+msgid "Edit a role's name.\\n\\n Use double quotes if the role or the name contain spaces.\\n\\n Examples:\\n `[p]editrole name \\\"The Transistor\\\" Test`\\n "
msgstr ""
#: redbot/cogs/admin/admin.py:250
#, docstring
+msgid "Announce a message to all servers the bot is in."
+msgstr ""
+
+#: redbot/cogs/admin/admin.py:257
+msgid "The announcement has begun."
+msgstr ""
+
+#: redbot/cogs/admin/admin.py:265
+#, docstring
msgid "Cancel a running announce."
msgstr ""
-#: redbot/cogs/admin/admin.py:256
+#: redbot/cogs/admin/admin.py:271
msgid "The current announcement has been cancelled."
msgstr ""
-#: redbot/cogs/admin/admin.py:262
+#: redbot/cogs/admin/admin.py:277
#, docstring
msgid "Change the channel to which the bot makes announcements."
msgstr ""
-#: redbot/cogs/admin/admin.py:268
+#: redbot/cogs/admin/admin.py:283
msgid "The announcement channel has been set to {channel.mention}"
msgstr ""
-#: redbot/cogs/admin/admin.py:275
+#: redbot/cogs/admin/admin.py:290
#, docstring
msgid "Toggle announcements being enabled this server."
msgstr ""
-#: redbot/cogs/admin/admin.py:281
+#: redbot/cogs/admin/admin.py:296
msgid "The server {guild.name} will receive announcements."
msgstr ""
-#: redbot/cogs/admin/admin.py:285
+#: redbot/cogs/admin/admin.py:300
msgid "The server {guild.name} will not receive announcements."
msgstr ""
-#: redbot/cogs/admin/admin.py:311
+#: redbot/cogs/admin/admin.py:326
#, docstring
-msgid "Add a role to yourself.\n\n"
-" Server admins must have configured the role as user settable.\n\n"
-" NOTE: The role is case sensitive!\n"
-" "
+msgid "Add a role to yourself.\\n\\n Server admins must have configured the role as user settable.\\n\\n NOTE: The role is case sensitive!\\n "
msgstr ""
-#: redbot/cogs/admin/admin.py:322
+#: redbot/cogs/admin/admin.py:337
#, docstring
-msgid "Remove a selfrole from yourself.\n\n"
-" NOTE: The role is case sensitive!\n"
-" "
+msgid "Remove a selfrole from yourself.\\n\\n NOTE: The role is case sensitive!\\n "
msgstr ""
-#: redbot/cogs/admin/admin.py:332
+#: redbot/cogs/admin/admin.py:347
#, docstring
-msgid "Add a role to the list of available selfroles.\n\n"
-" NOTE: The role is case sensitive!\n"
-" "
+msgid "Add a role to the list of available selfroles.\\n\\n NOTE: The role is case sensitive!\\n "
msgstr ""
-#: redbot/cogs/admin/admin.py:340 redbot/cogs/admin/admin.py:352
+#: redbot/cogs/admin/admin.py:355 redbot/cogs/admin/admin.py:367
msgid "The selfroles list has been successfully modified."
msgstr ""
-#: redbot/cogs/admin/admin.py:345
+#: redbot/cogs/admin/admin.py:360
#, docstring
-msgid "Remove a role from the list of available selfroles.\n\n"
-" NOTE: The role is case sensitive!\n"
-" "
+msgid "Remove a role from the list of available selfroles.\\n\\n NOTE: The role is case sensitive!\\n "
msgstr ""
-#: redbot/cogs/admin/admin.py:356
+#: redbot/cogs/admin/admin.py:371
#, docstring
-msgid "\n"
-" Lists all available selfroles.\n"
-" "
+msgid "\\n Lists all available selfroles.\\n "
msgstr ""
-#: redbot/cogs/admin/admin.py:362
-msgid "Available Selfroles:\n"
-"{selfroles}"
+#: redbot/cogs/admin/admin.py:377
+msgid "Available Selfroles:\\n{selfroles}"
msgstr ""
-#: redbot/cogs/admin/admin.py:379
+#: redbot/cogs/admin/admin.py:394
#, docstring
msgid "Lock a bot to its current servers only."
msgstr ""
-#: redbot/cogs/admin/admin.py:384
+#: redbot/cogs/admin/admin.py:399
msgid "The bot is no longer serverlocked."
msgstr ""
-#: redbot/cogs/admin/admin.py:386
+#: redbot/cogs/admin/admin.py:401
msgid "The bot is now serverlocked."
msgstr ""
diff --git a/redbot/cogs/admin/locales/pt-BR.po b/redbot/cogs/admin/locales/pt-BR.po
index a8977cc76..0a2abf594 100644
--- a/redbot/cogs/admin/locales/pt-BR.po
+++ b/redbot/cogs/admin/locales/pt-BR.po
@@ -1,14 +1,14 @@
msgid ""
msgstr ""
"Project-Id-Version: red-discordbot\n"
-"POT-Creation-Date: 2019-01-11 02:18+0000\n"
-"PO-Revision-Date: 2019-02-25 03:08\n"
-"Last-Translator: Kowlin \n"
+"POT-Creation-Date: 2019-07-05 22:33+0200\n"
+"PO-Revision-Date: 2019-07-06 16:14\n"
+"Last-Translator: Robert Jansen (Kowlin)\n"
"Language-Team: Portuguese, Brazilian\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"Generated-By: redgettext 2.2\n"
+"Generated-By: redgettext 3.0\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: crowdin.com\n"
"X-Crowdin-Project: red-discordbot\n"
@@ -18,172 +18,157 @@ msgstr ""
#: redbot/cogs/admin/admin.py:17
msgid "I attempted to do something that Discord denied me permissions for. Your command failed to successfully complete."
-msgstr ""
+msgstr "Eu tentei fazer algo que o Discord me negou as permissões. Seu comando falhou em ser completado com sucesso."
#: redbot/cogs/admin/admin.py:22
-msgid "I tried to add {role.name} to {member.display_name} but that role is higher than my highest role in the Discord hierarchy so I was unable to successfully add it. Please give me a higher role and try again."
+msgid "I tried to {verb} {role.name} to {member.display_name} but that role is higher than my highest role in the Discord hierarchy so I was unable to successfully add it. Please give me a higher role and try again."
msgstr ""
#: redbot/cogs/admin/admin.py:29
-msgid "I tried to add {role.name} to {member.display_name} but that role is higher than your highest role in the Discord hierarchy so I was unable to successfully add it. Please get a higher role and try again."
+msgid "I tried to {verb} {role.name} to {member.display_name} but that role is higher than your highest role in the Discord hierarchy so I was unable to successfully add it. Please get a higher role and try again."
msgstr ""
#: redbot/cogs/admin/admin.py:36
-msgid "I am already announcing something. If you would like to make a different announcement please use `{prefix}announce cancel` first."
+msgid "I tried to edit {role.name} but that role is higher than your highest role in the Discord hierarchy so I was unable to successfully add it. Please get a higher role and try again."
msgstr ""
-#: redbot/cogs/admin/admin.py:46
+#: redbot/cogs/admin/admin.py:43
+msgid "I am already announcing something. If you would like to make a different announcement please use `{prefix}announce cancel` first."
+msgstr "Eu já estou anunciando algo. Se quer fazer um anúncio diferente, por favor use `{prefix}announce cancel` primeiro."
+
+#: redbot/cogs/admin/admin.py:53
#, docstring
msgid "A collection of server administration utilities."
+msgstr "Uma coleção de ferramentas de administração para o servidor."
+
+#: redbot/cogs/admin/admin.py:115 redbot/cogs/admin/admin.py:160
+msgid "add"
msgstr ""
-#: redbot/cogs/admin/admin.py:112
+#: redbot/cogs/admin/admin.py:121
msgid "I successfully added {role.name} to {member.display_name}"
-msgstr ""
+msgstr "Eu adicionei com sucesso {role.name} de {member.display_name}"
-#: redbot/cogs/admin/admin.py:127
-msgid "I successfully removed {role.name} from {member.display_name}"
+#: redbot/cogs/admin/admin.py:132 redbot/cogs/admin/admin.py:180
+msgid "remove"
msgstr ""
#: redbot/cogs/admin/admin.py:138
+msgid "I successfully removed {role.name} from {member.display_name}"
+msgstr "Eu removi com sucesso {role.name} de {member.display_name}"
+
+#: redbot/cogs/admin/admin.py:149
#, docstring
-msgid "Add a role to a user.\n\n"
-" If user is left blank it defaults to the author of the command.\n"
-" "
+msgid "Add a role to a user.\\n\\n If user is left blank it defaults to the author of the command.\\n "
msgstr ""
-#: redbot/cogs/admin/admin.py:156
+#: redbot/cogs/admin/admin.py:169
#, docstring
-msgid "Remove a role from a user.\n\n"
-" If user is left blank it defaults to the author of the command.\n"
-" "
+msgid "Remove a role from a user.\\n\\n If user is left blank it defaults to the author of the command.\\n "
msgstr ""
-#: redbot/cogs/admin/admin.py:172
+#: redbot/cogs/admin/admin.py:187
#, docstring
msgid "Edit role settings."
-msgstr ""
+msgstr "Edite as configurações de cargo."
-#: redbot/cogs/admin/admin.py:179
+#: redbot/cogs/admin/admin.py:194
#, docstring
-msgid "Edit a role's colour.\n\n"
-" Use double quotes if the role contains spaces.\n"
-" Colour must be in hexadecimal format.\n"
-" [Online colour picker](http://www.w3schools.com/colors/colors_picker.asp)\n\n"
-" Examples:\n"
-" `[p]editrole colour \"The Transistor\" #ff0000`\n"
-" `[p]editrole colour Test #ff9900`\n"
-" "
+msgid "Edit a role's colour.\\n\\n Use double quotes if the role contains spaces.\\n Colour must be in hexadecimal format.\\n [Online colour picker](http://www.w3schools.com/colors/colors_picker.asp)\\n\\n Examples:\\n `[p]editrole colour \\\"The Transistor\\\" #ff0000`\\n `[p]editrole colour Test #ff9900`\\n "
msgstr ""
-#: redbot/cogs/admin/admin.py:202 redbot/cogs/admin/admin.py:230
+#: redbot/cogs/admin/admin.py:217 redbot/cogs/admin/admin.py:245
msgid "Done."
msgstr "Concluído."
-#: redbot/cogs/admin/admin.py:207
+#: redbot/cogs/admin/admin.py:222
#, docstring
-msgid "Edit a role's name.\n\n"
-" Use double quotes if the role or the name contain spaces.\n\n"
-" Examples:\n"
-" `[p]editrole name \"The Transistor\" Test`\n"
-" "
-msgstr ""
-
-#: redbot/cogs/admin/admin.py:235
-#, docstring
-msgid "Announce a message to all servers the bot is in."
-msgstr ""
-
-#: redbot/cogs/admin/admin.py:242
-msgid "The announcement has begun."
+msgid "Edit a role's name.\\n\\n Use double quotes if the role or the name contain spaces.\\n\\n Examples:\\n `[p]editrole name \\\"The Transistor\\\" Test`\\n "
msgstr ""
#: redbot/cogs/admin/admin.py:250
#, docstring
+msgid "Announce a message to all servers the bot is in."
+msgstr ""
+
+#: redbot/cogs/admin/admin.py:257
+msgid "The announcement has begun."
+msgstr ""
+
+#: redbot/cogs/admin/admin.py:265
+#, docstring
msgid "Cancel a running announce."
msgstr ""
-#: redbot/cogs/admin/admin.py:256
+#: redbot/cogs/admin/admin.py:271
msgid "The current announcement has been cancelled."
msgstr ""
-#: redbot/cogs/admin/admin.py:262
+#: redbot/cogs/admin/admin.py:277
#, docstring
msgid "Change the channel to which the bot makes announcements."
msgstr ""
-#: redbot/cogs/admin/admin.py:268
+#: redbot/cogs/admin/admin.py:283
msgid "The announcement channel has been set to {channel.mention}"
msgstr ""
-#: redbot/cogs/admin/admin.py:275
+#: redbot/cogs/admin/admin.py:290
#, docstring
msgid "Toggle announcements being enabled this server."
msgstr ""
-#: redbot/cogs/admin/admin.py:281
+#: redbot/cogs/admin/admin.py:296
msgid "The server {guild.name} will receive announcements."
msgstr ""
-#: redbot/cogs/admin/admin.py:285
+#: redbot/cogs/admin/admin.py:300
msgid "The server {guild.name} will not receive announcements."
msgstr ""
-#: redbot/cogs/admin/admin.py:311
+#: redbot/cogs/admin/admin.py:326
#, docstring
-msgid "Add a role to yourself.\n\n"
-" Server admins must have configured the role as user settable.\n\n"
-" NOTE: The role is case sensitive!\n"
-" "
+msgid "Add a role to yourself.\\n\\n Server admins must have configured the role as user settable.\\n\\n NOTE: The role is case sensitive!\\n "
msgstr ""
-#: redbot/cogs/admin/admin.py:322
+#: redbot/cogs/admin/admin.py:337
#, docstring
-msgid "Remove a selfrole from yourself.\n\n"
-" NOTE: The role is case sensitive!\n"
-" "
+msgid "Remove a selfrole from yourself.\\n\\n NOTE: The role is case sensitive!\\n "
msgstr ""
-#: redbot/cogs/admin/admin.py:332
+#: redbot/cogs/admin/admin.py:347
#, docstring
-msgid "Add a role to the list of available selfroles.\n\n"
-" NOTE: The role is case sensitive!\n"
-" "
+msgid "Add a role to the list of available selfroles.\\n\\n NOTE: The role is case sensitive!\\n "
msgstr ""
-#: redbot/cogs/admin/admin.py:340 redbot/cogs/admin/admin.py:352
+#: redbot/cogs/admin/admin.py:355 redbot/cogs/admin/admin.py:367
msgid "The selfroles list has been successfully modified."
msgstr ""
-#: redbot/cogs/admin/admin.py:345
+#: redbot/cogs/admin/admin.py:360
#, docstring
-msgid "Remove a role from the list of available selfroles.\n\n"
-" NOTE: The role is case sensitive!\n"
-" "
+msgid "Remove a role from the list of available selfroles.\\n\\n NOTE: The role is case sensitive!\\n "
msgstr ""
-#: redbot/cogs/admin/admin.py:356
+#: redbot/cogs/admin/admin.py:371
#, docstring
-msgid "\n"
-" Lists all available selfroles.\n"
-" "
+msgid "\\n Lists all available selfroles.\\n "
msgstr ""
-#: redbot/cogs/admin/admin.py:362
-msgid "Available Selfroles:\n"
-"{selfroles}"
+#: redbot/cogs/admin/admin.py:377
+msgid "Available Selfroles:\\n{selfroles}"
msgstr ""
-#: redbot/cogs/admin/admin.py:379
+#: redbot/cogs/admin/admin.py:394
#, docstring
msgid "Lock a bot to its current servers only."
msgstr ""
-#: redbot/cogs/admin/admin.py:384
+#: redbot/cogs/admin/admin.py:399
msgid "The bot is no longer serverlocked."
msgstr ""
-#: redbot/cogs/admin/admin.py:386
+#: redbot/cogs/admin/admin.py:401
msgid "The bot is now serverlocked."
msgstr ""
diff --git a/redbot/cogs/admin/locales/pt-PT.po b/redbot/cogs/admin/locales/pt-PT.po
index a64192382..da237dfb7 100644
--- a/redbot/cogs/admin/locales/pt-PT.po
+++ b/redbot/cogs/admin/locales/pt-PT.po
@@ -1,14 +1,14 @@
msgid ""
msgstr ""
"Project-Id-Version: red-discordbot\n"
-"POT-Creation-Date: 2019-01-11 02:18+0000\n"
-"PO-Revision-Date: 2019-02-25 03:07\n"
-"Last-Translator: Kowlin \n"
+"POT-Creation-Date: 2019-07-05 22:33+0200\n"
+"PO-Revision-Date: 2019-07-06 16:13\n"
+"Last-Translator: Robert Jansen (Kowlin)\n"
"Language-Team: Portuguese\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"Generated-By: redgettext 2.2\n"
+"Generated-By: redgettext 3.0\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: crowdin.com\n"
"X-Crowdin-Project: red-discordbot\n"
@@ -21,196 +21,154 @@ msgid "I attempted to do something that Discord denied me permissions for. Your
msgstr "Tentei fazer uma coisa que o Discord negou permissão para fazer. O comando não foi concluído."
#: redbot/cogs/admin/admin.py:22
-msgid "I tried to add {role.name} to {member.display_name} but that role is higher than my highest role in the Discord hierarchy so I was unable to successfully add it. Please give me a higher role and try again."
-msgstr "Tentei adicionar {role.name} a {member.display_name} mas esse cargo é maior do que o meu maior cargo atual na hierarquia do Discord por isso não me é possível concluir a ação com sucesso. Dá-me um cargo maior e tenta novamente."
+msgid "I tried to {verb} {role.name} to {member.display_name} but that role is higher than my highest role in the Discord hierarchy so I was unable to successfully add it. Please give me a higher role and try again."
+msgstr ""
#: redbot/cogs/admin/admin.py:29
-msgid "I tried to add {role.name} to {member.display_name} but that role is higher than your highest role in the Discord hierarchy so I was unable to successfully add it. Please get a higher role and try again."
-msgstr "Tentei adicionar {role.name} a {member.display_name} mas esse cargo é maior do que o teu maior cargo atual na hierarquia do Discord por isso não me é possível concluir a ação com sucesso. Obtém um cargo maior e tenta novamente."
+msgid "I tried to {verb} {role.name} to {member.display_name} but that role is higher than your highest role in the Discord hierarchy so I was unable to successfully add it. Please get a higher role and try again."
+msgstr ""
#: redbot/cogs/admin/admin.py:36
+msgid "I tried to edit {role.name} but that role is higher than your highest role in the Discord hierarchy so I was unable to successfully add it. Please get a higher role and try again."
+msgstr ""
+
+#: redbot/cogs/admin/admin.py:43
msgid "I am already announcing something. If you would like to make a different announcement please use `{prefix}announce cancel` first."
msgstr "Já estou a anunciar algo. Se queres fazer um anúncio diferente usa `{prefix}announce cancel` antes de usares este comando."
-#: redbot/cogs/admin/admin.py:46
+#: redbot/cogs/admin/admin.py:53
#, docstring
msgid "A collection of server administration utilities."
msgstr "Uma coleção de utilidades para administração de servidores."
-#: redbot/cogs/admin/admin.py:112
+#: redbot/cogs/admin/admin.py:115 redbot/cogs/admin/admin.py:160
+msgid "add"
+msgstr ""
+
+#: redbot/cogs/admin/admin.py:121
msgid "I successfully added {role.name} to {member.display_name}"
msgstr "Adicionei com sucesso {role.name} a {member.display_name}"
-#: redbot/cogs/admin/admin.py:127
+#: redbot/cogs/admin/admin.py:132 redbot/cogs/admin/admin.py:180
+msgid "remove"
+msgstr ""
+
+#: redbot/cogs/admin/admin.py:138
msgid "I successfully removed {role.name} from {member.display_name}"
msgstr "Removi com sucesso {role.name} de {member.display_name}"
-#: redbot/cogs/admin/admin.py:138
+#: redbot/cogs/admin/admin.py:149
#, docstring
-msgid "Add a role to a user.\n\n"
-" If user is left blank it defaults to the author of the command.\n"
-" "
-msgstr "Adiciona um cargo a um utilizador.\n\n"
-" Se o utilizador for deixado em branco é utilizado por padrão o autor do comando.\n"
-" "
+msgid "Add a role to a user.\\n\\n If user is left blank it defaults to the author of the command.\\n "
+msgstr ""
-#: redbot/cogs/admin/admin.py:156
+#: redbot/cogs/admin/admin.py:169
#, docstring
-msgid "Remove a role from a user.\n\n"
-" If user is left blank it defaults to the author of the command.\n"
-" "
-msgstr "Remove um cargo a um utilizador.\n\n"
-" Se o utilizador for deixado em branco é utilizado por padrão o autor do comando.\n"
-" "
+msgid "Remove a role from a user.\\n\\n If user is left blank it defaults to the author of the command.\\n "
+msgstr ""
-#: redbot/cogs/admin/admin.py:172
+#: redbot/cogs/admin/admin.py:187
#, docstring
msgid "Edit role settings."
msgstr ""
-#: redbot/cogs/admin/admin.py:179
+#: redbot/cogs/admin/admin.py:194
#, docstring
-msgid "Edit a role's colour.\n\n"
-" Use double quotes if the role contains spaces.\n"
-" Colour must be in hexadecimal format.\n"
-" [Online colour picker](http://www.w3schools.com/colors/colors_picker.asp)\n\n"
-" Examples:\n"
-" `[p]editrole colour \"The Transistor\" #ff0000`\n"
-" `[p]editrole colour Test #ff9900`\n"
-" "
-msgstr "Edite a cor do cargo\n\n"
-" Use aspas se o cargo contiver espaços.\n"
-" A cor deve ser em formato hexadecimal.\n"
-" [Seleção de Cor Online](http://www.w3schools.com/colors/colors_picker.asp)\n\n"
-" Exemplos:\n"
-" `[p]editrole colour \"Team rS\" #ff0000`\n"
-" `[p]editrole colour Teste #ff9900`\n"
-" "
+msgid "Edit a role's colour.\\n\\n Use double quotes if the role contains spaces.\\n Colour must be in hexadecimal format.\\n [Online colour picker](http://www.w3schools.com/colors/colors_picker.asp)\\n\\n Examples:\\n `[p]editrole colour \\\"The Transistor\\\" #ff0000`\\n `[p]editrole colour Test #ff9900`\\n "
+msgstr ""
-#: redbot/cogs/admin/admin.py:202 redbot/cogs/admin/admin.py:230
+#: redbot/cogs/admin/admin.py:217 redbot/cogs/admin/admin.py:245
msgid "Done."
msgstr "Concluído."
-#: redbot/cogs/admin/admin.py:207
+#: redbot/cogs/admin/admin.py:222
#, docstring
-msgid "Edit a role's name.\n\n"
-" Use double quotes if the role or the name contain spaces.\n\n"
-" Examples:\n"
-" `[p]editrole name \"The Transistor\" Test`\n"
-" "
-msgstr "Edite o nome do cargo.\n\n"
-" Use aspas se o cargo contiver espaços.\n\n"
-" Exemplos:\n"
-" `[p]editrole name \"Team rS\" Test`\n"
-" "
+msgid "Edit a role's name.\\n\\n Use double quotes if the role or the name contain spaces.\\n\\n Examples:\\n `[p]editrole name \\\"The Transistor\\\" Test`\\n "
+msgstr ""
-#: redbot/cogs/admin/admin.py:235
+#: redbot/cogs/admin/admin.py:250
#, docstring
msgid "Announce a message to all servers the bot is in."
msgstr "Anuncia uma mensagem para todos os servidores em que o bot está."
-#: redbot/cogs/admin/admin.py:242
+#: redbot/cogs/admin/admin.py:257
msgid "The announcement has begun."
msgstr "O anúncio foi iniciado."
-#: redbot/cogs/admin/admin.py:250
+#: redbot/cogs/admin/admin.py:265
#, docstring
msgid "Cancel a running announce."
msgstr "Cancelar um anúncio em curso."
-#: redbot/cogs/admin/admin.py:256
+#: redbot/cogs/admin/admin.py:271
msgid "The current announcement has been cancelled."
msgstr "O anúncio atual foi cancelado."
-#: redbot/cogs/admin/admin.py:262
+#: redbot/cogs/admin/admin.py:277
#, docstring
msgid "Change the channel to which the bot makes announcements."
msgstr "Mude o canal para o qual o bot faz os anúncios."
-#: redbot/cogs/admin/admin.py:268
+#: redbot/cogs/admin/admin.py:283
msgid "The announcement channel has been set to {channel.mention}"
msgstr "O canal de anúncio foi definido para {channel.mention}"
-#: redbot/cogs/admin/admin.py:275
+#: redbot/cogs/admin/admin.py:290
#, docstring
msgid "Toggle announcements being enabled this server."
msgstr "Ativar ou Desativar os anúncios neste servidor."
-#: redbot/cogs/admin/admin.py:281
+#: redbot/cogs/admin/admin.py:296
msgid "The server {guild.name} will receive announcements."
msgstr "O servidor {guild.name} vai receber anúncios."
-#: redbot/cogs/admin/admin.py:285
+#: redbot/cogs/admin/admin.py:300
msgid "The server {guild.name} will not receive announcements."
msgstr "O servidor {guild.name} não vai receber anúncios."
-#: redbot/cogs/admin/admin.py:311
+#: redbot/cogs/admin/admin.py:326
#, docstring
-msgid "Add a role to yourself.\n\n"
-" Server admins must have configured the role as user settable.\n\n"
-" NOTE: The role is case sensitive!\n"
-" "
-msgstr "Adiciona um cargo a si próprio\n\n"
-" Os administradores do servidor têm de ter configurado o cargo como definível.\n\n"
-" NOTA: O cargo é sensível às maiúsculas e minúsculas!\n"
-" "
+msgid "Add a role to yourself.\\n\\n Server admins must have configured the role as user settable.\\n\\n NOTE: The role is case sensitive!\\n "
+msgstr ""
-#: redbot/cogs/admin/admin.py:322
+#: redbot/cogs/admin/admin.py:337
#, docstring
-msgid "Remove a selfrole from yourself.\n\n"
-" NOTE: The role is case sensitive!\n"
-" "
-msgstr "Remove um cargo a si próprio.\n\n"
-" NOTA: O cargo é sensível às maiúsculas e minúsculas!\n"
-" "
+msgid "Remove a selfrole from yourself.\\n\\n NOTE: The role is case sensitive!\\n "
+msgstr ""
-#: redbot/cogs/admin/admin.py:332
+#: redbot/cogs/admin/admin.py:347
#, docstring
-msgid "Add a role to the list of available selfroles.\n\n"
-" NOTE: The role is case sensitive!\n"
-" "
-msgstr "Adiciona um cargo à lista de cargos definíveis.\n\n"
-" NOTA: O cargo é sensível às maiúsculas e minúsculas!\n"
-" "
+msgid "Add a role to the list of available selfroles.\\n\\n NOTE: The role is case sensitive!\\n "
+msgstr ""
-#: redbot/cogs/admin/admin.py:340 redbot/cogs/admin/admin.py:352
+#: redbot/cogs/admin/admin.py:355 redbot/cogs/admin/admin.py:367
msgid "The selfroles list has been successfully modified."
msgstr "A lista de cargos definíveis foi modificada com sucesso."
-#: redbot/cogs/admin/admin.py:345
+#: redbot/cogs/admin/admin.py:360
#, docstring
-msgid "Remove a role from the list of available selfroles.\n\n"
-" NOTE: The role is case sensitive!\n"
-" "
-msgstr "Remove um cargo da lista de cargos definíveis.\n\n"
-" NOTA: O cargo é sensível às maiúsculas e minúsculas!\n"
-" "
+msgid "Remove a role from the list of available selfroles.\\n\\n NOTE: The role is case sensitive!\\n "
+msgstr ""
-#: redbot/cogs/admin/admin.py:356
+#: redbot/cogs/admin/admin.py:371
#, docstring
-msgid "\n"
-" Lists all available selfroles.\n"
-" "
-msgstr "\n"
-" Lista de todos os cargos definíveis disponíveis.\n"
-" "
+msgid "\\n Lists all available selfroles.\\n "
+msgstr ""
-#: redbot/cogs/admin/admin.py:362
-msgid "Available Selfroles:\n"
-"{selfroles}"
-msgstr "Cargos definíveis disponíveis:\n"
-"{selfroles}"
+#: redbot/cogs/admin/admin.py:377
+msgid "Available Selfroles:\\n{selfroles}"
+msgstr ""
-#: redbot/cogs/admin/admin.py:379
+#: redbot/cogs/admin/admin.py:394
#, docstring
msgid "Lock a bot to its current servers only."
msgstr "Bloquear o bot aos servidores atuais."
-#: redbot/cogs/admin/admin.py:384
+#: redbot/cogs/admin/admin.py:399
msgid "The bot is no longer serverlocked."
msgstr "O bot já não está bloqueado aos servidores atuais."
-#: redbot/cogs/admin/admin.py:386
+#: redbot/cogs/admin/admin.py:401
msgid "The bot is now serverlocked."
msgstr "O bot está agora bloqueado aos servidores atuais."
diff --git a/redbot/cogs/admin/locales/ro-RO.po b/redbot/cogs/admin/locales/ro-RO.po
new file mode 100644
index 000000000..1ae4f1874
--- /dev/null
+++ b/redbot/cogs/admin/locales/ro-RO.po
@@ -0,0 +1,186 @@
+msgid ""
+msgstr ""
+"Project-Id-Version: red-discordbot\n"
+"POT-Creation-Date: 2019-07-05 22:33+0200\n"
+"PO-Revision-Date: 2019-07-14 02:09\n"
+"Last-Translator: Robert Jansen (Kowlin)\n"
+"Language-Team: Romanian\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: redgettext 3.0\n"
+"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : (n==0 || (n%100>0 && n%100<20)) ? 1 : 2);\n"
+"X-Generator: crowdin.com\n"
+"X-Crowdin-Project: red-discordbot\n"
+"X-Crowdin-Language: ro\n"
+"X-Crowdin-File: /cogs/admin/locales/messages.pot\n"
+"Language: ro_RO\n"
+
+#: redbot/cogs/admin/admin.py:17
+msgid "I attempted to do something that Discord denied me permissions for. Your command failed to successfully complete."
+msgstr ""
+
+#: redbot/cogs/admin/admin.py:22
+msgid "I tried to {verb} {role.name} to {member.display_name} but that role is higher than my highest role in the Discord hierarchy so I was unable to successfully add it. Please give me a higher role and try again."
+msgstr ""
+
+#: redbot/cogs/admin/admin.py:29
+msgid "I tried to {verb} {role.name} to {member.display_name} but that role is higher than your highest role in the Discord hierarchy so I was unable to successfully add it. Please get a higher role and try again."
+msgstr ""
+
+#: redbot/cogs/admin/admin.py:36
+msgid "I tried to edit {role.name} but that role is higher than your highest role in the Discord hierarchy so I was unable to successfully add it. Please get a higher role and try again."
+msgstr ""
+
+#: redbot/cogs/admin/admin.py:43
+msgid "I am already announcing something. If you would like to make a different announcement please use `{prefix}announce cancel` first."
+msgstr ""
+
+#: redbot/cogs/admin/admin.py:53
+#, docstring
+msgid "A collection of server administration utilities."
+msgstr ""
+
+#: redbot/cogs/admin/admin.py:115 redbot/cogs/admin/admin.py:160
+msgid "add"
+msgstr ""
+
+#: redbot/cogs/admin/admin.py:121
+msgid "I successfully added {role.name} to {member.display_name}"
+msgstr ""
+
+#: redbot/cogs/admin/admin.py:132 redbot/cogs/admin/admin.py:180
+msgid "remove"
+msgstr ""
+
+#: redbot/cogs/admin/admin.py:138
+msgid "I successfully removed {role.name} from {member.display_name}"
+msgstr ""
+
+#: redbot/cogs/admin/admin.py:149
+#, docstring
+msgid "Add a role to a user.\\n\\n If user is left blank it defaults to the author of the command.\\n "
+msgstr ""
+
+#: redbot/cogs/admin/admin.py:169
+#, docstring
+msgid "Remove a role from a user.\\n\\n If user is left blank it defaults to the author of the command.\\n "
+msgstr ""
+
+#: redbot/cogs/admin/admin.py:187
+#, docstring
+msgid "Edit role settings."
+msgstr ""
+
+#: redbot/cogs/admin/admin.py:194
+#, docstring
+msgid "Edit a role's colour.\\n\\n Use double quotes if the role contains spaces.\\n Colour must be in hexadecimal format.\\n [Online colour picker](http://www.w3schools.com/colors/colors_picker.asp)\\n\\n Examples:\\n `[p]editrole colour \\\"The Transistor\\\" #ff0000`\\n `[p]editrole colour Test #ff9900`\\n "
+msgstr ""
+
+#: redbot/cogs/admin/admin.py:217 redbot/cogs/admin/admin.py:245
+msgid "Done."
+msgstr ""
+
+#: redbot/cogs/admin/admin.py:222
+#, docstring
+msgid "Edit a role's name.\\n\\n Use double quotes if the role or the name contain spaces.\\n\\n Examples:\\n `[p]editrole name \\\"The Transistor\\\" Test`\\n "
+msgstr ""
+
+#: redbot/cogs/admin/admin.py:250
+#, docstring
+msgid "Announce a message to all servers the bot is in."
+msgstr ""
+
+#: redbot/cogs/admin/admin.py:257
+msgid "The announcement has begun."
+msgstr ""
+
+#: redbot/cogs/admin/admin.py:265
+#, docstring
+msgid "Cancel a running announce."
+msgstr ""
+
+#: redbot/cogs/admin/admin.py:271
+msgid "The current announcement has been cancelled."
+msgstr ""
+
+#: redbot/cogs/admin/admin.py:277
+#, docstring
+msgid "Change the channel to which the bot makes announcements."
+msgstr ""
+
+#: redbot/cogs/admin/admin.py:283
+msgid "The announcement channel has been set to {channel.mention}"
+msgstr ""
+
+#: redbot/cogs/admin/admin.py:290
+#, docstring
+msgid "Toggle announcements being enabled this server."
+msgstr ""
+
+#: redbot/cogs/admin/admin.py:296
+msgid "The server {guild.name} will receive announcements."
+msgstr ""
+
+#: redbot/cogs/admin/admin.py:300
+msgid "The server {guild.name} will not receive announcements."
+msgstr ""
+
+#: redbot/cogs/admin/admin.py:326
+#, docstring
+msgid "Add a role to yourself.\\n\\n Server admins must have configured the role as user settable.\\n\\n NOTE: The role is case sensitive!\\n "
+msgstr ""
+
+#: redbot/cogs/admin/admin.py:337
+#, docstring
+msgid "Remove a selfrole from yourself.\\n\\n NOTE: The role is case sensitive!\\n "
+msgstr ""
+
+#: redbot/cogs/admin/admin.py:347
+#, docstring
+msgid "Add a role to the list of available selfroles.\\n\\n NOTE: The role is case sensitive!\\n "
+msgstr ""
+
+#: redbot/cogs/admin/admin.py:355 redbot/cogs/admin/admin.py:367
+msgid "The selfroles list has been successfully modified."
+msgstr ""
+
+#: redbot/cogs/admin/admin.py:360
+#, docstring
+msgid "Remove a role from the list of available selfroles.\\n\\n NOTE: The role is case sensitive!\\n "
+msgstr ""
+
+#: redbot/cogs/admin/admin.py:371
+#, docstring
+msgid "\\n Lists all available selfroles.\\n "
+msgstr ""
+
+#: redbot/cogs/admin/admin.py:377
+msgid "Available Selfroles:\\n{selfroles}"
+msgstr ""
+
+#: redbot/cogs/admin/admin.py:394
+#, docstring
+msgid "Lock a bot to its current servers only."
+msgstr ""
+
+#: redbot/cogs/admin/admin.py:399
+msgid "The bot is no longer serverlocked."
+msgstr ""
+
+#: redbot/cogs/admin/admin.py:401
+msgid "The bot is now serverlocked."
+msgstr ""
+
+#: redbot/cogs/admin/announcer.py:70
+msgid "I could not announce to server: {server.id}"
+msgstr ""
+
+#: redbot/cogs/admin/converters.py:25
+msgid "The Admin cog is not loaded."
+msgstr ""
+
+#: redbot/cogs/admin/converters.py:34
+msgid "The provided role is not a valid selfrole."
+msgstr ""
+
diff --git a/redbot/cogs/admin/locales/ru-RU.po b/redbot/cogs/admin/locales/ru-RU.po
index 2279158fc..15cf95b1e 100644
--- a/redbot/cogs/admin/locales/ru-RU.po
+++ b/redbot/cogs/admin/locales/ru-RU.po
@@ -1,14 +1,14 @@
msgid ""
msgstr ""
"Project-Id-Version: red-discordbot\n"
-"POT-Creation-Date: 2019-01-11 02:18+0000\n"
-"PO-Revision-Date: 2019-02-25 05:52\n"
-"Last-Translator: Kowlin \n"
+"POT-Creation-Date: 2019-07-05 22:33+0200\n"
+"PO-Revision-Date: 2019-07-06 16:13\n"
+"Last-Translator: Robert Jansen (Kowlin)\n"
"Language-Team: Russian\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"Generated-By: redgettext 2.2\n"
+"Generated-By: redgettext 3.0\n"
"Plural-Forms: nplurals=4; plural=((n%10==1 && n%100!=11) ? 0 : ((n%10 >= 2 && n%10 <=4 && (n%100 < 12 || n%100 > 14)) ? 1 : ((n%10 == 0 || (n%10 >= 5 && n%10 <=9)) || (n%100 >= 11 && n%100 <= 14)) ? 2 : 3));\n"
"X-Generator: crowdin.com\n"
"X-Crowdin-Project: red-discordbot\n"
@@ -18,201 +18,159 @@ msgstr ""
#: redbot/cogs/admin/admin.py:17
msgid "I attempted to do something that Discord denied me permissions for. Your command failed to successfully complete."
-msgstr "Я попытался сделать что-то, для чего Discord отказал мне в разрешениях. Ваша команда не была успешно выполнена."
+msgstr "Я попыталась сделать что-то, в чем Discord отказал мне в разрешениях. Ваша команда не была выполнена успешно."
#: redbot/cogs/admin/admin.py:22
-msgid "I tried to add {role.name} to {member.display_name} but that role is higher than my highest role in the Discord hierarchy so I was unable to successfully add it. Please give me a higher role and try again."
-msgstr "Я попытался добавить {member.display_name} в {role.name}, но эта роль выше, чем моя наивысшая роль в иерархии Discord, поэтому я не смог добавить ее успешно. Пожалуйста, дайте мне более высокую роль и повторите попытку."
+msgid "I tried to {verb} {role.name} to {member.display_name} but that role is higher than my highest role in the Discord hierarchy so I was unable to successfully add it. Please give me a higher role and try again."
+msgstr ""
#: redbot/cogs/admin/admin.py:29
-msgid "I tried to add {role.name} to {member.display_name} but that role is higher than your highest role in the Discord hierarchy so I was unable to successfully add it. Please get a higher role and try again."
-msgstr "Я попытался добавить {member.display_name} в {role.name}, но эта роль выше, чем ваша наивысшая роль в иерархии Discord, поэтому я не смог добавить ее успешно. Пожалуйста, получите более высокую роль и повторите попытку."
+msgid "I tried to {verb} {role.name} to {member.display_name} but that role is higher than your highest role in the Discord hierarchy so I was unable to successfully add it. Please get a higher role and try again."
+msgstr ""
#: redbot/cogs/admin/admin.py:36
+msgid "I tried to edit {role.name} but that role is higher than your highest role in the Discord hierarchy so I was unable to successfully add it. Please get a higher role and try again."
+msgstr "Я попытался изменить {role.name}, но эта роль выше Вашей в иерархии Discord, поэтому я не смог добавить её. Повысьте роль и попробуйте еще раз."
+
+#: redbot/cogs/admin/admin.py:43
msgid "I am already announcing something. If you would like to make a different announcement please use `{prefix}announce cancel` first."
msgstr "Я уже что-то объявляю. Если вы хотите сделать другое объявление, сначала используйте `{prefix}announce cancel`."
-#: redbot/cogs/admin/admin.py:46
+#: redbot/cogs/admin/admin.py:53
#, docstring
msgid "A collection of server administration utilities."
msgstr "Набор утилит администрирования сервера."
-#: redbot/cogs/admin/admin.py:112
-msgid "I successfully added {role.name} to {member.display_name}"
-msgstr "Я успешно добавил {member.display_name} в {role.name}"
+#: redbot/cogs/admin/admin.py:115 redbot/cogs/admin/admin.py:160
+msgid "add"
+msgstr "добавить"
-#: redbot/cogs/admin/admin.py:127
-msgid "I successfully removed {role.name} from {member.display_name}"
-msgstr "Я успешно убрал {member.display_name} из {role.name}"
+#: redbot/cogs/admin/admin.py:121
+msgid "I successfully added {role.name} to {member.display_name}"
+msgstr "Я успешно добавила роль {role.name} пользователю {member.display_name}"
+
+#: redbot/cogs/admin/admin.py:132 redbot/cogs/admin/admin.py:180
+msgid "remove"
+msgstr "удалить"
#: redbot/cogs/admin/admin.py:138
-#, docstring
-msgid "Add a role to a user.\n\n"
-" If user is left blank it defaults to the author of the command.\n"
-" "
-msgstr "Добавляет роль пользователю.\n\n"
-" Если пользователь не указан, то по умолчанию используется отправитель.\n"
-" "
+msgid "I successfully removed {role.name} from {member.display_name}"
+msgstr "Я успешно забрала роль {role.name} у пользователя {member.display_name}"
-#: redbot/cogs/admin/admin.py:156
+#: redbot/cogs/admin/admin.py:149
#, docstring
-msgid "Remove a role from a user.\n\n"
-" If user is left blank it defaults to the author of the command.\n"
-" "
-msgstr "Забирает роль у пользователя.\n\n"
-" Если пользователь не указан, то по умолчанию используется отправитель.\n"
-" "
+msgid "Add a role to a user.\\n\\n If user is left blank it defaults to the author of the command.\\n "
+msgstr ""
-#: redbot/cogs/admin/admin.py:172
+#: redbot/cogs/admin/admin.py:169
+#, docstring
+msgid "Remove a role from a user.\\n\\n If user is left blank it defaults to the author of the command.\\n "
+msgstr ""
+
+#: redbot/cogs/admin/admin.py:187
#, docstring
msgid "Edit role settings."
msgstr "Изменение параметров роли."
-#: redbot/cogs/admin/admin.py:179
+#: redbot/cogs/admin/admin.py:194
#, docstring
-msgid "Edit a role's colour.\n\n"
-" Use double quotes if the role contains spaces.\n"
-" Colour must be in hexadecimal format.\n"
-" [Online colour picker](http://www.w3schools.com/colors/colors_picker.asp)\n\n"
-" Examples:\n"
-" `[p]editrole colour \"The Transistor\" #ff0000`\n"
-" `[p]editrole colour Test #ff9900`\n"
-" "
-msgstr "Изменить цвет роли.\n\n"
-" Используйте двойные кавычки, если роль содержит пробелы.\n"
-" Цвет должен быть в шестнадцатеричном формате.\n"
-" [Онлайн-палитра цветов](http://www.w3schools.com/colors/colors_picker.asp)\n\n"
-" Примеры:\n"
-" `[p]editrole colour \"The Transistor\" #ff0000`\n"
-" `[p]editrole colour Test #ff9900`\n"
-" "
+msgid "Edit a role's colour.\\n\\n Use double quotes if the role contains spaces.\\n Colour must be in hexadecimal format.\\n [Online colour picker](http://www.w3schools.com/colors/colors_picker.asp)\\n\\n Examples:\\n `[p]editrole colour \\\"The Transistor\\\" #ff0000`\\n `[p]editrole colour Test #ff9900`\\n "
+msgstr ""
-#: redbot/cogs/admin/admin.py:202 redbot/cogs/admin/admin.py:230
+#: redbot/cogs/admin/admin.py:217 redbot/cogs/admin/admin.py:245
msgid "Done."
msgstr "Готово."
-#: redbot/cogs/admin/admin.py:207
+#: redbot/cogs/admin/admin.py:222
#, docstring
-msgid "Edit a role's name.\n\n"
-" Use double quotes if the role or the name contain spaces.\n\n"
-" Examples:\n"
-" `[p]editrole name \"The Transistor\" Test`\n"
-" "
-msgstr "Изменить имя роли.\n\n"
-" Используйте двойные кавычки, если роль или имя содержат пробелы.\n\n"
-" Примеры:\n"
-" `[p]editrole name \"The Transistor\" Test`\n"
-" "
+msgid "Edit a role's name.\\n\\n Use double quotes if the role or the name contain spaces.\\n\\n Examples:\\n `[p]editrole name \\\"The Transistor\\\" Test`\\n "
+msgstr ""
-#: redbot/cogs/admin/admin.py:235
+#: redbot/cogs/admin/admin.py:250
#, docstring
msgid "Announce a message to all servers the bot is in."
msgstr "Объявить сообщение на всех серверах, к которым подключен бот."
-#: redbot/cogs/admin/admin.py:242
+#: redbot/cogs/admin/admin.py:257
msgid "The announcement has begun."
msgstr "Объявление началось."
-#: redbot/cogs/admin/admin.py:250
+#: redbot/cogs/admin/admin.py:265
#, docstring
msgid "Cancel a running announce."
msgstr "Отменить текущее объявление."
-#: redbot/cogs/admin/admin.py:256
+#: redbot/cogs/admin/admin.py:271
msgid "The current announcement has been cancelled."
msgstr "Текущее объявление было отменено."
-#: redbot/cogs/admin/admin.py:262
+#: redbot/cogs/admin/admin.py:277
#, docstring
msgid "Change the channel to which the bot makes announcements."
msgstr "Изменить канал, на котором бот делает объявления."
-#: redbot/cogs/admin/admin.py:268
+#: redbot/cogs/admin/admin.py:283
msgid "The announcement channel has been set to {channel.mention}"
msgstr "Канал объявления был установлен на {channel.mention}"
-#: redbot/cogs/admin/admin.py:275
+#: redbot/cogs/admin/admin.py:290
#, docstring
msgid "Toggle announcements being enabled this server."
msgstr "Переключить объявления, когда этот сервер включен."
-#: redbot/cogs/admin/admin.py:281
+#: redbot/cogs/admin/admin.py:296
msgid "The server {guild.name} will receive announcements."
msgstr "Сервер {guild.name} будет получать объявления."
-#: redbot/cogs/admin/admin.py:285
+#: redbot/cogs/admin/admin.py:300
msgid "The server {guild.name} will not receive announcements."
msgstr "Сервер {guild.name} не будет получать объявления."
-#: redbot/cogs/admin/admin.py:311
+#: redbot/cogs/admin/admin.py:326
#, docstring
-msgid "Add a role to yourself.\n\n"
-" Server admins must have configured the role as user settable.\n\n"
-" NOTE: The role is case sensitive!\n"
-" "
-msgstr "Добавить себе роль.\n\n"
-" Администраторы сервера должны настроить роль как настраиваемую пользователем.\n\n"
-" ПРИМЕЧАНИЕ: Роль чувствительна к регистру!\n"
-" "
+msgid "Add a role to yourself.\\n\\n Server admins must have configured the role as user settable.\\n\\n NOTE: The role is case sensitive!\\n "
+msgstr ""
-#: redbot/cogs/admin/admin.py:322
+#: redbot/cogs/admin/admin.py:337
#, docstring
-msgid "Remove a selfrole from yourself.\n\n"
-" NOTE: The role is case sensitive!\n"
-" "
-msgstr "Удалить свою роль.\n\n"
-" ПРИМЕЧАНИЕ: Роль чувствительна к регистру!\n"
-" "
+msgid "Remove a selfrole from yourself.\\n\\n NOTE: The role is case sensitive!\\n "
+msgstr ""
-#: redbot/cogs/admin/admin.py:332
+#: redbot/cogs/admin/admin.py:347
#, docstring
-msgid "Add a role to the list of available selfroles.\n\n"
-" NOTE: The role is case sensitive!\n"
-" "
-msgstr "Добавить роль в список доступных ролей.\n\n"
-" ПРИМЕЧАНИЕ: Роль чувствительна к регистру!\n"
-" "
+msgid "Add a role to the list of available selfroles.\\n\\n NOTE: The role is case sensitive!\\n "
+msgstr ""
-#: redbot/cogs/admin/admin.py:340 redbot/cogs/admin/admin.py:352
+#: redbot/cogs/admin/admin.py:355 redbot/cogs/admin/admin.py:367
msgid "The selfroles list has been successfully modified."
msgstr "Список ролей был изменен успешно."
-#: redbot/cogs/admin/admin.py:345
+#: redbot/cogs/admin/admin.py:360
#, docstring
-msgid "Remove a role from the list of available selfroles.\n\n"
-" NOTE: The role is case sensitive!\n"
-" "
-msgstr "Удалить роль из списка доступных ролей.\n\n"
-" ПРИМЕЧАНИЕ: Роль чувствительна к регистру!\n"
-" "
+msgid "Remove a role from the list of available selfroles.\\n\\n NOTE: The role is case sensitive!\\n "
+msgstr ""
-#: redbot/cogs/admin/admin.py:356
+#: redbot/cogs/admin/admin.py:371
#, docstring
-msgid "\n"
-" Lists all available selfroles.\n"
-" "
-msgstr "\n"
-" Список всех доступных ролей.\n"
-" "
+msgid "\\n Lists all available selfroles.\\n "
+msgstr ""
-#: redbot/cogs/admin/admin.py:362
-msgid "Available Selfroles:\n"
-"{selfroles}"
-msgstr "Доступные роли:\n"
-"{selfroles}"
+#: redbot/cogs/admin/admin.py:377
+msgid "Available Selfroles:\\n{selfroles}"
+msgstr ""
-#: redbot/cogs/admin/admin.py:379
+#: redbot/cogs/admin/admin.py:394
#, docstring
msgid "Lock a bot to its current servers only."
-msgstr "Заблокировать бота только на его текущих серверах."
+msgstr "Зафиксировать бота только на его текущих серверах."
-#: redbot/cogs/admin/admin.py:384
+#: redbot/cogs/admin/admin.py:399
msgid "The bot is no longer serverlocked."
-msgstr "Бот больше не заблокирован на сервере."
+msgstr "Бот больше не зафиксирован на сервере."
-#: redbot/cogs/admin/admin.py:386
+#: redbot/cogs/admin/admin.py:401
msgid "The bot is now serverlocked."
-msgstr "Бот теперь заблокирован на сервере."
+msgstr "Бот теперь зафиксирован на сервере."
#: redbot/cogs/admin/announcer.py:70
msgid "I could not announce to server: {server.id}"
@@ -220,7 +178,7 @@ msgstr "Я не могу объявить на сервере: {server.id}"
#: redbot/cogs/admin/converters.py:25
msgid "The Admin cog is not loaded."
-msgstr "Плагин администрирования не загружен."
+msgstr "Модуль Admin не загружен."
#: redbot/cogs/admin/converters.py:34
msgid "The provided role is not a valid selfrole."
diff --git a/redbot/cogs/admin/locales/sk-SK.po b/redbot/cogs/admin/locales/sk-SK.po
index e9b5fb3de..9215bdfb3 100644
--- a/redbot/cogs/admin/locales/sk-SK.po
+++ b/redbot/cogs/admin/locales/sk-SK.po
@@ -1,14 +1,14 @@
msgid ""
msgstr ""
"Project-Id-Version: red-discordbot\n"
-"POT-Creation-Date: 2019-01-11 02:18+0000\n"
-"PO-Revision-Date: 2019-02-25 03:07\n"
-"Last-Translator: Kowlin \n"
+"POT-Creation-Date: 2019-07-05 22:33+0200\n"
+"PO-Revision-Date: 2019-07-06 16:14\n"
+"Last-Translator: Robert Jansen (Kowlin)\n"
"Language-Team: Slovak\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"Generated-By: redgettext 2.2\n"
+"Generated-By: redgettext 3.0\n"
"Plural-Forms: nplurals=4; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 3;\n"
"X-Generator: crowdin.com\n"
"X-Crowdin-Project: red-discordbot\n"
@@ -21,169 +21,154 @@ msgid "I attempted to do something that Discord denied me permissions for. Your
msgstr ""
#: redbot/cogs/admin/admin.py:22
-msgid "I tried to add {role.name} to {member.display_name} but that role is higher than my highest role in the Discord hierarchy so I was unable to successfully add it. Please give me a higher role and try again."
+msgid "I tried to {verb} {role.name} to {member.display_name} but that role is higher than my highest role in the Discord hierarchy so I was unable to successfully add it. Please give me a higher role and try again."
msgstr ""
#: redbot/cogs/admin/admin.py:29
-msgid "I tried to add {role.name} to {member.display_name} but that role is higher than your highest role in the Discord hierarchy so I was unable to successfully add it. Please get a higher role and try again."
+msgid "I tried to {verb} {role.name} to {member.display_name} but that role is higher than your highest role in the Discord hierarchy so I was unable to successfully add it. Please get a higher role and try again."
msgstr ""
#: redbot/cogs/admin/admin.py:36
+msgid "I tried to edit {role.name} but that role is higher than your highest role in the Discord hierarchy so I was unable to successfully add it. Please get a higher role and try again."
+msgstr ""
+
+#: redbot/cogs/admin/admin.py:43
msgid "I am already announcing something. If you would like to make a different announcement please use `{prefix}announce cancel` first."
msgstr ""
-#: redbot/cogs/admin/admin.py:46
+#: redbot/cogs/admin/admin.py:53
#, docstring
msgid "A collection of server administration utilities."
msgstr ""
-#: redbot/cogs/admin/admin.py:112
+#: redbot/cogs/admin/admin.py:115 redbot/cogs/admin/admin.py:160
+msgid "add"
+msgstr ""
+
+#: redbot/cogs/admin/admin.py:121
msgid "I successfully added {role.name} to {member.display_name}"
msgstr ""
-#: redbot/cogs/admin/admin.py:127
-msgid "I successfully removed {role.name} from {member.display_name}"
+#: redbot/cogs/admin/admin.py:132 redbot/cogs/admin/admin.py:180
+msgid "remove"
msgstr ""
#: redbot/cogs/admin/admin.py:138
-#, docstring
-msgid "Add a role to a user.\n\n"
-" If user is left blank it defaults to the author of the command.\n"
-" "
+msgid "I successfully removed {role.name} from {member.display_name}"
msgstr ""
-#: redbot/cogs/admin/admin.py:156
+#: redbot/cogs/admin/admin.py:149
#, docstring
-msgid "Remove a role from a user.\n\n"
-" If user is left blank it defaults to the author of the command.\n"
-" "
+msgid "Add a role to a user.\\n\\n If user is left blank it defaults to the author of the command.\\n "
msgstr ""
-#: redbot/cogs/admin/admin.py:172
+#: redbot/cogs/admin/admin.py:169
+#, docstring
+msgid "Remove a role from a user.\\n\\n If user is left blank it defaults to the author of the command.\\n "
+msgstr ""
+
+#: redbot/cogs/admin/admin.py:187
#, docstring
msgid "Edit role settings."
msgstr ""
-#: redbot/cogs/admin/admin.py:179
+#: redbot/cogs/admin/admin.py:194
#, docstring
-msgid "Edit a role's colour.\n\n"
-" Use double quotes if the role contains spaces.\n"
-" Colour must be in hexadecimal format.\n"
-" [Online colour picker](http://www.w3schools.com/colors/colors_picker.asp)\n\n"
-" Examples:\n"
-" `[p]editrole colour \"The Transistor\" #ff0000`\n"
-" `[p]editrole colour Test #ff9900`\n"
-" "
+msgid "Edit a role's colour.\\n\\n Use double quotes if the role contains spaces.\\n Colour must be in hexadecimal format.\\n [Online colour picker](http://www.w3schools.com/colors/colors_picker.asp)\\n\\n Examples:\\n `[p]editrole colour \\\"The Transistor\\\" #ff0000`\\n `[p]editrole colour Test #ff9900`\\n "
msgstr ""
-#: redbot/cogs/admin/admin.py:202 redbot/cogs/admin/admin.py:230
+#: redbot/cogs/admin/admin.py:217 redbot/cogs/admin/admin.py:245
msgid "Done."
msgstr ""
-#: redbot/cogs/admin/admin.py:207
+#: redbot/cogs/admin/admin.py:222
#, docstring
-msgid "Edit a role's name.\n\n"
-" Use double quotes if the role or the name contain spaces.\n\n"
-" Examples:\n"
-" `[p]editrole name \"The Transistor\" Test`\n"
-" "
-msgstr ""
-
-#: redbot/cogs/admin/admin.py:235
-#, docstring
-msgid "Announce a message to all servers the bot is in."
-msgstr ""
-
-#: redbot/cogs/admin/admin.py:242
-msgid "The announcement has begun."
+msgid "Edit a role's name.\\n\\n Use double quotes if the role or the name contain spaces.\\n\\n Examples:\\n `[p]editrole name \\\"The Transistor\\\" Test`\\n "
msgstr ""
#: redbot/cogs/admin/admin.py:250
#, docstring
+msgid "Announce a message to all servers the bot is in."
+msgstr ""
+
+#: redbot/cogs/admin/admin.py:257
+msgid "The announcement has begun."
+msgstr ""
+
+#: redbot/cogs/admin/admin.py:265
+#, docstring
msgid "Cancel a running announce."
msgstr ""
-#: redbot/cogs/admin/admin.py:256
+#: redbot/cogs/admin/admin.py:271
msgid "The current announcement has been cancelled."
msgstr ""
-#: redbot/cogs/admin/admin.py:262
+#: redbot/cogs/admin/admin.py:277
#, docstring
msgid "Change the channel to which the bot makes announcements."
msgstr ""
-#: redbot/cogs/admin/admin.py:268
+#: redbot/cogs/admin/admin.py:283
msgid "The announcement channel has been set to {channel.mention}"
msgstr ""
-#: redbot/cogs/admin/admin.py:275
+#: redbot/cogs/admin/admin.py:290
#, docstring
msgid "Toggle announcements being enabled this server."
msgstr ""
-#: redbot/cogs/admin/admin.py:281
+#: redbot/cogs/admin/admin.py:296
msgid "The server {guild.name} will receive announcements."
msgstr ""
-#: redbot/cogs/admin/admin.py:285
+#: redbot/cogs/admin/admin.py:300
msgid "The server {guild.name} will not receive announcements."
msgstr ""
-#: redbot/cogs/admin/admin.py:311
+#: redbot/cogs/admin/admin.py:326
#, docstring
-msgid "Add a role to yourself.\n\n"
-" Server admins must have configured the role as user settable.\n\n"
-" NOTE: The role is case sensitive!\n"
-" "
+msgid "Add a role to yourself.\\n\\n Server admins must have configured the role as user settable.\\n\\n NOTE: The role is case sensitive!\\n "
msgstr ""
-#: redbot/cogs/admin/admin.py:322
+#: redbot/cogs/admin/admin.py:337
#, docstring
-msgid "Remove a selfrole from yourself.\n\n"
-" NOTE: The role is case sensitive!\n"
-" "
+msgid "Remove a selfrole from yourself.\\n\\n NOTE: The role is case sensitive!\\n "
msgstr ""
-#: redbot/cogs/admin/admin.py:332
+#: redbot/cogs/admin/admin.py:347
#, docstring
-msgid "Add a role to the list of available selfroles.\n\n"
-" NOTE: The role is case sensitive!\n"
-" "
+msgid "Add a role to the list of available selfroles.\\n\\n NOTE: The role is case sensitive!\\n "
msgstr ""
-#: redbot/cogs/admin/admin.py:340 redbot/cogs/admin/admin.py:352
+#: redbot/cogs/admin/admin.py:355 redbot/cogs/admin/admin.py:367
msgid "The selfroles list has been successfully modified."
msgstr ""
-#: redbot/cogs/admin/admin.py:345
+#: redbot/cogs/admin/admin.py:360
#, docstring
-msgid "Remove a role from the list of available selfroles.\n\n"
-" NOTE: The role is case sensitive!\n"
-" "
+msgid "Remove a role from the list of available selfroles.\\n\\n NOTE: The role is case sensitive!\\n "
msgstr ""
-#: redbot/cogs/admin/admin.py:356
+#: redbot/cogs/admin/admin.py:371
#, docstring
-msgid "\n"
-" Lists all available selfroles.\n"
-" "
+msgid "\\n Lists all available selfroles.\\n "
msgstr ""
-#: redbot/cogs/admin/admin.py:362
-msgid "Available Selfroles:\n"
-"{selfroles}"
+#: redbot/cogs/admin/admin.py:377
+msgid "Available Selfroles:\\n{selfroles}"
msgstr ""
-#: redbot/cogs/admin/admin.py:379
+#: redbot/cogs/admin/admin.py:394
#, docstring
msgid "Lock a bot to its current servers only."
msgstr ""
-#: redbot/cogs/admin/admin.py:384
+#: redbot/cogs/admin/admin.py:399
msgid "The bot is no longer serverlocked."
msgstr ""
-#: redbot/cogs/admin/admin.py:386
+#: redbot/cogs/admin/admin.py:401
msgid "The bot is now serverlocked."
msgstr ""
diff --git a/redbot/cogs/admin/locales/sv-SE.po b/redbot/cogs/admin/locales/sv-SE.po
index bfc147b27..a69ca4fec 100644
--- a/redbot/cogs/admin/locales/sv-SE.po
+++ b/redbot/cogs/admin/locales/sv-SE.po
@@ -1,14 +1,14 @@
msgid ""
msgstr ""
"Project-Id-Version: red-discordbot\n"
-"POT-Creation-Date: 2019-01-11 02:18+0000\n"
-"PO-Revision-Date: 2019-02-25 03:08\n"
-"Last-Translator: Kowlin \n"
+"POT-Creation-Date: 2019-07-05 22:33+0200\n"
+"PO-Revision-Date: 2019-07-06 16:14\n"
+"Last-Translator: Robert Jansen (Kowlin)\n"
"Language-Team: Swedish\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"Generated-By: redgettext 2.2\n"
+"Generated-By: redgettext 3.0\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: crowdin.com\n"
"X-Crowdin-Project: red-discordbot\n"
@@ -18,172 +18,157 @@ msgstr ""
#: redbot/cogs/admin/admin.py:17
msgid "I attempted to do something that Discord denied me permissions for. Your command failed to successfully complete."
-msgstr ""
+msgstr "Jag försökte göra något som Discord nekade mig behörighet till. Ditt kommando kunde inte slutföras."
#: redbot/cogs/admin/admin.py:22
-msgid "I tried to add {role.name} to {member.display_name} but that role is higher than my highest role in the Discord hierarchy so I was unable to successfully add it. Please give me a higher role and try again."
+msgid "I tried to {verb} {role.name} to {member.display_name} but that role is higher than my highest role in the Discord hierarchy so I was unable to successfully add it. Please give me a higher role and try again."
msgstr ""
#: redbot/cogs/admin/admin.py:29
-msgid "I tried to add {role.name} to {member.display_name} but that role is higher than your highest role in the Discord hierarchy so I was unable to successfully add it. Please get a higher role and try again."
+msgid "I tried to {verb} {role.name} to {member.display_name} but that role is higher than your highest role in the Discord hierarchy so I was unable to successfully add it. Please get a higher role and try again."
msgstr ""
#: redbot/cogs/admin/admin.py:36
+msgid "I tried to edit {role.name} but that role is higher than your highest role in the Discord hierarchy so I was unable to successfully add it. Please get a higher role and try again."
+msgstr ""
+
+#: redbot/cogs/admin/admin.py:43
msgid "I am already announcing something. If you would like to make a different announcement please use `{prefix}announce cancel` first."
msgstr ""
-#: redbot/cogs/admin/admin.py:46
+#: redbot/cogs/admin/admin.py:53
#, docstring
msgid "A collection of server administration utilities."
+msgstr "En samling administrationsverktyg för servern."
+
+#: redbot/cogs/admin/admin.py:115 redbot/cogs/admin/admin.py:160
+msgid "add"
msgstr ""
-#: redbot/cogs/admin/admin.py:112
+#: redbot/cogs/admin/admin.py:121
msgid "I successfully added {role.name} to {member.display_name}"
msgstr ""
-#: redbot/cogs/admin/admin.py:127
-msgid "I successfully removed {role.name} from {member.display_name}"
+#: redbot/cogs/admin/admin.py:132 redbot/cogs/admin/admin.py:180
+msgid "remove"
msgstr ""
#: redbot/cogs/admin/admin.py:138
-#, docstring
-msgid "Add a role to a user.\n\n"
-" If user is left blank it defaults to the author of the command.\n"
-" "
+msgid "I successfully removed {role.name} from {member.display_name}"
msgstr ""
-#: redbot/cogs/admin/admin.py:156
+#: redbot/cogs/admin/admin.py:149
#, docstring
-msgid "Remove a role from a user.\n\n"
-" If user is left blank it defaults to the author of the command.\n"
-" "
+msgid "Add a role to a user.\\n\\n If user is left blank it defaults to the author of the command.\\n "
msgstr ""
-#: redbot/cogs/admin/admin.py:172
+#: redbot/cogs/admin/admin.py:169
+#, docstring
+msgid "Remove a role from a user.\\n\\n If user is left blank it defaults to the author of the command.\\n "
+msgstr ""
+
+#: redbot/cogs/admin/admin.py:187
#, docstring
msgid "Edit role settings."
-msgstr ""
+msgstr "Redigera rollinställningar."
-#: redbot/cogs/admin/admin.py:179
+#: redbot/cogs/admin/admin.py:194
#, docstring
-msgid "Edit a role's colour.\n\n"
-" Use double quotes if the role contains spaces.\n"
-" Colour must be in hexadecimal format.\n"
-" [Online colour picker](http://www.w3schools.com/colors/colors_picker.asp)\n\n"
-" Examples:\n"
-" `[p]editrole colour \"The Transistor\" #ff0000`\n"
-" `[p]editrole colour Test #ff9900`\n"
-" "
+msgid "Edit a role's colour.\\n\\n Use double quotes if the role contains spaces.\\n Colour must be in hexadecimal format.\\n [Online colour picker](http://www.w3schools.com/colors/colors_picker.asp)\\n\\n Examples:\\n `[p]editrole colour \\\"The Transistor\\\" #ff0000`\\n `[p]editrole colour Test #ff9900`\\n "
msgstr ""
-#: redbot/cogs/admin/admin.py:202 redbot/cogs/admin/admin.py:230
+#: redbot/cogs/admin/admin.py:217 redbot/cogs/admin/admin.py:245
msgid "Done."
-msgstr ""
+msgstr "Klart."
-#: redbot/cogs/admin/admin.py:207
+#: redbot/cogs/admin/admin.py:222
#, docstring
-msgid "Edit a role's name.\n\n"
-" Use double quotes if the role or the name contain spaces.\n\n"
-" Examples:\n"
-" `[p]editrole name \"The Transistor\" Test`\n"
-" "
-msgstr ""
-
-#: redbot/cogs/admin/admin.py:235
-#, docstring
-msgid "Announce a message to all servers the bot is in."
-msgstr ""
-
-#: redbot/cogs/admin/admin.py:242
-msgid "The announcement has begun."
+msgid "Edit a role's name.\\n\\n Use double quotes if the role or the name contain spaces.\\n\\n Examples:\\n `[p]editrole name \\\"The Transistor\\\" Test`\\n "
msgstr ""
#: redbot/cogs/admin/admin.py:250
#, docstring
+msgid "Announce a message to all servers the bot is in."
+msgstr ""
+
+#: redbot/cogs/admin/admin.py:257
+msgid "The announcement has begun."
+msgstr ""
+
+#: redbot/cogs/admin/admin.py:265
+#, docstring
msgid "Cancel a running announce."
msgstr ""
-#: redbot/cogs/admin/admin.py:256
+#: redbot/cogs/admin/admin.py:271
msgid "The current announcement has been cancelled."
msgstr ""
-#: redbot/cogs/admin/admin.py:262
+#: redbot/cogs/admin/admin.py:277
#, docstring
msgid "Change the channel to which the bot makes announcements."
msgstr ""
-#: redbot/cogs/admin/admin.py:268
+#: redbot/cogs/admin/admin.py:283
msgid "The announcement channel has been set to {channel.mention}"
msgstr ""
-#: redbot/cogs/admin/admin.py:275
+#: redbot/cogs/admin/admin.py:290
#, docstring
msgid "Toggle announcements being enabled this server."
msgstr ""
-#: redbot/cogs/admin/admin.py:281
+#: redbot/cogs/admin/admin.py:296
msgid "The server {guild.name} will receive announcements."
msgstr ""
-#: redbot/cogs/admin/admin.py:285
+#: redbot/cogs/admin/admin.py:300
msgid "The server {guild.name} will not receive announcements."
msgstr ""
-#: redbot/cogs/admin/admin.py:311
+#: redbot/cogs/admin/admin.py:326
#, docstring
-msgid "Add a role to yourself.\n\n"
-" Server admins must have configured the role as user settable.\n\n"
-" NOTE: The role is case sensitive!\n"
-" "
+msgid "Add a role to yourself.\\n\\n Server admins must have configured the role as user settable.\\n\\n NOTE: The role is case sensitive!\\n "
msgstr ""
-#: redbot/cogs/admin/admin.py:322
+#: redbot/cogs/admin/admin.py:337
#, docstring
-msgid "Remove a selfrole from yourself.\n\n"
-" NOTE: The role is case sensitive!\n"
-" "
+msgid "Remove a selfrole from yourself.\\n\\n NOTE: The role is case sensitive!\\n "
msgstr ""
-#: redbot/cogs/admin/admin.py:332
+#: redbot/cogs/admin/admin.py:347
#, docstring
-msgid "Add a role to the list of available selfroles.\n\n"
-" NOTE: The role is case sensitive!\n"
-" "
+msgid "Add a role to the list of available selfroles.\\n\\n NOTE: The role is case sensitive!\\n "
msgstr ""
-#: redbot/cogs/admin/admin.py:340 redbot/cogs/admin/admin.py:352
+#: redbot/cogs/admin/admin.py:355 redbot/cogs/admin/admin.py:367
msgid "The selfroles list has been successfully modified."
msgstr ""
-#: redbot/cogs/admin/admin.py:345
+#: redbot/cogs/admin/admin.py:360
#, docstring
-msgid "Remove a role from the list of available selfroles.\n\n"
-" NOTE: The role is case sensitive!\n"
-" "
+msgid "Remove a role from the list of available selfroles.\\n\\n NOTE: The role is case sensitive!\\n "
msgstr ""
-#: redbot/cogs/admin/admin.py:356
+#: redbot/cogs/admin/admin.py:371
#, docstring
-msgid "\n"
-" Lists all available selfroles.\n"
-" "
+msgid "\\n Lists all available selfroles.\\n "
msgstr ""
-#: redbot/cogs/admin/admin.py:362
-msgid "Available Selfroles:\n"
-"{selfroles}"
+#: redbot/cogs/admin/admin.py:377
+msgid "Available Selfroles:\\n{selfroles}"
msgstr ""
-#: redbot/cogs/admin/admin.py:379
+#: redbot/cogs/admin/admin.py:394
#, docstring
msgid "Lock a bot to its current servers only."
msgstr ""
-#: redbot/cogs/admin/admin.py:384
+#: redbot/cogs/admin/admin.py:399
msgid "The bot is no longer serverlocked."
msgstr ""
-#: redbot/cogs/admin/admin.py:386
+#: redbot/cogs/admin/admin.py:401
msgid "The bot is now serverlocked."
msgstr ""
diff --git a/redbot/cogs/admin/locales/tr-TR.po b/redbot/cogs/admin/locales/tr-TR.po
index 17207f874..cabae0a83 100644
--- a/redbot/cogs/admin/locales/tr-TR.po
+++ b/redbot/cogs/admin/locales/tr-TR.po
@@ -1,14 +1,14 @@
msgid ""
msgstr ""
"Project-Id-Version: red-discordbot\n"
-"POT-Creation-Date: 2019-01-11 02:18+0000\n"
-"PO-Revision-Date: 2019-02-25 03:08\n"
-"Last-Translator: Kowlin \n"
+"POT-Creation-Date: 2019-07-05 22:33+0200\n"
+"PO-Revision-Date: 2019-07-06 16:14\n"
+"Last-Translator: Robert Jansen (Kowlin)\n"
"Language-Team: Turkish\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"Generated-By: redgettext 2.2\n"
+"Generated-By: redgettext 3.0\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: crowdin.com\n"
"X-Crowdin-Project: red-discordbot\n"
@@ -21,169 +21,154 @@ msgid "I attempted to do something that Discord denied me permissions for. Your
msgstr ""
#: redbot/cogs/admin/admin.py:22
-msgid "I tried to add {role.name} to {member.display_name} but that role is higher than my highest role in the Discord hierarchy so I was unable to successfully add it. Please give me a higher role and try again."
+msgid "I tried to {verb} {role.name} to {member.display_name} but that role is higher than my highest role in the Discord hierarchy so I was unable to successfully add it. Please give me a higher role and try again."
msgstr ""
#: redbot/cogs/admin/admin.py:29
-msgid "I tried to add {role.name} to {member.display_name} but that role is higher than your highest role in the Discord hierarchy so I was unable to successfully add it. Please get a higher role and try again."
+msgid "I tried to {verb} {role.name} to {member.display_name} but that role is higher than your highest role in the Discord hierarchy so I was unable to successfully add it. Please get a higher role and try again."
msgstr ""
#: redbot/cogs/admin/admin.py:36
+msgid "I tried to edit {role.name} but that role is higher than your highest role in the Discord hierarchy so I was unable to successfully add it. Please get a higher role and try again."
+msgstr ""
+
+#: redbot/cogs/admin/admin.py:43
msgid "I am already announcing something. If you would like to make a different announcement please use `{prefix}announce cancel` first."
msgstr ""
-#: redbot/cogs/admin/admin.py:46
+#: redbot/cogs/admin/admin.py:53
#, docstring
msgid "A collection of server administration utilities."
msgstr ""
-#: redbot/cogs/admin/admin.py:112
+#: redbot/cogs/admin/admin.py:115 redbot/cogs/admin/admin.py:160
+msgid "add"
+msgstr ""
+
+#: redbot/cogs/admin/admin.py:121
msgid "I successfully added {role.name} to {member.display_name}"
msgstr ""
-#: redbot/cogs/admin/admin.py:127
-msgid "I successfully removed {role.name} from {member.display_name}"
+#: redbot/cogs/admin/admin.py:132 redbot/cogs/admin/admin.py:180
+msgid "remove"
msgstr ""
#: redbot/cogs/admin/admin.py:138
-#, docstring
-msgid "Add a role to a user.\n\n"
-" If user is left blank it defaults to the author of the command.\n"
-" "
+msgid "I successfully removed {role.name} from {member.display_name}"
msgstr ""
-#: redbot/cogs/admin/admin.py:156
+#: redbot/cogs/admin/admin.py:149
#, docstring
-msgid "Remove a role from a user.\n\n"
-" If user is left blank it defaults to the author of the command.\n"
-" "
+msgid "Add a role to a user.\\n\\n If user is left blank it defaults to the author of the command.\\n "
msgstr ""
-#: redbot/cogs/admin/admin.py:172
+#: redbot/cogs/admin/admin.py:169
+#, docstring
+msgid "Remove a role from a user.\\n\\n If user is left blank it defaults to the author of the command.\\n "
+msgstr ""
+
+#: redbot/cogs/admin/admin.py:187
#, docstring
msgid "Edit role settings."
msgstr ""
-#: redbot/cogs/admin/admin.py:179
+#: redbot/cogs/admin/admin.py:194
#, docstring
-msgid "Edit a role's colour.\n\n"
-" Use double quotes if the role contains spaces.\n"
-" Colour must be in hexadecimal format.\n"
-" [Online colour picker](http://www.w3schools.com/colors/colors_picker.asp)\n\n"
-" Examples:\n"
-" `[p]editrole colour \"The Transistor\" #ff0000`\n"
-" `[p]editrole colour Test #ff9900`\n"
-" "
+msgid "Edit a role's colour.\\n\\n Use double quotes if the role contains spaces.\\n Colour must be in hexadecimal format.\\n [Online colour picker](http://www.w3schools.com/colors/colors_picker.asp)\\n\\n Examples:\\n `[p]editrole colour \\\"The Transistor\\\" #ff0000`\\n `[p]editrole colour Test #ff9900`\\n "
msgstr ""
-#: redbot/cogs/admin/admin.py:202 redbot/cogs/admin/admin.py:230
+#: redbot/cogs/admin/admin.py:217 redbot/cogs/admin/admin.py:245
msgid "Done."
-msgstr ""
+msgstr "Tamamdır."
-#: redbot/cogs/admin/admin.py:207
+#: redbot/cogs/admin/admin.py:222
#, docstring
-msgid "Edit a role's name.\n\n"
-" Use double quotes if the role or the name contain spaces.\n\n"
-" Examples:\n"
-" `[p]editrole name \"The Transistor\" Test`\n"
-" "
-msgstr ""
-
-#: redbot/cogs/admin/admin.py:235
-#, docstring
-msgid "Announce a message to all servers the bot is in."
-msgstr ""
-
-#: redbot/cogs/admin/admin.py:242
-msgid "The announcement has begun."
+msgid "Edit a role's name.\\n\\n Use double quotes if the role or the name contain spaces.\\n\\n Examples:\\n `[p]editrole name \\\"The Transistor\\\" Test`\\n "
msgstr ""
#: redbot/cogs/admin/admin.py:250
#, docstring
+msgid "Announce a message to all servers the bot is in."
+msgstr ""
+
+#: redbot/cogs/admin/admin.py:257
+msgid "The announcement has begun."
+msgstr ""
+
+#: redbot/cogs/admin/admin.py:265
+#, docstring
msgid "Cancel a running announce."
msgstr ""
-#: redbot/cogs/admin/admin.py:256
+#: redbot/cogs/admin/admin.py:271
msgid "The current announcement has been cancelled."
msgstr ""
-#: redbot/cogs/admin/admin.py:262
+#: redbot/cogs/admin/admin.py:277
#, docstring
msgid "Change the channel to which the bot makes announcements."
msgstr ""
-#: redbot/cogs/admin/admin.py:268
+#: redbot/cogs/admin/admin.py:283
msgid "The announcement channel has been set to {channel.mention}"
msgstr ""
-#: redbot/cogs/admin/admin.py:275
+#: redbot/cogs/admin/admin.py:290
#, docstring
msgid "Toggle announcements being enabled this server."
msgstr ""
-#: redbot/cogs/admin/admin.py:281
+#: redbot/cogs/admin/admin.py:296
msgid "The server {guild.name} will receive announcements."
msgstr ""
-#: redbot/cogs/admin/admin.py:285
+#: redbot/cogs/admin/admin.py:300
msgid "The server {guild.name} will not receive announcements."
msgstr ""
-#: redbot/cogs/admin/admin.py:311
+#: redbot/cogs/admin/admin.py:326
#, docstring
-msgid "Add a role to yourself.\n\n"
-" Server admins must have configured the role as user settable.\n\n"
-" NOTE: The role is case sensitive!\n"
-" "
+msgid "Add a role to yourself.\\n\\n Server admins must have configured the role as user settable.\\n\\n NOTE: The role is case sensitive!\\n "
msgstr ""
-#: redbot/cogs/admin/admin.py:322
+#: redbot/cogs/admin/admin.py:337
#, docstring
-msgid "Remove a selfrole from yourself.\n\n"
-" NOTE: The role is case sensitive!\n"
-" "
+msgid "Remove a selfrole from yourself.\\n\\n NOTE: The role is case sensitive!\\n "
msgstr ""
-#: redbot/cogs/admin/admin.py:332
+#: redbot/cogs/admin/admin.py:347
#, docstring
-msgid "Add a role to the list of available selfroles.\n\n"
-" NOTE: The role is case sensitive!\n"
-" "
+msgid "Add a role to the list of available selfroles.\\n\\n NOTE: The role is case sensitive!\\n "
msgstr ""
-#: redbot/cogs/admin/admin.py:340 redbot/cogs/admin/admin.py:352
+#: redbot/cogs/admin/admin.py:355 redbot/cogs/admin/admin.py:367
msgid "The selfroles list has been successfully modified."
msgstr ""
-#: redbot/cogs/admin/admin.py:345
+#: redbot/cogs/admin/admin.py:360
#, docstring
-msgid "Remove a role from the list of available selfroles.\n\n"
-" NOTE: The role is case sensitive!\n"
-" "
+msgid "Remove a role from the list of available selfroles.\\n\\n NOTE: The role is case sensitive!\\n "
msgstr ""
-#: redbot/cogs/admin/admin.py:356
+#: redbot/cogs/admin/admin.py:371
#, docstring
-msgid "\n"
-" Lists all available selfroles.\n"
-" "
+msgid "\\n Lists all available selfroles.\\n "
msgstr ""
-#: redbot/cogs/admin/admin.py:362
-msgid "Available Selfroles:\n"
-"{selfroles}"
+#: redbot/cogs/admin/admin.py:377
+msgid "Available Selfroles:\\n{selfroles}"
msgstr ""
-#: redbot/cogs/admin/admin.py:379
+#: redbot/cogs/admin/admin.py:394
#, docstring
msgid "Lock a bot to its current servers only."
msgstr ""
-#: redbot/cogs/admin/admin.py:384
+#: redbot/cogs/admin/admin.py:399
msgid "The bot is no longer serverlocked."
msgstr ""
-#: redbot/cogs/admin/admin.py:386
+#: redbot/cogs/admin/admin.py:401
msgid "The bot is now serverlocked."
msgstr ""
diff --git a/redbot/cogs/admin/locales/zh-CN.po b/redbot/cogs/admin/locales/zh-CN.po
index 7b90bf027..1f847d08b 100644
--- a/redbot/cogs/admin/locales/zh-CN.po
+++ b/redbot/cogs/admin/locales/zh-CN.po
@@ -1,14 +1,14 @@
msgid ""
msgstr ""
"Project-Id-Version: red-discordbot\n"
-"POT-Creation-Date: 2019-01-11 02:18+0000\n"
-"PO-Revision-Date: 2019-02-25 03:08\n"
-"Last-Translator: Kowlin \n"
+"POT-Creation-Date: 2019-07-05 22:33+0200\n"
+"PO-Revision-Date: 2019-07-06 16:14\n"
+"Last-Translator: Robert Jansen (Kowlin)\n"
"Language-Team: Chinese Simplified\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"Generated-By: redgettext 2.2\n"
+"Generated-By: redgettext 3.0\n"
"Plural-Forms: nplurals=1; plural=0;\n"
"X-Generator: crowdin.com\n"
"X-Crowdin-Project: red-discordbot\n"
@@ -21,169 +21,154 @@ msgid "I attempted to do something that Discord denied me permissions for. Your
msgstr ""
#: redbot/cogs/admin/admin.py:22
-msgid "I tried to add {role.name} to {member.display_name} but that role is higher than my highest role in the Discord hierarchy so I was unable to successfully add it. Please give me a higher role and try again."
+msgid "I tried to {verb} {role.name} to {member.display_name} but that role is higher than my highest role in the Discord hierarchy so I was unable to successfully add it. Please give me a higher role and try again."
msgstr ""
#: redbot/cogs/admin/admin.py:29
-msgid "I tried to add {role.name} to {member.display_name} but that role is higher than your highest role in the Discord hierarchy so I was unable to successfully add it. Please get a higher role and try again."
+msgid "I tried to {verb} {role.name} to {member.display_name} but that role is higher than your highest role in the Discord hierarchy so I was unable to successfully add it. Please get a higher role and try again."
msgstr ""
#: redbot/cogs/admin/admin.py:36
+msgid "I tried to edit {role.name} but that role is higher than your highest role in the Discord hierarchy so I was unable to successfully add it. Please get a higher role and try again."
+msgstr ""
+
+#: redbot/cogs/admin/admin.py:43
msgid "I am already announcing something. If you would like to make a different announcement please use `{prefix}announce cancel` first."
msgstr ""
-#: redbot/cogs/admin/admin.py:46
+#: redbot/cogs/admin/admin.py:53
#, docstring
msgid "A collection of server administration utilities."
msgstr ""
-#: redbot/cogs/admin/admin.py:112
+#: redbot/cogs/admin/admin.py:115 redbot/cogs/admin/admin.py:160
+msgid "add"
+msgstr ""
+
+#: redbot/cogs/admin/admin.py:121
msgid "I successfully added {role.name} to {member.display_name}"
msgstr ""
-#: redbot/cogs/admin/admin.py:127
-msgid "I successfully removed {role.name} from {member.display_name}"
+#: redbot/cogs/admin/admin.py:132 redbot/cogs/admin/admin.py:180
+msgid "remove"
msgstr ""
#: redbot/cogs/admin/admin.py:138
-#, docstring
-msgid "Add a role to a user.\n\n"
-" If user is left blank it defaults to the author of the command.\n"
-" "
+msgid "I successfully removed {role.name} from {member.display_name}"
msgstr ""
-#: redbot/cogs/admin/admin.py:156
+#: redbot/cogs/admin/admin.py:149
#, docstring
-msgid "Remove a role from a user.\n\n"
-" If user is left blank it defaults to the author of the command.\n"
-" "
+msgid "Add a role to a user.\\n\\n If user is left blank it defaults to the author of the command.\\n "
msgstr ""
-#: redbot/cogs/admin/admin.py:172
+#: redbot/cogs/admin/admin.py:169
+#, docstring
+msgid "Remove a role from a user.\\n\\n If user is left blank it defaults to the author of the command.\\n "
+msgstr ""
+
+#: redbot/cogs/admin/admin.py:187
#, docstring
msgid "Edit role settings."
msgstr ""
-#: redbot/cogs/admin/admin.py:179
+#: redbot/cogs/admin/admin.py:194
#, docstring
-msgid "Edit a role's colour.\n\n"
-" Use double quotes if the role contains spaces.\n"
-" Colour must be in hexadecimal format.\n"
-" [Online colour picker](http://www.w3schools.com/colors/colors_picker.asp)\n\n"
-" Examples:\n"
-" `[p]editrole colour \"The Transistor\" #ff0000`\n"
-" `[p]editrole colour Test #ff9900`\n"
-" "
+msgid "Edit a role's colour.\\n\\n Use double quotes if the role contains spaces.\\n Colour must be in hexadecimal format.\\n [Online colour picker](http://www.w3schools.com/colors/colors_picker.asp)\\n\\n Examples:\\n `[p]editrole colour \\\"The Transistor\\\" #ff0000`\\n `[p]editrole colour Test #ff9900`\\n "
msgstr ""
-#: redbot/cogs/admin/admin.py:202 redbot/cogs/admin/admin.py:230
+#: redbot/cogs/admin/admin.py:217 redbot/cogs/admin/admin.py:245
msgid "Done."
-msgstr ""
+msgstr "完成。"
-#: redbot/cogs/admin/admin.py:207
+#: redbot/cogs/admin/admin.py:222
#, docstring
-msgid "Edit a role's name.\n\n"
-" Use double quotes if the role or the name contain spaces.\n\n"
-" Examples:\n"
-" `[p]editrole name \"The Transistor\" Test`\n"
-" "
-msgstr ""
-
-#: redbot/cogs/admin/admin.py:235
-#, docstring
-msgid "Announce a message to all servers the bot is in."
-msgstr ""
-
-#: redbot/cogs/admin/admin.py:242
-msgid "The announcement has begun."
+msgid "Edit a role's name.\\n\\n Use double quotes if the role or the name contain spaces.\\n\\n Examples:\\n `[p]editrole name \\\"The Transistor\\\" Test`\\n "
msgstr ""
#: redbot/cogs/admin/admin.py:250
#, docstring
+msgid "Announce a message to all servers the bot is in."
+msgstr ""
+
+#: redbot/cogs/admin/admin.py:257
+msgid "The announcement has begun."
+msgstr ""
+
+#: redbot/cogs/admin/admin.py:265
+#, docstring
msgid "Cancel a running announce."
msgstr ""
-#: redbot/cogs/admin/admin.py:256
+#: redbot/cogs/admin/admin.py:271
msgid "The current announcement has been cancelled."
msgstr ""
-#: redbot/cogs/admin/admin.py:262
+#: redbot/cogs/admin/admin.py:277
#, docstring
msgid "Change the channel to which the bot makes announcements."
msgstr ""
-#: redbot/cogs/admin/admin.py:268
+#: redbot/cogs/admin/admin.py:283
msgid "The announcement channel has been set to {channel.mention}"
msgstr ""
-#: redbot/cogs/admin/admin.py:275
+#: redbot/cogs/admin/admin.py:290
#, docstring
msgid "Toggle announcements being enabled this server."
msgstr ""
-#: redbot/cogs/admin/admin.py:281
+#: redbot/cogs/admin/admin.py:296
msgid "The server {guild.name} will receive announcements."
msgstr ""
-#: redbot/cogs/admin/admin.py:285
+#: redbot/cogs/admin/admin.py:300
msgid "The server {guild.name} will not receive announcements."
msgstr ""
-#: redbot/cogs/admin/admin.py:311
+#: redbot/cogs/admin/admin.py:326
#, docstring
-msgid "Add a role to yourself.\n\n"
-" Server admins must have configured the role as user settable.\n\n"
-" NOTE: The role is case sensitive!\n"
-" "
+msgid "Add a role to yourself.\\n\\n Server admins must have configured the role as user settable.\\n\\n NOTE: The role is case sensitive!\\n "
msgstr ""
-#: redbot/cogs/admin/admin.py:322
+#: redbot/cogs/admin/admin.py:337
#, docstring
-msgid "Remove a selfrole from yourself.\n\n"
-" NOTE: The role is case sensitive!\n"
-" "
+msgid "Remove a selfrole from yourself.\\n\\n NOTE: The role is case sensitive!\\n "
msgstr ""
-#: redbot/cogs/admin/admin.py:332
+#: redbot/cogs/admin/admin.py:347
#, docstring
-msgid "Add a role to the list of available selfroles.\n\n"
-" NOTE: The role is case sensitive!\n"
-" "
+msgid "Add a role to the list of available selfroles.\\n\\n NOTE: The role is case sensitive!\\n "
msgstr ""
-#: redbot/cogs/admin/admin.py:340 redbot/cogs/admin/admin.py:352
+#: redbot/cogs/admin/admin.py:355 redbot/cogs/admin/admin.py:367
msgid "The selfroles list has been successfully modified."
msgstr ""
-#: redbot/cogs/admin/admin.py:345
+#: redbot/cogs/admin/admin.py:360
#, docstring
-msgid "Remove a role from the list of available selfroles.\n\n"
-" NOTE: The role is case sensitive!\n"
-" "
+msgid "Remove a role from the list of available selfroles.\\n\\n NOTE: The role is case sensitive!\\n "
msgstr ""
-#: redbot/cogs/admin/admin.py:356
+#: redbot/cogs/admin/admin.py:371
#, docstring
-msgid "\n"
-" Lists all available selfroles.\n"
-" "
+msgid "\\n Lists all available selfroles.\\n "
msgstr ""
-#: redbot/cogs/admin/admin.py:362
-msgid "Available Selfroles:\n"
-"{selfroles}"
+#: redbot/cogs/admin/admin.py:377
+msgid "Available Selfroles:\\n{selfroles}"
msgstr ""
-#: redbot/cogs/admin/admin.py:379
+#: redbot/cogs/admin/admin.py:394
#, docstring
msgid "Lock a bot to its current servers only."
msgstr ""
-#: redbot/cogs/admin/admin.py:384
+#: redbot/cogs/admin/admin.py:399
msgid "The bot is no longer serverlocked."
msgstr ""
-#: redbot/cogs/admin/admin.py:386
+#: redbot/cogs/admin/admin.py:401
msgid "The bot is now serverlocked."
msgstr ""
diff --git a/redbot/cogs/admin/locales/zh-TW.po b/redbot/cogs/admin/locales/zh-TW.po
new file mode 100644
index 000000000..cd2358821
--- /dev/null
+++ b/redbot/cogs/admin/locales/zh-TW.po
@@ -0,0 +1,186 @@
+msgid ""
+msgstr ""
+"Project-Id-Version: red-discordbot\n"
+"POT-Creation-Date: 2019-07-05 22:33+0200\n"
+"PO-Revision-Date: 2019-07-14 02:15\n"
+"Last-Translator: Robert Jansen (Kowlin)\n"
+"Language-Team: Chinese Traditional\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: redgettext 3.0\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+"X-Generator: crowdin.com\n"
+"X-Crowdin-Project: red-discordbot\n"
+"X-Crowdin-Language: zh-TW\n"
+"X-Crowdin-File: /cogs/admin/locales/messages.pot\n"
+"Language: zh_TW\n"
+
+#: redbot/cogs/admin/admin.py:17
+msgid "I attempted to do something that Discord denied me permissions for. Your command failed to successfully complete."
+msgstr ""
+
+#: redbot/cogs/admin/admin.py:22
+msgid "I tried to {verb} {role.name} to {member.display_name} but that role is higher than my highest role in the Discord hierarchy so I was unable to successfully add it. Please give me a higher role and try again."
+msgstr ""
+
+#: redbot/cogs/admin/admin.py:29
+msgid "I tried to {verb} {role.name} to {member.display_name} but that role is higher than your highest role in the Discord hierarchy so I was unable to successfully add it. Please get a higher role and try again."
+msgstr ""
+
+#: redbot/cogs/admin/admin.py:36
+msgid "I tried to edit {role.name} but that role is higher than your highest role in the Discord hierarchy so I was unable to successfully add it. Please get a higher role and try again."
+msgstr ""
+
+#: redbot/cogs/admin/admin.py:43
+msgid "I am already announcing something. If you would like to make a different announcement please use `{prefix}announce cancel` first."
+msgstr ""
+
+#: redbot/cogs/admin/admin.py:53
+#, docstring
+msgid "A collection of server administration utilities."
+msgstr ""
+
+#: redbot/cogs/admin/admin.py:115 redbot/cogs/admin/admin.py:160
+msgid "add"
+msgstr ""
+
+#: redbot/cogs/admin/admin.py:121
+msgid "I successfully added {role.name} to {member.display_name}"
+msgstr ""
+
+#: redbot/cogs/admin/admin.py:132 redbot/cogs/admin/admin.py:180
+msgid "remove"
+msgstr ""
+
+#: redbot/cogs/admin/admin.py:138
+msgid "I successfully removed {role.name} from {member.display_name}"
+msgstr ""
+
+#: redbot/cogs/admin/admin.py:149
+#, docstring
+msgid "Add a role to a user.\\n\\n If user is left blank it defaults to the author of the command.\\n "
+msgstr ""
+
+#: redbot/cogs/admin/admin.py:169
+#, docstring
+msgid "Remove a role from a user.\\n\\n If user is left blank it defaults to the author of the command.\\n "
+msgstr ""
+
+#: redbot/cogs/admin/admin.py:187
+#, docstring
+msgid "Edit role settings."
+msgstr ""
+
+#: redbot/cogs/admin/admin.py:194
+#, docstring
+msgid "Edit a role's colour.\\n\\n Use double quotes if the role contains spaces.\\n Colour must be in hexadecimal format.\\n [Online colour picker](http://www.w3schools.com/colors/colors_picker.asp)\\n\\n Examples:\\n `[p]editrole colour \\\"The Transistor\\\" #ff0000`\\n `[p]editrole colour Test #ff9900`\\n "
+msgstr ""
+
+#: redbot/cogs/admin/admin.py:217 redbot/cogs/admin/admin.py:245
+msgid "Done."
+msgstr ""
+
+#: redbot/cogs/admin/admin.py:222
+#, docstring
+msgid "Edit a role's name.\\n\\n Use double quotes if the role or the name contain spaces.\\n\\n Examples:\\n `[p]editrole name \\\"The Transistor\\\" Test`\\n "
+msgstr ""
+
+#: redbot/cogs/admin/admin.py:250
+#, docstring
+msgid "Announce a message to all servers the bot is in."
+msgstr ""
+
+#: redbot/cogs/admin/admin.py:257
+msgid "The announcement has begun."
+msgstr ""
+
+#: redbot/cogs/admin/admin.py:265
+#, docstring
+msgid "Cancel a running announce."
+msgstr ""
+
+#: redbot/cogs/admin/admin.py:271
+msgid "The current announcement has been cancelled."
+msgstr ""
+
+#: redbot/cogs/admin/admin.py:277
+#, docstring
+msgid "Change the channel to which the bot makes announcements."
+msgstr ""
+
+#: redbot/cogs/admin/admin.py:283
+msgid "The announcement channel has been set to {channel.mention}"
+msgstr ""
+
+#: redbot/cogs/admin/admin.py:290
+#, docstring
+msgid "Toggle announcements being enabled this server."
+msgstr ""
+
+#: redbot/cogs/admin/admin.py:296
+msgid "The server {guild.name} will receive announcements."
+msgstr ""
+
+#: redbot/cogs/admin/admin.py:300
+msgid "The server {guild.name} will not receive announcements."
+msgstr ""
+
+#: redbot/cogs/admin/admin.py:326
+#, docstring
+msgid "Add a role to yourself.\\n\\n Server admins must have configured the role as user settable.\\n\\n NOTE: The role is case sensitive!\\n "
+msgstr ""
+
+#: redbot/cogs/admin/admin.py:337
+#, docstring
+msgid "Remove a selfrole from yourself.\\n\\n NOTE: The role is case sensitive!\\n "
+msgstr ""
+
+#: redbot/cogs/admin/admin.py:347
+#, docstring
+msgid "Add a role to the list of available selfroles.\\n\\n NOTE: The role is case sensitive!\\n "
+msgstr ""
+
+#: redbot/cogs/admin/admin.py:355 redbot/cogs/admin/admin.py:367
+msgid "The selfroles list has been successfully modified."
+msgstr ""
+
+#: redbot/cogs/admin/admin.py:360
+#, docstring
+msgid "Remove a role from the list of available selfroles.\\n\\n NOTE: The role is case sensitive!\\n "
+msgstr ""
+
+#: redbot/cogs/admin/admin.py:371
+#, docstring
+msgid "\\n Lists all available selfroles.\\n "
+msgstr ""
+
+#: redbot/cogs/admin/admin.py:377
+msgid "Available Selfroles:\\n{selfroles}"
+msgstr ""
+
+#: redbot/cogs/admin/admin.py:394
+#, docstring
+msgid "Lock a bot to its current servers only."
+msgstr ""
+
+#: redbot/cogs/admin/admin.py:399
+msgid "The bot is no longer serverlocked."
+msgstr ""
+
+#: redbot/cogs/admin/admin.py:401
+msgid "The bot is now serverlocked."
+msgstr ""
+
+#: redbot/cogs/admin/announcer.py:70
+msgid "I could not announce to server: {server.id}"
+msgstr ""
+
+#: redbot/cogs/admin/converters.py:25
+msgid "The Admin cog is not loaded."
+msgstr ""
+
+#: redbot/cogs/admin/converters.py:34
+msgid "The provided role is not a valid selfrole."
+msgstr ""
+
diff --git a/redbot/cogs/alias/locales/ar-SA.po b/redbot/cogs/alias/locales/ar-SA.po
index 593d38628..669298aa3 100644
--- a/redbot/cogs/alias/locales/ar-SA.po
+++ b/redbot/cogs/alias/locales/ar-SA.po
@@ -1,14 +1,14 @@
msgid ""
msgstr ""
"Project-Id-Version: red-discordbot\n"
-"POT-Creation-Date: 2019-01-11 02:18+0000\n"
-"PO-Revision-Date: 2019-02-25 03:06\n"
-"Last-Translator: Kowlin \n"
+"POT-Creation-Date: 2019-07-05 22:33+0200\n"
+"PO-Revision-Date: 2019-07-06 16:12\n"
+"Last-Translator: Robert Jansen (Kowlin)\n"
"Language-Team: Arabic\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"Generated-By: redgettext 2.2\n"
+"Generated-By: redgettext 3.0\n"
"Plural-Forms: nplurals=6; plural=(n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5);\n"
"X-Generator: crowdin.com\n"
"X-Crowdin-Project: red-discordbot\n"
@@ -16,136 +16,138 @@ msgstr ""
"X-Crowdin-File: /cogs/alias/locales/messages.pot\n"
"Language: ar_SA\n"
-#: redbot/cogs/alias/alias.py:18
+#: redbot/cogs/alias/alias.py:35
#, docstring
-msgid "Create aliases for commands.\n\n"
-" Aliases are alternative names shortcuts for commands. They\n"
-" can act as both a lambda (storing arguments for repeated use)\n"
-" or as simply a shortcut to saying \"x y z\".\n\n"
-" When run, aliases will accept any additional arguments\n"
-" and append them to the stored alias.\n"
-" "
+msgid "Create aliases for commands.\\n\\n Aliases are alternative names shortcuts for commands. They\\n can act as both a lambda (storing arguments for repeated use)\\n or as simply a shortcut to saying \\\"x y z\\\".\\n\\n When run, aliases will accept any additional arguments\\n and append them to the stored alias.\\n "
msgstr ""
-#: redbot/cogs/alias/alias.py:130
+#: redbot/cogs/alias/alias.py:107
+msgid "Arguments must be specified with a number."
+msgstr ""
+
+#: redbot/cogs/alias/alias.py:114
+msgid "Arguments must be sequential. Missing arguments: "
+msgstr ""
+
+#: redbot/cogs/alias/alias.py:164
msgid "No prefix found."
msgstr ""
-#: redbot/cogs/alias/alias.py:179
+#: redbot/cogs/alias/alias.py:231
#, docstring
msgid "Manage command aliases."
msgstr ""
-#: redbot/cogs/alias/alias.py:184
+#: redbot/cogs/alias/alias.py:236
#, docstring
msgid "Manage global aliases."
msgstr ""
-#: redbot/cogs/alias/alias.py:191
+#: redbot/cogs/alias/alias.py:243
#, docstring
msgid "Add an alias for a command."
msgstr ""
-#: redbot/cogs/alias/alias.py:196
+#: redbot/cogs/alias/alias.py:248
msgid "You attempted to create a new alias with the name {name} but that name is already a command on this bot."
msgstr ""
-#: redbot/cogs/alias/alias.py:207
+#: redbot/cogs/alias/alias.py:259
msgid "You attempted to create a new alias with the name {name} but that alias already exists on this server."
msgstr ""
-#: redbot/cogs/alias/alias.py:218
+#: redbot/cogs/alias/alias.py:270
msgid "You attempted to create a new alias with the name {name} but that name is an invalid alias name. Alias names may not contain spaces."
msgstr ""
-#: redbot/cogs/alias/alias.py:234
+#: redbot/cogs/alias/alias.py:289
msgid "A new alias with the trigger `{name}` has been created."
msgstr ""
-#: redbot/cogs/alias/alias.py:240
+#: redbot/cogs/alias/alias.py:295
#, docstring
msgid "Add a global alias for a command."
msgstr ""
-#: redbot/cogs/alias/alias.py:245
+#: redbot/cogs/alias/alias.py:300
msgid "You attempted to create a new global alias with the name {name} but that name is already a command on this bot."
msgstr ""
-#: redbot/cogs/alias/alias.py:256
+#: redbot/cogs/alias/alias.py:311
msgid "You attempted to create a new global alias with the name {name} but that alias already exists on this server."
msgstr ""
-#: redbot/cogs/alias/alias.py:267
+#: redbot/cogs/alias/alias.py:322
msgid "You attempted to create a new global alias with the name {name} but that name is an invalid alias name. Alias names may not contain spaces."
msgstr ""
-#: redbot/cogs/alias/alias.py:280
+#: redbot/cogs/alias/alias.py:338
msgid "A new global alias with the trigger `{name}` has been created."
msgstr ""
-#: redbot/cogs/alias/alias.py:288
+#: redbot/cogs/alias/alias.py:346
#, docstring
msgid "Try to execute help for the base command of the alias."
msgstr ""
-#: redbot/cogs/alias/alias.py:297
+#: redbot/cogs/alias/alias.py:355
msgid "{prefix}help {command}"
msgstr ""
-#: redbot/cogs/alias/alias.py:302
+#: redbot/cogs/alias/alias.py:360
msgid "No such alias exists."
msgstr ""
-#: redbot/cogs/alias/alias.py:307
+#: redbot/cogs/alias/alias.py:365
#, docstring
msgid "Show what command the alias executes."
msgstr ""
-#: redbot/cogs/alias/alias.py:312
+#: redbot/cogs/alias/alias.py:370
msgid "The `{alias_name}` alias will execute the command `{command}`"
msgstr ""
-#: redbot/cogs/alias/alias.py:317
+#: redbot/cogs/alias/alias.py:375
msgid "There is no alias with the name `{name}`"
msgstr ""
-#: redbot/cogs/alias/alias.py:323
+#: redbot/cogs/alias/alias.py:381
#, docstring
msgid "Delete an existing alias on this server."
msgstr ""
-#: redbot/cogs/alias/alias.py:328 redbot/cogs/alias/alias.py:364
-#: redbot/cogs/alias/alias.py:375
+#: redbot/cogs/alias/alias.py:386 redbot/cogs/alias/alias.py:422
+#: redbot/cogs/alias/alias.py:433
msgid "There are no aliases on this server."
msgstr ""
-#: redbot/cogs/alias/alias.py:333 redbot/cogs/alias/alias.py:351
+#: redbot/cogs/alias/alias.py:391 redbot/cogs/alias/alias.py:409
msgid "Alias with the name `{name}` was successfully deleted."
msgstr ""
-#: redbot/cogs/alias/alias.py:336 redbot/cogs/alias/alias.py:354
+#: redbot/cogs/alias/alias.py:394 redbot/cogs/alias/alias.py:412
msgid "Alias with name `{name}` was not found."
msgstr ""
-#: redbot/cogs/alias/alias.py:341
+#: redbot/cogs/alias/alias.py:399
#, docstring
msgid "Delete an existing global alias."
msgstr ""
-#: redbot/cogs/alias/alias.py:346
+#: redbot/cogs/alias/alias.py:404
msgid "There are no aliases on this bot."
msgstr ""
-#: redbot/cogs/alias/alias.py:359
+#: redbot/cogs/alias/alias.py:417
#, docstring
msgid "List the available aliases on this server."
msgstr ""
-#: redbot/cogs/alias/alias.py:360 redbot/cogs/alias/alias.py:371
+#: redbot/cogs/alias/alias.py:418 redbot/cogs/alias/alias.py:429
msgid "Aliases:"
msgstr ""
-#: redbot/cogs/alias/alias.py:370
+#: redbot/cogs/alias/alias.py:428
#, docstring
msgid "List the available global aliases on this bot."
msgstr ""
diff --git a/redbot/cogs/alias/locales/bg-BG.po b/redbot/cogs/alias/locales/bg-BG.po
index 7f7ee78d7..184e5e5a7 100644
--- a/redbot/cogs/alias/locales/bg-BG.po
+++ b/redbot/cogs/alias/locales/bg-BG.po
@@ -1,14 +1,14 @@
msgid ""
msgstr ""
"Project-Id-Version: red-discordbot\n"
-"POT-Creation-Date: 2019-01-11 02:18+0000\n"
-"PO-Revision-Date: 2019-02-25 03:06\n"
-"Last-Translator: Kowlin \n"
+"POT-Creation-Date: 2019-07-05 22:33+0200\n"
+"PO-Revision-Date: 2019-07-06 16:12\n"
+"Last-Translator: Robert Jansen (Kowlin)\n"
"Language-Team: Bulgarian\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"Generated-By: redgettext 2.2\n"
+"Generated-By: redgettext 3.0\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: crowdin.com\n"
"X-Crowdin-Project: red-discordbot\n"
@@ -16,136 +16,138 @@ msgstr ""
"X-Crowdin-File: /cogs/alias/locales/messages.pot\n"
"Language: bg_BG\n"
-#: redbot/cogs/alias/alias.py:18
+#: redbot/cogs/alias/alias.py:35
#, docstring
-msgid "Create aliases for commands.\n\n"
-" Aliases are alternative names shortcuts for commands. They\n"
-" can act as both a lambda (storing arguments for repeated use)\n"
-" or as simply a shortcut to saying \"x y z\".\n\n"
-" When run, aliases will accept any additional arguments\n"
-" and append them to the stored alias.\n"
-" "
+msgid "Create aliases for commands.\\n\\n Aliases are alternative names shortcuts for commands. They\\n can act as both a lambda (storing arguments for repeated use)\\n or as simply a shortcut to saying \\\"x y z\\\".\\n\\n When run, aliases will accept any additional arguments\\n and append them to the stored alias.\\n "
msgstr ""
-#: redbot/cogs/alias/alias.py:130
+#: redbot/cogs/alias/alias.py:107
+msgid "Arguments must be specified with a number."
+msgstr ""
+
+#: redbot/cogs/alias/alias.py:114
+msgid "Arguments must be sequential. Missing arguments: "
+msgstr ""
+
+#: redbot/cogs/alias/alias.py:164
msgid "No prefix found."
msgstr "Няма намерен префикс."
-#: redbot/cogs/alias/alias.py:179
+#: redbot/cogs/alias/alias.py:231
#, docstring
msgid "Manage command aliases."
msgstr ""
-#: redbot/cogs/alias/alias.py:184
+#: redbot/cogs/alias/alias.py:236
#, docstring
msgid "Manage global aliases."
msgstr ""
-#: redbot/cogs/alias/alias.py:191
+#: redbot/cogs/alias/alias.py:243
#, docstring
msgid "Add an alias for a command."
msgstr ""
-#: redbot/cogs/alias/alias.py:196
+#: redbot/cogs/alias/alias.py:248
msgid "You attempted to create a new alias with the name {name} but that name is already a command on this bot."
msgstr ""
-#: redbot/cogs/alias/alias.py:207
+#: redbot/cogs/alias/alias.py:259
msgid "You attempted to create a new alias with the name {name} but that alias already exists on this server."
msgstr ""
-#: redbot/cogs/alias/alias.py:218
+#: redbot/cogs/alias/alias.py:270
msgid "You attempted to create a new alias with the name {name} but that name is an invalid alias name. Alias names may not contain spaces."
msgstr ""
-#: redbot/cogs/alias/alias.py:234
+#: redbot/cogs/alias/alias.py:289
msgid "A new alias with the trigger `{name}` has been created."
msgstr ""
-#: redbot/cogs/alias/alias.py:240
+#: redbot/cogs/alias/alias.py:295
#, docstring
msgid "Add a global alias for a command."
msgstr ""
-#: redbot/cogs/alias/alias.py:245
+#: redbot/cogs/alias/alias.py:300
msgid "You attempted to create a new global alias with the name {name} but that name is already a command on this bot."
msgstr ""
-#: redbot/cogs/alias/alias.py:256
+#: redbot/cogs/alias/alias.py:311
msgid "You attempted to create a new global alias with the name {name} but that alias already exists on this server."
msgstr ""
-#: redbot/cogs/alias/alias.py:267
+#: redbot/cogs/alias/alias.py:322
msgid "You attempted to create a new global alias with the name {name} but that name is an invalid alias name. Alias names may not contain spaces."
msgstr ""
-#: redbot/cogs/alias/alias.py:280
+#: redbot/cogs/alias/alias.py:338
msgid "A new global alias with the trigger `{name}` has been created."
msgstr ""
-#: redbot/cogs/alias/alias.py:288
+#: redbot/cogs/alias/alias.py:346
#, docstring
msgid "Try to execute help for the base command of the alias."
msgstr ""
-#: redbot/cogs/alias/alias.py:297
+#: redbot/cogs/alias/alias.py:355
msgid "{prefix}help {command}"
msgstr ""
-#: redbot/cogs/alias/alias.py:302
+#: redbot/cogs/alias/alias.py:360
msgid "No such alias exists."
msgstr "Този псевдоним не съществува."
-#: redbot/cogs/alias/alias.py:307
+#: redbot/cogs/alias/alias.py:365
#, docstring
msgid "Show what command the alias executes."
msgstr ""
-#: redbot/cogs/alias/alias.py:312
+#: redbot/cogs/alias/alias.py:370
msgid "The `{alias_name}` alias will execute the command `{command}`"
msgstr ""
-#: redbot/cogs/alias/alias.py:317
+#: redbot/cogs/alias/alias.py:375
msgid "There is no alias with the name `{name}`"
msgstr ""
-#: redbot/cogs/alias/alias.py:323
+#: redbot/cogs/alias/alias.py:381
#, docstring
msgid "Delete an existing alias on this server."
msgstr ""
-#: redbot/cogs/alias/alias.py:328 redbot/cogs/alias/alias.py:364
-#: redbot/cogs/alias/alias.py:375
+#: redbot/cogs/alias/alias.py:386 redbot/cogs/alias/alias.py:422
+#: redbot/cogs/alias/alias.py:433
msgid "There are no aliases on this server."
msgstr "Няма използвани псевдоними на този сървър."
-#: redbot/cogs/alias/alias.py:333 redbot/cogs/alias/alias.py:351
+#: redbot/cogs/alias/alias.py:391 redbot/cogs/alias/alias.py:409
msgid "Alias with the name `{name}` was successfully deleted."
msgstr ""
-#: redbot/cogs/alias/alias.py:336 redbot/cogs/alias/alias.py:354
+#: redbot/cogs/alias/alias.py:394 redbot/cogs/alias/alias.py:412
msgid "Alias with name `{name}` was not found."
msgstr ""
-#: redbot/cogs/alias/alias.py:341
+#: redbot/cogs/alias/alias.py:399
#, docstring
msgid "Delete an existing global alias."
msgstr ""
-#: redbot/cogs/alias/alias.py:346
+#: redbot/cogs/alias/alias.py:404
msgid "There are no aliases on this bot."
msgstr "Няма псевдоними положени към този бот."
-#: redbot/cogs/alias/alias.py:359
+#: redbot/cogs/alias/alias.py:417
#, docstring
msgid "List the available aliases on this server."
msgstr ""
-#: redbot/cogs/alias/alias.py:360 redbot/cogs/alias/alias.py:371
+#: redbot/cogs/alias/alias.py:418 redbot/cogs/alias/alias.py:429
msgid "Aliases:"
msgstr "Псевдоними:"
-#: redbot/cogs/alias/alias.py:370
+#: redbot/cogs/alias/alias.py:428
#, docstring
msgid "List the available global aliases on this bot."
msgstr ""
diff --git a/redbot/cogs/alias/locales/cs-CZ.po b/redbot/cogs/alias/locales/cs-CZ.po
new file mode 100644
index 000000000..222605a16
--- /dev/null
+++ b/redbot/cogs/alias/locales/cs-CZ.po
@@ -0,0 +1,154 @@
+msgid ""
+msgstr ""
+"Project-Id-Version: red-discordbot\n"
+"POT-Creation-Date: 2019-07-05 22:33+0200\n"
+"PO-Revision-Date: 2019-07-14 02:15\n"
+"Last-Translator: Robert Jansen (Kowlin)\n"
+"Language-Team: Czech\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: redgettext 3.0\n"
+"Plural-Forms: nplurals=4; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 3;\n"
+"X-Generator: crowdin.com\n"
+"X-Crowdin-Project: red-discordbot\n"
+"X-Crowdin-Language: cs\n"
+"X-Crowdin-File: /cogs/alias/locales/messages.pot\n"
+"Language: cs_CZ\n"
+
+#: redbot/cogs/alias/alias.py:35
+#, docstring
+msgid "Create aliases for commands.\\n\\n Aliases are alternative names shortcuts for commands. They\\n can act as both a lambda (storing arguments for repeated use)\\n or as simply a shortcut to saying \\\"x y z\\\".\\n\\n When run, aliases will accept any additional arguments\\n and append them to the stored alias.\\n "
+msgstr "Vytvořit aliasy pro příkazy n n Aliasy jsou alternativní zkratky pro příkazy. Mohou působit jako lambda (ukládání argumentů pro opakované použití) n nebo jednoduše jako zkratka pro vyslovení \"xyz\" n n Při spuštění budou aliasy přijímat další argumenty a připojovat je k uložený alias. \\ t "
+
+#: redbot/cogs/alias/alias.py:107
+msgid "Arguments must be specified with a number."
+msgstr "Argumenty musí být zadány s číslem."
+
+#: redbot/cogs/alias/alias.py:114
+msgid "Arguments must be sequential. Missing arguments: "
+msgstr "Argumenty musí být sekvenční. Chybějící argumenty: "
+
+#: redbot/cogs/alias/alias.py:164
+msgid "No prefix found."
+msgstr "Nebyl nalezen žádný prefix."
+
+#: redbot/cogs/alias/alias.py:231
+#, docstring
+msgid "Manage command aliases."
+msgstr "Spravovat aliasy příkazů."
+
+#: redbot/cogs/alias/alias.py:236
+#, docstring
+msgid "Manage global aliases."
+msgstr ""
+
+#: redbot/cogs/alias/alias.py:243
+#, docstring
+msgid "Add an alias for a command."
+msgstr ""
+
+#: redbot/cogs/alias/alias.py:248
+msgid "You attempted to create a new alias with the name {name} but that name is already a command on this bot."
+msgstr ""
+
+#: redbot/cogs/alias/alias.py:259
+msgid "You attempted to create a new alias with the name {name} but that alias already exists on this server."
+msgstr ""
+
+#: redbot/cogs/alias/alias.py:270
+msgid "You attempted to create a new alias with the name {name} but that name is an invalid alias name. Alias names may not contain spaces."
+msgstr ""
+
+#: redbot/cogs/alias/alias.py:289
+msgid "A new alias with the trigger `{name}` has been created."
+msgstr ""
+
+#: redbot/cogs/alias/alias.py:295
+#, docstring
+msgid "Add a global alias for a command."
+msgstr ""
+
+#: redbot/cogs/alias/alias.py:300
+msgid "You attempted to create a new global alias with the name {name} but that name is already a command on this bot."
+msgstr ""
+
+#: redbot/cogs/alias/alias.py:311
+msgid "You attempted to create a new global alias with the name {name} but that alias already exists on this server."
+msgstr ""
+
+#: redbot/cogs/alias/alias.py:322
+msgid "You attempted to create a new global alias with the name {name} but that name is an invalid alias name. Alias names may not contain spaces."
+msgstr ""
+
+#: redbot/cogs/alias/alias.py:338
+msgid "A new global alias with the trigger `{name}` has been created."
+msgstr ""
+
+#: redbot/cogs/alias/alias.py:346
+#, docstring
+msgid "Try to execute help for the base command of the alias."
+msgstr ""
+
+#: redbot/cogs/alias/alias.py:355
+msgid "{prefix}help {command}"
+msgstr ""
+
+#: redbot/cogs/alias/alias.py:360
+msgid "No such alias exists."
+msgstr ""
+
+#: redbot/cogs/alias/alias.py:365
+#, docstring
+msgid "Show what command the alias executes."
+msgstr ""
+
+#: redbot/cogs/alias/alias.py:370
+msgid "The `{alias_name}` alias will execute the command `{command}`"
+msgstr ""
+
+#: redbot/cogs/alias/alias.py:375
+msgid "There is no alias with the name `{name}`"
+msgstr ""
+
+#: redbot/cogs/alias/alias.py:381
+#, docstring
+msgid "Delete an existing alias on this server."
+msgstr ""
+
+#: redbot/cogs/alias/alias.py:386 redbot/cogs/alias/alias.py:422
+#: redbot/cogs/alias/alias.py:433
+msgid "There are no aliases on this server."
+msgstr ""
+
+#: redbot/cogs/alias/alias.py:391 redbot/cogs/alias/alias.py:409
+msgid "Alias with the name `{name}` was successfully deleted."
+msgstr ""
+
+#: redbot/cogs/alias/alias.py:394 redbot/cogs/alias/alias.py:412
+msgid "Alias with name `{name}` was not found."
+msgstr ""
+
+#: redbot/cogs/alias/alias.py:399
+#, docstring
+msgid "Delete an existing global alias."
+msgstr ""
+
+#: redbot/cogs/alias/alias.py:404
+msgid "There are no aliases on this bot."
+msgstr ""
+
+#: redbot/cogs/alias/alias.py:417
+#, docstring
+msgid "List the available aliases on this server."
+msgstr ""
+
+#: redbot/cogs/alias/alias.py:418 redbot/cogs/alias/alias.py:429
+msgid "Aliases:"
+msgstr ""
+
+#: redbot/cogs/alias/alias.py:428
+#, docstring
+msgid "List the available global aliases on this bot."
+msgstr ""
+
diff --git a/redbot/cogs/alias/locales/da-DK.po b/redbot/cogs/alias/locales/da-DK.po
index 59bf88cc2..d41fc1d04 100644
--- a/redbot/cogs/alias/locales/da-DK.po
+++ b/redbot/cogs/alias/locales/da-DK.po
@@ -1,14 +1,14 @@
msgid ""
msgstr ""
"Project-Id-Version: red-discordbot\n"
-"POT-Creation-Date: 2019-01-11 02:18+0000\n"
-"PO-Revision-Date: 2019-02-25 03:07\n"
-"Last-Translator: Kowlin \n"
+"POT-Creation-Date: 2019-07-05 22:33+0200\n"
+"PO-Revision-Date: 2019-07-06 16:12\n"
+"Last-Translator: Robert Jansen (Kowlin)\n"
"Language-Team: Danish\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"Generated-By: redgettext 2.2\n"
+"Generated-By: redgettext 3.0\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: crowdin.com\n"
"X-Crowdin-Project: red-discordbot\n"
@@ -16,136 +16,138 @@ msgstr ""
"X-Crowdin-File: /cogs/alias/locales/messages.pot\n"
"Language: da_DK\n"
-#: redbot/cogs/alias/alias.py:18
+#: redbot/cogs/alias/alias.py:35
#, docstring
-msgid "Create aliases for commands.\n\n"
-" Aliases are alternative names shortcuts for commands. They\n"
-" can act as both a lambda (storing arguments for repeated use)\n"
-" or as simply a shortcut to saying \"x y z\".\n\n"
-" When run, aliases will accept any additional arguments\n"
-" and append them to the stored alias.\n"
-" "
+msgid "Create aliases for commands.\\n\\n Aliases are alternative names shortcuts for commands. They\\n can act as both a lambda (storing arguments for repeated use)\\n or as simply a shortcut to saying \\\"x y z\\\".\\n\\n When run, aliases will accept any additional arguments\\n and append them to the stored alias.\\n "
msgstr ""
-#: redbot/cogs/alias/alias.py:130
+#: redbot/cogs/alias/alias.py:107
+msgid "Arguments must be specified with a number."
+msgstr ""
+
+#: redbot/cogs/alias/alias.py:114
+msgid "Arguments must be sequential. Missing arguments: "
+msgstr ""
+
+#: redbot/cogs/alias/alias.py:164
msgid "No prefix found."
msgstr ""
-#: redbot/cogs/alias/alias.py:179
+#: redbot/cogs/alias/alias.py:231
#, docstring
msgid "Manage command aliases."
msgstr ""
-#: redbot/cogs/alias/alias.py:184
+#: redbot/cogs/alias/alias.py:236
#, docstring
msgid "Manage global aliases."
msgstr ""
-#: redbot/cogs/alias/alias.py:191
+#: redbot/cogs/alias/alias.py:243
#, docstring
msgid "Add an alias for a command."
msgstr ""
-#: redbot/cogs/alias/alias.py:196
+#: redbot/cogs/alias/alias.py:248
msgid "You attempted to create a new alias with the name {name} but that name is already a command on this bot."
msgstr ""
-#: redbot/cogs/alias/alias.py:207
+#: redbot/cogs/alias/alias.py:259
msgid "You attempted to create a new alias with the name {name} but that alias already exists on this server."
msgstr ""
-#: redbot/cogs/alias/alias.py:218
+#: redbot/cogs/alias/alias.py:270
msgid "You attempted to create a new alias with the name {name} but that name is an invalid alias name. Alias names may not contain spaces."
msgstr ""
-#: redbot/cogs/alias/alias.py:234
+#: redbot/cogs/alias/alias.py:289
msgid "A new alias with the trigger `{name}` has been created."
msgstr ""
-#: redbot/cogs/alias/alias.py:240
+#: redbot/cogs/alias/alias.py:295
#, docstring
msgid "Add a global alias for a command."
msgstr ""
-#: redbot/cogs/alias/alias.py:245
+#: redbot/cogs/alias/alias.py:300
msgid "You attempted to create a new global alias with the name {name} but that name is already a command on this bot."
msgstr ""
-#: redbot/cogs/alias/alias.py:256
+#: redbot/cogs/alias/alias.py:311
msgid "You attempted to create a new global alias with the name {name} but that alias already exists on this server."
msgstr ""
-#: redbot/cogs/alias/alias.py:267
+#: redbot/cogs/alias/alias.py:322
msgid "You attempted to create a new global alias with the name {name} but that name is an invalid alias name. Alias names may not contain spaces."
msgstr ""
-#: redbot/cogs/alias/alias.py:280
+#: redbot/cogs/alias/alias.py:338
msgid "A new global alias with the trigger `{name}` has been created."
msgstr ""
-#: redbot/cogs/alias/alias.py:288
+#: redbot/cogs/alias/alias.py:346
#, docstring
msgid "Try to execute help for the base command of the alias."
msgstr ""
-#: redbot/cogs/alias/alias.py:297
+#: redbot/cogs/alias/alias.py:355
msgid "{prefix}help {command}"
msgstr ""
-#: redbot/cogs/alias/alias.py:302
+#: redbot/cogs/alias/alias.py:360
msgid "No such alias exists."
msgstr ""
-#: redbot/cogs/alias/alias.py:307
+#: redbot/cogs/alias/alias.py:365
#, docstring
msgid "Show what command the alias executes."
msgstr ""
-#: redbot/cogs/alias/alias.py:312
+#: redbot/cogs/alias/alias.py:370
msgid "The `{alias_name}` alias will execute the command `{command}`"
msgstr ""
-#: redbot/cogs/alias/alias.py:317
+#: redbot/cogs/alias/alias.py:375
msgid "There is no alias with the name `{name}`"
msgstr ""
-#: redbot/cogs/alias/alias.py:323
+#: redbot/cogs/alias/alias.py:381
#, docstring
msgid "Delete an existing alias on this server."
msgstr ""
-#: redbot/cogs/alias/alias.py:328 redbot/cogs/alias/alias.py:364
-#: redbot/cogs/alias/alias.py:375
+#: redbot/cogs/alias/alias.py:386 redbot/cogs/alias/alias.py:422
+#: redbot/cogs/alias/alias.py:433
msgid "There are no aliases on this server."
msgstr ""
-#: redbot/cogs/alias/alias.py:333 redbot/cogs/alias/alias.py:351
+#: redbot/cogs/alias/alias.py:391 redbot/cogs/alias/alias.py:409
msgid "Alias with the name `{name}` was successfully deleted."
msgstr ""
-#: redbot/cogs/alias/alias.py:336 redbot/cogs/alias/alias.py:354
+#: redbot/cogs/alias/alias.py:394 redbot/cogs/alias/alias.py:412
msgid "Alias with name `{name}` was not found."
msgstr ""
-#: redbot/cogs/alias/alias.py:341
+#: redbot/cogs/alias/alias.py:399
#, docstring
msgid "Delete an existing global alias."
msgstr ""
-#: redbot/cogs/alias/alias.py:346
+#: redbot/cogs/alias/alias.py:404
msgid "There are no aliases on this bot."
msgstr ""
-#: redbot/cogs/alias/alias.py:359
+#: redbot/cogs/alias/alias.py:417
#, docstring
msgid "List the available aliases on this server."
msgstr ""
-#: redbot/cogs/alias/alias.py:360 redbot/cogs/alias/alias.py:371
+#: redbot/cogs/alias/alias.py:418 redbot/cogs/alias/alias.py:429
msgid "Aliases:"
msgstr ""
-#: redbot/cogs/alias/alias.py:370
+#: redbot/cogs/alias/alias.py:428
#, docstring
msgid "List the available global aliases on this bot."
msgstr ""
diff --git a/redbot/cogs/alias/locales/de-DE.po b/redbot/cogs/alias/locales/de-DE.po
index f970bb034..2a24bae0f 100644
--- a/redbot/cogs/alias/locales/de-DE.po
+++ b/redbot/cogs/alias/locales/de-DE.po
@@ -1,14 +1,14 @@
msgid ""
msgstr ""
"Project-Id-Version: red-discordbot\n"
-"POT-Creation-Date: 2019-01-11 02:18+0000\n"
-"PO-Revision-Date: 2019-02-25 03:07\n"
-"Last-Translator: Kowlin \n"
+"POT-Creation-Date: 2019-07-05 22:33+0200\n"
+"PO-Revision-Date: 2019-07-06 16:12\n"
+"Last-Translator: Robert Jansen (Kowlin)\n"
"Language-Team: German\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"Generated-By: redgettext 2.2\n"
+"Generated-By: redgettext 3.0\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: crowdin.com\n"
"X-Crowdin-Project: red-discordbot\n"
@@ -16,142 +16,138 @@ msgstr ""
"X-Crowdin-File: /cogs/alias/locales/messages.pot\n"
"Language: de_DE\n"
-#: redbot/cogs/alias/alias.py:18
+#: redbot/cogs/alias/alias.py:35
#, docstring
-msgid "Create aliases for commands.\n\n"
-" Aliases are alternative names shortcuts for commands. They\n"
-" can act as both a lambda (storing arguments for repeated use)\n"
-" or as simply a shortcut to saying \"x y z\".\n\n"
-" When run, aliases will accept any additional arguments\n"
-" and append them to the stored alias.\n"
-" "
-msgstr "Kreiere Aliasse für Befehle.\n\n"
-" Aliasse sind alternative Namenskürzel für Befehle. Sie\n"
-" können als Lambda dienen (Argumente speichern für wiederholten Gebrauch)\n"
-" oder als Abkürzung um \"x y z\" zu sagen.\n\n"
-" Wenn ausgeführt, akzeptieren Aliase jedes zusätzliche Argument\n"
-" und fügen es dem gespeicherten Alias zu.\n"
-" "
+msgid "Create aliases for commands.\\n\\n Aliases are alternative names shortcuts for commands. They\\n can act as both a lambda (storing arguments for repeated use)\\n or as simply a shortcut to saying \\\"x y z\\\".\\n\\n When run, aliases will accept any additional arguments\\n and append them to the stored alias.\\n "
+msgstr ""
-#: redbot/cogs/alias/alias.py:130
+#: redbot/cogs/alias/alias.py:107
+msgid "Arguments must be specified with a number."
+msgstr "Argumente müssen mit einer Nummer bestimmt werden."
+
+#: redbot/cogs/alias/alias.py:114
+msgid "Arguments must be sequential. Missing arguments: "
+msgstr "Argumente müssen sequentiell sein. Fehlende Argumente: "
+
+#: redbot/cogs/alias/alias.py:164
msgid "No prefix found."
msgstr "Kein Präfix wurde gefunden."
-#: redbot/cogs/alias/alias.py:179
+#: redbot/cogs/alias/alias.py:231
#, docstring
msgid "Manage command aliases."
msgstr "Verwalte die Alias Befehle."
-#: redbot/cogs/alias/alias.py:184
+#: redbot/cogs/alias/alias.py:236
#, docstring
msgid "Manage global aliases."
msgstr "Verwalte die globalen Aliasse."
-#: redbot/cogs/alias/alias.py:191
+#: redbot/cogs/alias/alias.py:243
#, docstring
msgid "Add an alias for a command."
msgstr "Füge einen Alias für einen Befehl hinzu."
-#: redbot/cogs/alias/alias.py:196
+#: redbot/cogs/alias/alias.py:248
msgid "You attempted to create a new alias with the name {name} but that name is already a command on this bot."
msgstr "Du hast versucht, einen neuen Alias mit dem Namen {name} zu erstellen, aber dieser Name ist bereits ein Befehl für diesen Bot."
-#: redbot/cogs/alias/alias.py:207
+#: redbot/cogs/alias/alias.py:259
msgid "You attempted to create a new alias with the name {name} but that alias already exists on this server."
msgstr "Du hast versucht einen neuen Alias mit dem Namen {name} zu erstellen, aber dieser Alias existiert bereits auf dem Server."
-#: redbot/cogs/alias/alias.py:218
+#: redbot/cogs/alias/alias.py:270
msgid "You attempted to create a new alias with the name {name} but that name is an invalid alias name. Alias names may not contain spaces."
msgstr "Du hast versucht einen neuen Alias mit dem Namen {name} zu erstellen, aber dieser Name ist ein ungültiger Alias-Name. Alias-Namen dürfen keine Leerzeichen enthalten."
-#: redbot/cogs/alias/alias.py:234
+#: redbot/cogs/alias/alias.py:289
msgid "A new alias with the trigger `{name}` has been created."
msgstr "Ein neuer alias mit dem Trigger `{name}` wurde erstellt."
-#: redbot/cogs/alias/alias.py:240
+#: redbot/cogs/alias/alias.py:295
#, docstring
msgid "Add a global alias for a command."
msgstr "Füge einen globalen Alias für einen Befehl hinzu."
-#: redbot/cogs/alias/alias.py:245
+#: redbot/cogs/alias/alias.py:300
msgid "You attempted to create a new global alias with the name {name} but that name is already a command on this bot."
msgstr "Du hast versucht, einen neuen globalen Alias mit dem Namen {name} zu erstellen, aber dieser Name ist bereits ein Befehl für diesen Bot."
-#: redbot/cogs/alias/alias.py:256
+#: redbot/cogs/alias/alias.py:311
msgid "You attempted to create a new global alias with the name {name} but that alias already exists on this server."
msgstr "Du hast versucht, einen neuen globalen Alias mit dem Namen {name} zu erstellen, dieser ist jedoch bereits auf diesem Server vorhanden."
-#: redbot/cogs/alias/alias.py:267
+#: redbot/cogs/alias/alias.py:322
msgid "You attempted to create a new global alias with the name {name} but that name is an invalid alias name. Alias names may not contain spaces."
msgstr "Du hast versucht, einen neuen globalen Alias mit dem Namen {name} zu erstellen, dieser Name ist jedoch ein ungültiger Alias-Name. Alias-Namen dürfen keine Leerzeichen enthalten."
-#: redbot/cogs/alias/alias.py:280
+#: redbot/cogs/alias/alias.py:338
msgid "A new global alias with the trigger `{name}` has been created."
msgstr "Ein neuer globaler Alias mit dem Trigger `{name}` wurde erstellt."
-#: redbot/cogs/alias/alias.py:288
+#: redbot/cogs/alias/alias.py:346
#, docstring
msgid "Try to execute help for the base command of the alias."
msgstr "Versuche die Hilfe für den Basisbefehl des Alias auszuführen."
-#: redbot/cogs/alias/alias.py:297
+#: redbot/cogs/alias/alias.py:355
msgid "{prefix}help {command}"
msgstr "{prefix}help {command}"
-#: redbot/cogs/alias/alias.py:302
+#: redbot/cogs/alias/alias.py:360
msgid "No such alias exists."
msgstr "So ein Alias ist nicht vorhanden."
-#: redbot/cogs/alias/alias.py:307
+#: redbot/cogs/alias/alias.py:365
#, docstring
msgid "Show what command the alias executes."
msgstr "Zeige den Befehl, welchen der Alias ausführt."
-#: redbot/cogs/alias/alias.py:312
+#: redbot/cogs/alias/alias.py:370
msgid "The `{alias_name}` alias will execute the command `{command}`"
msgstr "Der Alias '{alias_name}' führt den Befehl '{command}' aus"
-#: redbot/cogs/alias/alias.py:317
+#: redbot/cogs/alias/alias.py:375
msgid "There is no alias with the name `{name}`"
msgstr "Kein Alias mit dem Namen '{name}' gefunden"
-#: redbot/cogs/alias/alias.py:323
+#: redbot/cogs/alias/alias.py:381
#, docstring
msgid "Delete an existing alias on this server."
msgstr "Lösche einen bereits existierenden Alias auf diesem Server."
-#: redbot/cogs/alias/alias.py:328 redbot/cogs/alias/alias.py:364
-#: redbot/cogs/alias/alias.py:375
+#: redbot/cogs/alias/alias.py:386 redbot/cogs/alias/alias.py:422
+#: redbot/cogs/alias/alias.py:433
msgid "There are no aliases on this server."
msgstr "Es gibt keine Aliasse auf diesem Server."
-#: redbot/cogs/alias/alias.py:333 redbot/cogs/alias/alias.py:351
+#: redbot/cogs/alias/alias.py:391 redbot/cogs/alias/alias.py:409
msgid "Alias with the name `{name}` was successfully deleted."
msgstr "Der Alias mit dem Namen '{name}' wurde erfolgreich gelöscht."
-#: redbot/cogs/alias/alias.py:336 redbot/cogs/alias/alias.py:354
+#: redbot/cogs/alias/alias.py:394 redbot/cogs/alias/alias.py:412
msgid "Alias with name `{name}` was not found."
msgstr "Kein Alias mit dem Namen '{name}' gefunden."
-#: redbot/cogs/alias/alias.py:341
+#: redbot/cogs/alias/alias.py:399
#, docstring
msgid "Delete an existing global alias."
msgstr "Lösche einen bereits existierenden globalen Alias."
-#: redbot/cogs/alias/alias.py:346
+#: redbot/cogs/alias/alias.py:404
msgid "There are no aliases on this bot."
msgstr "Es gibt keine Aliasse in diesem Bot."
-#: redbot/cogs/alias/alias.py:359
+#: redbot/cogs/alias/alias.py:417
#, docstring
msgid "List the available aliases on this server."
msgstr "Zeige die auf diesem Server verfügbaren Alias."
-#: redbot/cogs/alias/alias.py:360 redbot/cogs/alias/alias.py:371
+#: redbot/cogs/alias/alias.py:418 redbot/cogs/alias/alias.py:429
msgid "Aliases:"
msgstr "Aliasse:"
-#: redbot/cogs/alias/alias.py:370
+#: redbot/cogs/alias/alias.py:428
#, docstring
msgid "List the available global aliases on this bot."
msgstr "Zeige die verfügbaren globalen Alias von diesem Bot."
diff --git a/redbot/cogs/alias/locales/el-GR.po b/redbot/cogs/alias/locales/el-GR.po
index d283a097b..8dcb7de7b 100644
--- a/redbot/cogs/alias/locales/el-GR.po
+++ b/redbot/cogs/alias/locales/el-GR.po
@@ -1,14 +1,14 @@
msgid ""
msgstr ""
"Project-Id-Version: red-discordbot\n"
-"POT-Creation-Date: 2019-01-11 02:18+0000\n"
-"PO-Revision-Date: 2019-02-25 03:07\n"
-"Last-Translator: Kowlin \n"
+"POT-Creation-Date: 2019-07-05 22:33+0200\n"
+"PO-Revision-Date: 2019-07-06 16:12\n"
+"Last-Translator: Robert Jansen (Kowlin)\n"
"Language-Team: Greek\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"Generated-By: redgettext 2.2\n"
+"Generated-By: redgettext 3.0\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: crowdin.com\n"
"X-Crowdin-Project: red-discordbot\n"
@@ -16,136 +16,138 @@ msgstr ""
"X-Crowdin-File: /cogs/alias/locales/messages.pot\n"
"Language: el_GR\n"
-#: redbot/cogs/alias/alias.py:18
+#: redbot/cogs/alias/alias.py:35
#, docstring
-msgid "Create aliases for commands.\n\n"
-" Aliases are alternative names shortcuts for commands. They\n"
-" can act as both a lambda (storing arguments for repeated use)\n"
-" or as simply a shortcut to saying \"x y z\".\n\n"
-" When run, aliases will accept any additional arguments\n"
-" and append them to the stored alias.\n"
-" "
+msgid "Create aliases for commands.\\n\\n Aliases are alternative names shortcuts for commands. They\\n can act as both a lambda (storing arguments for repeated use)\\n or as simply a shortcut to saying \\\"x y z\\\".\\n\\n When run, aliases will accept any additional arguments\\n and append them to the stored alias.\\n "
msgstr ""
-#: redbot/cogs/alias/alias.py:130
+#: redbot/cogs/alias/alias.py:107
+msgid "Arguments must be specified with a number."
+msgstr ""
+
+#: redbot/cogs/alias/alias.py:114
+msgid "Arguments must be sequential. Missing arguments: "
+msgstr ""
+
+#: redbot/cogs/alias/alias.py:164
msgid "No prefix found."
msgstr "Δεν βρέθηκε πρόθεμα."
-#: redbot/cogs/alias/alias.py:179
+#: redbot/cogs/alias/alias.py:231
#, docstring
msgid "Manage command aliases."
msgstr ""
-#: redbot/cogs/alias/alias.py:184
+#: redbot/cogs/alias/alias.py:236
#, docstring
msgid "Manage global aliases."
msgstr ""
-#: redbot/cogs/alias/alias.py:191
+#: redbot/cogs/alias/alias.py:243
#, docstring
msgid "Add an alias for a command."
msgstr ""
-#: redbot/cogs/alias/alias.py:196
+#: redbot/cogs/alias/alias.py:248
msgid "You attempted to create a new alias with the name {name} but that name is already a command on this bot."
msgstr ""
-#: redbot/cogs/alias/alias.py:207
+#: redbot/cogs/alias/alias.py:259
msgid "You attempted to create a new alias with the name {name} but that alias already exists on this server."
msgstr ""
-#: redbot/cogs/alias/alias.py:218
+#: redbot/cogs/alias/alias.py:270
msgid "You attempted to create a new alias with the name {name} but that name is an invalid alias name. Alias names may not contain spaces."
msgstr ""
-#: redbot/cogs/alias/alias.py:234
+#: redbot/cogs/alias/alias.py:289
msgid "A new alias with the trigger `{name}` has been created."
msgstr ""
-#: redbot/cogs/alias/alias.py:240
+#: redbot/cogs/alias/alias.py:295
#, docstring
msgid "Add a global alias for a command."
msgstr ""
-#: redbot/cogs/alias/alias.py:245
+#: redbot/cogs/alias/alias.py:300
msgid "You attempted to create a new global alias with the name {name} but that name is already a command on this bot."
msgstr ""
-#: redbot/cogs/alias/alias.py:256
+#: redbot/cogs/alias/alias.py:311
msgid "You attempted to create a new global alias with the name {name} but that alias already exists on this server."
msgstr ""
-#: redbot/cogs/alias/alias.py:267
+#: redbot/cogs/alias/alias.py:322
msgid "You attempted to create a new global alias with the name {name} but that name is an invalid alias name. Alias names may not contain spaces."
msgstr ""
-#: redbot/cogs/alias/alias.py:280
+#: redbot/cogs/alias/alias.py:338
msgid "A new global alias with the trigger `{name}` has been created."
msgstr ""
-#: redbot/cogs/alias/alias.py:288
+#: redbot/cogs/alias/alias.py:346
#, docstring
msgid "Try to execute help for the base command of the alias."
msgstr ""
-#: redbot/cogs/alias/alias.py:297
+#: redbot/cogs/alias/alias.py:355
msgid "{prefix}help {command}"
msgstr ""
-#: redbot/cogs/alias/alias.py:302
+#: redbot/cogs/alias/alias.py:360
msgid "No such alias exists."
msgstr ""
-#: redbot/cogs/alias/alias.py:307
+#: redbot/cogs/alias/alias.py:365
#, docstring
msgid "Show what command the alias executes."
msgstr ""
-#: redbot/cogs/alias/alias.py:312
+#: redbot/cogs/alias/alias.py:370
msgid "The `{alias_name}` alias will execute the command `{command}`"
msgstr ""
-#: redbot/cogs/alias/alias.py:317
+#: redbot/cogs/alias/alias.py:375
msgid "There is no alias with the name `{name}`"
msgstr ""
-#: redbot/cogs/alias/alias.py:323
+#: redbot/cogs/alias/alias.py:381
#, docstring
msgid "Delete an existing alias on this server."
msgstr ""
-#: redbot/cogs/alias/alias.py:328 redbot/cogs/alias/alias.py:364
-#: redbot/cogs/alias/alias.py:375
+#: redbot/cogs/alias/alias.py:386 redbot/cogs/alias/alias.py:422
+#: redbot/cogs/alias/alias.py:433
msgid "There are no aliases on this server."
msgstr ""
-#: redbot/cogs/alias/alias.py:333 redbot/cogs/alias/alias.py:351
+#: redbot/cogs/alias/alias.py:391 redbot/cogs/alias/alias.py:409
msgid "Alias with the name `{name}` was successfully deleted."
msgstr ""
-#: redbot/cogs/alias/alias.py:336 redbot/cogs/alias/alias.py:354
+#: redbot/cogs/alias/alias.py:394 redbot/cogs/alias/alias.py:412
msgid "Alias with name `{name}` was not found."
msgstr ""
-#: redbot/cogs/alias/alias.py:341
+#: redbot/cogs/alias/alias.py:399
#, docstring
msgid "Delete an existing global alias."
msgstr ""
-#: redbot/cogs/alias/alias.py:346
+#: redbot/cogs/alias/alias.py:404
msgid "There are no aliases on this bot."
msgstr ""
-#: redbot/cogs/alias/alias.py:359
+#: redbot/cogs/alias/alias.py:417
#, docstring
msgid "List the available aliases on this server."
msgstr ""
-#: redbot/cogs/alias/alias.py:360 redbot/cogs/alias/alias.py:371
+#: redbot/cogs/alias/alias.py:418 redbot/cogs/alias/alias.py:429
msgid "Aliases:"
msgstr ""
-#: redbot/cogs/alias/alias.py:370
+#: redbot/cogs/alias/alias.py:428
#, docstring
msgid "List the available global aliases on this bot."
msgstr ""
diff --git a/redbot/cogs/alias/locales/en-PT.po b/redbot/cogs/alias/locales/en-PT.po
index 964160cf8..61413a7dd 100644
--- a/redbot/cogs/alias/locales/en-PT.po
+++ b/redbot/cogs/alias/locales/en-PT.po
@@ -1,14 +1,14 @@
msgid ""
msgstr ""
"Project-Id-Version: red-discordbot\n"
-"POT-Creation-Date: 2019-01-11 02:18+0000\n"
-"PO-Revision-Date: 2019-02-25 03:08\n"
-"Last-Translator: Kowlin \n"
+"POT-Creation-Date: 2019-07-05 22:33+0200\n"
+"PO-Revision-Date: 2019-07-14 02:15\n"
+"Last-Translator: Robert Jansen (Kowlin)\n"
"Language-Team: Pirate English\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"Generated-By: redgettext 2.2\n"
+"Generated-By: redgettext 3.0\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: crowdin.com\n"
"X-Crowdin-Project: red-discordbot\n"
@@ -16,136 +16,138 @@ msgstr ""
"X-Crowdin-File: /cogs/alias/locales/messages.pot\n"
"Language: en_PT\n"
-#: redbot/cogs/alias/alias.py:18
+#: redbot/cogs/alias/alias.py:35
#, docstring
-msgid "Create aliases for commands.\n\n"
-" Aliases are alternative names shortcuts for commands. They\n"
-" can act as both a lambda (storing arguments for repeated use)\n"
-" or as simply a shortcut to saying \"x y z\".\n\n"
-" When run, aliases will accept any additional arguments\n"
-" and append them to the stored alias.\n"
-" "
+msgid "Create aliases for commands.\\n\\n Aliases are alternative names shortcuts for commands. They\\n can act as both a lambda (storing arguments for repeated use)\\n or as simply a shortcut to saying \\\"x y z\\\".\\n\\n When run, aliases will accept any additional arguments\\n and append them to the stored alias.\\n "
msgstr ""
-#: redbot/cogs/alias/alias.py:130
+#: redbot/cogs/alias/alias.py:107
+msgid "Arguments must be specified with a number."
+msgstr ""
+
+#: redbot/cogs/alias/alias.py:114
+msgid "Arguments must be sequential. Missing arguments: "
+msgstr ""
+
+#: redbot/cogs/alias/alias.py:164
msgid "No prefix found."
msgstr "Arrr, no prefix found capt'n!"
-#: redbot/cogs/alias/alias.py:179
+#: redbot/cogs/alias/alias.py:231
#, docstring
msgid "Manage command aliases."
msgstr ""
-#: redbot/cogs/alias/alias.py:184
+#: redbot/cogs/alias/alias.py:236
#, docstring
msgid "Manage global aliases."
msgstr ""
-#: redbot/cogs/alias/alias.py:191
+#: redbot/cogs/alias/alias.py:243
#, docstring
msgid "Add an alias for a command."
msgstr ""
-#: redbot/cogs/alias/alias.py:196
+#: redbot/cogs/alias/alias.py:248
msgid "You attempted to create a new alias with the name {name} but that name is already a command on this bot."
msgstr ""
-#: redbot/cogs/alias/alias.py:207
+#: redbot/cogs/alias/alias.py:259
msgid "You attempted to create a new alias with the name {name} but that alias already exists on this server."
msgstr ""
-#: redbot/cogs/alias/alias.py:218
+#: redbot/cogs/alias/alias.py:270
msgid "You attempted to create a new alias with the name {name} but that name is an invalid alias name. Alias names may not contain spaces."
msgstr ""
-#: redbot/cogs/alias/alias.py:234
+#: redbot/cogs/alias/alias.py:289
msgid "A new alias with the trigger `{name}` has been created."
msgstr ""
-#: redbot/cogs/alias/alias.py:240
+#: redbot/cogs/alias/alias.py:295
#, docstring
msgid "Add a global alias for a command."
msgstr ""
-#: redbot/cogs/alias/alias.py:245
+#: redbot/cogs/alias/alias.py:300
msgid "You attempted to create a new global alias with the name {name} but that name is already a command on this bot."
msgstr ""
-#: redbot/cogs/alias/alias.py:256
+#: redbot/cogs/alias/alias.py:311
msgid "You attempted to create a new global alias with the name {name} but that alias already exists on this server."
msgstr ""
-#: redbot/cogs/alias/alias.py:267
+#: redbot/cogs/alias/alias.py:322
msgid "You attempted to create a new global alias with the name {name} but that name is an invalid alias name. Alias names may not contain spaces."
msgstr ""
-#: redbot/cogs/alias/alias.py:280
+#: redbot/cogs/alias/alias.py:338
msgid "A new global alias with the trigger `{name}` has been created."
msgstr ""
-#: redbot/cogs/alias/alias.py:288
+#: redbot/cogs/alias/alias.py:346
#, docstring
msgid "Try to execute help for the base command of the alias."
msgstr ""
-#: redbot/cogs/alias/alias.py:297
+#: redbot/cogs/alias/alias.py:355
msgid "{prefix}help {command}"
msgstr ""
-#: redbot/cogs/alias/alias.py:302
+#: redbot/cogs/alias/alias.py:360
msgid "No such alias exists."
msgstr "Yer scummy alias don't exist, matey!"
-#: redbot/cogs/alias/alias.py:307
+#: redbot/cogs/alias/alias.py:365
#, docstring
msgid "Show what command the alias executes."
msgstr ""
-#: redbot/cogs/alias/alias.py:312
+#: redbot/cogs/alias/alias.py:370
msgid "The `{alias_name}` alias will execute the command `{command}`"
msgstr ""
-#: redbot/cogs/alias/alias.py:317
+#: redbot/cogs/alias/alias.py:375
msgid "There is no alias with the name `{name}`"
msgstr ""
-#: redbot/cogs/alias/alias.py:323
+#: redbot/cogs/alias/alias.py:381
#, docstring
msgid "Delete an existing alias on this server."
msgstr ""
-#: redbot/cogs/alias/alias.py:328 redbot/cogs/alias/alias.py:364
-#: redbot/cogs/alias/alias.py:375
+#: redbot/cogs/alias/alias.py:386 redbot/cogs/alias/alias.py:422
+#: redbot/cogs/alias/alias.py:433
msgid "There are no aliases on this server."
msgstr "Alas! Thar be no aliases on this guild."
-#: redbot/cogs/alias/alias.py:333 redbot/cogs/alias/alias.py:351
+#: redbot/cogs/alias/alias.py:391 redbot/cogs/alias/alias.py:409
msgid "Alias with the name `{name}` was successfully deleted."
msgstr ""
-#: redbot/cogs/alias/alias.py:336 redbot/cogs/alias/alias.py:354
+#: redbot/cogs/alias/alias.py:394 redbot/cogs/alias/alias.py:412
msgid "Alias with name `{name}` was not found."
msgstr ""
-#: redbot/cogs/alias/alias.py:341
+#: redbot/cogs/alias/alias.py:399
#, docstring
msgid "Delete an existing global alias."
msgstr ""
-#: redbot/cogs/alias/alias.py:346
+#: redbot/cogs/alias/alias.py:404
msgid "There are no aliases on this bot."
msgstr "Shiver me timbers! Thar be no aliases on this bot."
-#: redbot/cogs/alias/alias.py:359
+#: redbot/cogs/alias/alias.py:417
#, docstring
msgid "List the available aliases on this server."
msgstr ""
-#: redbot/cogs/alias/alias.py:360 redbot/cogs/alias/alias.py:371
+#: redbot/cogs/alias/alias.py:418 redbot/cogs/alias/alias.py:429
msgid "Aliases:"
msgstr "Yar Aliases:"
-#: redbot/cogs/alias/alias.py:370
+#: redbot/cogs/alias/alias.py:428
#, docstring
msgid "List the available global aliases on this bot."
msgstr ""
diff --git a/redbot/cogs/alias/locales/es-ES.po b/redbot/cogs/alias/locales/es-ES.po
index f2c077a54..8e1cdb632 100644
--- a/redbot/cogs/alias/locales/es-ES.po
+++ b/redbot/cogs/alias/locales/es-ES.po
@@ -1,14 +1,14 @@
msgid ""
msgstr ""
"Project-Id-Version: red-discordbot\n"
-"POT-Creation-Date: 2019-01-11 02:18+0000\n"
-"PO-Revision-Date: 2019-02-25 03:06\n"
-"Last-Translator: Kowlin \n"
+"POT-Creation-Date: 2019-07-05 22:33+0200\n"
+"PO-Revision-Date: 2019-07-14 02:14\n"
+"Last-Translator: Robert Jansen (Kowlin)\n"
"Language-Team: Spanish\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"Generated-By: redgettext 2.2\n"
+"Generated-By: redgettext 3.0\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: crowdin.com\n"
"X-Crowdin-Project: red-discordbot\n"
@@ -16,136 +16,138 @@ msgstr ""
"X-Crowdin-File: /cogs/alias/locales/messages.pot\n"
"Language: es_ES\n"
-#: redbot/cogs/alias/alias.py:18
+#: redbot/cogs/alias/alias.py:35
#, docstring
-msgid "Create aliases for commands.\n\n"
-" Aliases are alternative names shortcuts for commands. They\n"
-" can act as both a lambda (storing arguments for repeated use)\n"
-" or as simply a shortcut to saying \"x y z\".\n\n"
-" When run, aliases will accept any additional arguments\n"
-" and append them to the stored alias.\n"
-" "
+msgid "Create aliases for commands.\\n\\n Aliases are alternative names shortcuts for commands. They\\n can act as both a lambda (storing arguments for repeated use)\\n or as simply a shortcut to saying \\\"x y z\\\".\\n\\n When run, aliases will accept any additional arguments\\n and append them to the stored alias.\\n "
msgstr ""
-#: redbot/cogs/alias/alias.py:130
+#: redbot/cogs/alias/alias.py:107
+msgid "Arguments must be specified with a number."
+msgstr ""
+
+#: redbot/cogs/alias/alias.py:114
+msgid "Arguments must be sequential. Missing arguments: "
+msgstr ""
+
+#: redbot/cogs/alias/alias.py:164
msgid "No prefix found."
msgstr "Prefijo no encontrado."
-#: redbot/cogs/alias/alias.py:179
+#: redbot/cogs/alias/alias.py:231
#, docstring
msgid "Manage command aliases."
msgstr ""
-#: redbot/cogs/alias/alias.py:184
+#: redbot/cogs/alias/alias.py:236
#, docstring
msgid "Manage global aliases."
msgstr ""
-#: redbot/cogs/alias/alias.py:191
+#: redbot/cogs/alias/alias.py:243
#, docstring
msgid "Add an alias for a command."
msgstr ""
-#: redbot/cogs/alias/alias.py:196
+#: redbot/cogs/alias/alias.py:248
msgid "You attempted to create a new alias with the name {name} but that name is already a command on this bot."
msgstr ""
-#: redbot/cogs/alias/alias.py:207
+#: redbot/cogs/alias/alias.py:259
msgid "You attempted to create a new alias with the name {name} but that alias already exists on this server."
msgstr ""
-#: redbot/cogs/alias/alias.py:218
+#: redbot/cogs/alias/alias.py:270
msgid "You attempted to create a new alias with the name {name} but that name is an invalid alias name. Alias names may not contain spaces."
msgstr ""
-#: redbot/cogs/alias/alias.py:234
+#: redbot/cogs/alias/alias.py:289
msgid "A new alias with the trigger `{name}` has been created."
msgstr ""
-#: redbot/cogs/alias/alias.py:240
+#: redbot/cogs/alias/alias.py:295
#, docstring
msgid "Add a global alias for a command."
msgstr ""
-#: redbot/cogs/alias/alias.py:245
+#: redbot/cogs/alias/alias.py:300
msgid "You attempted to create a new global alias with the name {name} but that name is already a command on this bot."
msgstr ""
-#: redbot/cogs/alias/alias.py:256
+#: redbot/cogs/alias/alias.py:311
msgid "You attempted to create a new global alias with the name {name} but that alias already exists on this server."
msgstr ""
-#: redbot/cogs/alias/alias.py:267
+#: redbot/cogs/alias/alias.py:322
msgid "You attempted to create a new global alias with the name {name} but that name is an invalid alias name. Alias names may not contain spaces."
msgstr ""
-#: redbot/cogs/alias/alias.py:280
+#: redbot/cogs/alias/alias.py:338
msgid "A new global alias with the trigger `{name}` has been created."
msgstr ""
-#: redbot/cogs/alias/alias.py:288
+#: redbot/cogs/alias/alias.py:346
#, docstring
msgid "Try to execute help for the base command of the alias."
msgstr ""
-#: redbot/cogs/alias/alias.py:297
+#: redbot/cogs/alias/alias.py:355
msgid "{prefix}help {command}"
msgstr ""
-#: redbot/cogs/alias/alias.py:302
+#: redbot/cogs/alias/alias.py:360
msgid "No such alias exists."
msgstr "Un alias no existe."
-#: redbot/cogs/alias/alias.py:307
+#: redbot/cogs/alias/alias.py:365
#, docstring
msgid "Show what command the alias executes."
msgstr ""
-#: redbot/cogs/alias/alias.py:312
+#: redbot/cogs/alias/alias.py:370
msgid "The `{alias_name}` alias will execute the command `{command}`"
msgstr ""
-#: redbot/cogs/alias/alias.py:317
+#: redbot/cogs/alias/alias.py:375
msgid "There is no alias with the name `{name}`"
msgstr ""
-#: redbot/cogs/alias/alias.py:323
+#: redbot/cogs/alias/alias.py:381
#, docstring
msgid "Delete an existing alias on this server."
msgstr ""
-#: redbot/cogs/alias/alias.py:328 redbot/cogs/alias/alias.py:364
-#: redbot/cogs/alias/alias.py:375
+#: redbot/cogs/alias/alias.py:386 redbot/cogs/alias/alias.py:422
+#: redbot/cogs/alias/alias.py:433
msgid "There are no aliases on this server."
msgstr "No hay los aliases en este servidor."
-#: redbot/cogs/alias/alias.py:333 redbot/cogs/alias/alias.py:351
+#: redbot/cogs/alias/alias.py:391 redbot/cogs/alias/alias.py:409
msgid "Alias with the name `{name}` was successfully deleted."
msgstr ""
-#: redbot/cogs/alias/alias.py:336 redbot/cogs/alias/alias.py:354
+#: redbot/cogs/alias/alias.py:394 redbot/cogs/alias/alias.py:412
msgid "Alias with name `{name}` was not found."
msgstr ""
-#: redbot/cogs/alias/alias.py:341
+#: redbot/cogs/alias/alias.py:399
#, docstring
msgid "Delete an existing global alias."
msgstr ""
-#: redbot/cogs/alias/alias.py:346
+#: redbot/cogs/alias/alias.py:404
msgid "There are no aliases on this bot."
msgstr "No hay el los alias dentro de este bot."
-#: redbot/cogs/alias/alias.py:359
+#: redbot/cogs/alias/alias.py:417
#, docstring
msgid "List the available aliases on this server."
msgstr ""
-#: redbot/cogs/alias/alias.py:360 redbot/cogs/alias/alias.py:371
+#: redbot/cogs/alias/alias.py:418 redbot/cogs/alias/alias.py:429
msgid "Aliases:"
msgstr "Alias:"
-#: redbot/cogs/alias/alias.py:370
+#: redbot/cogs/alias/alias.py:428
#, docstring
msgid "List the available global aliases on this bot."
msgstr ""
diff --git a/redbot/cogs/alias/locales/fi-FI.po b/redbot/cogs/alias/locales/fi-FI.po
index dab869503..5571ddf54 100644
--- a/redbot/cogs/alias/locales/fi-FI.po
+++ b/redbot/cogs/alias/locales/fi-FI.po
@@ -1,14 +1,14 @@
msgid ""
msgstr ""
"Project-Id-Version: red-discordbot\n"
-"POT-Creation-Date: 2019-01-11 02:18+0000\n"
-"PO-Revision-Date: 2019-02-25 03:07\n"
-"Last-Translator: Kowlin \n"
+"POT-Creation-Date: 2019-07-05 22:33+0200\n"
+"PO-Revision-Date: 2019-07-14 02:15\n"
+"Last-Translator: Robert Jansen (Kowlin)\n"
"Language-Team: Finnish\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"Generated-By: redgettext 2.2\n"
+"Generated-By: redgettext 3.0\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: crowdin.com\n"
"X-Crowdin-Project: red-discordbot\n"
@@ -16,136 +16,138 @@ msgstr ""
"X-Crowdin-File: /cogs/alias/locales/messages.pot\n"
"Language: fi_FI\n"
-#: redbot/cogs/alias/alias.py:18
+#: redbot/cogs/alias/alias.py:35
#, docstring
-msgid "Create aliases for commands.\n\n"
-" Aliases are alternative names shortcuts for commands. They\n"
-" can act as both a lambda (storing arguments for repeated use)\n"
-" or as simply a shortcut to saying \"x y z\".\n\n"
-" When run, aliases will accept any additional arguments\n"
-" and append them to the stored alias.\n"
-" "
+msgid "Create aliases for commands.\\n\\n Aliases are alternative names shortcuts for commands. They\\n can act as both a lambda (storing arguments for repeated use)\\n or as simply a shortcut to saying \\\"x y z\\\".\\n\\n When run, aliases will accept any additional arguments\\n and append them to the stored alias.\\n "
msgstr ""
-#: redbot/cogs/alias/alias.py:130
+#: redbot/cogs/alias/alias.py:107
+msgid "Arguments must be specified with a number."
+msgstr ""
+
+#: redbot/cogs/alias/alias.py:114
+msgid "Arguments must be sequential. Missing arguments: "
+msgstr ""
+
+#: redbot/cogs/alias/alias.py:164
msgid "No prefix found."
msgstr ""
-#: redbot/cogs/alias/alias.py:179
+#: redbot/cogs/alias/alias.py:231
#, docstring
msgid "Manage command aliases."
msgstr ""
-#: redbot/cogs/alias/alias.py:184
+#: redbot/cogs/alias/alias.py:236
#, docstring
msgid "Manage global aliases."
msgstr ""
-#: redbot/cogs/alias/alias.py:191
+#: redbot/cogs/alias/alias.py:243
#, docstring
msgid "Add an alias for a command."
msgstr ""
-#: redbot/cogs/alias/alias.py:196
+#: redbot/cogs/alias/alias.py:248
msgid "You attempted to create a new alias with the name {name} but that name is already a command on this bot."
msgstr ""
-#: redbot/cogs/alias/alias.py:207
+#: redbot/cogs/alias/alias.py:259
msgid "You attempted to create a new alias with the name {name} but that alias already exists on this server."
msgstr ""
-#: redbot/cogs/alias/alias.py:218
+#: redbot/cogs/alias/alias.py:270
msgid "You attempted to create a new alias with the name {name} but that name is an invalid alias name. Alias names may not contain spaces."
msgstr ""
-#: redbot/cogs/alias/alias.py:234
+#: redbot/cogs/alias/alias.py:289
msgid "A new alias with the trigger `{name}` has been created."
msgstr ""
-#: redbot/cogs/alias/alias.py:240
+#: redbot/cogs/alias/alias.py:295
#, docstring
msgid "Add a global alias for a command."
msgstr ""
-#: redbot/cogs/alias/alias.py:245
+#: redbot/cogs/alias/alias.py:300
msgid "You attempted to create a new global alias with the name {name} but that name is already a command on this bot."
msgstr ""
-#: redbot/cogs/alias/alias.py:256
+#: redbot/cogs/alias/alias.py:311
msgid "You attempted to create a new global alias with the name {name} but that alias already exists on this server."
msgstr ""
-#: redbot/cogs/alias/alias.py:267
+#: redbot/cogs/alias/alias.py:322
msgid "You attempted to create a new global alias with the name {name} but that name is an invalid alias name. Alias names may not contain spaces."
msgstr ""
-#: redbot/cogs/alias/alias.py:280
+#: redbot/cogs/alias/alias.py:338
msgid "A new global alias with the trigger `{name}` has been created."
msgstr ""
-#: redbot/cogs/alias/alias.py:288
+#: redbot/cogs/alias/alias.py:346
#, docstring
msgid "Try to execute help for the base command of the alias."
msgstr ""
-#: redbot/cogs/alias/alias.py:297
+#: redbot/cogs/alias/alias.py:355
msgid "{prefix}help {command}"
msgstr ""
-#: redbot/cogs/alias/alias.py:302
+#: redbot/cogs/alias/alias.py:360
msgid "No such alias exists."
msgstr ""
-#: redbot/cogs/alias/alias.py:307
+#: redbot/cogs/alias/alias.py:365
#, docstring
msgid "Show what command the alias executes."
msgstr ""
-#: redbot/cogs/alias/alias.py:312
+#: redbot/cogs/alias/alias.py:370
msgid "The `{alias_name}` alias will execute the command `{command}`"
msgstr ""
-#: redbot/cogs/alias/alias.py:317
+#: redbot/cogs/alias/alias.py:375
msgid "There is no alias with the name `{name}`"
msgstr ""
-#: redbot/cogs/alias/alias.py:323
+#: redbot/cogs/alias/alias.py:381
#, docstring
msgid "Delete an existing alias on this server."
msgstr ""
-#: redbot/cogs/alias/alias.py:328 redbot/cogs/alias/alias.py:364
-#: redbot/cogs/alias/alias.py:375
+#: redbot/cogs/alias/alias.py:386 redbot/cogs/alias/alias.py:422
+#: redbot/cogs/alias/alias.py:433
msgid "There are no aliases on this server."
msgstr ""
-#: redbot/cogs/alias/alias.py:333 redbot/cogs/alias/alias.py:351
+#: redbot/cogs/alias/alias.py:391 redbot/cogs/alias/alias.py:409
msgid "Alias with the name `{name}` was successfully deleted."
msgstr ""
-#: redbot/cogs/alias/alias.py:336 redbot/cogs/alias/alias.py:354
+#: redbot/cogs/alias/alias.py:394 redbot/cogs/alias/alias.py:412
msgid "Alias with name `{name}` was not found."
msgstr ""
-#: redbot/cogs/alias/alias.py:341
+#: redbot/cogs/alias/alias.py:399
#, docstring
msgid "Delete an existing global alias."
msgstr ""
-#: redbot/cogs/alias/alias.py:346
+#: redbot/cogs/alias/alias.py:404
msgid "There are no aliases on this bot."
msgstr ""
-#: redbot/cogs/alias/alias.py:359
+#: redbot/cogs/alias/alias.py:417
#, docstring
msgid "List the available aliases on this server."
msgstr ""
-#: redbot/cogs/alias/alias.py:360 redbot/cogs/alias/alias.py:371
+#: redbot/cogs/alias/alias.py:418 redbot/cogs/alias/alias.py:429
msgid "Aliases:"
msgstr ""
-#: redbot/cogs/alias/alias.py:370
+#: redbot/cogs/alias/alias.py:428
#, docstring
msgid "List the available global aliases on this bot."
msgstr ""
diff --git a/redbot/cogs/alias/locales/fr-FR.po b/redbot/cogs/alias/locales/fr-FR.po
index 9899b4c9f..fb554d8cc 100644
--- a/redbot/cogs/alias/locales/fr-FR.po
+++ b/redbot/cogs/alias/locales/fr-FR.po
@@ -1,14 +1,14 @@
msgid ""
msgstr ""
"Project-Id-Version: red-discordbot\n"
-"POT-Creation-Date: 2019-01-11 02:18+0000\n"
-"PO-Revision-Date: 2019-02-25 03:06\n"
-"Last-Translator: Kowlin \n"
+"POT-Creation-Date: 2019-07-05 22:33+0200\n"
+"PO-Revision-Date: 2019-07-06 16:11\n"
+"Last-Translator: Robert Jansen (Kowlin)\n"
"Language-Team: French\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"Generated-By: redgettext 2.2\n"
+"Generated-By: redgettext 3.0\n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
"X-Generator: crowdin.com\n"
"X-Crowdin-Project: red-discordbot\n"
@@ -16,142 +16,138 @@ msgstr ""
"X-Crowdin-File: /cogs/alias/locales/messages.pot\n"
"Language: fr_FR\n"
-#: redbot/cogs/alias/alias.py:18
+#: redbot/cogs/alias/alias.py:35
#, docstring
-msgid "Create aliases for commands.\n\n"
-" Aliases are alternative names shortcuts for commands. They\n"
-" can act as both a lambda (storing arguments for repeated use)\n"
-" or as simply a shortcut to saying \"x y z\".\n\n"
-" When run, aliases will accept any additional arguments\n"
-" and append them to the stored alias.\n"
-" "
-msgstr "Créée des alias pour les commandes\n\n"
-" Les alias sont des raccourcis de noms alternatifs pour les commandes. Ils\n"
-" peuvent agir comme un lambda (stocker des arguments pour un usage répété)\n"
-" ou comme simplement un raccourci pour dire \"x y z\".\n\n"
-" Lors de leur exécution, les alias accepteront tous les arguments supplémentaires\n"
-" et seront exécutés en plus des arguments stockés dans l'alias.\n"
-" "
+msgid "Create aliases for commands.\\n\\n Aliases are alternative names shortcuts for commands. They\\n can act as both a lambda (storing arguments for repeated use)\\n or as simply a shortcut to saying \\\"x y z\\\".\\n\\n When run, aliases will accept any additional arguments\\n and append them to the stored alias.\\n "
+msgstr "Créée des alias pour les commandes\\n\\n Les alias sont des raccourcis de noms alternatifs pour les commandes. Ils\\n peuvent agir comme un lambda (stocker des arguments pour un usage répété)\\n ou comme simplement un raccourci pour dire \\\"x y z\\\".\\n\\n Lors de leur exécution, les alias accepteront tous les arguments supplémentaires\\n et seront exécutés en plus des arguments stockés dans l'alias.\\n "
-#: redbot/cogs/alias/alias.py:130
+#: redbot/cogs/alias/alias.py:107
+msgid "Arguments must be specified with a number."
+msgstr "Les arguments doivent être spécifiés avec un nombre."
+
+#: redbot/cogs/alias/alias.py:114
+msgid "Arguments must be sequential. Missing arguments: "
+msgstr "Les arguments doivent être séquentiels. Arguments manquants : "
+
+#: redbot/cogs/alias/alias.py:164
msgid "No prefix found."
msgstr "Aucun préfixe trouvé."
-#: redbot/cogs/alias/alias.py:179
+#: redbot/cogs/alias/alias.py:231
#, docstring
msgid "Manage command aliases."
msgstr "Gérer les alias de commandes."
-#: redbot/cogs/alias/alias.py:184
+#: redbot/cogs/alias/alias.py:236
#, docstring
msgid "Manage global aliases."
msgstr "Gérer les alias globaux."
-#: redbot/cogs/alias/alias.py:191
+#: redbot/cogs/alias/alias.py:243
#, docstring
msgid "Add an alias for a command."
msgstr "Ajouter un alias à une commande."
-#: redbot/cogs/alias/alias.py:196
+#: redbot/cogs/alias/alias.py:248
msgid "You attempted to create a new alias with the name {name} but that name is already a command on this bot."
msgstr "Tu as tenté de créer un nouvel alias nommé {name}, mais une commande existe déjà avec ce nom sur ce bot."
-#: redbot/cogs/alias/alias.py:207
+#: redbot/cogs/alias/alias.py:259
msgid "You attempted to create a new alias with the name {name} but that alias already exists on this server."
msgstr "Tu as tenté de créer un nouvel alias nommé {name}, mais cet alias existe déjà sur ce serveur."
-#: redbot/cogs/alias/alias.py:218
+#: redbot/cogs/alias/alias.py:270
msgid "You attempted to create a new alias with the name {name} but that name is an invalid alias name. Alias names may not contain spaces."
msgstr "Tu as tenté de créer un nouvel alias nommé {name}, mais ce nom d'alias est invalide. Les noms d'alias ne peuvent pas contenir d'espaces."
-#: redbot/cogs/alias/alias.py:234
+#: redbot/cogs/alias/alias.py:289
msgid "A new alias with the trigger `{name}` has been created."
msgstr "Un nouvel alias avec le déclencheur `{name}` a bien été créé."
-#: redbot/cogs/alias/alias.py:240
+#: redbot/cogs/alias/alias.py:295
#, docstring
msgid "Add a global alias for a command."
msgstr "Ajouter un alias global à une commande."
-#: redbot/cogs/alias/alias.py:245
+#: redbot/cogs/alias/alias.py:300
msgid "You attempted to create a new global alias with the name {name} but that name is already a command on this bot."
msgstr "Tu as tenté de créer un nouvel alias global nommé {name}, mais une commande existe déjà avec ce nom sur ce bot."
-#: redbot/cogs/alias/alias.py:256
+#: redbot/cogs/alias/alias.py:311
msgid "You attempted to create a new global alias with the name {name} but that alias already exists on this server."
msgstr "Tu as tenté de créer un nouvel alias global nommé {name}, mais cet alias existe déjà sur ce serveur."
-#: redbot/cogs/alias/alias.py:267
+#: redbot/cogs/alias/alias.py:322
msgid "You attempted to create a new global alias with the name {name} but that name is an invalid alias name. Alias names may not contain spaces."
msgstr "Tu as tenté de créer un nouvel alias global nommé {name}, mais ce nom d'alias est invalide. Les noms d'alias ne peuvent pas contenir d'espaces."
-#: redbot/cogs/alias/alias.py:280
+#: redbot/cogs/alias/alias.py:338
msgid "A new global alias with the trigger `{name}` has been created."
msgstr "Un nouvel alias global avec le déclencheur `{name}` a bien été créé."
-#: redbot/cogs/alias/alias.py:288
+#: redbot/cogs/alias/alias.py:346
#, docstring
msgid "Try to execute help for the base command of the alias."
msgstr "Tente d'exécuter l'aide pour la commande de base de l'alias."
-#: redbot/cogs/alias/alias.py:297
+#: redbot/cogs/alias/alias.py:355
msgid "{prefix}help {command}"
msgstr "{prefix}help {command}"
-#: redbot/cogs/alias/alias.py:302
+#: redbot/cogs/alias/alias.py:360
msgid "No such alias exists."
msgstr "Cet alias n'existe pas."
-#: redbot/cogs/alias/alias.py:307
+#: redbot/cogs/alias/alias.py:365
#, docstring
msgid "Show what command the alias executes."
msgstr "Affiche la commande que l'alias exécute."
-#: redbot/cogs/alias/alias.py:312
+#: redbot/cogs/alias/alias.py:370
msgid "The `{alias_name}` alias will execute the command `{command}`"
msgstr "L'alias `{alias_name}` exécute la commande `{command}`"
-#: redbot/cogs/alias/alias.py:317
+#: redbot/cogs/alias/alias.py:375
msgid "There is no alias with the name `{name}`"
msgstr "Il n'y a pas d'alias nommé `{name}`"
-#: redbot/cogs/alias/alias.py:323
+#: redbot/cogs/alias/alias.py:381
#, docstring
msgid "Delete an existing alias on this server."
msgstr "Supprime un alias de ce serveur."
-#: redbot/cogs/alias/alias.py:328 redbot/cogs/alias/alias.py:364
-#: redbot/cogs/alias/alias.py:375
+#: redbot/cogs/alias/alias.py:386 redbot/cogs/alias/alias.py:422
+#: redbot/cogs/alias/alias.py:433
msgid "There are no aliases on this server."
msgstr "Il n'y a pas d'alias sur ce serveur."
-#: redbot/cogs/alias/alias.py:333 redbot/cogs/alias/alias.py:351
+#: redbot/cogs/alias/alias.py:391 redbot/cogs/alias/alias.py:409
msgid "Alias with the name `{name}` was successfully deleted."
msgstr "L'alias nommé `{name}` a bien été supprimé."
-#: redbot/cogs/alias/alias.py:336 redbot/cogs/alias/alias.py:354
+#: redbot/cogs/alias/alias.py:394 redbot/cogs/alias/alias.py:412
msgid "Alias with name `{name}` was not found."
msgstr "L'alias nommé `{name}` n'a pas été trouvé."
-#: redbot/cogs/alias/alias.py:341
+#: redbot/cogs/alias/alias.py:399
#, docstring
msgid "Delete an existing global alias."
msgstr "Supprime un alias global existant."
-#: redbot/cogs/alias/alias.py:346
+#: redbot/cogs/alias/alias.py:404
msgid "There are no aliases on this bot."
msgstr "Il n'y a pas d'alias sur ce bot."
-#: redbot/cogs/alias/alias.py:359
+#: redbot/cogs/alias/alias.py:417
#, docstring
msgid "List the available aliases on this server."
msgstr "Liste les alias disponibles sur ce serveur."
-#: redbot/cogs/alias/alias.py:360 redbot/cogs/alias/alias.py:371
+#: redbot/cogs/alias/alias.py:418 redbot/cogs/alias/alias.py:429
msgid "Aliases:"
msgstr "Alias:"
-#: redbot/cogs/alias/alias.py:370
+#: redbot/cogs/alias/alias.py:428
#, docstring
msgid "List the available global aliases on this bot."
msgstr "Liste les alias globaux disponibles sur ce bot."
diff --git a/redbot/cogs/alias/locales/hu-HU.po b/redbot/cogs/alias/locales/hu-HU.po
index 574cbc082..6828d0c5e 100644
--- a/redbot/cogs/alias/locales/hu-HU.po
+++ b/redbot/cogs/alias/locales/hu-HU.po
@@ -1,14 +1,14 @@
msgid ""
msgstr ""
"Project-Id-Version: red-discordbot\n"
-"POT-Creation-Date: 2019-01-11 02:18+0000\n"
-"PO-Revision-Date: 2019-02-25 03:07\n"
-"Last-Translator: Kowlin \n"
+"POT-Creation-Date: 2019-07-05 22:33+0200\n"
+"PO-Revision-Date: 2019-07-06 16:12\n"
+"Last-Translator: Robert Jansen (Kowlin)\n"
"Language-Team: Hungarian\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"Generated-By: redgettext 2.2\n"
+"Generated-By: redgettext 3.0\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: crowdin.com\n"
"X-Crowdin-Project: red-discordbot\n"
@@ -16,136 +16,138 @@ msgstr ""
"X-Crowdin-File: /cogs/alias/locales/messages.pot\n"
"Language: hu_HU\n"
-#: redbot/cogs/alias/alias.py:18
+#: redbot/cogs/alias/alias.py:35
#, docstring
-msgid "Create aliases for commands.\n\n"
-" Aliases are alternative names shortcuts for commands. They\n"
-" can act as both a lambda (storing arguments for repeated use)\n"
-" or as simply a shortcut to saying \"x y z\".\n\n"
-" When run, aliases will accept any additional arguments\n"
-" and append them to the stored alias.\n"
-" "
+msgid "Create aliases for commands.\\n\\n Aliases are alternative names shortcuts for commands. They\\n can act as both a lambda (storing arguments for repeated use)\\n or as simply a shortcut to saying \\\"x y z\\\".\\n\\n When run, aliases will accept any additional arguments\\n and append them to the stored alias.\\n "
msgstr ""
-#: redbot/cogs/alias/alias.py:130
+#: redbot/cogs/alias/alias.py:107
+msgid "Arguments must be specified with a number."
+msgstr ""
+
+#: redbot/cogs/alias/alias.py:114
+msgid "Arguments must be sequential. Missing arguments: "
+msgstr ""
+
+#: redbot/cogs/alias/alias.py:164
msgid "No prefix found."
msgstr "Nem találtható prefix."
-#: redbot/cogs/alias/alias.py:179
+#: redbot/cogs/alias/alias.py:231
#, docstring
msgid "Manage command aliases."
msgstr ""
-#: redbot/cogs/alias/alias.py:184
+#: redbot/cogs/alias/alias.py:236
#, docstring
msgid "Manage global aliases."
msgstr ""
-#: redbot/cogs/alias/alias.py:191
+#: redbot/cogs/alias/alias.py:243
#, docstring
msgid "Add an alias for a command."
msgstr ""
-#: redbot/cogs/alias/alias.py:196
+#: redbot/cogs/alias/alias.py:248
msgid "You attempted to create a new alias with the name {name} but that name is already a command on this bot."
msgstr ""
-#: redbot/cogs/alias/alias.py:207
+#: redbot/cogs/alias/alias.py:259
msgid "You attempted to create a new alias with the name {name} but that alias already exists on this server."
msgstr ""
-#: redbot/cogs/alias/alias.py:218
+#: redbot/cogs/alias/alias.py:270
msgid "You attempted to create a new alias with the name {name} but that name is an invalid alias name. Alias names may not contain spaces."
msgstr ""
-#: redbot/cogs/alias/alias.py:234
+#: redbot/cogs/alias/alias.py:289
msgid "A new alias with the trigger `{name}` has been created."
msgstr ""
-#: redbot/cogs/alias/alias.py:240
+#: redbot/cogs/alias/alias.py:295
#, docstring
msgid "Add a global alias for a command."
msgstr ""
-#: redbot/cogs/alias/alias.py:245
+#: redbot/cogs/alias/alias.py:300
msgid "You attempted to create a new global alias with the name {name} but that name is already a command on this bot."
msgstr ""
-#: redbot/cogs/alias/alias.py:256
+#: redbot/cogs/alias/alias.py:311
msgid "You attempted to create a new global alias with the name {name} but that alias already exists on this server."
msgstr ""
-#: redbot/cogs/alias/alias.py:267
+#: redbot/cogs/alias/alias.py:322
msgid "You attempted to create a new global alias with the name {name} but that name is an invalid alias name. Alias names may not contain spaces."
msgstr ""
-#: redbot/cogs/alias/alias.py:280
+#: redbot/cogs/alias/alias.py:338
msgid "A new global alias with the trigger `{name}` has been created."
msgstr ""
-#: redbot/cogs/alias/alias.py:288
+#: redbot/cogs/alias/alias.py:346
#, docstring
msgid "Try to execute help for the base command of the alias."
msgstr ""
-#: redbot/cogs/alias/alias.py:297
+#: redbot/cogs/alias/alias.py:355
msgid "{prefix}help {command}"
msgstr ""
-#: redbot/cogs/alias/alias.py:302
+#: redbot/cogs/alias/alias.py:360
msgid "No such alias exists."
msgstr "Nem létezik ilyen rövidítés."
-#: redbot/cogs/alias/alias.py:307
+#: redbot/cogs/alias/alias.py:365
#, docstring
msgid "Show what command the alias executes."
msgstr ""
-#: redbot/cogs/alias/alias.py:312
+#: redbot/cogs/alias/alias.py:370
msgid "The `{alias_name}` alias will execute the command `{command}`"
msgstr ""
-#: redbot/cogs/alias/alias.py:317
+#: redbot/cogs/alias/alias.py:375
msgid "There is no alias with the name `{name}`"
msgstr ""
-#: redbot/cogs/alias/alias.py:323
+#: redbot/cogs/alias/alias.py:381
#, docstring
msgid "Delete an existing alias on this server."
msgstr ""
-#: redbot/cogs/alias/alias.py:328 redbot/cogs/alias/alias.py:364
-#: redbot/cogs/alias/alias.py:375
+#: redbot/cogs/alias/alias.py:386 redbot/cogs/alias/alias.py:422
+#: redbot/cogs/alias/alias.py:433
msgid "There are no aliases on this server."
msgstr "Nincsenek rövidítések ezen a szerveren."
-#: redbot/cogs/alias/alias.py:333 redbot/cogs/alias/alias.py:351
+#: redbot/cogs/alias/alias.py:391 redbot/cogs/alias/alias.py:409
msgid "Alias with the name `{name}` was successfully deleted."
msgstr ""
-#: redbot/cogs/alias/alias.py:336 redbot/cogs/alias/alias.py:354
+#: redbot/cogs/alias/alias.py:394 redbot/cogs/alias/alias.py:412
msgid "Alias with name `{name}` was not found."
msgstr ""
-#: redbot/cogs/alias/alias.py:341
+#: redbot/cogs/alias/alias.py:399
#, docstring
msgid "Delete an existing global alias."
msgstr ""
-#: redbot/cogs/alias/alias.py:346
+#: redbot/cogs/alias/alias.py:404
msgid "There are no aliases on this bot."
msgstr "Nincsenek rövidítések ennél a botnál."
-#: redbot/cogs/alias/alias.py:359
+#: redbot/cogs/alias/alias.py:417
#, docstring
msgid "List the available aliases on this server."
msgstr ""
-#: redbot/cogs/alias/alias.py:360 redbot/cogs/alias/alias.py:371
+#: redbot/cogs/alias/alias.py:418 redbot/cogs/alias/alias.py:429
msgid "Aliases:"
msgstr "Rövidítések:"
-#: redbot/cogs/alias/alias.py:370
+#: redbot/cogs/alias/alias.py:428
#, docstring
msgid "List the available global aliases on this bot."
msgstr ""
diff --git a/redbot/cogs/alias/locales/id-ID.po b/redbot/cogs/alias/locales/id-ID.po
index 246d7580b..c5b76cb7a 100644
--- a/redbot/cogs/alias/locales/id-ID.po
+++ b/redbot/cogs/alias/locales/id-ID.po
@@ -1,14 +1,14 @@
msgid ""
msgstr ""
"Project-Id-Version: red-discordbot\n"
-"POT-Creation-Date: 2019-01-11 02:18+0000\n"
-"PO-Revision-Date: 2019-02-25 03:08\n"
-"Last-Translator: Kowlin \n"
+"POT-Creation-Date: 2019-07-05 22:33+0200\n"
+"PO-Revision-Date: 2019-07-06 16:14\n"
+"Last-Translator: Robert Jansen (Kowlin)\n"
"Language-Team: Indonesian\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"Generated-By: redgettext 2.2\n"
+"Generated-By: redgettext 3.0\n"
"Plural-Forms: nplurals=1; plural=0;\n"
"X-Generator: crowdin.com\n"
"X-Crowdin-Project: red-discordbot\n"
@@ -16,136 +16,138 @@ msgstr ""
"X-Crowdin-File: /cogs/alias/locales/messages.pot\n"
"Language: id_ID\n"
-#: redbot/cogs/alias/alias.py:18
+#: redbot/cogs/alias/alias.py:35
#, docstring
-msgid "Create aliases for commands.\n\n"
-" Aliases are alternative names shortcuts for commands. They\n"
-" can act as both a lambda (storing arguments for repeated use)\n"
-" or as simply a shortcut to saying \"x y z\".\n\n"
-" When run, aliases will accept any additional arguments\n"
-" and append them to the stored alias.\n"
-" "
+msgid "Create aliases for commands.\\n\\n Aliases are alternative names shortcuts for commands. They\\n can act as both a lambda (storing arguments for repeated use)\\n or as simply a shortcut to saying \\\"x y z\\\".\\n\\n When run, aliases will accept any additional arguments\\n and append them to the stored alias.\\n "
msgstr ""
-#: redbot/cogs/alias/alias.py:130
+#: redbot/cogs/alias/alias.py:107
+msgid "Arguments must be specified with a number."
+msgstr ""
+
+#: redbot/cogs/alias/alias.py:114
+msgid "Arguments must be sequential. Missing arguments: "
+msgstr ""
+
+#: redbot/cogs/alias/alias.py:164
msgid "No prefix found."
msgstr "Awalan tidak ditemukan."
-#: redbot/cogs/alias/alias.py:179
+#: redbot/cogs/alias/alias.py:231
#, docstring
msgid "Manage command aliases."
msgstr ""
-#: redbot/cogs/alias/alias.py:184
+#: redbot/cogs/alias/alias.py:236
#, docstring
msgid "Manage global aliases."
msgstr ""
-#: redbot/cogs/alias/alias.py:191
+#: redbot/cogs/alias/alias.py:243
#, docstring
msgid "Add an alias for a command."
msgstr ""
-#: redbot/cogs/alias/alias.py:196
+#: redbot/cogs/alias/alias.py:248
msgid "You attempted to create a new alias with the name {name} but that name is already a command on this bot."
msgstr ""
-#: redbot/cogs/alias/alias.py:207
+#: redbot/cogs/alias/alias.py:259
msgid "You attempted to create a new alias with the name {name} but that alias already exists on this server."
msgstr ""
-#: redbot/cogs/alias/alias.py:218
+#: redbot/cogs/alias/alias.py:270
msgid "You attempted to create a new alias with the name {name} but that name is an invalid alias name. Alias names may not contain spaces."
msgstr ""
-#: redbot/cogs/alias/alias.py:234
+#: redbot/cogs/alias/alias.py:289
msgid "A new alias with the trigger `{name}` has been created."
msgstr ""
-#: redbot/cogs/alias/alias.py:240
+#: redbot/cogs/alias/alias.py:295
#, docstring
msgid "Add a global alias for a command."
msgstr ""
-#: redbot/cogs/alias/alias.py:245
+#: redbot/cogs/alias/alias.py:300
msgid "You attempted to create a new global alias with the name {name} but that name is already a command on this bot."
msgstr ""
-#: redbot/cogs/alias/alias.py:256
+#: redbot/cogs/alias/alias.py:311
msgid "You attempted to create a new global alias with the name {name} but that alias already exists on this server."
msgstr ""
-#: redbot/cogs/alias/alias.py:267
+#: redbot/cogs/alias/alias.py:322
msgid "You attempted to create a new global alias with the name {name} but that name is an invalid alias name. Alias names may not contain spaces."
msgstr ""
-#: redbot/cogs/alias/alias.py:280
+#: redbot/cogs/alias/alias.py:338
msgid "A new global alias with the trigger `{name}` has been created."
msgstr ""
-#: redbot/cogs/alias/alias.py:288
+#: redbot/cogs/alias/alias.py:346
#, docstring
msgid "Try to execute help for the base command of the alias."
msgstr ""
-#: redbot/cogs/alias/alias.py:297
+#: redbot/cogs/alias/alias.py:355
msgid "{prefix}help {command}"
msgstr ""
-#: redbot/cogs/alias/alias.py:302
+#: redbot/cogs/alias/alias.py:360
msgid "No such alias exists."
msgstr "Alias tersebut tidak ditemukan."
-#: redbot/cogs/alias/alias.py:307
+#: redbot/cogs/alias/alias.py:365
#, docstring
msgid "Show what command the alias executes."
msgstr ""
-#: redbot/cogs/alias/alias.py:312
+#: redbot/cogs/alias/alias.py:370
msgid "The `{alias_name}` alias will execute the command `{command}`"
msgstr ""
-#: redbot/cogs/alias/alias.py:317
+#: redbot/cogs/alias/alias.py:375
msgid "There is no alias with the name `{name}`"
msgstr ""
-#: redbot/cogs/alias/alias.py:323
+#: redbot/cogs/alias/alias.py:381
#, docstring
msgid "Delete an existing alias on this server."
msgstr ""
-#: redbot/cogs/alias/alias.py:328 redbot/cogs/alias/alias.py:364
-#: redbot/cogs/alias/alias.py:375
+#: redbot/cogs/alias/alias.py:386 redbot/cogs/alias/alias.py:422
+#: redbot/cogs/alias/alias.py:433
msgid "There are no aliases on this server."
msgstr "Tidak ada alias pada server ini."
-#: redbot/cogs/alias/alias.py:333 redbot/cogs/alias/alias.py:351
+#: redbot/cogs/alias/alias.py:391 redbot/cogs/alias/alias.py:409
msgid "Alias with the name `{name}` was successfully deleted."
msgstr ""
-#: redbot/cogs/alias/alias.py:336 redbot/cogs/alias/alias.py:354
+#: redbot/cogs/alias/alias.py:394 redbot/cogs/alias/alias.py:412
msgid "Alias with name `{name}` was not found."
msgstr ""
-#: redbot/cogs/alias/alias.py:341
+#: redbot/cogs/alias/alias.py:399
#, docstring
msgid "Delete an existing global alias."
msgstr ""
-#: redbot/cogs/alias/alias.py:346
+#: redbot/cogs/alias/alias.py:404
msgid "There are no aliases on this bot."
msgstr "Tidak ada alias pada bot ini."
-#: redbot/cogs/alias/alias.py:359
+#: redbot/cogs/alias/alias.py:417
#, docstring
msgid "List the available aliases on this server."
msgstr ""
-#: redbot/cogs/alias/alias.py:360 redbot/cogs/alias/alias.py:371
+#: redbot/cogs/alias/alias.py:418 redbot/cogs/alias/alias.py:429
msgid "Aliases:"
msgstr "Alias:"
-#: redbot/cogs/alias/alias.py:370
+#: redbot/cogs/alias/alias.py:428
#, docstring
msgid "List the available global aliases on this bot."
msgstr ""
diff --git a/redbot/cogs/alias/locales/it-IT.po b/redbot/cogs/alias/locales/it-IT.po
index c8ee6dc7e..2c29a2268 100644
--- a/redbot/cogs/alias/locales/it-IT.po
+++ b/redbot/cogs/alias/locales/it-IT.po
@@ -1,14 +1,14 @@
msgid ""
msgstr ""
"Project-Id-Version: red-discordbot\n"
-"POT-Creation-Date: 2019-01-11 02:18+0000\n"
-"PO-Revision-Date: 2019-02-25 03:07\n"
-"Last-Translator: Kowlin \n"
+"POT-Creation-Date: 2019-07-05 22:33+0200\n"
+"PO-Revision-Date: 2019-07-06 16:13\n"
+"Last-Translator: Robert Jansen (Kowlin)\n"
"Language-Team: Italian\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"Generated-By: redgettext 2.2\n"
+"Generated-By: redgettext 3.0\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: crowdin.com\n"
"X-Crowdin-Project: red-discordbot\n"
@@ -16,137 +16,139 @@ msgstr ""
"X-Crowdin-File: /cogs/alias/locales/messages.pot\n"
"Language: it_IT\n"
-#: redbot/cogs/alias/alias.py:18
+#: redbot/cogs/alias/alias.py:35
#, docstring
-msgid "Create aliases for commands.\n\n"
-" Aliases are alternative names shortcuts for commands. They\n"
-" can act as both a lambda (storing arguments for repeated use)\n"
-" or as simply a shortcut to saying \"x y z\".\n\n"
-" When run, aliases will accept any additional arguments\n"
-" and append them to the stored alias.\n"
-" "
+msgid "Create aliases for commands.\\n\\n Aliases are alternative names shortcuts for commands. They\\n can act as both a lambda (storing arguments for repeated use)\\n or as simply a shortcut to saying \\\"x y z\\\".\\n\\n When run, aliases will accept any additional arguments\\n and append them to the stored alias.\\n "
msgstr ""
-#: redbot/cogs/alias/alias.py:130
+#: redbot/cogs/alias/alias.py:107
+msgid "Arguments must be specified with a number."
+msgstr "Gli argomenti devono essere specificati con un numero."
+
+#: redbot/cogs/alias/alias.py:114
+msgid "Arguments must be sequential. Missing arguments: "
+msgstr ""
+
+#: redbot/cogs/alias/alias.py:164
msgid "No prefix found."
msgstr "Nessun prefisso trovato."
-#: redbot/cogs/alias/alias.py:179
+#: redbot/cogs/alias/alias.py:231
#, docstring
msgid "Manage command aliases."
-msgstr ""
+msgstr "Gestisci gli alias dei comandi."
-#: redbot/cogs/alias/alias.py:184
+#: redbot/cogs/alias/alias.py:236
#, docstring
msgid "Manage global aliases."
-msgstr ""
+msgstr "Gestisci alias globali."
-#: redbot/cogs/alias/alias.py:191
+#: redbot/cogs/alias/alias.py:243
#, docstring
msgid "Add an alias for a command."
-msgstr ""
+msgstr "Aggiungi un alias per un comando."
-#: redbot/cogs/alias/alias.py:196
+#: redbot/cogs/alias/alias.py:248
msgid "You attempted to create a new alias with the name {name} but that name is already a command on this bot."
-msgstr ""
+msgstr "Hai cercato di creare un nuovo alias con il nome {name}, ma questo nome corrisponde già a un comando su questo bot."
-#: redbot/cogs/alias/alias.py:207
+#: redbot/cogs/alias/alias.py:259
msgid "You attempted to create a new alias with the name {name} but that alias already exists on this server."
-msgstr ""
+msgstr "Hai cercato di creare un nuovo alias con il nome {name}, ma questo alias già esiste su questo bot."
-#: redbot/cogs/alias/alias.py:218
+#: redbot/cogs/alias/alias.py:270
msgid "You attempted to create a new alias with the name {name} but that name is an invalid alias name. Alias names may not contain spaces."
-msgstr ""
+msgstr "Hai cercato di creare un nuovo alias con il nome {name}, ma questo nome non è un nome alias valido. I nomi alias non possono contenere spazi."
-#: redbot/cogs/alias/alias.py:234
+#: redbot/cogs/alias/alias.py:289
msgid "A new alias with the trigger `{name}` has been created."
-msgstr ""
+msgstr "È stato creato un nuovo alias con il comando '{name}'."
-#: redbot/cogs/alias/alias.py:240
+#: redbot/cogs/alias/alias.py:295
#, docstring
msgid "Add a global alias for a command."
-msgstr ""
+msgstr "Aggiungi un alias globale per un comando."
-#: redbot/cogs/alias/alias.py:245
+#: redbot/cogs/alias/alias.py:300
msgid "You attempted to create a new global alias with the name {name} but that name is already a command on this bot."
-msgstr ""
+msgstr "Hai cercato di creare un nuovo alias globale con il nome {name}, ma questo nome corrisponde già a un comando su questo bot."
-#: redbot/cogs/alias/alias.py:256
+#: redbot/cogs/alias/alias.py:311
msgid "You attempted to create a new global alias with the name {name} but that alias already exists on this server."
-msgstr ""
+msgstr "Hai cercato di creare un nuovo alias globale con il nome {name}, ma questo alias già esiste su questo server."
-#: redbot/cogs/alias/alias.py:267
+#: redbot/cogs/alias/alias.py:322
msgid "You attempted to create a new global alias with the name {name} but that name is an invalid alias name. Alias names may not contain spaces."
-msgstr ""
+msgstr "Hai cercato di creare un nuovo alias globale con il nome {name}, ma questo nome non è un nome alias valido. I nomi alias non possono contenere spazi."
-#: redbot/cogs/alias/alias.py:280
+#: redbot/cogs/alias/alias.py:338
msgid "A new global alias with the trigger `{name}` has been created."
-msgstr ""
+msgstr "È stato creato un nuovo alias globale con il comando '{name}'."
-#: redbot/cogs/alias/alias.py:288
+#: redbot/cogs/alias/alias.py:346
#, docstring
msgid "Try to execute help for the base command of the alias."
-msgstr ""
+msgstr "Prova a eseguire l'aiuto per il comando di base dell'alias."
-#: redbot/cogs/alias/alias.py:297
+#: redbot/cogs/alias/alias.py:355
msgid "{prefix}help {command}"
-msgstr ""
+msgstr "{prefix}help {command}"
-#: redbot/cogs/alias/alias.py:302
+#: redbot/cogs/alias/alias.py:360
msgid "No such alias exists."
msgstr "Non esiste nessun alias con questo nome."
-#: redbot/cogs/alias/alias.py:307
+#: redbot/cogs/alias/alias.py:365
#, docstring
msgid "Show what command the alias executes."
-msgstr ""
+msgstr "Mostra quale comando viene eseguito dall'alias."
-#: redbot/cogs/alias/alias.py:312
+#: redbot/cogs/alias/alias.py:370
msgid "The `{alias_name}` alias will execute the command `{command}`"
-msgstr ""
+msgstr "L'alias `{alias_name}` eseguirà il comando `{command}`"
-#: redbot/cogs/alias/alias.py:317
+#: redbot/cogs/alias/alias.py:375
msgid "There is no alias with the name `{name}`"
-msgstr ""
+msgstr "Non c'è nessun alias con il nome `{name}`"
-#: redbot/cogs/alias/alias.py:323
+#: redbot/cogs/alias/alias.py:381
#, docstring
msgid "Delete an existing alias on this server."
-msgstr ""
+msgstr "Elimina un alias esistente su questo server."
-#: redbot/cogs/alias/alias.py:328 redbot/cogs/alias/alias.py:364
-#: redbot/cogs/alias/alias.py:375
+#: redbot/cogs/alias/alias.py:386 redbot/cogs/alias/alias.py:422
+#: redbot/cogs/alias/alias.py:433
msgid "There are no aliases on this server."
msgstr "Non ci sono alias su questo server."
-#: redbot/cogs/alias/alias.py:333 redbot/cogs/alias/alias.py:351
+#: redbot/cogs/alias/alias.py:391 redbot/cogs/alias/alias.py:409
msgid "Alias with the name `{name}` was successfully deleted."
-msgstr ""
+msgstr "L'alias con il nome `{name}` è stato eliminato con successo."
-#: redbot/cogs/alias/alias.py:336 redbot/cogs/alias/alias.py:354
+#: redbot/cogs/alias/alias.py:394 redbot/cogs/alias/alias.py:412
msgid "Alias with name `{name}` was not found."
-msgstr ""
+msgstr "L'alias con il nome `{name}` non è stato trovato."
-#: redbot/cogs/alias/alias.py:341
+#: redbot/cogs/alias/alias.py:399
#, docstring
msgid "Delete an existing global alias."
-msgstr ""
+msgstr "Elimina un alias globale esistente."
-#: redbot/cogs/alias/alias.py:346
+#: redbot/cogs/alias/alias.py:404
msgid "There are no aliases on this bot."
-msgstr "Non ci sono nessun alias su questo bot."
+msgstr "Non ci sono alias su questo bot."
-#: redbot/cogs/alias/alias.py:359
+#: redbot/cogs/alias/alias.py:417
#, docstring
msgid "List the available aliases on this server."
-msgstr ""
+msgstr "Elenca gli alias disponibili su questo server."
-#: redbot/cogs/alias/alias.py:360 redbot/cogs/alias/alias.py:371
+#: redbot/cogs/alias/alias.py:418 redbot/cogs/alias/alias.py:429
msgid "Aliases:"
msgstr "Alias:"
-#: redbot/cogs/alias/alias.py:370
+#: redbot/cogs/alias/alias.py:428
#, docstring
msgid "List the available global aliases on this bot."
-msgstr ""
+msgstr "Elenca gli alias globali disponibili su questo server."
diff --git a/redbot/cogs/alias/locales/ja-JP.po b/redbot/cogs/alias/locales/ja-JP.po
index b112bf878..a81536ce2 100644
--- a/redbot/cogs/alias/locales/ja-JP.po
+++ b/redbot/cogs/alias/locales/ja-JP.po
@@ -1,14 +1,14 @@
msgid ""
msgstr ""
"Project-Id-Version: red-discordbot\n"
-"POT-Creation-Date: 2019-01-11 02:18+0000\n"
-"PO-Revision-Date: 2019-02-25 03:07\n"
-"Last-Translator: Kowlin \n"
+"POT-Creation-Date: 2019-07-05 22:33+0200\n"
+"PO-Revision-Date: 2019-07-06 16:13\n"
+"Last-Translator: Robert Jansen (Kowlin)\n"
"Language-Team: Japanese\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"Generated-By: redgettext 2.2\n"
+"Generated-By: redgettext 3.0\n"
"Plural-Forms: nplurals=1; plural=0;\n"
"X-Generator: crowdin.com\n"
"X-Crowdin-Project: red-discordbot\n"
@@ -16,136 +16,138 @@ msgstr ""
"X-Crowdin-File: /cogs/alias/locales/messages.pot\n"
"Language: ja_JP\n"
-#: redbot/cogs/alias/alias.py:18
+#: redbot/cogs/alias/alias.py:35
#, docstring
-msgid "Create aliases for commands.\n\n"
-" Aliases are alternative names shortcuts for commands. They\n"
-" can act as both a lambda (storing arguments for repeated use)\n"
-" or as simply a shortcut to saying \"x y z\".\n\n"
-" When run, aliases will accept any additional arguments\n"
-" and append them to the stored alias.\n"
-" "
+msgid "Create aliases for commands.\\n\\n Aliases are alternative names shortcuts for commands. They\\n can act as both a lambda (storing arguments for repeated use)\\n or as simply a shortcut to saying \\\"x y z\\\".\\n\\n When run, aliases will accept any additional arguments\\n and append them to the stored alias.\\n "
msgstr ""
-#: redbot/cogs/alias/alias.py:130
+#: redbot/cogs/alias/alias.py:107
+msgid "Arguments must be specified with a number."
+msgstr ""
+
+#: redbot/cogs/alias/alias.py:114
+msgid "Arguments must be sequential. Missing arguments: "
+msgstr ""
+
+#: redbot/cogs/alias/alias.py:164
msgid "No prefix found."
msgstr "プレフィックスが見つかりません。"
-#: redbot/cogs/alias/alias.py:179
+#: redbot/cogs/alias/alias.py:231
#, docstring
msgid "Manage command aliases."
msgstr ""
-#: redbot/cogs/alias/alias.py:184
+#: redbot/cogs/alias/alias.py:236
#, docstring
msgid "Manage global aliases."
msgstr ""
-#: redbot/cogs/alias/alias.py:191
+#: redbot/cogs/alias/alias.py:243
#, docstring
msgid "Add an alias for a command."
msgstr ""
-#: redbot/cogs/alias/alias.py:196
+#: redbot/cogs/alias/alias.py:248
msgid "You attempted to create a new alias with the name {name} but that name is already a command on this bot."
msgstr ""
-#: redbot/cogs/alias/alias.py:207
+#: redbot/cogs/alias/alias.py:259
msgid "You attempted to create a new alias with the name {name} but that alias already exists on this server."
msgstr ""
-#: redbot/cogs/alias/alias.py:218
+#: redbot/cogs/alias/alias.py:270
msgid "You attempted to create a new alias with the name {name} but that name is an invalid alias name. Alias names may not contain spaces."
msgstr ""
-#: redbot/cogs/alias/alias.py:234
+#: redbot/cogs/alias/alias.py:289
msgid "A new alias with the trigger `{name}` has been created."
msgstr ""
-#: redbot/cogs/alias/alias.py:240
+#: redbot/cogs/alias/alias.py:295
#, docstring
msgid "Add a global alias for a command."
msgstr ""
-#: redbot/cogs/alias/alias.py:245
+#: redbot/cogs/alias/alias.py:300
msgid "You attempted to create a new global alias with the name {name} but that name is already a command on this bot."
msgstr ""
-#: redbot/cogs/alias/alias.py:256
+#: redbot/cogs/alias/alias.py:311
msgid "You attempted to create a new global alias with the name {name} but that alias already exists on this server."
msgstr ""
-#: redbot/cogs/alias/alias.py:267
+#: redbot/cogs/alias/alias.py:322
msgid "You attempted to create a new global alias with the name {name} but that name is an invalid alias name. Alias names may not contain spaces."
msgstr ""
-#: redbot/cogs/alias/alias.py:280
+#: redbot/cogs/alias/alias.py:338
msgid "A new global alias with the trigger `{name}` has been created."
msgstr ""
-#: redbot/cogs/alias/alias.py:288
+#: redbot/cogs/alias/alias.py:346
#, docstring
msgid "Try to execute help for the base command of the alias."
msgstr ""
-#: redbot/cogs/alias/alias.py:297
+#: redbot/cogs/alias/alias.py:355
msgid "{prefix}help {command}"
msgstr ""
-#: redbot/cogs/alias/alias.py:302
+#: redbot/cogs/alias/alias.py:360
msgid "No such alias exists."
msgstr "そのようなエイリアスはありません。"
-#: redbot/cogs/alias/alias.py:307
+#: redbot/cogs/alias/alias.py:365
#, docstring
msgid "Show what command the alias executes."
msgstr ""
-#: redbot/cogs/alias/alias.py:312
+#: redbot/cogs/alias/alias.py:370
msgid "The `{alias_name}` alias will execute the command `{command}`"
msgstr ""
-#: redbot/cogs/alias/alias.py:317
+#: redbot/cogs/alias/alias.py:375
msgid "There is no alias with the name `{name}`"
msgstr ""
-#: redbot/cogs/alias/alias.py:323
+#: redbot/cogs/alias/alias.py:381
#, docstring
msgid "Delete an existing alias on this server."
msgstr ""
-#: redbot/cogs/alias/alias.py:328 redbot/cogs/alias/alias.py:364
-#: redbot/cogs/alias/alias.py:375
+#: redbot/cogs/alias/alias.py:386 redbot/cogs/alias/alias.py:422
+#: redbot/cogs/alias/alias.py:433
msgid "There are no aliases on this server."
msgstr "このサーバにエイリアスはありません。"
-#: redbot/cogs/alias/alias.py:333 redbot/cogs/alias/alias.py:351
+#: redbot/cogs/alias/alias.py:391 redbot/cogs/alias/alias.py:409
msgid "Alias with the name `{name}` was successfully deleted."
msgstr ""
-#: redbot/cogs/alias/alias.py:336 redbot/cogs/alias/alias.py:354
+#: redbot/cogs/alias/alias.py:394 redbot/cogs/alias/alias.py:412
msgid "Alias with name `{name}` was not found."
msgstr ""
-#: redbot/cogs/alias/alias.py:341
+#: redbot/cogs/alias/alias.py:399
#, docstring
msgid "Delete an existing global alias."
msgstr ""
-#: redbot/cogs/alias/alias.py:346
+#: redbot/cogs/alias/alias.py:404
msgid "There are no aliases on this bot."
msgstr "このボットにはエイリアスはありません。"
-#: redbot/cogs/alias/alias.py:359
+#: redbot/cogs/alias/alias.py:417
#, docstring
msgid "List the available aliases on this server."
msgstr ""
-#: redbot/cogs/alias/alias.py:360 redbot/cogs/alias/alias.py:371
+#: redbot/cogs/alias/alias.py:418 redbot/cogs/alias/alias.py:429
msgid "Aliases:"
msgstr "アリアス:"
-#: redbot/cogs/alias/alias.py:370
+#: redbot/cogs/alias/alias.py:428
#, docstring
msgid "List the available global aliases on this bot."
msgstr ""
diff --git a/redbot/cogs/alias/locales/ko-KR.po b/redbot/cogs/alias/locales/ko-KR.po
index 8e284bad4..e3ae289bb 100644
--- a/redbot/cogs/alias/locales/ko-KR.po
+++ b/redbot/cogs/alias/locales/ko-KR.po
@@ -1,14 +1,14 @@
msgid ""
msgstr ""
"Project-Id-Version: red-discordbot\n"
-"POT-Creation-Date: 2019-01-11 02:18+0000\n"
-"PO-Revision-Date: 2019-02-25 03:07\n"
-"Last-Translator: Kowlin \n"
+"POT-Creation-Date: 2019-07-05 22:33+0200\n"
+"PO-Revision-Date: 2019-07-06 16:13\n"
+"Last-Translator: Robert Jansen (Kowlin)\n"
"Language-Team: Korean\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"Generated-By: redgettext 2.2\n"
+"Generated-By: redgettext 3.0\n"
"Plural-Forms: nplurals=1; plural=0;\n"
"X-Generator: crowdin.com\n"
"X-Crowdin-Project: red-discordbot\n"
@@ -16,136 +16,138 @@ msgstr ""
"X-Crowdin-File: /cogs/alias/locales/messages.pot\n"
"Language: ko_KR\n"
-#: redbot/cogs/alias/alias.py:18
+#: redbot/cogs/alias/alias.py:35
#, docstring
-msgid "Create aliases for commands.\n\n"
-" Aliases are alternative names shortcuts for commands. They\n"
-" can act as both a lambda (storing arguments for repeated use)\n"
-" or as simply a shortcut to saying \"x y z\".\n\n"
-" When run, aliases will accept any additional arguments\n"
-" and append them to the stored alias.\n"
-" "
+msgid "Create aliases for commands.\\n\\n Aliases are alternative names shortcuts for commands. They\\n can act as both a lambda (storing arguments for repeated use)\\n or as simply a shortcut to saying \\\"x y z\\\".\\n\\n When run, aliases will accept any additional arguments\\n and append them to the stored alias.\\n "
msgstr ""
-#: redbot/cogs/alias/alias.py:130
+#: redbot/cogs/alias/alias.py:107
+msgid "Arguments must be specified with a number."
+msgstr ""
+
+#: redbot/cogs/alias/alias.py:114
+msgid "Arguments must be sequential. Missing arguments: "
+msgstr ""
+
+#: redbot/cogs/alias/alias.py:164
msgid "No prefix found."
msgstr "프리픽스를 찾을 수 없어요."
-#: redbot/cogs/alias/alias.py:179
+#: redbot/cogs/alias/alias.py:231
#, docstring
msgid "Manage command aliases."
msgstr ""
-#: redbot/cogs/alias/alias.py:184
+#: redbot/cogs/alias/alias.py:236
#, docstring
msgid "Manage global aliases."
msgstr ""
-#: redbot/cogs/alias/alias.py:191
+#: redbot/cogs/alias/alias.py:243
#, docstring
msgid "Add an alias for a command."
msgstr ""
-#: redbot/cogs/alias/alias.py:196
+#: redbot/cogs/alias/alias.py:248
msgid "You attempted to create a new alias with the name {name} but that name is already a command on this bot."
msgstr ""
-#: redbot/cogs/alias/alias.py:207
+#: redbot/cogs/alias/alias.py:259
msgid "You attempted to create a new alias with the name {name} but that alias already exists on this server."
msgstr ""
-#: redbot/cogs/alias/alias.py:218
+#: redbot/cogs/alias/alias.py:270
msgid "You attempted to create a new alias with the name {name} but that name is an invalid alias name. Alias names may not contain spaces."
msgstr ""
-#: redbot/cogs/alias/alias.py:234
+#: redbot/cogs/alias/alias.py:289
msgid "A new alias with the trigger `{name}` has been created."
msgstr ""
-#: redbot/cogs/alias/alias.py:240
+#: redbot/cogs/alias/alias.py:295
#, docstring
msgid "Add a global alias for a command."
msgstr ""
-#: redbot/cogs/alias/alias.py:245
+#: redbot/cogs/alias/alias.py:300
msgid "You attempted to create a new global alias with the name {name} but that name is already a command on this bot."
msgstr ""
-#: redbot/cogs/alias/alias.py:256
+#: redbot/cogs/alias/alias.py:311
msgid "You attempted to create a new global alias with the name {name} but that alias already exists on this server."
msgstr ""
-#: redbot/cogs/alias/alias.py:267
+#: redbot/cogs/alias/alias.py:322
msgid "You attempted to create a new global alias with the name {name} but that name is an invalid alias name. Alias names may not contain spaces."
msgstr ""
-#: redbot/cogs/alias/alias.py:280
+#: redbot/cogs/alias/alias.py:338
msgid "A new global alias with the trigger `{name}` has been created."
msgstr ""
-#: redbot/cogs/alias/alias.py:288
+#: redbot/cogs/alias/alias.py:346
#, docstring
msgid "Try to execute help for the base command of the alias."
msgstr ""
-#: redbot/cogs/alias/alias.py:297
+#: redbot/cogs/alias/alias.py:355
msgid "{prefix}help {command}"
msgstr ""
-#: redbot/cogs/alias/alias.py:302
+#: redbot/cogs/alias/alias.py:360
msgid "No such alias exists."
msgstr "그런 별칭은 등록되어 있지 않아요."
-#: redbot/cogs/alias/alias.py:307
+#: redbot/cogs/alias/alias.py:365
#, docstring
msgid "Show what command the alias executes."
msgstr ""
-#: redbot/cogs/alias/alias.py:312
+#: redbot/cogs/alias/alias.py:370
msgid "The `{alias_name}` alias will execute the command `{command}`"
msgstr ""
-#: redbot/cogs/alias/alias.py:317
+#: redbot/cogs/alias/alias.py:375
msgid "There is no alias with the name `{name}`"
msgstr ""
-#: redbot/cogs/alias/alias.py:323
+#: redbot/cogs/alias/alias.py:381
#, docstring
msgid "Delete an existing alias on this server."
msgstr ""
-#: redbot/cogs/alias/alias.py:328 redbot/cogs/alias/alias.py:364
-#: redbot/cogs/alias/alias.py:375
+#: redbot/cogs/alias/alias.py:386 redbot/cogs/alias/alias.py:422
+#: redbot/cogs/alias/alias.py:433
msgid "There are no aliases on this server."
msgstr "이 서버에 등록된 별칭이 없어요."
-#: redbot/cogs/alias/alias.py:333 redbot/cogs/alias/alias.py:351
+#: redbot/cogs/alias/alias.py:391 redbot/cogs/alias/alias.py:409
msgid "Alias with the name `{name}` was successfully deleted."
msgstr ""
-#: redbot/cogs/alias/alias.py:336 redbot/cogs/alias/alias.py:354
+#: redbot/cogs/alias/alias.py:394 redbot/cogs/alias/alias.py:412
msgid "Alias with name `{name}` was not found."
msgstr ""
-#: redbot/cogs/alias/alias.py:341
+#: redbot/cogs/alias/alias.py:399
#, docstring
msgid "Delete an existing global alias."
msgstr ""
-#: redbot/cogs/alias/alias.py:346
+#: redbot/cogs/alias/alias.py:404
msgid "There are no aliases on this bot."
msgstr "이 봇에 등록된 별칭이 없어요."
-#: redbot/cogs/alias/alias.py:359
+#: redbot/cogs/alias/alias.py:417
#, docstring
msgid "List the available aliases on this server."
msgstr ""
-#: redbot/cogs/alias/alias.py:360 redbot/cogs/alias/alias.py:371
+#: redbot/cogs/alias/alias.py:418 redbot/cogs/alias/alias.py:429
msgid "Aliases:"
msgstr "등록된 별칭 리스트 :"
-#: redbot/cogs/alias/alias.py:370
+#: redbot/cogs/alias/alias.py:428
#, docstring
msgid "List the available global aliases on this bot."
msgstr ""
diff --git a/redbot/cogs/alias/locales/lol-US.po b/redbot/cogs/alias/locales/lol-US.po
index 65de532ee..6251f23e7 100644
--- a/redbot/cogs/alias/locales/lol-US.po
+++ b/redbot/cogs/alias/locales/lol-US.po
@@ -1,14 +1,14 @@
msgid ""
msgstr ""
"Project-Id-Version: red-discordbot\n"
-"POT-Creation-Date: 2019-01-11 02:18+0000\n"
-"PO-Revision-Date: 2019-02-25 03:08\n"
-"Last-Translator: Kowlin \n"
+"POT-Creation-Date: 2019-07-05 22:33+0200\n"
+"PO-Revision-Date: 2019-07-06 16:14\n"
+"Last-Translator: Robert Jansen (Kowlin)\n"
"Language-Team: LOLCAT\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"Generated-By: redgettext 2.2\n"
+"Generated-By: redgettext 3.0\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: crowdin.com\n"
"X-Crowdin-Project: red-discordbot\n"
@@ -16,136 +16,138 @@ msgstr ""
"X-Crowdin-File: /cogs/alias/locales/messages.pot\n"
"Language: lol_US\n"
-#: redbot/cogs/alias/alias.py:18
+#: redbot/cogs/alias/alias.py:35
#, docstring
-msgid "Create aliases for commands.\n\n"
-" Aliases are alternative names shortcuts for commands. They\n"
-" can act as both a lambda (storing arguments for repeated use)\n"
-" or as simply a shortcut to saying \"x y z\".\n\n"
-" When run, aliases will accept any additional arguments\n"
-" and append them to the stored alias.\n"
-" "
+msgid "Create aliases for commands.\\n\\n Aliases are alternative names shortcuts for commands. They\\n can act as both a lambda (storing arguments for repeated use)\\n or as simply a shortcut to saying \\\"x y z\\\".\\n\\n When run, aliases will accept any additional arguments\\n and append them to the stored alias.\\n "
msgstr ""
-#: redbot/cogs/alias/alias.py:130
+#: redbot/cogs/alias/alias.py:107
+msgid "Arguments must be specified with a number."
+msgstr ""
+
+#: redbot/cogs/alias/alias.py:114
+msgid "Arguments must be sequential. Missing arguments: "
+msgstr ""
+
+#: redbot/cogs/alias/alias.py:164
msgid "No prefix found."
msgstr "Nu prifix findz."
-#: redbot/cogs/alias/alias.py:179
+#: redbot/cogs/alias/alias.py:231
#, docstring
msgid "Manage command aliases."
msgstr "Mange da command aliasez."
-#: redbot/cogs/alias/alias.py:184
+#: redbot/cogs/alias/alias.py:236
#, docstring
msgid "Manage global aliases."
msgstr "Mange da global aliasez."
-#: redbot/cogs/alias/alias.py:191
+#: redbot/cogs/alias/alias.py:243
#, docstring
msgid "Add an alias for a command."
msgstr "Addz an alias 4 command."
-#: redbot/cogs/alias/alias.py:196
+#: redbot/cogs/alias/alias.py:248
msgid "You attempted to create a new alias with the name {name} but that name is already a command on this bot."
msgstr ""
-#: redbot/cogs/alias/alias.py:207
+#: redbot/cogs/alias/alias.py:259
msgid "You attempted to create a new alias with the name {name} but that alias already exists on this server."
msgstr ""
-#: redbot/cogs/alias/alias.py:218
+#: redbot/cogs/alias/alias.py:270
msgid "You attempted to create a new alias with the name {name} but that name is an invalid alias name. Alias names may not contain spaces."
msgstr ""
-#: redbot/cogs/alias/alias.py:234
+#: redbot/cogs/alias/alias.py:289
msgid "A new alias with the trigger `{name}` has been created."
msgstr ""
-#: redbot/cogs/alias/alias.py:240
+#: redbot/cogs/alias/alias.py:295
#, docstring
msgid "Add a global alias for a command."
msgstr ""
-#: redbot/cogs/alias/alias.py:245
+#: redbot/cogs/alias/alias.py:300
msgid "You attempted to create a new global alias with the name {name} but that name is already a command on this bot."
msgstr ""
-#: redbot/cogs/alias/alias.py:256
+#: redbot/cogs/alias/alias.py:311
msgid "You attempted to create a new global alias with the name {name} but that alias already exists on this server."
msgstr ""
-#: redbot/cogs/alias/alias.py:267
+#: redbot/cogs/alias/alias.py:322
msgid "You attempted to create a new global alias with the name {name} but that name is an invalid alias name. Alias names may not contain spaces."
msgstr ""
-#: redbot/cogs/alias/alias.py:280
+#: redbot/cogs/alias/alias.py:338
msgid "A new global alias with the trigger `{name}` has been created."
msgstr ""
-#: redbot/cogs/alias/alias.py:288
+#: redbot/cogs/alias/alias.py:346
#, docstring
msgid "Try to execute help for the base command of the alias."
msgstr ""
-#: redbot/cogs/alias/alias.py:297
+#: redbot/cogs/alias/alias.py:355
msgid "{prefix}help {command}"
msgstr ""
-#: redbot/cogs/alias/alias.py:302
+#: redbot/cogs/alias/alias.py:360
msgid "No such alias exists."
msgstr "Nu such aliaz existz."
-#: redbot/cogs/alias/alias.py:307
+#: redbot/cogs/alias/alias.py:365
#, docstring
msgid "Show what command the alias executes."
msgstr ""
-#: redbot/cogs/alias/alias.py:312
+#: redbot/cogs/alias/alias.py:370
msgid "The `{alias_name}` alias will execute the command `{command}`"
msgstr ""
-#: redbot/cogs/alias/alias.py:317
+#: redbot/cogs/alias/alias.py:375
msgid "There is no alias with the name `{name}`"
msgstr ""
-#: redbot/cogs/alias/alias.py:323
+#: redbot/cogs/alias/alias.py:381
#, docstring
msgid "Delete an existing alias on this server."
msgstr ""
-#: redbot/cogs/alias/alias.py:328 redbot/cogs/alias/alias.py:364
-#: redbot/cogs/alias/alias.py:375
+#: redbot/cogs/alias/alias.py:386 redbot/cogs/alias/alias.py:422
+#: redbot/cogs/alias/alias.py:433
msgid "There are no aliases on this server."
msgstr "Serverz hav nu aliazes."
-#: redbot/cogs/alias/alias.py:333 redbot/cogs/alias/alias.py:351
+#: redbot/cogs/alias/alias.py:391 redbot/cogs/alias/alias.py:409
msgid "Alias with the name `{name}` was successfully deleted."
msgstr ""
-#: redbot/cogs/alias/alias.py:336 redbot/cogs/alias/alias.py:354
+#: redbot/cogs/alias/alias.py:394 redbot/cogs/alias/alias.py:412
msgid "Alias with name `{name}` was not found."
msgstr ""
-#: redbot/cogs/alias/alias.py:341
+#: redbot/cogs/alias/alias.py:399
#, docstring
msgid "Delete an existing global alias."
msgstr ""
-#: redbot/cogs/alias/alias.py:346
+#: redbot/cogs/alias/alias.py:404
msgid "There are no aliases on this bot."
msgstr "Ther no aliazes :("
-#: redbot/cogs/alias/alias.py:359
+#: redbot/cogs/alias/alias.py:417
#, docstring
msgid "List the available aliases on this server."
msgstr ""
-#: redbot/cogs/alias/alias.py:360 redbot/cogs/alias/alias.py:371
+#: redbot/cogs/alias/alias.py:418 redbot/cogs/alias/alias.py:429
msgid "Aliases:"
msgstr "Aliazes:"
-#: redbot/cogs/alias/alias.py:370
+#: redbot/cogs/alias/alias.py:428
#, docstring
msgid "List the available global aliases on this bot."
msgstr ""
diff --git a/redbot/cogs/alias/locales/nl-NL.po b/redbot/cogs/alias/locales/nl-NL.po
index 8430f04e5..edda0e8e8 100644
--- a/redbot/cogs/alias/locales/nl-NL.po
+++ b/redbot/cogs/alias/locales/nl-NL.po
@@ -1,14 +1,14 @@
msgid ""
msgstr ""
"Project-Id-Version: red-discordbot\n"
-"POT-Creation-Date: 2019-01-11 02:18+0000\n"
-"PO-Revision-Date: 2019-02-25 03:07\n"
-"Last-Translator: Kowlin \n"
+"POT-Creation-Date: 2019-07-05 22:33+0200\n"
+"PO-Revision-Date: 2019-07-06 16:13\n"
+"Last-Translator: Robert Jansen (Kowlin)\n"
"Language-Team: Dutch\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"Generated-By: redgettext 2.2\n"
+"Generated-By: redgettext 3.0\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: crowdin.com\n"
"X-Crowdin-Project: red-discordbot\n"
@@ -16,142 +16,138 @@ msgstr ""
"X-Crowdin-File: /cogs/alias/locales/messages.pot\n"
"Language: nl_NL\n"
-#: redbot/cogs/alias/alias.py:18
+#: redbot/cogs/alias/alias.py:35
#, docstring
-msgid "Create aliases for commands.\n\n"
-" Aliases are alternative names shortcuts for commands. They\n"
-" can act as both a lambda (storing arguments for repeated use)\n"
-" or as simply a shortcut to saying \"x y z\".\n\n"
-" When run, aliases will accept any additional arguments\n"
-" and append them to the stored alias.\n"
-" "
-msgstr "Maak aliases aan voor een command.\n\n"
-" Aliases zijn een alternatieve naam voor snelkoppelingen. Deze\n"
-" kunnen zich gedragen als een lambda (argumenten opslaan voor herhaald gebruik)\n"
-" of zo simpel als een command: \"x y z\".\n"
-" Wanneer ze worden uitgevoerd, accepteren aliassen aanvullende argumenten\n"
-" en voeg ze toe aan de opgeslagen alias.\n"
-" "
+msgid "Create aliases for commands.\\n\\n Aliases are alternative names shortcuts for commands. They\\n can act as both a lambda (storing arguments for repeated use)\\n or as simply a shortcut to saying \\\"x y z\\\".\\n\\n When run, aliases will accept any additional arguments\\n and append them to the stored alias.\\n "
+msgstr ""
-#: redbot/cogs/alias/alias.py:130
+#: redbot/cogs/alias/alias.py:107
+msgid "Arguments must be specified with a number."
+msgstr ""
+
+#: redbot/cogs/alias/alias.py:114
+msgid "Arguments must be sequential. Missing arguments: "
+msgstr ""
+
+#: redbot/cogs/alias/alias.py:164
msgid "No prefix found."
msgstr "Geen prefix gevonden."
-#: redbot/cogs/alias/alias.py:179
+#: redbot/cogs/alias/alias.py:231
#, docstring
msgid "Manage command aliases."
msgstr "Beheer commandaliassen."
-#: redbot/cogs/alias/alias.py:184
+#: redbot/cogs/alias/alias.py:236
#, docstring
msgid "Manage global aliases."
msgstr "Beheer globale aliassen."
-#: redbot/cogs/alias/alias.py:191
+#: redbot/cogs/alias/alias.py:243
#, docstring
msgid "Add an alias for a command."
msgstr "Voeg een alias toe voor een opdracht."
-#: redbot/cogs/alias/alias.py:196
+#: redbot/cogs/alias/alias.py:248
msgid "You attempted to create a new alias with the name {name} but that name is already a command on this bot."
msgstr "Je hebt geprobeerd een nieuwe alias te maken met de naam {name}, maar die naam is al een opdracht voor deze bot."
-#: redbot/cogs/alias/alias.py:207
+#: redbot/cogs/alias/alias.py:259
msgid "You attempted to create a new alias with the name {name} but that alias already exists on this server."
msgstr "Je hebt geprobeerd een nieuwe alias te maken met de naam {name}, maar die alias bestaat al op deze server."
-#: redbot/cogs/alias/alias.py:218
+#: redbot/cogs/alias/alias.py:270
msgid "You attempted to create a new alias with the name {name} but that name is an invalid alias name. Alias names may not contain spaces."
msgstr "Je hebt geprobeerd een nieuwe alias te maken met de naam {name}, maar die naam is een ongeldige aliasnaam. Aliasnamen mogen geen spaties bevatten."
-#: redbot/cogs/alias/alias.py:234
+#: redbot/cogs/alias/alias.py:289
msgid "A new alias with the trigger `{name}` has been created."
msgstr "Er is een nieuwe alias gemaakt met de trigger `{name}`."
-#: redbot/cogs/alias/alias.py:240
+#: redbot/cogs/alias/alias.py:295
#, docstring
msgid "Add a global alias for a command."
msgstr "Voeg een globale alias toe voor een opdracht."
-#: redbot/cogs/alias/alias.py:245
+#: redbot/cogs/alias/alias.py:300
msgid "You attempted to create a new global alias with the name {name} but that name is already a command on this bot."
msgstr "Je hebt geprobeerd om een nieuwe globale alias te maken met de naam {name}, maar die naam is al een opdracht op deze bot."
-#: redbot/cogs/alias/alias.py:256
+#: redbot/cogs/alias/alias.py:311
msgid "You attempted to create a new global alias with the name {name} but that alias already exists on this server."
msgstr "Je hebt geprobeerd een nieuwe globale alias te maken met de naam {name}, maar die alias bestaat al op deze server."
-#: redbot/cogs/alias/alias.py:267
+#: redbot/cogs/alias/alias.py:322
msgid "You attempted to create a new global alias with the name {name} but that name is an invalid alias name. Alias names may not contain spaces."
msgstr "Je hebt geprobeerd een nieuwe algemene alias te maken met de naam {name}, maar die naam is een ongeldige aliasnaam. Aliasnamen mogen geen spaties bevatten."
-#: redbot/cogs/alias/alias.py:280
+#: redbot/cogs/alias/alias.py:338
msgid "A new global alias with the trigger `{name}` has been created."
msgstr "Er is een nieuwe globale alias gemaakt met de trigger `{name}`."
-#: redbot/cogs/alias/alias.py:288
+#: redbot/cogs/alias/alias.py:346
#, docstring
msgid "Try to execute help for the base command of the alias."
msgstr "Probeer hulp uit te voeren voor de basisopdracht van de alias."
-#: redbot/cogs/alias/alias.py:297
+#: redbot/cogs/alias/alias.py:355
msgid "{prefix}help {command}"
msgstr "{prefix}help {command}"
-#: redbot/cogs/alias/alias.py:302
+#: redbot/cogs/alias/alias.py:360
msgid "No such alias exists."
msgstr "Deze alias bestaat niet."
-#: redbot/cogs/alias/alias.py:307
+#: redbot/cogs/alias/alias.py:365
#, docstring
msgid "Show what command the alias executes."
msgstr "Laat zien welk commando de alias uitvoert."
-#: redbot/cogs/alias/alias.py:312
+#: redbot/cogs/alias/alias.py:370
msgid "The `{alias_name}` alias will execute the command `{command}`"
msgstr "De `{alias_name}` alias voert het commando `{command}` uit"
-#: redbot/cogs/alias/alias.py:317
+#: redbot/cogs/alias/alias.py:375
msgid "There is no alias with the name `{name}`"
msgstr "Er is geen alias met de naam'{name}'"
-#: redbot/cogs/alias/alias.py:323
+#: redbot/cogs/alias/alias.py:381
#, docstring
msgid "Delete an existing alias on this server."
msgstr "Verwijder een bestaande alias op deze server."
-#: redbot/cogs/alias/alias.py:328 redbot/cogs/alias/alias.py:364
-#: redbot/cogs/alias/alias.py:375
+#: redbot/cogs/alias/alias.py:386 redbot/cogs/alias/alias.py:422
+#: redbot/cogs/alias/alias.py:433
msgid "There are no aliases on this server."
msgstr "Er zijn geen aliases in deze server."
-#: redbot/cogs/alias/alias.py:333 redbot/cogs/alias/alias.py:351
+#: redbot/cogs/alias/alias.py:391 redbot/cogs/alias/alias.py:409
msgid "Alias with the name `{name}` was successfully deleted."
msgstr "Alias met de naam `{name}` is succesvol verwijderd."
-#: redbot/cogs/alias/alias.py:336 redbot/cogs/alias/alias.py:354
+#: redbot/cogs/alias/alias.py:394 redbot/cogs/alias/alias.py:412
msgid "Alias with name `{name}` was not found."
msgstr "Alias met naam `{name}` is niet gevonden."
-#: redbot/cogs/alias/alias.py:341
+#: redbot/cogs/alias/alias.py:399
#, docstring
msgid "Delete an existing global alias."
msgstr "Een bestaande globale alias verwijderen."
-#: redbot/cogs/alias/alias.py:346
+#: redbot/cogs/alias/alias.py:404
msgid "There are no aliases on this bot."
msgstr "Er zijn geen aliases op deze bot."
-#: redbot/cogs/alias/alias.py:359
+#: redbot/cogs/alias/alias.py:417
#, docstring
msgid "List the available aliases on this server."
msgstr "Maak een lijst van de beschikbare aliassen op deze server."
-#: redbot/cogs/alias/alias.py:360 redbot/cogs/alias/alias.py:371
+#: redbot/cogs/alias/alias.py:418 redbot/cogs/alias/alias.py:429
msgid "Aliases:"
msgstr "Aliassen:"
-#: redbot/cogs/alias/alias.py:370
+#: redbot/cogs/alias/alias.py:428
#, docstring
msgid "List the available global aliases on this bot."
msgstr "Maak een lijst van de beschikbare globale aliassen op deze bot."
diff --git a/redbot/cogs/alias/locales/no-NO.po b/redbot/cogs/alias/locales/no-NO.po
index e057b974d..292a8d81c 100644
--- a/redbot/cogs/alias/locales/no-NO.po
+++ b/redbot/cogs/alias/locales/no-NO.po
@@ -1,14 +1,14 @@
msgid ""
msgstr ""
"Project-Id-Version: red-discordbot\n"
-"POT-Creation-Date: 2019-01-11 02:18+0000\n"
-"PO-Revision-Date: 2019-02-25 03:07\n"
-"Last-Translator: Kowlin \n"
+"POT-Creation-Date: 2019-07-05 22:33+0200\n"
+"PO-Revision-Date: 2019-07-06 16:13\n"
+"Last-Translator: Robert Jansen (Kowlin)\n"
"Language-Team: Norwegian\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"Generated-By: redgettext 2.2\n"
+"Generated-By: redgettext 3.0\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: crowdin.com\n"
"X-Crowdin-Project: red-discordbot\n"
@@ -16,138 +16,138 @@ msgstr ""
"X-Crowdin-File: /cogs/alias/locales/messages.pot\n"
"Language: no_NO\n"
-#: redbot/cogs/alias/alias.py:18
+#: redbot/cogs/alias/alias.py:35
#, docstring
-msgid "Create aliases for commands.\n\n"
-" Aliases are alternative names shortcuts for commands. They\n"
-" can act as both a lambda (storing arguments for repeated use)\n"
-" or as simply a shortcut to saying \"x y z\".\n\n"
-" When run, aliases will accept any additional arguments\n"
-" and append them to the stored alias.\n"
-" "
-msgstr "Opprett aliaser for kommandoer.\n\n"
-"Aliaser er alternative navn snarveier for kommandoer. De kan brukes både som en lambda (lagring av argumenter for gjentatt bruk) eller som en snarvei for å si \"x y z\"\n\n"
-"Aliaser vil godta hvilke som helst tilleggsargumenter og legge dem til det lagrede aliaset når de blir kjørt. "
+msgid "Create aliases for commands.\\n\\n Aliases are alternative names shortcuts for commands. They\\n can act as both a lambda (storing arguments for repeated use)\\n or as simply a shortcut to saying \\\"x y z\\\".\\n\\n When run, aliases will accept any additional arguments\\n and append them to the stored alias.\\n "
+msgstr ""
-#: redbot/cogs/alias/alias.py:130
+#: redbot/cogs/alias/alias.py:107
+msgid "Arguments must be specified with a number."
+msgstr "Argumenter må spesifiseres med et nummer."
+
+#: redbot/cogs/alias/alias.py:114
+msgid "Arguments must be sequential. Missing arguments: "
+msgstr ""
+
+#: redbot/cogs/alias/alias.py:164
msgid "No prefix found."
msgstr "Ingen prefiks funnet."
-#: redbot/cogs/alias/alias.py:179
+#: redbot/cogs/alias/alias.py:231
#, docstring
msgid "Manage command aliases."
msgstr "Administrer kommando aliaser."
-#: redbot/cogs/alias/alias.py:184
+#: redbot/cogs/alias/alias.py:236
#, docstring
msgid "Manage global aliases."
msgstr "Administrer globale aliaser."
-#: redbot/cogs/alias/alias.py:191
+#: redbot/cogs/alias/alias.py:243
#, docstring
msgid "Add an alias for a command."
msgstr "Legg til et alias for en kommando."
-#: redbot/cogs/alias/alias.py:196
+#: redbot/cogs/alias/alias.py:248
msgid "You attempted to create a new alias with the name {name} but that name is already a command on this bot."
msgstr "Du forsøkte å opprette et nytt alias med navnet {name} men navnet er allerede en kommando på denne boten."
-#: redbot/cogs/alias/alias.py:207
+#: redbot/cogs/alias/alias.py:259
msgid "You attempted to create a new alias with the name {name} but that alias already exists on this server."
msgstr "Du forsøkte å opprette et nytt alias med navnet {name} men aliaset finnes allerede på denne serveren."
-#: redbot/cogs/alias/alias.py:218
+#: redbot/cogs/alias/alias.py:270
msgid "You attempted to create a new alias with the name {name} but that name is an invalid alias name. Alias names may not contain spaces."
msgstr "Du forsøkte å opprette et nytt alias med navnet {name} men navnet er et ugyldig aliasnavn. Aliasnavn kan ikke inneholde mellomrom."
-#: redbot/cogs/alias/alias.py:234
+#: redbot/cogs/alias/alias.py:289
msgid "A new alias with the trigger `{name}` has been created."
msgstr "Et nytt alias med utløseren \"{name}\" har blitt opprettet."
-#: redbot/cogs/alias/alias.py:240
+#: redbot/cogs/alias/alias.py:295
#, docstring
msgid "Add a global alias for a command."
msgstr "Legg til et globalt alias for en kommando."
-#: redbot/cogs/alias/alias.py:245
+#: redbot/cogs/alias/alias.py:300
msgid "You attempted to create a new global alias with the name {name} but that name is already a command on this bot."
msgstr "Du forsøkte å opprette et nytt globalt alias med navnet {navn} men navnet er allerede en kommando på denne boten."
-#: redbot/cogs/alias/alias.py:256
+#: redbot/cogs/alias/alias.py:311
msgid "You attempted to create a new global alias with the name {name} but that alias already exists on this server."
msgstr "Du forsøkte å opprette et nytt alias med navnet {navn} men aliaset finnes allerede på denne serveren."
-#: redbot/cogs/alias/alias.py:267
+#: redbot/cogs/alias/alias.py:322
msgid "You attempted to create a new global alias with the name {name} but that name is an invalid alias name. Alias names may not contain spaces."
msgstr "Du forsøkte å opprette et nytt globalt alias med navnet {name} men navnet er et ugyldig aliasnavn. Aliasnavn kan ikke inneholde mellomrom."
-#: redbot/cogs/alias/alias.py:280
+#: redbot/cogs/alias/alias.py:338
msgid "A new global alias with the trigger `{name}` has been created."
msgstr "Et nytt globalt alias med utløseren '{name}' har blitt opprettet."
-#: redbot/cogs/alias/alias.py:288
+#: redbot/cogs/alias/alias.py:346
#, docstring
msgid "Try to execute help for the base command of the alias."
msgstr ""
-#: redbot/cogs/alias/alias.py:297
+#: redbot/cogs/alias/alias.py:355
msgid "{prefix}help {command}"
msgstr ""
-#: redbot/cogs/alias/alias.py:302
+#: redbot/cogs/alias/alias.py:360
msgid "No such alias exists."
msgstr "Ingen slike alias finnes."
-#: redbot/cogs/alias/alias.py:307
+#: redbot/cogs/alias/alias.py:365
#, docstring
msgid "Show what command the alias executes."
msgstr ""
-#: redbot/cogs/alias/alias.py:312
+#: redbot/cogs/alias/alias.py:370
msgid "The `{alias_name}` alias will execute the command `{command}`"
msgstr ""
-#: redbot/cogs/alias/alias.py:317
+#: redbot/cogs/alias/alias.py:375
msgid "There is no alias with the name `{name}`"
msgstr ""
-#: redbot/cogs/alias/alias.py:323
+#: redbot/cogs/alias/alias.py:381
#, docstring
msgid "Delete an existing alias on this server."
msgstr ""
-#: redbot/cogs/alias/alias.py:328 redbot/cogs/alias/alias.py:364
-#: redbot/cogs/alias/alias.py:375
+#: redbot/cogs/alias/alias.py:386 redbot/cogs/alias/alias.py:422
+#: redbot/cogs/alias/alias.py:433
msgid "There are no aliases on this server."
msgstr "Det er ingen aliaser på denne serveren."
-#: redbot/cogs/alias/alias.py:333 redbot/cogs/alias/alias.py:351
+#: redbot/cogs/alias/alias.py:391 redbot/cogs/alias/alias.py:409
msgid "Alias with the name `{name}` was successfully deleted."
msgstr ""
-#: redbot/cogs/alias/alias.py:336 redbot/cogs/alias/alias.py:354
+#: redbot/cogs/alias/alias.py:394 redbot/cogs/alias/alias.py:412
msgid "Alias with name `{name}` was not found."
msgstr ""
-#: redbot/cogs/alias/alias.py:341
+#: redbot/cogs/alias/alias.py:399
#, docstring
msgid "Delete an existing global alias."
msgstr ""
-#: redbot/cogs/alias/alias.py:346
+#: redbot/cogs/alias/alias.py:404
msgid "There are no aliases on this bot."
msgstr "Det er ingen aliaser på denne boten."
-#: redbot/cogs/alias/alias.py:359
+#: redbot/cogs/alias/alias.py:417
#, docstring
msgid "List the available aliases on this server."
msgstr ""
-#: redbot/cogs/alias/alias.py:360 redbot/cogs/alias/alias.py:371
+#: redbot/cogs/alias/alias.py:418 redbot/cogs/alias/alias.py:429
msgid "Aliases:"
msgstr "Aliaser:"
-#: redbot/cogs/alias/alias.py:370
+#: redbot/cogs/alias/alias.py:428
#, docstring
msgid "List the available global aliases on this bot."
msgstr ""
diff --git a/redbot/cogs/alias/locales/pl-PL.po b/redbot/cogs/alias/locales/pl-PL.po
index 587659aeb..ab5315419 100644
--- a/redbot/cogs/alias/locales/pl-PL.po
+++ b/redbot/cogs/alias/locales/pl-PL.po
@@ -1,14 +1,14 @@
msgid ""
msgstr ""
"Project-Id-Version: red-discordbot\n"
-"POT-Creation-Date: 2019-01-11 02:18+0000\n"
-"PO-Revision-Date: 2019-02-25 03:07\n"
-"Last-Translator: Kowlin \n"
+"POT-Creation-Date: 2019-07-05 22:33+0200\n"
+"PO-Revision-Date: 2019-07-06 16:13\n"
+"Last-Translator: Robert Jansen (Kowlin)\n"
"Language-Team: Polish\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"Generated-By: redgettext 2.2\n"
+"Generated-By: redgettext 3.0\n"
"Plural-Forms: nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && (n%100<12 || n%100>14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);\n"
"X-Generator: crowdin.com\n"
"X-Crowdin-Project: red-discordbot\n"
@@ -16,136 +16,138 @@ msgstr ""
"X-Crowdin-File: /cogs/alias/locales/messages.pot\n"
"Language: pl_PL\n"
-#: redbot/cogs/alias/alias.py:18
+#: redbot/cogs/alias/alias.py:35
#, docstring
-msgid "Create aliases for commands.\n\n"
-" Aliases are alternative names shortcuts for commands. They\n"
-" can act as both a lambda (storing arguments for repeated use)\n"
-" or as simply a shortcut to saying \"x y z\".\n\n"
-" When run, aliases will accept any additional arguments\n"
-" and append them to the stored alias.\n"
-" "
+msgid "Create aliases for commands.\\n\\n Aliases are alternative names shortcuts for commands. They\\n can act as both a lambda (storing arguments for repeated use)\\n or as simply a shortcut to saying \\\"x y z\\\".\\n\\n When run, aliases will accept any additional arguments\\n and append them to the stored alias.\\n "
msgstr ""
-#: redbot/cogs/alias/alias.py:130
+#: redbot/cogs/alias/alias.py:107
+msgid "Arguments must be specified with a number."
+msgstr ""
+
+#: redbot/cogs/alias/alias.py:114
+msgid "Arguments must be sequential. Missing arguments: "
+msgstr ""
+
+#: redbot/cogs/alias/alias.py:164
msgid "No prefix found."
msgstr "Nie znaleziono prefiksu."
-#: redbot/cogs/alias/alias.py:179
+#: redbot/cogs/alias/alias.py:231
#, docstring
msgid "Manage command aliases."
msgstr ""
-#: redbot/cogs/alias/alias.py:184
+#: redbot/cogs/alias/alias.py:236
#, docstring
msgid "Manage global aliases."
msgstr ""
-#: redbot/cogs/alias/alias.py:191
+#: redbot/cogs/alias/alias.py:243
#, docstring
msgid "Add an alias for a command."
msgstr ""
-#: redbot/cogs/alias/alias.py:196
+#: redbot/cogs/alias/alias.py:248
msgid "You attempted to create a new alias with the name {name} but that name is already a command on this bot."
msgstr ""
-#: redbot/cogs/alias/alias.py:207
+#: redbot/cogs/alias/alias.py:259
msgid "You attempted to create a new alias with the name {name} but that alias already exists on this server."
msgstr ""
-#: redbot/cogs/alias/alias.py:218
+#: redbot/cogs/alias/alias.py:270
msgid "You attempted to create a new alias with the name {name} but that name is an invalid alias name. Alias names may not contain spaces."
msgstr ""
-#: redbot/cogs/alias/alias.py:234
+#: redbot/cogs/alias/alias.py:289
msgid "A new alias with the trigger `{name}` has been created."
msgstr ""
-#: redbot/cogs/alias/alias.py:240
+#: redbot/cogs/alias/alias.py:295
#, docstring
msgid "Add a global alias for a command."
msgstr ""
-#: redbot/cogs/alias/alias.py:245
+#: redbot/cogs/alias/alias.py:300
msgid "You attempted to create a new global alias with the name {name} but that name is already a command on this bot."
msgstr ""
-#: redbot/cogs/alias/alias.py:256
+#: redbot/cogs/alias/alias.py:311
msgid "You attempted to create a new global alias with the name {name} but that alias already exists on this server."
msgstr ""
-#: redbot/cogs/alias/alias.py:267
+#: redbot/cogs/alias/alias.py:322
msgid "You attempted to create a new global alias with the name {name} but that name is an invalid alias name. Alias names may not contain spaces."
msgstr ""
-#: redbot/cogs/alias/alias.py:280
+#: redbot/cogs/alias/alias.py:338
msgid "A new global alias with the trigger `{name}` has been created."
msgstr ""
-#: redbot/cogs/alias/alias.py:288
+#: redbot/cogs/alias/alias.py:346
#, docstring
msgid "Try to execute help for the base command of the alias."
msgstr ""
-#: redbot/cogs/alias/alias.py:297
+#: redbot/cogs/alias/alias.py:355
msgid "{prefix}help {command}"
-msgstr ""
+msgstr "{prefix}help {command}"
-#: redbot/cogs/alias/alias.py:302
+#: redbot/cogs/alias/alias.py:360
msgid "No such alias exists."
msgstr "Taki alias nie istnieje."
-#: redbot/cogs/alias/alias.py:307
+#: redbot/cogs/alias/alias.py:365
#, docstring
msgid "Show what command the alias executes."
msgstr ""
-#: redbot/cogs/alias/alias.py:312
+#: redbot/cogs/alias/alias.py:370
msgid "The `{alias_name}` alias will execute the command `{command}`"
msgstr ""
-#: redbot/cogs/alias/alias.py:317
+#: redbot/cogs/alias/alias.py:375
msgid "There is no alias with the name `{name}`"
msgstr ""
-#: redbot/cogs/alias/alias.py:323
+#: redbot/cogs/alias/alias.py:381
#, docstring
msgid "Delete an existing alias on this server."
msgstr ""
-#: redbot/cogs/alias/alias.py:328 redbot/cogs/alias/alias.py:364
-#: redbot/cogs/alias/alias.py:375
+#: redbot/cogs/alias/alias.py:386 redbot/cogs/alias/alias.py:422
+#: redbot/cogs/alias/alias.py:433
msgid "There are no aliases on this server."
msgstr "Nie ma aliasów na tym serwerze."
-#: redbot/cogs/alias/alias.py:333 redbot/cogs/alias/alias.py:351
+#: redbot/cogs/alias/alias.py:391 redbot/cogs/alias/alias.py:409
msgid "Alias with the name `{name}` was successfully deleted."
msgstr ""
-#: redbot/cogs/alias/alias.py:336 redbot/cogs/alias/alias.py:354
+#: redbot/cogs/alias/alias.py:394 redbot/cogs/alias/alias.py:412
msgid "Alias with name `{name}` was not found."
msgstr ""
-#: redbot/cogs/alias/alias.py:341
+#: redbot/cogs/alias/alias.py:399
#, docstring
msgid "Delete an existing global alias."
msgstr ""
-#: redbot/cogs/alias/alias.py:346
+#: redbot/cogs/alias/alias.py:404
msgid "There are no aliases on this bot."
msgstr "Nie ma żadnych aliasów dla tego bota."
-#: redbot/cogs/alias/alias.py:359
+#: redbot/cogs/alias/alias.py:417
#, docstring
msgid "List the available aliases on this server."
msgstr ""
-#: redbot/cogs/alias/alias.py:360 redbot/cogs/alias/alias.py:371
+#: redbot/cogs/alias/alias.py:418 redbot/cogs/alias/alias.py:429
msgid "Aliases:"
msgstr "Aliasy:"
-#: redbot/cogs/alias/alias.py:370
+#: redbot/cogs/alias/alias.py:428
#, docstring
msgid "List the available global aliases on this bot."
msgstr ""
diff --git a/redbot/cogs/alias/locales/pt-BR.po b/redbot/cogs/alias/locales/pt-BR.po
index 4f881f4b3..d6845397a 100644
--- a/redbot/cogs/alias/locales/pt-BR.po
+++ b/redbot/cogs/alias/locales/pt-BR.po
@@ -1,14 +1,14 @@
msgid ""
msgstr ""
"Project-Id-Version: red-discordbot\n"
-"POT-Creation-Date: 2019-01-11 02:18+0000\n"
-"PO-Revision-Date: 2019-02-25 03:08\n"
-"Last-Translator: Kowlin \n"
+"POT-Creation-Date: 2019-07-05 22:33+0200\n"
+"PO-Revision-Date: 2019-07-06 16:14\n"
+"Last-Translator: Robert Jansen (Kowlin)\n"
"Language-Team: Portuguese, Brazilian\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"Generated-By: redgettext 2.2\n"
+"Generated-By: redgettext 3.0\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: crowdin.com\n"
"X-Crowdin-Project: red-discordbot\n"
@@ -16,136 +16,138 @@ msgstr ""
"X-Crowdin-File: /cogs/alias/locales/messages.pot\n"
"Language: pt_BR\n"
-#: redbot/cogs/alias/alias.py:18
+#: redbot/cogs/alias/alias.py:35
#, docstring
-msgid "Create aliases for commands.\n\n"
-" Aliases are alternative names shortcuts for commands. They\n"
-" can act as both a lambda (storing arguments for repeated use)\n"
-" or as simply a shortcut to saying \"x y z\".\n\n"
-" When run, aliases will accept any additional arguments\n"
-" and append them to the stored alias.\n"
-" "
+msgid "Create aliases for commands.\\n\\n Aliases are alternative names shortcuts for commands. They\\n can act as both a lambda (storing arguments for repeated use)\\n or as simply a shortcut to saying \\\"x y z\\\".\\n\\n When run, aliases will accept any additional arguments\\n and append them to the stored alias.\\n "
msgstr ""
-#: redbot/cogs/alias/alias.py:130
+#: redbot/cogs/alias/alias.py:107
+msgid "Arguments must be specified with a number."
+msgstr ""
+
+#: redbot/cogs/alias/alias.py:114
+msgid "Arguments must be sequential. Missing arguments: "
+msgstr ""
+
+#: redbot/cogs/alias/alias.py:164
msgid "No prefix found."
msgstr "Nenhum prefixo encontrado."
-#: redbot/cogs/alias/alias.py:179
+#: redbot/cogs/alias/alias.py:231
#, docstring
msgid "Manage command aliases."
msgstr ""
-#: redbot/cogs/alias/alias.py:184
+#: redbot/cogs/alias/alias.py:236
#, docstring
msgid "Manage global aliases."
msgstr ""
-#: redbot/cogs/alias/alias.py:191
+#: redbot/cogs/alias/alias.py:243
#, docstring
msgid "Add an alias for a command."
msgstr ""
-#: redbot/cogs/alias/alias.py:196
+#: redbot/cogs/alias/alias.py:248
msgid "You attempted to create a new alias with the name {name} but that name is already a command on this bot."
msgstr ""
-#: redbot/cogs/alias/alias.py:207
+#: redbot/cogs/alias/alias.py:259
msgid "You attempted to create a new alias with the name {name} but that alias already exists on this server."
msgstr ""
-#: redbot/cogs/alias/alias.py:218
+#: redbot/cogs/alias/alias.py:270
msgid "You attempted to create a new alias with the name {name} but that name is an invalid alias name. Alias names may not contain spaces."
msgstr ""
-#: redbot/cogs/alias/alias.py:234
+#: redbot/cogs/alias/alias.py:289
msgid "A new alias with the trigger `{name}` has been created."
msgstr ""
-#: redbot/cogs/alias/alias.py:240
+#: redbot/cogs/alias/alias.py:295
#, docstring
msgid "Add a global alias for a command."
msgstr ""
-#: redbot/cogs/alias/alias.py:245
+#: redbot/cogs/alias/alias.py:300
msgid "You attempted to create a new global alias with the name {name} but that name is already a command on this bot."
msgstr ""
-#: redbot/cogs/alias/alias.py:256
+#: redbot/cogs/alias/alias.py:311
msgid "You attempted to create a new global alias with the name {name} but that alias already exists on this server."
msgstr ""
-#: redbot/cogs/alias/alias.py:267
+#: redbot/cogs/alias/alias.py:322
msgid "You attempted to create a new global alias with the name {name} but that name is an invalid alias name. Alias names may not contain spaces."
msgstr ""
-#: redbot/cogs/alias/alias.py:280
+#: redbot/cogs/alias/alias.py:338
msgid "A new global alias with the trigger `{name}` has been created."
msgstr ""
-#: redbot/cogs/alias/alias.py:288
+#: redbot/cogs/alias/alias.py:346
#, docstring
msgid "Try to execute help for the base command of the alias."
msgstr ""
-#: redbot/cogs/alias/alias.py:297
+#: redbot/cogs/alias/alias.py:355
msgid "{prefix}help {command}"
msgstr ""
-#: redbot/cogs/alias/alias.py:302
+#: redbot/cogs/alias/alias.py:360
msgid "No such alias exists."
msgstr "Alias inexistente."
-#: redbot/cogs/alias/alias.py:307
+#: redbot/cogs/alias/alias.py:365
#, docstring
msgid "Show what command the alias executes."
msgstr ""
-#: redbot/cogs/alias/alias.py:312
+#: redbot/cogs/alias/alias.py:370
msgid "The `{alias_name}` alias will execute the command `{command}`"
msgstr ""
-#: redbot/cogs/alias/alias.py:317
+#: redbot/cogs/alias/alias.py:375
msgid "There is no alias with the name `{name}`"
msgstr ""
-#: redbot/cogs/alias/alias.py:323
+#: redbot/cogs/alias/alias.py:381
#, docstring
msgid "Delete an existing alias on this server."
msgstr ""
-#: redbot/cogs/alias/alias.py:328 redbot/cogs/alias/alias.py:364
-#: redbot/cogs/alias/alias.py:375
+#: redbot/cogs/alias/alias.py:386 redbot/cogs/alias/alias.py:422
+#: redbot/cogs/alias/alias.py:433
msgid "There are no aliases on this server."
msgstr "Não há nenhum alias neste servidor."
-#: redbot/cogs/alias/alias.py:333 redbot/cogs/alias/alias.py:351
+#: redbot/cogs/alias/alias.py:391 redbot/cogs/alias/alias.py:409
msgid "Alias with the name `{name}` was successfully deleted."
msgstr ""
-#: redbot/cogs/alias/alias.py:336 redbot/cogs/alias/alias.py:354
+#: redbot/cogs/alias/alias.py:394 redbot/cogs/alias/alias.py:412
msgid "Alias with name `{name}` was not found."
msgstr ""
-#: redbot/cogs/alias/alias.py:341
+#: redbot/cogs/alias/alias.py:399
#, docstring
msgid "Delete an existing global alias."
msgstr ""
-#: redbot/cogs/alias/alias.py:346
+#: redbot/cogs/alias/alias.py:404
msgid "There are no aliases on this bot."
msgstr "Não há nenhum alias nesse bot."
-#: redbot/cogs/alias/alias.py:359
+#: redbot/cogs/alias/alias.py:417
#, docstring
msgid "List the available aliases on this server."
msgstr ""
-#: redbot/cogs/alias/alias.py:360 redbot/cogs/alias/alias.py:371
+#: redbot/cogs/alias/alias.py:418 redbot/cogs/alias/alias.py:429
msgid "Aliases:"
msgstr "Alias:"
-#: redbot/cogs/alias/alias.py:370
+#: redbot/cogs/alias/alias.py:428
#, docstring
msgid "List the available global aliases on this bot."
msgstr ""
diff --git a/redbot/cogs/alias/locales/pt-PT.po b/redbot/cogs/alias/locales/pt-PT.po
index adae8999d..6743a13f8 100644
--- a/redbot/cogs/alias/locales/pt-PT.po
+++ b/redbot/cogs/alias/locales/pt-PT.po
@@ -1,14 +1,14 @@
msgid ""
msgstr ""
"Project-Id-Version: red-discordbot\n"
-"POT-Creation-Date: 2019-01-11 02:18+0000\n"
-"PO-Revision-Date: 2019-02-25 03:07\n"
-"Last-Translator: Kowlin \n"
+"POT-Creation-Date: 2019-07-05 22:33+0200\n"
+"PO-Revision-Date: 2019-07-06 16:13\n"
+"Last-Translator: Robert Jansen (Kowlin)\n"
"Language-Team: Portuguese\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"Generated-By: redgettext 2.2\n"
+"Generated-By: redgettext 3.0\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: crowdin.com\n"
"X-Crowdin-Project: red-discordbot\n"
@@ -16,136 +16,138 @@ msgstr ""
"X-Crowdin-File: /cogs/alias/locales/messages.pot\n"
"Language: pt_PT\n"
-#: redbot/cogs/alias/alias.py:18
+#: redbot/cogs/alias/alias.py:35
#, docstring
-msgid "Create aliases for commands.\n\n"
-" Aliases are alternative names shortcuts for commands. They\n"
-" can act as both a lambda (storing arguments for repeated use)\n"
-" or as simply a shortcut to saying \"x y z\".\n\n"
-" When run, aliases will accept any additional arguments\n"
-" and append them to the stored alias.\n"
-" "
+msgid "Create aliases for commands.\\n\\n Aliases are alternative names shortcuts for commands. They\\n can act as both a lambda (storing arguments for repeated use)\\n or as simply a shortcut to saying \\\"x y z\\\".\\n\\n When run, aliases will accept any additional arguments\\n and append them to the stored alias.\\n "
msgstr ""
-#: redbot/cogs/alias/alias.py:130
+#: redbot/cogs/alias/alias.py:107
+msgid "Arguments must be specified with a number."
+msgstr ""
+
+#: redbot/cogs/alias/alias.py:114
+msgid "Arguments must be sequential. Missing arguments: "
+msgstr ""
+
+#: redbot/cogs/alias/alias.py:164
msgid "No prefix found."
msgstr ""
-#: redbot/cogs/alias/alias.py:179
+#: redbot/cogs/alias/alias.py:231
#, docstring
msgid "Manage command aliases."
msgstr ""
-#: redbot/cogs/alias/alias.py:184
+#: redbot/cogs/alias/alias.py:236
#, docstring
msgid "Manage global aliases."
msgstr ""
-#: redbot/cogs/alias/alias.py:191
+#: redbot/cogs/alias/alias.py:243
#, docstring
msgid "Add an alias for a command."
msgstr ""
-#: redbot/cogs/alias/alias.py:196
+#: redbot/cogs/alias/alias.py:248
msgid "You attempted to create a new alias with the name {name} but that name is already a command on this bot."
msgstr ""
-#: redbot/cogs/alias/alias.py:207
+#: redbot/cogs/alias/alias.py:259
msgid "You attempted to create a new alias with the name {name} but that alias already exists on this server."
msgstr ""
-#: redbot/cogs/alias/alias.py:218
+#: redbot/cogs/alias/alias.py:270
msgid "You attempted to create a new alias with the name {name} but that name is an invalid alias name. Alias names may not contain spaces."
msgstr ""
-#: redbot/cogs/alias/alias.py:234
+#: redbot/cogs/alias/alias.py:289
msgid "A new alias with the trigger `{name}` has been created."
msgstr ""
-#: redbot/cogs/alias/alias.py:240
+#: redbot/cogs/alias/alias.py:295
#, docstring
msgid "Add a global alias for a command."
msgstr ""
-#: redbot/cogs/alias/alias.py:245
+#: redbot/cogs/alias/alias.py:300
msgid "You attempted to create a new global alias with the name {name} but that name is already a command on this bot."
msgstr ""
-#: redbot/cogs/alias/alias.py:256
+#: redbot/cogs/alias/alias.py:311
msgid "You attempted to create a new global alias with the name {name} but that alias already exists on this server."
msgstr ""
-#: redbot/cogs/alias/alias.py:267
+#: redbot/cogs/alias/alias.py:322
msgid "You attempted to create a new global alias with the name {name} but that name is an invalid alias name. Alias names may not contain spaces."
msgstr ""
-#: redbot/cogs/alias/alias.py:280
+#: redbot/cogs/alias/alias.py:338
msgid "A new global alias with the trigger `{name}` has been created."
msgstr ""
-#: redbot/cogs/alias/alias.py:288
+#: redbot/cogs/alias/alias.py:346
#, docstring
msgid "Try to execute help for the base command of the alias."
msgstr ""
-#: redbot/cogs/alias/alias.py:297
+#: redbot/cogs/alias/alias.py:355
msgid "{prefix}help {command}"
msgstr ""
-#: redbot/cogs/alias/alias.py:302
+#: redbot/cogs/alias/alias.py:360
msgid "No such alias exists."
msgstr ""
-#: redbot/cogs/alias/alias.py:307
+#: redbot/cogs/alias/alias.py:365
#, docstring
msgid "Show what command the alias executes."
msgstr ""
-#: redbot/cogs/alias/alias.py:312
+#: redbot/cogs/alias/alias.py:370
msgid "The `{alias_name}` alias will execute the command `{command}`"
msgstr ""
-#: redbot/cogs/alias/alias.py:317
+#: redbot/cogs/alias/alias.py:375
msgid "There is no alias with the name `{name}`"
msgstr ""
-#: redbot/cogs/alias/alias.py:323
+#: redbot/cogs/alias/alias.py:381
#, docstring
msgid "Delete an existing alias on this server."
msgstr ""
-#: redbot/cogs/alias/alias.py:328 redbot/cogs/alias/alias.py:364
-#: redbot/cogs/alias/alias.py:375
+#: redbot/cogs/alias/alias.py:386 redbot/cogs/alias/alias.py:422
+#: redbot/cogs/alias/alias.py:433
msgid "There are no aliases on this server."
msgstr ""
-#: redbot/cogs/alias/alias.py:333 redbot/cogs/alias/alias.py:351
+#: redbot/cogs/alias/alias.py:391 redbot/cogs/alias/alias.py:409
msgid "Alias with the name `{name}` was successfully deleted."
msgstr ""
-#: redbot/cogs/alias/alias.py:336 redbot/cogs/alias/alias.py:354
+#: redbot/cogs/alias/alias.py:394 redbot/cogs/alias/alias.py:412
msgid "Alias with name `{name}` was not found."
msgstr ""
-#: redbot/cogs/alias/alias.py:341
+#: redbot/cogs/alias/alias.py:399
#, docstring
msgid "Delete an existing global alias."
msgstr ""
-#: redbot/cogs/alias/alias.py:346
+#: redbot/cogs/alias/alias.py:404
msgid "There are no aliases on this bot."
msgstr ""
-#: redbot/cogs/alias/alias.py:359
+#: redbot/cogs/alias/alias.py:417
#, docstring
msgid "List the available aliases on this server."
msgstr ""
-#: redbot/cogs/alias/alias.py:360 redbot/cogs/alias/alias.py:371
+#: redbot/cogs/alias/alias.py:418 redbot/cogs/alias/alias.py:429
msgid "Aliases:"
msgstr ""
-#: redbot/cogs/alias/alias.py:370
+#: redbot/cogs/alias/alias.py:428
#, docstring
msgid "List the available global aliases on this bot."
msgstr ""
diff --git a/redbot/cogs/alias/locales/ro-RO.po b/redbot/cogs/alias/locales/ro-RO.po
new file mode 100644
index 000000000..0e8034b0e
--- /dev/null
+++ b/redbot/cogs/alias/locales/ro-RO.po
@@ -0,0 +1,154 @@
+msgid ""
+msgstr ""
+"Project-Id-Version: red-discordbot\n"
+"POT-Creation-Date: 2019-07-05 22:33+0200\n"
+"PO-Revision-Date: 2019-07-14 02:09\n"
+"Last-Translator: Robert Jansen (Kowlin)\n"
+"Language-Team: Romanian\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: redgettext 3.0\n"
+"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : (n==0 || (n%100>0 && n%100<20)) ? 1 : 2);\n"
+"X-Generator: crowdin.com\n"
+"X-Crowdin-Project: red-discordbot\n"
+"X-Crowdin-Language: ro\n"
+"X-Crowdin-File: /cogs/alias/locales/messages.pot\n"
+"Language: ro_RO\n"
+
+#: redbot/cogs/alias/alias.py:35
+#, docstring
+msgid "Create aliases for commands.\\n\\n Aliases are alternative names shortcuts for commands. They\\n can act as both a lambda (storing arguments for repeated use)\\n or as simply a shortcut to saying \\\"x y z\\\".\\n\\n When run, aliases will accept any additional arguments\\n and append them to the stored alias.\\n "
+msgstr ""
+
+#: redbot/cogs/alias/alias.py:107
+msgid "Arguments must be specified with a number."
+msgstr ""
+
+#: redbot/cogs/alias/alias.py:114
+msgid "Arguments must be sequential. Missing arguments: "
+msgstr ""
+
+#: redbot/cogs/alias/alias.py:164
+msgid "No prefix found."
+msgstr ""
+
+#: redbot/cogs/alias/alias.py:231
+#, docstring
+msgid "Manage command aliases."
+msgstr ""
+
+#: redbot/cogs/alias/alias.py:236
+#, docstring
+msgid "Manage global aliases."
+msgstr ""
+
+#: redbot/cogs/alias/alias.py:243
+#, docstring
+msgid "Add an alias for a command."
+msgstr ""
+
+#: redbot/cogs/alias/alias.py:248
+msgid "You attempted to create a new alias with the name {name} but that name is already a command on this bot."
+msgstr ""
+
+#: redbot/cogs/alias/alias.py:259
+msgid "You attempted to create a new alias with the name {name} but that alias already exists on this server."
+msgstr ""
+
+#: redbot/cogs/alias/alias.py:270
+msgid "You attempted to create a new alias with the name {name} but that name is an invalid alias name. Alias names may not contain spaces."
+msgstr ""
+
+#: redbot/cogs/alias/alias.py:289
+msgid "A new alias with the trigger `{name}` has been created."
+msgstr ""
+
+#: redbot/cogs/alias/alias.py:295
+#, docstring
+msgid "Add a global alias for a command."
+msgstr ""
+
+#: redbot/cogs/alias/alias.py:300
+msgid "You attempted to create a new global alias with the name {name} but that name is already a command on this bot."
+msgstr ""
+
+#: redbot/cogs/alias/alias.py:311
+msgid "You attempted to create a new global alias with the name {name} but that alias already exists on this server."
+msgstr ""
+
+#: redbot/cogs/alias/alias.py:322
+msgid "You attempted to create a new global alias with the name {name} but that name is an invalid alias name. Alias names may not contain spaces."
+msgstr ""
+
+#: redbot/cogs/alias/alias.py:338
+msgid "A new global alias with the trigger `{name}` has been created."
+msgstr ""
+
+#: redbot/cogs/alias/alias.py:346
+#, docstring
+msgid "Try to execute help for the base command of the alias."
+msgstr ""
+
+#: redbot/cogs/alias/alias.py:355
+msgid "{prefix}help {command}"
+msgstr ""
+
+#: redbot/cogs/alias/alias.py:360
+msgid "No such alias exists."
+msgstr ""
+
+#: redbot/cogs/alias/alias.py:365
+#, docstring
+msgid "Show what command the alias executes."
+msgstr ""
+
+#: redbot/cogs/alias/alias.py:370
+msgid "The `{alias_name}` alias will execute the command `{command}`"
+msgstr ""
+
+#: redbot/cogs/alias/alias.py:375
+msgid "There is no alias with the name `{name}`"
+msgstr ""
+
+#: redbot/cogs/alias/alias.py:381
+#, docstring
+msgid "Delete an existing alias on this server."
+msgstr ""
+
+#: redbot/cogs/alias/alias.py:386 redbot/cogs/alias/alias.py:422
+#: redbot/cogs/alias/alias.py:433
+msgid "There are no aliases on this server."
+msgstr ""
+
+#: redbot/cogs/alias/alias.py:391 redbot/cogs/alias/alias.py:409
+msgid "Alias with the name `{name}` was successfully deleted."
+msgstr ""
+
+#: redbot/cogs/alias/alias.py:394 redbot/cogs/alias/alias.py:412
+msgid "Alias with name `{name}` was not found."
+msgstr ""
+
+#: redbot/cogs/alias/alias.py:399
+#, docstring
+msgid "Delete an existing global alias."
+msgstr ""
+
+#: redbot/cogs/alias/alias.py:404
+msgid "There are no aliases on this bot."
+msgstr ""
+
+#: redbot/cogs/alias/alias.py:417
+#, docstring
+msgid "List the available aliases on this server."
+msgstr ""
+
+#: redbot/cogs/alias/alias.py:418 redbot/cogs/alias/alias.py:429
+msgid "Aliases:"
+msgstr ""
+
+#: redbot/cogs/alias/alias.py:428
+#, docstring
+msgid "List the available global aliases on this bot."
+msgstr ""
+
diff --git a/redbot/cogs/alias/locales/ru-RU.po b/redbot/cogs/alias/locales/ru-RU.po
index 2be47b159..835bcd513 100644
--- a/redbot/cogs/alias/locales/ru-RU.po
+++ b/redbot/cogs/alias/locales/ru-RU.po
@@ -1,14 +1,14 @@
msgid ""
msgstr ""
"Project-Id-Version: red-discordbot\n"
-"POT-Creation-Date: 2019-01-11 02:18+0000\n"
-"PO-Revision-Date: 2019-02-25 05:52\n"
-"Last-Translator: Kowlin \n"
+"POT-Creation-Date: 2019-07-05 22:33+0200\n"
+"PO-Revision-Date: 2019-07-06 16:13\n"
+"Last-Translator: Robert Jansen (Kowlin)\n"
"Language-Team: Russian\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"Generated-By: redgettext 2.2\n"
+"Generated-By: redgettext 3.0\n"
"Plural-Forms: nplurals=4; plural=((n%10==1 && n%100!=11) ? 0 : ((n%10 >= 2 && n%10 <=4 && (n%100 < 12 || n%100 > 14)) ? 1 : ((n%10 == 0 || (n%10 >= 5 && n%10 <=9)) || (n%100 >= 11 && n%100 <= 14)) ? 2 : 3));\n"
"X-Generator: crowdin.com\n"
"X-Crowdin-Project: red-discordbot\n"
@@ -16,142 +16,138 @@ msgstr ""
"X-Crowdin-File: /cogs/alias/locales/messages.pot\n"
"Language: ru_RU\n"
-#: redbot/cogs/alias/alias.py:18
+#: redbot/cogs/alias/alias.py:35
#, docstring
-msgid "Create aliases for commands.\n\n"
-" Aliases are alternative names shortcuts for commands. They\n"
-" can act as both a lambda (storing arguments for repeated use)\n"
-" or as simply a shortcut to saying \"x y z\".\n\n"
-" When run, aliases will accept any additional arguments\n"
-" and append them to the stored alias.\n"
-" "
-msgstr "Создать псевдонимы для команд.\n\n"
-" Псевдонимы - это альтернативные сочетания имен для команд.\n"
-" Они могут действовать как лямбда (хранение аргументов для\n"
-" многократного использования) или просто как ярлык «а б в».\n\n"
-" При запуске псевдонимы принимают любые дополнительные\n"
-" аргументы и добавляют их к сохраненному псевдониму.\n"
-" "
+msgid "Create aliases for commands.\\n\\n Aliases are alternative names shortcuts for commands. They\\n can act as both a lambda (storing arguments for repeated use)\\n or as simply a shortcut to saying \\\"x y z\\\".\\n\\n When run, aliases will accept any additional arguments\\n and append them to the stored alias.\\n "
+msgstr ""
-#: redbot/cogs/alias/alias.py:130
+#: redbot/cogs/alias/alias.py:107
+msgid "Arguments must be specified with a number."
+msgstr "Аргументы должны быть указаны с числом."
+
+#: redbot/cogs/alias/alias.py:114
+msgid "Arguments must be sequential. Missing arguments: "
+msgstr "Аргументы должны быть последовательными. Отсутствующие аргументы: "
+
+#: redbot/cogs/alias/alias.py:164
msgid "No prefix found."
msgstr "Префикс не найден."
-#: redbot/cogs/alias/alias.py:179
+#: redbot/cogs/alias/alias.py:231
#, docstring
msgid "Manage command aliases."
msgstr "Управление псевдонимами команд."
-#: redbot/cogs/alias/alias.py:184
+#: redbot/cogs/alias/alias.py:236
#, docstring
msgid "Manage global aliases."
msgstr "Управление глобальными псевдонимами."
-#: redbot/cogs/alias/alias.py:191
+#: redbot/cogs/alias/alias.py:243
#, docstring
msgid "Add an alias for a command."
msgstr "Добавить псевдоним для команды."
-#: redbot/cogs/alias/alias.py:196
+#: redbot/cogs/alias/alias.py:248
msgid "You attempted to create a new alias with the name {name} but that name is already a command on this bot."
-msgstr "Вы попытались создать новый псевдоним с именем {name}, но это имя уже является командой для этого бота."
+msgstr "Вы попытались создать новый псевдоним {name}, но это имя уже является командой для этого бота."
-#: redbot/cogs/alias/alias.py:207
+#: redbot/cogs/alias/alias.py:259
msgid "You attempted to create a new alias with the name {name} but that alias already exists on this server."
-msgstr "Вы попытались создать новый псевдоним с именем {name}, но этот псевдоним уже существует на этом сервере."
+msgstr "Вы пытались создать новый псевдоним {name}, но этот псевдоним уже существует на этом сервере."
-#: redbot/cogs/alias/alias.py:218
+#: redbot/cogs/alias/alias.py:270
msgid "You attempted to create a new alias with the name {name} but that name is an invalid alias name. Alias names may not contain spaces."
-msgstr "Вы попытались создать новый псевдоним с именем {name}, но это имя является недопустимым псевдонимом. Имена псевдонимов могут не содержать пробелов."
+msgstr "Вы попытались создать новый псевдоним {name}, но это имя является недопустимым псевдонимом. Имена псевдонимов не могут содержать пробелов."
-#: redbot/cogs/alias/alias.py:234
+#: redbot/cogs/alias/alias.py:289
msgid "A new alias with the trigger `{name}` has been created."
msgstr "Новый псевдоним с триггером `{name}` был создан."
-#: redbot/cogs/alias/alias.py:240
+#: redbot/cogs/alias/alias.py:295
#, docstring
msgid "Add a global alias for a command."
msgstr "Добавить глобальный псевдоним для команды."
-#: redbot/cogs/alias/alias.py:245
+#: redbot/cogs/alias/alias.py:300
msgid "You attempted to create a new global alias with the name {name} but that name is already a command on this bot."
-msgstr "Вы попытались создать новый глобальный псевдоним с именем {name}, но это имя уже является командой для этого бота."
+msgstr "Вы попытались создать новый глобальный псевдоним {name}, но это имя уже является командой для этого бота."
-#: redbot/cogs/alias/alias.py:256
+#: redbot/cogs/alias/alias.py:311
msgid "You attempted to create a new global alias with the name {name} but that alias already exists on this server."
-msgstr "Вы попытались создать новый глобальный псевдоним с именем {name}, но этот псевдоним уже существует на этом сервере."
+msgstr "Вы попытались создать новый глобальный псевдоним {name}, но этот псевдоним уже существует на этом сервере."
-#: redbot/cogs/alias/alias.py:267
+#: redbot/cogs/alias/alias.py:322
msgid "You attempted to create a new global alias with the name {name} but that name is an invalid alias name. Alias names may not contain spaces."
-msgstr "Вы попытались создать новый глобальный псевдоним с именем {name}, но это имя является недопустимым псевдонимом. Имена псевдонимов могут не содержать пробелов."
+msgstr "Вы попытались создать новый глобальный псевдоним {name}, но это имя является недопустимым псевдонимом. Имена псевдонимов не могут содержать пробелов."
-#: redbot/cogs/alias/alias.py:280
+#: redbot/cogs/alias/alias.py:338
msgid "A new global alias with the trigger `{name}` has been created."
msgstr "Новый глобальный псевдоним с триггером `{name}` был создан."
-#: redbot/cogs/alias/alias.py:288
+#: redbot/cogs/alias/alias.py:346
#, docstring
msgid "Try to execute help for the base command of the alias."
-msgstr "Попробуйте выполнить справку для базовой команды псевдонима."
+msgstr "Попробуйте вызвать справку для базовой команды псевдонима."
-#: redbot/cogs/alias/alias.py:297
+#: redbot/cogs/alias/alias.py:355
msgid "{prefix}help {command}"
msgstr "{prefix}help {command}"
-#: redbot/cogs/alias/alias.py:302
+#: redbot/cogs/alias/alias.py:360
msgid "No such alias exists."
-msgstr "Псевдоним не найден."
+msgstr "Псевдоним не существует."
-#: redbot/cogs/alias/alias.py:307
+#: redbot/cogs/alias/alias.py:365
#, docstring
msgid "Show what command the alias executes."
msgstr "Показать, какую команду выполняет псевдоним."
-#: redbot/cogs/alias/alias.py:312
+#: redbot/cogs/alias/alias.py:370
msgid "The `{alias_name}` alias will execute the command `{command}`"
msgstr "Псевдоним `{alias_name}` будет выполнять команду `{command}`"
-#: redbot/cogs/alias/alias.py:317
+#: redbot/cogs/alias/alias.py:375
msgid "There is no alias with the name `{name}`"
msgstr "Нет псевдонима с именем `{name}`"
-#: redbot/cogs/alias/alias.py:323
+#: redbot/cogs/alias/alias.py:381
#, docstring
msgid "Delete an existing alias on this server."
msgstr "Удалить существующий псевдоним на этом сервере."
-#: redbot/cogs/alias/alias.py:328 redbot/cogs/alias/alias.py:364
-#: redbot/cogs/alias/alias.py:375
+#: redbot/cogs/alias/alias.py:386 redbot/cogs/alias/alias.py:422
+#: redbot/cogs/alias/alias.py:433
msgid "There are no aliases on this server."
msgstr "На этом сервере нет псевдонимов."
-#: redbot/cogs/alias/alias.py:333 redbot/cogs/alias/alias.py:351
+#: redbot/cogs/alias/alias.py:391 redbot/cogs/alias/alias.py:409
msgid "Alias with the name `{name}` was successfully deleted."
msgstr "Псевдоним с именем `{name}` был успешно удален."
-#: redbot/cogs/alias/alias.py:336 redbot/cogs/alias/alias.py:354
+#: redbot/cogs/alias/alias.py:394 redbot/cogs/alias/alias.py:412
msgid "Alias with name `{name}` was not found."
msgstr "Псевдоним с именем `{name}` не найден."
-#: redbot/cogs/alias/alias.py:341
+#: redbot/cogs/alias/alias.py:399
#, docstring
msgid "Delete an existing global alias."
msgstr "Удалить существующий глобальный псевдоним."
-#: redbot/cogs/alias/alias.py:346
+#: redbot/cogs/alias/alias.py:404
msgid "There are no aliases on this bot."
msgstr "У этого бота нет псевдонимов."
-#: redbot/cogs/alias/alias.py:359
+#: redbot/cogs/alias/alias.py:417
#, docstring
msgid "List the available aliases on this server."
msgstr "Список доступных псевдонимов на этом сервере."
-#: redbot/cogs/alias/alias.py:360 redbot/cogs/alias/alias.py:371
+#: redbot/cogs/alias/alias.py:418 redbot/cogs/alias/alias.py:429
msgid "Aliases:"
msgstr "Псевдонимы:"
-#: redbot/cogs/alias/alias.py:370
+#: redbot/cogs/alias/alias.py:428
#, docstring
msgid "List the available global aliases on this bot."
msgstr "Список доступных глобальных псевдонимов для этого бота."
diff --git a/redbot/cogs/alias/locales/sk-SK.po b/redbot/cogs/alias/locales/sk-SK.po
index f5c14f9c4..d2445185e 100644
--- a/redbot/cogs/alias/locales/sk-SK.po
+++ b/redbot/cogs/alias/locales/sk-SK.po
@@ -1,14 +1,14 @@
msgid ""
msgstr ""
"Project-Id-Version: red-discordbot\n"
-"POT-Creation-Date: 2019-01-11 02:18+0000\n"
-"PO-Revision-Date: 2019-02-25 03:07\n"
-"Last-Translator: Kowlin \n"
+"POT-Creation-Date: 2019-07-05 22:33+0200\n"
+"PO-Revision-Date: 2019-07-06 16:13\n"
+"Last-Translator: Robert Jansen (Kowlin)\n"
"Language-Team: Slovak\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"Generated-By: redgettext 2.2\n"
+"Generated-By: redgettext 3.0\n"
"Plural-Forms: nplurals=4; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 3;\n"
"X-Generator: crowdin.com\n"
"X-Crowdin-Project: red-discordbot\n"
@@ -16,136 +16,138 @@ msgstr ""
"X-Crowdin-File: /cogs/alias/locales/messages.pot\n"
"Language: sk_SK\n"
-#: redbot/cogs/alias/alias.py:18
+#: redbot/cogs/alias/alias.py:35
#, docstring
-msgid "Create aliases for commands.\n\n"
-" Aliases are alternative names shortcuts for commands. They\n"
-" can act as both a lambda (storing arguments for repeated use)\n"
-" or as simply a shortcut to saying \"x y z\".\n\n"
-" When run, aliases will accept any additional arguments\n"
-" and append them to the stored alias.\n"
-" "
+msgid "Create aliases for commands.\\n\\n Aliases are alternative names shortcuts for commands. They\\n can act as both a lambda (storing arguments for repeated use)\\n or as simply a shortcut to saying \\\"x y z\\\".\\n\\n When run, aliases will accept any additional arguments\\n and append them to the stored alias.\\n "
msgstr ""
-#: redbot/cogs/alias/alias.py:130
+#: redbot/cogs/alias/alias.py:107
+msgid "Arguments must be specified with a number."
+msgstr ""
+
+#: redbot/cogs/alias/alias.py:114
+msgid "Arguments must be sequential. Missing arguments: "
+msgstr ""
+
+#: redbot/cogs/alias/alias.py:164
msgid "No prefix found."
msgstr ""
-#: redbot/cogs/alias/alias.py:179
+#: redbot/cogs/alias/alias.py:231
#, docstring
msgid "Manage command aliases."
msgstr ""
-#: redbot/cogs/alias/alias.py:184
+#: redbot/cogs/alias/alias.py:236
#, docstring
msgid "Manage global aliases."
msgstr ""
-#: redbot/cogs/alias/alias.py:191
+#: redbot/cogs/alias/alias.py:243
#, docstring
msgid "Add an alias for a command."
msgstr ""
-#: redbot/cogs/alias/alias.py:196
+#: redbot/cogs/alias/alias.py:248
msgid "You attempted to create a new alias with the name {name} but that name is already a command on this bot."
msgstr ""
-#: redbot/cogs/alias/alias.py:207
+#: redbot/cogs/alias/alias.py:259
msgid "You attempted to create a new alias with the name {name} but that alias already exists on this server."
msgstr ""
-#: redbot/cogs/alias/alias.py:218
+#: redbot/cogs/alias/alias.py:270
msgid "You attempted to create a new alias with the name {name} but that name is an invalid alias name. Alias names may not contain spaces."
msgstr ""
-#: redbot/cogs/alias/alias.py:234
+#: redbot/cogs/alias/alias.py:289
msgid "A new alias with the trigger `{name}` has been created."
msgstr ""
-#: redbot/cogs/alias/alias.py:240
+#: redbot/cogs/alias/alias.py:295
#, docstring
msgid "Add a global alias for a command."
msgstr ""
-#: redbot/cogs/alias/alias.py:245
+#: redbot/cogs/alias/alias.py:300
msgid "You attempted to create a new global alias with the name {name} but that name is already a command on this bot."
msgstr ""
-#: redbot/cogs/alias/alias.py:256
+#: redbot/cogs/alias/alias.py:311
msgid "You attempted to create a new global alias with the name {name} but that alias already exists on this server."
msgstr ""
-#: redbot/cogs/alias/alias.py:267
+#: redbot/cogs/alias/alias.py:322
msgid "You attempted to create a new global alias with the name {name} but that name is an invalid alias name. Alias names may not contain spaces."
msgstr ""
-#: redbot/cogs/alias/alias.py:280
+#: redbot/cogs/alias/alias.py:338
msgid "A new global alias with the trigger `{name}` has been created."
msgstr ""
-#: redbot/cogs/alias/alias.py:288
+#: redbot/cogs/alias/alias.py:346
#, docstring
msgid "Try to execute help for the base command of the alias."
msgstr ""
-#: redbot/cogs/alias/alias.py:297
+#: redbot/cogs/alias/alias.py:355
msgid "{prefix}help {command}"
msgstr ""
-#: redbot/cogs/alias/alias.py:302
+#: redbot/cogs/alias/alias.py:360
msgid "No such alias exists."
msgstr ""
-#: redbot/cogs/alias/alias.py:307
+#: redbot/cogs/alias/alias.py:365
#, docstring
msgid "Show what command the alias executes."
msgstr ""
-#: redbot/cogs/alias/alias.py:312
+#: redbot/cogs/alias/alias.py:370
msgid "The `{alias_name}` alias will execute the command `{command}`"
msgstr ""
-#: redbot/cogs/alias/alias.py:317
+#: redbot/cogs/alias/alias.py:375
msgid "There is no alias with the name `{name}`"
msgstr ""
-#: redbot/cogs/alias/alias.py:323
+#: redbot/cogs/alias/alias.py:381
#, docstring
msgid "Delete an existing alias on this server."
msgstr ""
-#: redbot/cogs/alias/alias.py:328 redbot/cogs/alias/alias.py:364
-#: redbot/cogs/alias/alias.py:375
+#: redbot/cogs/alias/alias.py:386 redbot/cogs/alias/alias.py:422
+#: redbot/cogs/alias/alias.py:433
msgid "There are no aliases on this server."
msgstr ""
-#: redbot/cogs/alias/alias.py:333 redbot/cogs/alias/alias.py:351
+#: redbot/cogs/alias/alias.py:391 redbot/cogs/alias/alias.py:409
msgid "Alias with the name `{name}` was successfully deleted."
msgstr ""
-#: redbot/cogs/alias/alias.py:336 redbot/cogs/alias/alias.py:354
+#: redbot/cogs/alias/alias.py:394 redbot/cogs/alias/alias.py:412
msgid "Alias with name `{name}` was not found."
msgstr ""
-#: redbot/cogs/alias/alias.py:341
+#: redbot/cogs/alias/alias.py:399
#, docstring
msgid "Delete an existing global alias."
msgstr ""
-#: redbot/cogs/alias/alias.py:346
+#: redbot/cogs/alias/alias.py:404
msgid "There are no aliases on this bot."
msgstr ""
-#: redbot/cogs/alias/alias.py:359
+#: redbot/cogs/alias/alias.py:417
#, docstring
msgid "List the available aliases on this server."
msgstr ""
-#: redbot/cogs/alias/alias.py:360 redbot/cogs/alias/alias.py:371
+#: redbot/cogs/alias/alias.py:418 redbot/cogs/alias/alias.py:429
msgid "Aliases:"
msgstr ""
-#: redbot/cogs/alias/alias.py:370
+#: redbot/cogs/alias/alias.py:428
#, docstring
msgid "List the available global aliases on this bot."
msgstr ""
diff --git a/redbot/cogs/alias/locales/sv-SE.po b/redbot/cogs/alias/locales/sv-SE.po
index d456d95d9..7048f3f9f 100644
--- a/redbot/cogs/alias/locales/sv-SE.po
+++ b/redbot/cogs/alias/locales/sv-SE.po
@@ -1,14 +1,14 @@
msgid ""
msgstr ""
"Project-Id-Version: red-discordbot\n"
-"POT-Creation-Date: 2019-01-11 02:18+0000\n"
-"PO-Revision-Date: 2019-02-25 03:07\n"
-"Last-Translator: Kowlin \n"
+"POT-Creation-Date: 2019-07-05 22:33+0200\n"
+"PO-Revision-Date: 2019-07-06 16:14\n"
+"Last-Translator: Robert Jansen (Kowlin)\n"
"Language-Team: Swedish\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"Generated-By: redgettext 2.2\n"
+"Generated-By: redgettext 3.0\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: crowdin.com\n"
"X-Crowdin-Project: red-discordbot\n"
@@ -16,136 +16,138 @@ msgstr ""
"X-Crowdin-File: /cogs/alias/locales/messages.pot\n"
"Language: sv_SE\n"
-#: redbot/cogs/alias/alias.py:18
+#: redbot/cogs/alias/alias.py:35
#, docstring
-msgid "Create aliases for commands.\n\n"
-" Aliases are alternative names shortcuts for commands. They\n"
-" can act as both a lambda (storing arguments for repeated use)\n"
-" or as simply a shortcut to saying \"x y z\".\n\n"
-" When run, aliases will accept any additional arguments\n"
-" and append them to the stored alias.\n"
-" "
+msgid "Create aliases for commands.\\n\\n Aliases are alternative names shortcuts for commands. They\\n can act as both a lambda (storing arguments for repeated use)\\n or as simply a shortcut to saying \\\"x y z\\\".\\n\\n When run, aliases will accept any additional arguments\\n and append them to the stored alias.\\n "
msgstr ""
-#: redbot/cogs/alias/alias.py:130
+#: redbot/cogs/alias/alias.py:107
+msgid "Arguments must be specified with a number."
+msgstr ""
+
+#: redbot/cogs/alias/alias.py:114
+msgid "Arguments must be sequential. Missing arguments: "
+msgstr ""
+
+#: redbot/cogs/alias/alias.py:164
msgid "No prefix found."
msgstr "Inget prefix hittat."
-#: redbot/cogs/alias/alias.py:179
+#: redbot/cogs/alias/alias.py:231
#, docstring
msgid "Manage command aliases."
msgstr ""
-#: redbot/cogs/alias/alias.py:184
+#: redbot/cogs/alias/alias.py:236
#, docstring
msgid "Manage global aliases."
msgstr ""
-#: redbot/cogs/alias/alias.py:191
+#: redbot/cogs/alias/alias.py:243
#, docstring
msgid "Add an alias for a command."
msgstr ""
-#: redbot/cogs/alias/alias.py:196
+#: redbot/cogs/alias/alias.py:248
msgid "You attempted to create a new alias with the name {name} but that name is already a command on this bot."
msgstr ""
-#: redbot/cogs/alias/alias.py:207
+#: redbot/cogs/alias/alias.py:259
msgid "You attempted to create a new alias with the name {name} but that alias already exists on this server."
msgstr ""
-#: redbot/cogs/alias/alias.py:218
+#: redbot/cogs/alias/alias.py:270
msgid "You attempted to create a new alias with the name {name} but that name is an invalid alias name. Alias names may not contain spaces."
msgstr ""
-#: redbot/cogs/alias/alias.py:234
+#: redbot/cogs/alias/alias.py:289
msgid "A new alias with the trigger `{name}` has been created."
msgstr ""
-#: redbot/cogs/alias/alias.py:240
+#: redbot/cogs/alias/alias.py:295
#, docstring
msgid "Add a global alias for a command."
msgstr ""
-#: redbot/cogs/alias/alias.py:245
+#: redbot/cogs/alias/alias.py:300
msgid "You attempted to create a new global alias with the name {name} but that name is already a command on this bot."
msgstr ""
-#: redbot/cogs/alias/alias.py:256
+#: redbot/cogs/alias/alias.py:311
msgid "You attempted to create a new global alias with the name {name} but that alias already exists on this server."
msgstr ""
-#: redbot/cogs/alias/alias.py:267
+#: redbot/cogs/alias/alias.py:322
msgid "You attempted to create a new global alias with the name {name} but that name is an invalid alias name. Alias names may not contain spaces."
msgstr ""
-#: redbot/cogs/alias/alias.py:280
+#: redbot/cogs/alias/alias.py:338
msgid "A new global alias with the trigger `{name}` has been created."
msgstr ""
-#: redbot/cogs/alias/alias.py:288
+#: redbot/cogs/alias/alias.py:346
#, docstring
msgid "Try to execute help for the base command of the alias."
msgstr ""
-#: redbot/cogs/alias/alias.py:297
+#: redbot/cogs/alias/alias.py:355
msgid "{prefix}help {command}"
msgstr ""
-#: redbot/cogs/alias/alias.py:302
+#: redbot/cogs/alias/alias.py:360
msgid "No such alias exists."
msgstr "Detta alias existerar inte."
-#: redbot/cogs/alias/alias.py:307
+#: redbot/cogs/alias/alias.py:365
#, docstring
msgid "Show what command the alias executes."
msgstr ""
-#: redbot/cogs/alias/alias.py:312
+#: redbot/cogs/alias/alias.py:370
msgid "The `{alias_name}` alias will execute the command `{command}`"
msgstr ""
-#: redbot/cogs/alias/alias.py:317
+#: redbot/cogs/alias/alias.py:375
msgid "There is no alias with the name `{name}`"
msgstr ""
-#: redbot/cogs/alias/alias.py:323
+#: redbot/cogs/alias/alias.py:381
#, docstring
msgid "Delete an existing alias on this server."
msgstr ""
-#: redbot/cogs/alias/alias.py:328 redbot/cogs/alias/alias.py:364
-#: redbot/cogs/alias/alias.py:375
+#: redbot/cogs/alias/alias.py:386 redbot/cogs/alias/alias.py:422
+#: redbot/cogs/alias/alias.py:433
msgid "There are no aliases on this server."
msgstr "Det finns inga alias på denna server."
-#: redbot/cogs/alias/alias.py:333 redbot/cogs/alias/alias.py:351
+#: redbot/cogs/alias/alias.py:391 redbot/cogs/alias/alias.py:409
msgid "Alias with the name `{name}` was successfully deleted."
msgstr ""
-#: redbot/cogs/alias/alias.py:336 redbot/cogs/alias/alias.py:354
+#: redbot/cogs/alias/alias.py:394 redbot/cogs/alias/alias.py:412
msgid "Alias with name `{name}` was not found."
msgstr ""
-#: redbot/cogs/alias/alias.py:341
+#: redbot/cogs/alias/alias.py:399
#, docstring
msgid "Delete an existing global alias."
msgstr ""
-#: redbot/cogs/alias/alias.py:346
+#: redbot/cogs/alias/alias.py:404
msgid "There are no aliases on this bot."
msgstr "Det finns inga alias för denna bot."
-#: redbot/cogs/alias/alias.py:359
+#: redbot/cogs/alias/alias.py:417
#, docstring
msgid "List the available aliases on this server."
msgstr ""
-#: redbot/cogs/alias/alias.py:360 redbot/cogs/alias/alias.py:371
+#: redbot/cogs/alias/alias.py:418 redbot/cogs/alias/alias.py:429
msgid "Aliases:"
msgstr "Alias:"
-#: redbot/cogs/alias/alias.py:370
+#: redbot/cogs/alias/alias.py:428
#, docstring
msgid "List the available global aliases on this bot."
msgstr ""
diff --git a/redbot/cogs/alias/locales/tr-TR.po b/redbot/cogs/alias/locales/tr-TR.po
index eb73c99a9..f633269bf 100644
--- a/redbot/cogs/alias/locales/tr-TR.po
+++ b/redbot/cogs/alias/locales/tr-TR.po
@@ -1,14 +1,14 @@
msgid ""
msgstr ""
"Project-Id-Version: red-discordbot\n"
-"POT-Creation-Date: 2019-01-11 02:18+0000\n"
-"PO-Revision-Date: 2019-02-25 03:08\n"
-"Last-Translator: Kowlin \n"
+"POT-Creation-Date: 2019-07-05 22:33+0200\n"
+"PO-Revision-Date: 2019-07-06 16:14\n"
+"Last-Translator: Robert Jansen (Kowlin)\n"
"Language-Team: Turkish\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"Generated-By: redgettext 2.2\n"
+"Generated-By: redgettext 3.0\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: crowdin.com\n"
"X-Crowdin-Project: red-discordbot\n"
@@ -16,136 +16,138 @@ msgstr ""
"X-Crowdin-File: /cogs/alias/locales/messages.pot\n"
"Language: tr_TR\n"
-#: redbot/cogs/alias/alias.py:18
+#: redbot/cogs/alias/alias.py:35
#, docstring
-msgid "Create aliases for commands.\n\n"
-" Aliases are alternative names shortcuts for commands. They\n"
-" can act as both a lambda (storing arguments for repeated use)\n"
-" or as simply a shortcut to saying \"x y z\".\n\n"
-" When run, aliases will accept any additional arguments\n"
-" and append them to the stored alias.\n"
-" "
+msgid "Create aliases for commands.\\n\\n Aliases are alternative names shortcuts for commands. They\\n can act as both a lambda (storing arguments for repeated use)\\n or as simply a shortcut to saying \\\"x y z\\\".\\n\\n When run, aliases will accept any additional arguments\\n and append them to the stored alias.\\n "
msgstr ""
-#: redbot/cogs/alias/alias.py:130
+#: redbot/cogs/alias/alias.py:107
+msgid "Arguments must be specified with a number."
+msgstr ""
+
+#: redbot/cogs/alias/alias.py:114
+msgid "Arguments must be sequential. Missing arguments: "
+msgstr ""
+
+#: redbot/cogs/alias/alias.py:164
msgid "No prefix found."
msgstr "Öneki bulundu."
-#: redbot/cogs/alias/alias.py:179
+#: redbot/cogs/alias/alias.py:231
#, docstring
msgid "Manage command aliases."
msgstr "Komut diğer adları yönetmek."
-#: redbot/cogs/alias/alias.py:184
+#: redbot/cogs/alias/alias.py:236
#, docstring
msgid "Manage global aliases."
msgstr "Küresel diğer adları yönetmek."
-#: redbot/cogs/alias/alias.py:191
+#: redbot/cogs/alias/alias.py:243
#, docstring
msgid "Add an alias for a command."
msgstr "Bir komut için bir diğer ad ekleyin."
-#: redbot/cogs/alias/alias.py:196
+#: redbot/cogs/alias/alias.py:248
msgid "You attempted to create a new alias with the name {name} but that name is already a command on this bot."
msgstr "Adı {name} ile yeni bir diğer ad oluşturmak çalıştı, ancak bu adı zaten bu bot bir komutudur."
-#: redbot/cogs/alias/alias.py:207
+#: redbot/cogs/alias/alias.py:259
msgid "You attempted to create a new alias with the name {name} but that alias already exists on this server."
msgstr "Adı {name} ile yeni bir diğer ad oluşturmak çalıştı, ancak bu diğer adı bu sunucuda zaten vardır."
-#: redbot/cogs/alias/alias.py:218
+#: redbot/cogs/alias/alias.py:270
msgid "You attempted to create a new alias with the name {name} but that name is an invalid alias name. Alias names may not contain spaces."
msgstr "Adı {name} ile yeni bir diğer ad oluşturmak çalıştı ama o ismi geçersiz diğer ad. Diğer ad ad adlar boşluk içeremez."
-#: redbot/cogs/alias/alias.py:234
+#: redbot/cogs/alias/alias.py:289
msgid "A new alias with the trigger `{name}` has been created."
msgstr "Yeni bir takma ad tetikleyici '{name}' ile oluşturuldu."
-#: redbot/cogs/alias/alias.py:240
+#: redbot/cogs/alias/alias.py:295
#, docstring
msgid "Add a global alias for a command."
msgstr "Bir komut için küresel bir diğer ad ekleyin."
-#: redbot/cogs/alias/alias.py:245
+#: redbot/cogs/alias/alias.py:300
msgid "You attempted to create a new global alias with the name {name} but that name is already a command on this bot."
msgstr "Yeni bir küresel diğer adı ile ad {name} oluşturmak çalıştı, ancak bu adı zaten bu bot bir komutudur."
-#: redbot/cogs/alias/alias.py:256
+#: redbot/cogs/alias/alias.py:311
msgid "You attempted to create a new global alias with the name {name} but that alias already exists on this server."
msgstr "Adı {name} ile yeni bir diğer ad oluşturmak çalıştı, ancak bu adı zaten bu bot bir komutudur."
-#: redbot/cogs/alias/alias.py:267
+#: redbot/cogs/alias/alias.py:322
msgid "You attempted to create a new global alias with the name {name} but that name is an invalid alias name. Alias names may not contain spaces."
msgstr "Yeni bir küresel diğer adı ile ad {name} oluşturmaya çalıştı ama o ismi geçersiz diğer ad. Diğer ad ad adlar boşluk içeremez."
-#: redbot/cogs/alias/alias.py:280
+#: redbot/cogs/alias/alias.py:338
msgid "A new global alias with the trigger `{name}` has been created."
msgstr "Yeni bir küresel diğer ad tetikleyici '{name}' ile oluşturuldu."
-#: redbot/cogs/alias/alias.py:288
+#: redbot/cogs/alias/alias.py:346
#, docstring
msgid "Try to execute help for the base command of the alias."
msgstr "Diğer temel komutunun yardımını yürütmek deneyin."
-#: redbot/cogs/alias/alias.py:297
+#: redbot/cogs/alias/alias.py:355
msgid "{prefix}help {command}"
msgstr "{prefix}yardımcı {command}"
-#: redbot/cogs/alias/alias.py:302
+#: redbot/cogs/alias/alias.py:360
msgid "No such alias exists."
msgstr "Böyle bir takma var yok."
-#: redbot/cogs/alias/alias.py:307
+#: redbot/cogs/alias/alias.py:365
#, docstring
msgid "Show what command the alias executes."
msgstr "Takma adın çalıştırıldığı komutu gösterin."
-#: redbot/cogs/alias/alias.py:312
+#: redbot/cogs/alias/alias.py:370
msgid "The `{alias_name}` alias will execute the command `{command}`"
msgstr "'{alias_name}' diğer ad komut '{command} ' idam edecek"
-#: redbot/cogs/alias/alias.py:317
+#: redbot/cogs/alias/alias.py:375
msgid "There is no alias with the name `{name}`"
msgstr "Hiç diğer ad ad '{name} ' ile olduğunu"
-#: redbot/cogs/alias/alias.py:323
+#: redbot/cogs/alias/alias.py:381
#, docstring
msgid "Delete an existing alias on this server."
msgstr "Bu sunucuda varolan bir diğer adı silin."
-#: redbot/cogs/alias/alias.py:328 redbot/cogs/alias/alias.py:364
-#: redbot/cogs/alias/alias.py:375
+#: redbot/cogs/alias/alias.py:386 redbot/cogs/alias/alias.py:422
+#: redbot/cogs/alias/alias.py:433
msgid "There are no aliases on this server."
msgstr "Bu sunucuda hiçbir diğer adları vardır."
-#: redbot/cogs/alias/alias.py:333 redbot/cogs/alias/alias.py:351
+#: redbot/cogs/alias/alias.py:391 redbot/cogs/alias/alias.py:409
msgid "Alias with the name `{name}` was successfully deleted."
msgstr "`{name}`adlı takma ad başarıyla silindi."
-#: redbot/cogs/alias/alias.py:336 redbot/cogs/alias/alias.py:354
+#: redbot/cogs/alias/alias.py:394 redbot/cogs/alias/alias.py:412
msgid "Alias with name `{name}` was not found."
msgstr "{Name} `adlı takma ad bulunamadı."
-#: redbot/cogs/alias/alias.py:341
+#: redbot/cogs/alias/alias.py:399
#, docstring
msgid "Delete an existing global alias."
msgstr "Mevcut bir global takma adı silin."
-#: redbot/cogs/alias/alias.py:346
+#: redbot/cogs/alias/alias.py:404
msgid "There are no aliases on this bot."
msgstr "Bu botta takma adlar yok."
-#: redbot/cogs/alias/alias.py:359
+#: redbot/cogs/alias/alias.py:417
#, docstring
msgid "List the available aliases on this server."
msgstr "Bu sunucudaki kullanılabilir diğer adları listeleyin."
-#: redbot/cogs/alias/alias.py:360 redbot/cogs/alias/alias.py:371
+#: redbot/cogs/alias/alias.py:418 redbot/cogs/alias/alias.py:429
msgid "Aliases:"
msgstr "Takma adlar:"
-#: redbot/cogs/alias/alias.py:370
+#: redbot/cogs/alias/alias.py:428
#, docstring
msgid "List the available global aliases on this bot."
msgstr "Bu botta mevcut küresel takma adları listeleyiniz."
diff --git a/redbot/cogs/alias/locales/zh-CN.po b/redbot/cogs/alias/locales/zh-CN.po
index 494d998f5..07772e024 100644
--- a/redbot/cogs/alias/locales/zh-CN.po
+++ b/redbot/cogs/alias/locales/zh-CN.po
@@ -1,14 +1,14 @@
msgid ""
msgstr ""
"Project-Id-Version: red-discordbot\n"
-"POT-Creation-Date: 2019-01-11 02:18+0000\n"
-"PO-Revision-Date: 2019-02-25 03:08\n"
-"Last-Translator: Kowlin \n"
+"POT-Creation-Date: 2019-07-05 22:33+0200\n"
+"PO-Revision-Date: 2019-07-06 16:14\n"
+"Last-Translator: Robert Jansen (Kowlin)\n"
"Language-Team: Chinese Simplified\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"Generated-By: redgettext 2.2\n"
+"Generated-By: redgettext 3.0\n"
"Plural-Forms: nplurals=1; plural=0;\n"
"X-Generator: crowdin.com\n"
"X-Crowdin-Project: red-discordbot\n"
@@ -16,136 +16,138 @@ msgstr ""
"X-Crowdin-File: /cogs/alias/locales/messages.pot\n"
"Language: zh_CN\n"
-#: redbot/cogs/alias/alias.py:18
+#: redbot/cogs/alias/alias.py:35
#, docstring
-msgid "Create aliases for commands.\n\n"
-" Aliases are alternative names shortcuts for commands. They\n"
-" can act as both a lambda (storing arguments for repeated use)\n"
-" or as simply a shortcut to saying \"x y z\".\n\n"
-" When run, aliases will accept any additional arguments\n"
-" and append them to the stored alias.\n"
-" "
+msgid "Create aliases for commands.\\n\\n Aliases are alternative names shortcuts for commands. They\\n can act as both a lambda (storing arguments for repeated use)\\n or as simply a shortcut to saying \\\"x y z\\\".\\n\\n When run, aliases will accept any additional arguments\\n and append them to the stored alias.\\n "
msgstr ""
-#: redbot/cogs/alias/alias.py:130
+#: redbot/cogs/alias/alias.py:107
+msgid "Arguments must be specified with a number."
+msgstr ""
+
+#: redbot/cogs/alias/alias.py:114
+msgid "Arguments must be sequential. Missing arguments: "
+msgstr ""
+
+#: redbot/cogs/alias/alias.py:164
msgid "No prefix found."
msgstr "找不到前缀"
-#: redbot/cogs/alias/alias.py:179
+#: redbot/cogs/alias/alias.py:231
#, docstring
msgid "Manage command aliases."
msgstr ""
-#: redbot/cogs/alias/alias.py:184
+#: redbot/cogs/alias/alias.py:236
#, docstring
msgid "Manage global aliases."
msgstr ""
-#: redbot/cogs/alias/alias.py:191
+#: redbot/cogs/alias/alias.py:243
#, docstring
msgid "Add an alias for a command."
msgstr ""
-#: redbot/cogs/alias/alias.py:196
+#: redbot/cogs/alias/alias.py:248
msgid "You attempted to create a new alias with the name {name} but that name is already a command on this bot."
msgstr ""
-#: redbot/cogs/alias/alias.py:207
+#: redbot/cogs/alias/alias.py:259
msgid "You attempted to create a new alias with the name {name} but that alias already exists on this server."
msgstr ""
-#: redbot/cogs/alias/alias.py:218
+#: redbot/cogs/alias/alias.py:270
msgid "You attempted to create a new alias with the name {name} but that name is an invalid alias name. Alias names may not contain spaces."
msgstr ""
-#: redbot/cogs/alias/alias.py:234
+#: redbot/cogs/alias/alias.py:289
msgid "A new alias with the trigger `{name}` has been created."
msgstr ""
-#: redbot/cogs/alias/alias.py:240
+#: redbot/cogs/alias/alias.py:295
#, docstring
msgid "Add a global alias for a command."
msgstr ""
-#: redbot/cogs/alias/alias.py:245
+#: redbot/cogs/alias/alias.py:300
msgid "You attempted to create a new global alias with the name {name} but that name is already a command on this bot."
msgstr ""
-#: redbot/cogs/alias/alias.py:256
+#: redbot/cogs/alias/alias.py:311
msgid "You attempted to create a new global alias with the name {name} but that alias already exists on this server."
msgstr ""
-#: redbot/cogs/alias/alias.py:267
+#: redbot/cogs/alias/alias.py:322
msgid "You attempted to create a new global alias with the name {name} but that name is an invalid alias name. Alias names may not contain spaces."
msgstr ""
-#: redbot/cogs/alias/alias.py:280
+#: redbot/cogs/alias/alias.py:338
msgid "A new global alias with the trigger `{name}` has been created."
msgstr ""
-#: redbot/cogs/alias/alias.py:288
+#: redbot/cogs/alias/alias.py:346
#, docstring
msgid "Try to execute help for the base command of the alias."
msgstr ""
-#: redbot/cogs/alias/alias.py:297
+#: redbot/cogs/alias/alias.py:355
msgid "{prefix}help {command}"
msgstr ""
-#: redbot/cogs/alias/alias.py:302
+#: redbot/cogs/alias/alias.py:360
msgid "No such alias exists."
msgstr "不存在该别名。"
-#: redbot/cogs/alias/alias.py:307
+#: redbot/cogs/alias/alias.py:365
#, docstring
msgid "Show what command the alias executes."
msgstr ""
-#: redbot/cogs/alias/alias.py:312
+#: redbot/cogs/alias/alias.py:370
msgid "The `{alias_name}` alias will execute the command `{command}`"
msgstr ""
-#: redbot/cogs/alias/alias.py:317
+#: redbot/cogs/alias/alias.py:375
msgid "There is no alias with the name `{name}`"
msgstr ""
-#: redbot/cogs/alias/alias.py:323
+#: redbot/cogs/alias/alias.py:381
#, docstring
msgid "Delete an existing alias on this server."
msgstr ""
-#: redbot/cogs/alias/alias.py:328 redbot/cogs/alias/alias.py:364
-#: redbot/cogs/alias/alias.py:375
+#: redbot/cogs/alias/alias.py:386 redbot/cogs/alias/alias.py:422
+#: redbot/cogs/alias/alias.py:433
msgid "There are no aliases on this server."
msgstr "在这个服务器上没有别名。"
-#: redbot/cogs/alias/alias.py:333 redbot/cogs/alias/alias.py:351
+#: redbot/cogs/alias/alias.py:391 redbot/cogs/alias/alias.py:409
msgid "Alias with the name `{name}` was successfully deleted."
msgstr ""
-#: redbot/cogs/alias/alias.py:336 redbot/cogs/alias/alias.py:354
+#: redbot/cogs/alias/alias.py:394 redbot/cogs/alias/alias.py:412
msgid "Alias with name `{name}` was not found."
msgstr ""
-#: redbot/cogs/alias/alias.py:341
+#: redbot/cogs/alias/alias.py:399
#, docstring
msgid "Delete an existing global alias."
msgstr ""
-#: redbot/cogs/alias/alias.py:346
+#: redbot/cogs/alias/alias.py:404
msgid "There are no aliases on this bot."
msgstr "这个机器人上没有别名。"
-#: redbot/cogs/alias/alias.py:359
+#: redbot/cogs/alias/alias.py:417
#, docstring
msgid "List the available aliases on this server."
msgstr ""
-#: redbot/cogs/alias/alias.py:360 redbot/cogs/alias/alias.py:371
+#: redbot/cogs/alias/alias.py:418 redbot/cogs/alias/alias.py:429
msgid "Aliases:"
msgstr "别名:"
-#: redbot/cogs/alias/alias.py:370
+#: redbot/cogs/alias/alias.py:428
#, docstring
msgid "List the available global aliases on this bot."
msgstr ""
diff --git a/redbot/cogs/alias/locales/zh-TW.po b/redbot/cogs/alias/locales/zh-TW.po
new file mode 100644
index 000000000..3aa21cfbe
--- /dev/null
+++ b/redbot/cogs/alias/locales/zh-TW.po
@@ -0,0 +1,154 @@
+msgid ""
+msgstr ""
+"Project-Id-Version: red-discordbot\n"
+"POT-Creation-Date: 2019-07-05 22:33+0200\n"
+"PO-Revision-Date: 2019-07-14 02:15\n"
+"Last-Translator: Robert Jansen (Kowlin)\n"
+"Language-Team: Chinese Traditional\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: redgettext 3.0\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+"X-Generator: crowdin.com\n"
+"X-Crowdin-Project: red-discordbot\n"
+"X-Crowdin-Language: zh-TW\n"
+"X-Crowdin-File: /cogs/alias/locales/messages.pot\n"
+"Language: zh_TW\n"
+
+#: redbot/cogs/alias/alias.py:35
+#, docstring
+msgid "Create aliases for commands.\\n\\n Aliases are alternative names shortcuts for commands. They\\n can act as both a lambda (storing arguments for repeated use)\\n or as simply a shortcut to saying \\\"x y z\\\".\\n\\n When run, aliases will accept any additional arguments\\n and append them to the stored alias.\\n "
+msgstr ""
+
+#: redbot/cogs/alias/alias.py:107
+msgid "Arguments must be specified with a number."
+msgstr ""
+
+#: redbot/cogs/alias/alias.py:114
+msgid "Arguments must be sequential. Missing arguments: "
+msgstr ""
+
+#: redbot/cogs/alias/alias.py:164
+msgid "No prefix found."
+msgstr ""
+
+#: redbot/cogs/alias/alias.py:231
+#, docstring
+msgid "Manage command aliases."
+msgstr ""
+
+#: redbot/cogs/alias/alias.py:236
+#, docstring
+msgid "Manage global aliases."
+msgstr ""
+
+#: redbot/cogs/alias/alias.py:243
+#, docstring
+msgid "Add an alias for a command."
+msgstr ""
+
+#: redbot/cogs/alias/alias.py:248
+msgid "You attempted to create a new alias with the name {name} but that name is already a command on this bot."
+msgstr ""
+
+#: redbot/cogs/alias/alias.py:259
+msgid "You attempted to create a new alias with the name {name} but that alias already exists on this server."
+msgstr ""
+
+#: redbot/cogs/alias/alias.py:270
+msgid "You attempted to create a new alias with the name {name} but that name is an invalid alias name. Alias names may not contain spaces."
+msgstr ""
+
+#: redbot/cogs/alias/alias.py:289
+msgid "A new alias with the trigger `{name}` has been created."
+msgstr ""
+
+#: redbot/cogs/alias/alias.py:295
+#, docstring
+msgid "Add a global alias for a command."
+msgstr ""
+
+#: redbot/cogs/alias/alias.py:300
+msgid "You attempted to create a new global alias with the name {name} but that name is already a command on this bot."
+msgstr ""
+
+#: redbot/cogs/alias/alias.py:311
+msgid "You attempted to create a new global alias with the name {name} but that alias already exists on this server."
+msgstr ""
+
+#: redbot/cogs/alias/alias.py:322
+msgid "You attempted to create a new global alias with the name {name} but that name is an invalid alias name. Alias names may not contain spaces."
+msgstr ""
+
+#: redbot/cogs/alias/alias.py:338
+msgid "A new global alias with the trigger `{name}` has been created."
+msgstr ""
+
+#: redbot/cogs/alias/alias.py:346
+#, docstring
+msgid "Try to execute help for the base command of the alias."
+msgstr ""
+
+#: redbot/cogs/alias/alias.py:355
+msgid "{prefix}help {command}"
+msgstr ""
+
+#: redbot/cogs/alias/alias.py:360
+msgid "No such alias exists."
+msgstr ""
+
+#: redbot/cogs/alias/alias.py:365
+#, docstring
+msgid "Show what command the alias executes."
+msgstr ""
+
+#: redbot/cogs/alias/alias.py:370
+msgid "The `{alias_name}` alias will execute the command `{command}`"
+msgstr ""
+
+#: redbot/cogs/alias/alias.py:375
+msgid "There is no alias with the name `{name}`"
+msgstr ""
+
+#: redbot/cogs/alias/alias.py:381
+#, docstring
+msgid "Delete an existing alias on this server."
+msgstr ""
+
+#: redbot/cogs/alias/alias.py:386 redbot/cogs/alias/alias.py:422
+#: redbot/cogs/alias/alias.py:433
+msgid "There are no aliases on this server."
+msgstr ""
+
+#: redbot/cogs/alias/alias.py:391 redbot/cogs/alias/alias.py:409
+msgid "Alias with the name `{name}` was successfully deleted."
+msgstr ""
+
+#: redbot/cogs/alias/alias.py:394 redbot/cogs/alias/alias.py:412
+msgid "Alias with name `{name}` was not found."
+msgstr ""
+
+#: redbot/cogs/alias/alias.py:399
+#, docstring
+msgid "Delete an existing global alias."
+msgstr ""
+
+#: redbot/cogs/alias/alias.py:404
+msgid "There are no aliases on this bot."
+msgstr ""
+
+#: redbot/cogs/alias/alias.py:417
+#, docstring
+msgid "List the available aliases on this server."
+msgstr ""
+
+#: redbot/cogs/alias/alias.py:418 redbot/cogs/alias/alias.py:429
+msgid "Aliases:"
+msgstr ""
+
+#: redbot/cogs/alias/alias.py:428
+#, docstring
+msgid "List the available global aliases on this bot."
+msgstr ""
+
diff --git a/redbot/cogs/audio/locales/ar-SA.po b/redbot/cogs/audio/locales/ar-SA.po
index 4e7147f7a..e119eca0d 100644
--- a/redbot/cogs/audio/locales/ar-SA.po
+++ b/redbot/cogs/audio/locales/ar-SA.po
@@ -1,14 +1,14 @@
msgid ""
msgstr ""
"Project-Id-Version: red-discordbot\n"
-"POT-Creation-Date: 2019-02-17 02:24+0000\n"
-"PO-Revision-Date: 2019-02-25 03:06\n"
-"Last-Translator: Kowlin \n"
+"POT-Creation-Date: 2019-07-05 22:33+0200\n"
+"PO-Revision-Date: 2019-07-06 16:12\n"
+"Last-Translator: Robert Jansen (Kowlin)\n"
"Language-Team: Arabic\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"Generated-By: redgettext 2.2\n"
+"Generated-By: redgettext 3.0\n"
"Plural-Forms: nplurals=6; plural=(n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5);\n"
"X-Generator: crowdin.com\n"
"X-Crowdin-Project: red-discordbot\n"
@@ -16,971 +16,1275 @@ msgstr ""
"X-Crowdin-File: /cogs/audio/locales/messages.pot\n"
"Language: ar_SA\n"
-#: redbot/cogs/audio/audio.py:38
+#: redbot/cogs/audio/audio.py:47
#, docstring
msgid "Play audio through voice channels."
msgstr ""
-#: redbot/cogs/audio/audio.py:173 redbot/cogs/audio/audio.py:735
-msgid "Now Playing"
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:177
-msgid "Track length: {length} | Requested by: {user}"
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:201 redbot/cogs/audio/audio.py:227
+#: redbot/cogs/audio/audio.py:260
msgid "music in {} servers"
msgstr ""
-#: redbot/cogs/audio/audio.py:211
+#: redbot/cogs/audio/audio.py:300 redbot/cogs/audio/audio.py:1317
+msgid "Now Playing"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:304
+msgid "Track length: {length} | Requested by: {user}"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:331
msgid "Queue ended."
msgstr ""
-#: redbot/cogs/audio/audio.py:240
+#: redbot/cogs/audio/audio.py:350
msgid "Track Error"
msgstr ""
-#: redbot/cogs/audio/audio.py:245
+#: redbot/cogs/audio/audio.py:355
msgid "Skipping..."
msgstr ""
-#: redbot/cogs/audio/audio.py:252
+#: redbot/cogs/audio/audio.py:363
#, docstring
msgid "Music configuration options."
msgstr ""
-#: redbot/cogs/audio/audio.py:258
+#: redbot/cogs/audio/audio.py:369
#, docstring
-msgid "Toggle DJ mode.\n\n"
-" DJ mode allows users with the DJ role to use audio commands.\n"
-" "
+msgid "Toggle the bot auto-disconnecting when done playing.\\n\\n This setting takes precedence over [p]audioset emptydisconnect.\\n "
msgstr ""
-#: redbot/cogs/audio/audio.py:265
+#: redbot/cogs/audio/audio.py:377
+msgid "Auto-disconnection at queue end: {true_or_false}."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:385
+#, docstring
+msgid "Toggle DJ mode.\\n\\n DJ mode allows users with the DJ role to use audio commands.\\n "
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:392
msgid "Please set a role to use with DJ mode. Enter the role name or ID now."
msgstr ""
-#: redbot/cogs/audio/audio.py:273
+#: redbot/cogs/audio/audio.py:400
msgid "Response timed out, try again later."
msgstr ""
-#: redbot/cogs/audio/audio.py:284
+#: redbot/cogs/audio/audio.py:405
+msgid "DJ role enabled: {true_or_false}."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:411
#, docstring
msgid "Auto-disconnection after x seconds while stopped. 0 to disable."
msgstr ""
-#: redbot/cogs/audio/audio.py:286 redbot/cogs/audio/audio.py:317
-#: redbot/cogs/audio/audio.py:405
+#: redbot/cogs/audio/audio.py:413 redbot/cogs/audio/audio.py:436
+#: redbot/cogs/audio/audio.py:543 redbot/cogs/audio/audio.py:687
msgid "Can't be less than zero."
msgstr ""
-#: redbot/cogs/audio/audio.py:291
+#: redbot/cogs/audio/audio.py:418
msgid "Empty disconnect disabled."
msgstr ""
-#: redbot/cogs/audio/audio.py:296
+#: redbot/cogs/audio/audio.py:423
msgid "Empty disconnect timer set to {num_seconds}."
msgstr ""
-#: redbot/cogs/audio/audio.py:307
-#, docstring
-msgid "Set the role to use for DJ mode."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:310
-msgid "DJ role set to: {role.name}."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:315
+#: redbot/cogs/audio/audio.py:434
#, docstring
msgid "Set a price for queueing tracks for non-mods. 0 to disable."
msgstr ""
-#: redbot/cogs/audio/audio.py:320
+#: redbot/cogs/audio/audio.py:439
msgid "Jukebox mode disabled."
msgstr ""
-#: redbot/cogs/audio/audio.py:325
+#: redbot/cogs/audio/audio.py:444
msgid "Track queueing command price set to {price} {currency}."
msgstr ""
-#: redbot/cogs/audio/audio.py:336
+#: redbot/cogs/audio/audio.py:455
+#, docstring
+msgid "Set the localtracks path if the Lavalink.jar is not run from the Audio data folder.\\n\\n Leave the path blank to reset the path to the default, the Audio data directory.\\n "
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:463
+msgid "The localtracks path location has been reset to the default location."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:466
+msgid "This setting is only for bot owners to set a localtracks folder location if the Lavalink.jar is being ran from outside of the Audio data directory.\\nIn the example below, the full path for 'ParentDirectory' must be passed to this command.\\nThe path must not contain spaces.\\n```\\nParentDirectory\\n |__ localtracks (folder)\\n | |__ Awesome Album Name (folder)\\n | |__01 Cool Song.mp3\\n | |__02 Groovy Song.mp3\\n |\\n |__ Lavalink.jar\\n |__ application.yml\\n```\\nThe folder path given to this command must contain the Lavalink.jar, the application.yml, and the localtracks folder.\\nUse this command with no path given to reset it to the default, the Audio data directory for this bot.\\nDo you want to continue to set the provided path for local tracks?"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:505
+msgid "{local_path} does not seem like a valid path."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:520
+msgid "The path that was entered does not have {filelist} file in that location. The path will still be saved, but please check the path and the file location before attempting to play local tracks or start your Lavalink.jar."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:530
+msgid "Localtracks path set to: {local_path}."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:536
+#, docstring
+msgid "Max length of a track to queue in seconds. 0 to disable.\\n\\n Accepts seconds or a value formatted like 00:00:00 (`hh:mm:ss`) or 00:00 (`mm:ss`).\\n Invalid input will turn the max length setting off."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:545
+msgid "Track max length disabled."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:549
+msgid "Track max length set to {seconds}."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:559
#, docstring
msgid "Toggle track announcement and other bot messages."
msgstr ""
-#: redbot/cogs/audio/audio.py:340
+#: redbot/cogs/audio/audio.py:563
msgid "Verbose mode on: {true_or_false}."
msgstr ""
-#: redbot/cogs/audio/audio.py:345
+#: redbot/cogs/audio/audio.py:569
+#, docstring
+msgid "Toggle the domain restriction on Audio.\\n\\n When toggled off, users will be able to play songs from non-commercial websites and links.\\n When toggled on, users are restricted to YouTube, SoundCloud, Mixer, Vimeo, Twitch, and Bandcamp links."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:576
+msgid "Commercial links only: {true_or_false}."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:582
+#, docstring
+msgid "Set the role to use for DJ mode."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:585
+msgid "DJ role set to: {role.name}."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:589
#, docstring
msgid "Show the current settings."
msgstr ""
-#: redbot/cogs/audio/audio.py:358
+#: redbot/cogs/audio/audio.py:604
msgid "Server Settings"
msgstr ""
-#: redbot/cogs/audio/audio.py:360
-msgid "Disconnect timer: [{num_seconds}]\n"
+#: redbot/cogs/audio/audio.py:606
+msgid "Auto-disconnect: [{dc}]\\n"
msgstr ""
-#: redbot/cogs/audio/audio.py:364
-msgid "DJ Role: [{role.name}]\n"
+#: redbot/cogs/audio/audio.py:609
+msgid "Disconnect timer: [{num_seconds}]\\n"
msgstr ""
-#: redbot/cogs/audio/audio.py:366
-msgid "Jukebox: [{jukebox_name}]\n"
+#: redbot/cogs/audio/audio.py:613
+msgid "DJ Role: [{role.name}]\\n"
msgstr ""
-#: redbot/cogs/audio/audio.py:367
-msgid "Command price: [{jukebox_price}]\n"
+#: redbot/cogs/audio/audio.py:615
+msgid "Jukebox: [{jukebox_name}]\\n"
msgstr ""
-#: redbot/cogs/audio/audio.py:368
-msgid "Repeat: [{repeat}]\n"
-"Shuffle: [{shuffle}]\n"
-"Song notify msgs: [{notify}]\n"
-"Songs as status: [{status}]\n"
+#: redbot/cogs/audio/audio.py:616
+msgid "Command price: [{jukebox_price}]\\n"
msgstr ""
-#: redbot/cogs/audio/audio.py:375
-msgid "Thumbnails: [{0}]\n"
+#: redbot/cogs/audio/audio.py:618
+msgid "Max track length: [{tracklength}]\\n"
msgstr ""
-#: redbot/cogs/audio/audio.py:377
-msgid "Vote skip: [{vote_enabled}]\n"
-"Skip percentage: [{vote_percent}%]\n"
+#: redbot/cogs/audio/audio.py:621
+msgid "Repeat: [{repeat}]\\nShuffle: [{shuffle}]\\nSong notify msgs: [{notify}]\\nSongs as status: [{status}]\\n"
msgstr ""
-#: redbot/cogs/audio/audio.py:380
-msgid "---Lavalink Settings---\n"
-"Cog version: [{version}]\n"
-"Jar build: [{jarbuild}]\n"
-"External server: [{use_external_lavalink}]"
+#: redbot/cogs/audio/audio.py:628
+msgid "Thumbnails: [{0}]\\n"
msgstr ""
-#: redbot/cogs/audio/audio.py:393
+#: redbot/cogs/audio/audio.py:630
+msgid "Vote skip: [{vote_enabled}]\\nSkip percentage: [{vote_percent}%]\\n"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:633
+msgid "---Lavalink Settings--- \\nCog version: [{version}]\\nJar build: [{jarbuild}]\\nExternal server: [{use_external_lavalink}]\\n"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:640
+msgid "Localtracks path: [{localpath}]\\n"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:648
#, docstring
-msgid "Toggle displaying a thumbnail on audio messages."
+msgid "Instructions to set the Spotify API tokens."
msgstr ""
-#: redbot/cogs/audio/audio.py:397
-msgid "Thumbnail display: {true_or_false}."
+#: redbot/cogs/audio/audio.py:649
+msgid "1. Go to Spotify developers and log in with your Spotify account.\\n(https://developer.spotify.com/dashboard/applications)\\n2. Click \\\"Create An App\\\".\\n3. Fill out the form provided with your app name, etc.\\n4. When asked if you're developing commercial integration select \\\"No\\\".\\n5. Accept the terms and conditions.\\n6. Copy your client ID and your client secret into:\\n`{prefix}set api spotify client_id, client_secret,`"
msgstr ""
-#: redbot/cogs/audio/audio.py:403
-#, docstring
-msgid "Percentage needed for non-mods to skip tracks. 0 to disable."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:411
-msgid "Voting disabled. All users can use queue management commands."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:416
-msgid "Vote percentage set to {percent}%."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:425
+#: redbot/cogs/audio/audio.py:665
#, docstring
msgid "Enable/disable tracks' titles as status."
msgstr ""
-#: redbot/cogs/audio/audio.py:429
+#: redbot/cogs/audio/audio.py:669
msgid "Song titles as status: {true_or_false}."
msgstr ""
-#: redbot/cogs/audio/audio.py:435
+#: redbot/cogs/audio/audio.py:675
+#, docstring
+msgid "Toggle displaying a thumbnail on audio messages."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:679
+msgid "Thumbnail display: {true_or_false}."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:685
+#, docstring
+msgid "Percentage needed for non-mods to skip tracks. 0 to disable."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:693
+msgid "Voting disabled. All users can use queue management commands."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:698
+msgid "Vote percentage set to {percent}%."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:707
+#, docstring
+msgid "Instructions to set the YouTube API key."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:726
#, docstring
msgid "Audio stats."
msgstr ""
-#: redbot/cogs/audio/audio.py:469 redbot/cogs/audio/audio.py:489
-#: redbot/cogs/audio/audio.py:698 redbot/cogs/audio/audio.py:788
-#: redbot/cogs/audio/audio.py:804 redbot/cogs/audio/audio.py:829
-#: redbot/cogs/audio/audio.py:836 redbot/cogs/audio/audio.py:1179
-#: redbot/cogs/audio/audio.py:1466 redbot/cogs/audio/audio.py:1724
-#: redbot/cogs/audio/audio.py:2026 redbot/cogs/audio/audio.py:2063
-#: redbot/cogs/audio/audio.py:2109 redbot/cogs/audio/audio.py:2265
-#: redbot/cogs/audio/audio.py:2304 redbot/cogs/audio/audio.py:2334
+#: redbot/cogs/audio/audio.py:754 redbot/cogs/audio/audio.py:782
+#: redbot/cogs/audio/audio.py:819 redbot/cogs/audio/audio.py:847
+#: redbot/cogs/audio/audio.py:914 redbot/cogs/audio/audio.py:932
+#: redbot/cogs/audio/audio.py:956 redbot/cogs/audio/audio.py:1026
+#: redbot/cogs/audio/audio.py:1280 redbot/cogs/audio/audio.py:1371
+#: redbot/cogs/audio/audio.py:1388 redbot/cogs/audio/audio.py:1411
+#: redbot/cogs/audio/audio.py:1419 redbot/cogs/audio/audio.py:2190
+#: redbot/cogs/audio/audio.py:2527 redbot/cogs/audio/audio.py:2860
+#: redbot/cogs/audio/audio.py:3201 redbot/cogs/audio/audio.py:3255
+#: redbot/cogs/audio/audio.py:3305 redbot/cogs/audio/audio.py:3497
+#: redbot/cogs/audio/audio.py:3575 redbot/cogs/audio/audio.py:3605
msgid "Nothing playing."
msgstr ""
-#: redbot/cogs/audio/audio.py:473
+#: redbot/cogs/audio/audio.py:758
msgid "Not connected anywhere."
msgstr ""
-#: redbot/cogs/audio/audio.py:478
-msgid "Connected in {num} servers:"
+#: redbot/cogs/audio/audio.py:764
+msgid "Playing in {num}/{total} servers:"
msgstr ""
-#: redbot/cogs/audio/audio.py:486
+#: redbot/cogs/audio/audio.py:779
#, docstring
msgid "Bump a track number to the top of the queue."
msgstr ""
-#: redbot/cogs/audio/audio.py:495
+#: redbot/cogs/audio/audio.py:788
msgid "You must be in the voice channel to bump a track."
msgstr ""
-#: redbot/cogs/audio/audio.py:499
+#: redbot/cogs/audio/audio.py:792
msgid "You need the DJ role to bump tracks."
msgstr ""
-#: redbot/cogs/audio/audio.py:502 redbot/cogs/audio/audio.py:1739
+#: redbot/cogs/audio/audio.py:795 redbot/cogs/audio/audio.py:2875
msgid "Song number must be greater than 1 and within the queue limit."
msgstr ""
-#: redbot/cogs/audio/audio.py:517
+#: redbot/cogs/audio/audio.py:810
msgid "Moved {track} to the top of the queue."
msgstr ""
-#: redbot/cogs/audio/audio.py:523
+#: redbot/cogs/audio/audio.py:817
#, docstring
msgid "Disconnect from the voice channel."
msgstr ""
-#: redbot/cogs/audio/audio.py:528
+#: redbot/cogs/audio/audio.py:826
msgid "You need the DJ role to disconnect."
msgstr ""
-#: redbot/cogs/audio/audio.py:532
+#: redbot/cogs/audio/audio.py:830
msgid "There are other people listening to music."
msgstr ""
-#: redbot/cogs/audio/audio.py:540
+#: redbot/cogs/audio/audio.py:845
+#, docstring
+msgid "Equalizer management."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:865
+#, docstring
+msgid "Delete a saved eq preset."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:887
+#, docstring
+msgid "List saved eq presets."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:890
+msgid "No saved equalizer presets."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:897
+msgid "{num} preset(s)"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:903
+#, docstring
+msgid "Load a saved eq preset."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:930
+#, docstring
+msgid "Reset the eq to 0 across all bands."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:946
+msgid "Equalizer values have been reset."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:954
+#, docstring
+msgid "Save the current eq settings to a preset."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:958
+msgid "Please enter a name for this equalizer preset."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:972
+msgid "No equalizer preset name entered, try the command again later."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:981 redbot/cogs/audio/audio.py:2213
+msgid "Try the command again with a shorter name."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:985
+msgid "Preset name already exists, do you want to replace it?"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:994
+msgid "Not saving preset."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1019
+#, docstring
+msgid "Set an eq band with a band number or name and value.\\n\\n Band positions are 1-15 and values have a range of -0.25 to 1.0.\\n Band names are 25, 40, 63, 100, 160, 250, 400, 630, 1k, 1.6k, 2.5k, 4k, 6.3k, 10k, and 16k Hz.\\n Setting a band value to -0.25 nullifies it while +0.25 is double.\\n "
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1063
+msgid "Valid band numbers are 1-15 or the band names listed in the help for this command."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1099
#, docstring
msgid "Local playback commands."
msgstr ""
-#: redbot/cogs/audio/audio.py:545
+#: redbot/cogs/audio/audio.py:1104
#, docstring
msgid "Play all songs in a localtracks folder."
msgstr ""
-#: redbot/cogs/audio/audio.py:552
+#: redbot/cogs/audio/audio.py:1115
+msgid "No localtracks folder named {name}."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1121
#, docstring
msgid "Play a local track."
msgstr ""
-#: redbot/cogs/audio/audio.py:557
+#: redbot/cogs/audio/audio.py:1126
msgid "No local track folders found."
msgstr ""
-#: redbot/cogs/audio/audio.py:600
+#: redbot/cogs/audio/audio.py:1169
#, docstring
msgid "Search for songs across all localtracks folders."
msgstr ""
-#: redbot/cogs/audio/audio.py:605
+#: redbot/cogs/audio/audio.py:1174
msgid "No album folders found."
msgstr ""
-#: redbot/cogs/audio/audio.py:612 redbot/cogs/audio/audio.py:1634
+#: redbot/cogs/audio/audio.py:1181 redbot/cogs/audio/audio.py:2816
msgid "No matches."
msgstr ""
-#: redbot/cogs/audio/audio.py:688
+#: redbot/cogs/audio/audio.py:1269
msgid "No localtracks folder."
msgstr ""
-#: redbot/cogs/audio/audio.py:696
+#: redbot/cogs/audio/audio.py:1278
#, docstring
msgid "Now playing."
msgstr ""
-#: redbot/cogs/audio/audio.py:716
+#: redbot/cogs/audio/audio.py:1298
msgid "Requested by: **{track.requester}**"
msgstr ""
-#: redbot/cogs/audio/audio.py:726
+#: redbot/cogs/audio/audio.py:1308
msgid "Nothing."
msgstr ""
-#: redbot/cogs/audio/audio.py:785
+#: redbot/cogs/audio/audio.py:1368
#, docstring
-msgid "Pause and resume."
+msgid "Pause or resume a playing track."
msgstr ""
-#: redbot/cogs/audio/audio.py:794
-msgid "You must be in the voice channel to pause the music."
+#: redbot/cogs/audio/audio.py:1377
+msgid "You must be in the voice channel pause or resume."
msgstr ""
-#: redbot/cogs/audio/audio.py:800
-msgid "You need the DJ role to pause tracks."
+#: redbot/cogs/audio/audio.py:1384
+msgid "You need the DJ role to pause or resume tracks."
msgstr ""
-#: redbot/cogs/audio/audio.py:814
+#: redbot/cogs/audio/audio.py:1401
msgid "Track Paused"
msgstr ""
-#: redbot/cogs/audio/audio.py:821
+#: redbot/cogs/audio/audio.py:1407
msgid "Track Resumed"
msgstr ""
-#: redbot/cogs/audio/audio.py:826
-msgid "Track is paused."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:828
-msgid "Track is playing."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:834
+#: redbot/cogs/audio/audio.py:1417
#, docstring
msgid "Queue percentage."
msgstr ""
-#: redbot/cogs/audio/audio.py:860
+#: redbot/cogs/audio/audio.py:1443
msgid "Nothing in the queue."
msgstr ""
-#: redbot/cogs/audio/audio.py:882
+#: redbot/cogs/audio/audio.py:1465
msgid "Queued and playing tracks:"
msgstr ""
-#: redbot/cogs/audio/audio.py:890
+#: redbot/cogs/audio/audio.py:1474
#, docstring
msgid "Play a URL or search for a track."
msgstr ""
-#: redbot/cogs/audio/audio.py:900 redbot/cogs/audio/audio.py:1411
-#: redbot/cogs/audio/audio.py:1795
+#: redbot/cogs/audio/audio.py:1481
+msgid "That URL is not allowed."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1484 redbot/cogs/audio/audio.py:2437
+#: redbot/cogs/audio/audio.py:2928 redbot/cogs/audio/audio.py:3047
+msgid "Connection to Lavalink has failed."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1486 redbot/cogs/audio/audio.py:2439
+#: redbot/cogs/audio/audio.py:2930 redbot/cogs/audio/audio.py:3049
+msgid "Please check your console or logs for details."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1495 redbot/cogs/audio/audio.py:2449
+#: redbot/cogs/audio/audio.py:2939 redbot/cogs/audio/audio.py:3543
msgid "I don't have permission to connect to your channel."
msgstr ""
-#: redbot/cogs/audio/audio.py:906 redbot/cogs/audio/audio.py:1422
-#: redbot/cogs/audio/audio.py:1801 redbot/cogs/audio/audio.py:1889
+#: redbot/cogs/audio/audio.py:1501 redbot/cogs/audio/audio.py:2461
+#: redbot/cogs/audio/audio.py:2945 redbot/cogs/audio/audio.py:3056
+#: redbot/cogs/audio/audio.py:3555
msgid "Connect to a voice channel first."
msgstr ""
-#: redbot/cogs/audio/audio.py:909 redbot/cogs/audio/audio.py:1418
-#: redbot/cogs/audio/audio.py:1804 redbot/cogs/audio/audio.py:1892
+#: redbot/cogs/audio/audio.py:1504 redbot/cogs/audio/audio.py:2457
+#: redbot/cogs/audio/audio.py:2948 redbot/cogs/audio/audio.py:3059
+#: redbot/cogs/audio/audio.py:3558
msgid "Connection to Lavalink has not yet been established."
msgstr ""
-#: redbot/cogs/audio/audio.py:913
+#: redbot/cogs/audio/audio.py:1508
msgid "You need the DJ role to queue tracks."
msgstr ""
-#: redbot/cogs/audio/audio.py:922
+#: redbot/cogs/audio/audio.py:1519
msgid "You must be in the voice channel to use the play command."
msgstr ""
-#: redbot/cogs/audio/audio.py:928
+#: redbot/cogs/audio/audio.py:1525
msgid "No tracks to play."
msgstr ""
-#: redbot/cogs/audio/audio.py:942 redbot/cogs/audio/audio.py:1450
-#: redbot/cogs/audio/audio.py:1828 redbot/cogs/audio/audio.py:1865
+#: redbot/cogs/audio/audio.py:1565
+msgid "The owner needs to set the Spotify client ID, Spotify client secret, and YouTube API key before Spotify URLs or codes can be used. \\nSee `{prefix}audioset youtubeapi` and `{prefix}audioset spotifyapi` for instructions."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1575 redbot/cogs/audio/audio.py:2493
+msgid "Wait until the playlist has finished loading."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1592 redbot/cogs/audio/audio.py:1657
+#: redbot/cogs/audio/audio.py:2499 redbot/cogs/audio/audio.py:2509
+#: redbot/cogs/audio/audio.py:2973 redbot/cogs/audio/audio.py:3027
msgid "Nothing found."
msgstr ""
-#: redbot/cogs/audio/audio.py:953 redbot/cogs/audio/audio.py:1295
+#: redbot/cogs/audio/audio.py:1600
+msgid "The Spotify API key or client secret has not been set properly. \\nUse `{prefix}audioset spotifyapi` for instructions."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1639 redbot/cogs/audio/audio.py:1776
+msgid "This doesn't seem to be a valid Spotify URL or code."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1688 redbot/cogs/audio/audio.py:2320
msgid "Playlist Enqueued"
msgstr ""
-#: redbot/cogs/audio/audio.py:954 redbot/cogs/audio/audio.py:1296
-msgid "Added {num} tracks to the queue."
+#: redbot/cogs/audio/audio.py:1689 redbot/cogs/audio/audio.py:2321
+msgid "Added {num} tracks to the queue.{maxlength_msg}"
msgstr ""
-#: redbot/cogs/audio/audio.py:958
+#: redbot/cogs/audio/audio.py:1695
msgid "{time} until start of playlist playback: starts at #{position} in queue"
msgstr ""
-#: redbot/cogs/audio/audio.py:980 redbot/cogs/audio/audio.py:1938
+#: redbot/cogs/audio/audio.py:1711 redbot/cogs/audio/audio.py:3125
+msgid "Track exceeds maximum length."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1717
+msgid "Nothing found. Check your Lavalink logs for details."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1732 redbot/cogs/audio/audio.py:3108
msgid "Track Enqueued"
msgstr ""
-#: redbot/cogs/audio/audio.py:984 redbot/cogs/audio/audio.py:1944
+#: redbot/cogs/audio/audio.py:1736 redbot/cogs/audio/audio.py:3114
msgid "{time} until track playback: #{position} in queue"
msgstr ""
-#: redbot/cogs/audio/audio.py:989 redbot/cogs/audio/audio.py:1949
+#: redbot/cogs/audio/audio.py:1741 redbot/cogs/audio/audio.py:3119
msgid "#{position} in queue"
msgstr ""
-#: redbot/cogs/audio/audio.py:997
+#: redbot/cogs/audio/audio.py:1761
+msgid "The Spotify API key or client secret has not been set properly. \\nUse `{prefix}audioset spotifyapi` for instructions."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1793 redbot/cogs/audio/audio.py:2384
+msgid "Please wait, adding tracks..."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1809
+msgid "The connection was reset while loading the playlist."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1826 redbot/cogs/audio/audio.py:2401
+msgid "Loading track {num}/{total}..."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1840
+msgid "Approximate time remaining: {seconds}"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1850
+msgid "Nothing found.\\nThe YouTube API key may be invalid or you may be rate limited on YouTube's search service.\\nCheck the YouTube API key again and follow the instructions at `{prefix}audioset youtubeapi`."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1871
#, docstring
msgid "Playlist configuration options."
msgstr ""
-#: redbot/cogs/audio/audio.py:1002
+#: redbot/cogs/audio/audio.py:1876
#, docstring
-msgid "Add a track URL, playlist link, or quick search to a playlist.\n\n"
-" The track(s) will be appended to the end of the playlist.\n"
-" "
+msgid "Add a track URL, playlist link, or quick search to a playlist.\\n\\n The track(s) will be appended to the end of the playlist.\\n "
msgstr ""
-#: redbot/cogs/audio/audio.py:1014 redbot/cogs/audio/audio.py:1078
-#: redbot/cogs/audio/audio.py:1228
+#: redbot/cogs/audio/audio.py:1888 redbot/cogs/audio/audio.py:2028
+#: redbot/cogs/audio/audio.py:2241
msgid "You are not the author of that playlist."
msgstr ""
-#: redbot/cogs/audio/audio.py:1024
+#: redbot/cogs/audio/audio.py:1898
msgid "{track} is already in {playlist}."
msgstr ""
-#: redbot/cogs/audio/audio.py:1033 redbot/cogs/audio/audio.py:1082
-#: redbot/cogs/audio/audio.py:1092 redbot/cogs/audio/audio.py:1231
+#: redbot/cogs/audio/audio.py:1907 redbot/cogs/audio/audio.py:2032
+#: redbot/cogs/audio/audio.py:2081 redbot/cogs/audio/audio.py:2244
msgid "No playlist with that name."
msgstr ""
-#: redbot/cogs/audio/audio.py:1040
+#: redbot/cogs/audio/audio.py:1914
msgid "{track} appended to {playlist}."
msgstr ""
-#: redbot/cogs/audio/audio.py:1046
+#: redbot/cogs/audio/audio.py:1920
msgid "{num} tracks appended to {playlist}."
msgstr ""
-#: redbot/cogs/audio/audio.py:1053
+#: redbot/cogs/audio/audio.py:1928
+#, docstring
+msgid "Copy a playlist from one server to another."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1932
+msgid "Invalid server ID for source server."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1934
+msgid "Invalid server ID for target server."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1939
+msgid "No playlist with that name in {from_guild_name}."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1950
+msgid "Playlist {name} copied from {from_guild_name} to {to_guild_name}."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1962
+msgid "A playlist with that name already exists in {to_guild_name}.\\nPlease enter a new name for this playlist."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1975
+msgid "Try the playlist copy command again with a shorter name."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1980
+msgid "Playlist name already exists in {to_guild_name}, try the playlist copy command again with a different name."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1986 redbot/cogs/audio/audio.py:2220
+msgid "No playlist name entered, try again later."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1991
+msgid "Playlist {name} copied from {from_guild_name} to {to_guild_name}.\\nNew playlist name on {to_guild_name}: {new_name}"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2003
#, docstring
msgid "Create an empty playlist."
msgstr ""
-#: redbot/cogs/audio/audio.py:1057 redbot/cogs/audio/audio.py:1172
+#: redbot/cogs/audio/audio.py:2007 redbot/cogs/audio/audio.py:2183
msgid "You need the DJ role to save playlists."
msgstr ""
-#: redbot/cogs/audio/audio.py:1061 redbot/cogs/audio/audio.py:1176
-#: redbot/cogs/audio/audio.py:1204
+#: redbot/cogs/audio/audio.py:2011 redbot/cogs/audio/audio.py:2187
+#: redbot/cogs/audio/audio.py:2217
msgid "Playlist name already exists, try again with a different name."
msgstr ""
-#: redbot/cogs/audio/audio.py:1067
+#: redbot/cogs/audio/audio.py:2017
msgid "Empty playlist {name} created."
msgstr ""
-#: redbot/cogs/audio/audio.py:1071
+#: redbot/cogs/audio/audio.py:2021
#, docstring
msgid "Delete a saved playlist."
msgstr ""
-#: redbot/cogs/audio/audio.py:1083
+#: redbot/cogs/audio/audio.py:2033
msgid "{name} playlist deleted."
msgstr ""
-#: redbot/cogs/audio/audio.py:1087
+#: redbot/cogs/audio/audio.py:2039
+#, docstring
+msgid "Download a copy of a playlist.\\n\\n These files can be used with the [p]playlist upload command.\\n Red v2-compatible playlists can be generated by passing True\\n for the v2 variable."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2061
+msgid "That playlist has no tracks."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2063 redbot/cogs/audio/audio.py:2331
+msgid "That playlist doesn't exist."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2076
#, docstring
msgid "Retrieve information from a saved playlist."
msgstr ""
-#: redbot/cogs/audio/audio.py:1100
-msgid "**Custom playlist.**"
+#: redbot/cogs/audio/audio.py:2101
+msgid "Playlist info for {playlist_name}:\\n"
msgstr ""
-#: redbot/cogs/audio/audio.py:1102
-msgid "URL: <{url}>"
+#: redbot/cogs/audio/audio.py:2105
+msgid "Playlist info for {playlist_name}:\\nURL: {url}"
msgstr ""
-#: redbot/cogs/audio/audio.py:1105
-msgid "Playlist info for {playlist_name}:"
+#: redbot/cogs/audio/audio.py:2116
+msgid "Author: {author_name} | {num} track(s)"
msgstr ""
-#: redbot/cogs/audio/audio.py:1106
-msgid "Author: **{author_name}**\n"
-"{url}"
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:1110
-msgid "{num} track(s)"
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:1115
+#: redbot/cogs/audio/audio.py:2126
#, docstring
msgid "List saved playlists."
msgstr ""
-#: redbot/cogs/audio/audio.py:1118
+#: redbot/cogs/audio/audio.py:2129
msgid "No saved playlists."
msgstr ""
-#: redbot/cogs/audio/audio.py:1130
+#: redbot/cogs/audio/audio.py:2141
msgid "Tracks: {num}"
msgstr ""
-#: redbot/cogs/audio/audio.py:1131
-msgid "Author: {name}\n"
+#: redbot/cogs/audio/audio.py:2142
+msgid "Author: {name}\\n"
msgstr ""
-#: redbot/cogs/audio/audio.py:1155
+#: redbot/cogs/audio/audio.py:2166
msgid "Playlists for {server_name}:"
msgstr ""
-#: redbot/cogs/audio/audio.py:1159
+#: redbot/cogs/audio/audio.py:2170
msgid "Page {page_num}/{total_pages} | {num} playlists"
msgstr ""
-#: redbot/cogs/audio/audio.py:1168
+#: redbot/cogs/audio/audio.py:2179
#, docstring
msgid "Save the queue to a playlist."
msgstr ""
-#: redbot/cogs/audio/audio.py:1189
+#: redbot/cogs/audio/audio.py:2193 redbot/cogs/audio/audio.py:2590
+#: redbot/cogs/audio/audio.py:2593 redbot/cogs/audio/audio.py:2613
+#: redbot/cogs/audio/audio.py:2756 redbot/cogs/audio/audio.py:2759
+#: redbot/cogs/audio/audio.py:2775 redbot/cogs/audio/audio.py:2778
+#: redbot/cogs/audio/audio.py:2810 redbot/cogs/audio/audio.py:2812
+#: redbot/cogs/audio/audio.py:3418 redbot/cogs/audio/audio.py:3422
+#: redbot/cogs/audio/audio.py:3429
+msgid "There's nothing in the queue."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2202
msgid "Please enter a name for this playlist."
msgstr ""
-#: redbot/cogs/audio/audio.py:1200
-msgid "Try the command again with a shorter name."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:1207
-msgid "No playlist name entered, try again later."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:1214
+#: redbot/cogs/audio/audio.py:2227
msgid "Playlist {name} saved from current queue: {num} tracks added."
msgstr ""
-#: redbot/cogs/audio/audio.py:1221
+#: redbot/cogs/audio/audio.py:2234
#, docstring
msgid "Remove a track from a playlist by url."
msgstr ""
-#: redbot/cogs/audio/audio.py:1235
+#: redbot/cogs/audio/audio.py:2248
msgid "URL not in playlist."
msgstr ""
-#: redbot/cogs/audio/audio.py:1239
+#: redbot/cogs/audio/audio.py:2252
msgid "No tracks left, removing playlist."
msgstr ""
-#: redbot/cogs/audio/audio.py:1246
+#: redbot/cogs/audio/audio.py:2259
msgid "{num} entries have been removed from the {playlist_name} playlist."
msgstr ""
-#: redbot/cogs/audio/audio.py:1253
+#: redbot/cogs/audio/audio.py:2266
msgid "The track has been removed from the {playlist_name} playlist."
msgstr ""
-#: redbot/cogs/audio/audio.py:1260
+#: redbot/cogs/audio/audio.py:2273
#, docstring
msgid "Save a playlist from a url."
msgstr ""
-#: redbot/cogs/audio/audio.py:1272
+#: redbot/cogs/audio/audio.py:2285
msgid "Playlist {name} saved: {num} tracks added."
msgstr ""
-#: redbot/cogs/audio/audio.py:1279
+#: redbot/cogs/audio/audio.py:2292
#, docstring
msgid "Load a playlist into the queue."
msgstr ""
-#: redbot/cogs/audio/audio.py:1304
-msgid "That playlist doesn't exist."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:1309
+#: redbot/cogs/audio/audio.py:2336
#, docstring
msgid "Convert a Red v2 playlist file to a playlist."
msgstr ""
-#: redbot/cogs/audio/audio.py:1315
+#: redbot/cogs/audio/audio.py:2342
msgid "Please upload the playlist file. Any other message will cancel this operation."
msgstr ""
-#: redbot/cogs/audio/audio.py:1323
+#: redbot/cogs/audio/audio.py:2350
msgid "No file detected, try again later."
msgstr ""
-#: redbot/cogs/audio/audio.py:1327
+#: redbot/cogs/audio/audio.py:2354
msgid "Upload cancelled."
msgstr ""
-#: redbot/cogs/audio/audio.py:1331
+#: redbot/cogs/audio/audio.py:2358
msgid "Only playlist files can be uploaded."
msgstr ""
-#: redbot/cogs/audio/audio.py:1336
+#: redbot/cogs/audio/audio.py:2363
msgid "Not a valid playlist file."
msgstr ""
-#: redbot/cogs/audio/audio.py:1352
+#: redbot/cogs/audio/audio.py:2379
msgid "A playlist already exists with this name."
msgstr ""
-#: redbot/cogs/audio/audio.py:1357
-msgid "Please wait, adding tracks..."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:1371
-msgid "Loading track {num}/{total}..."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:1377
+#: redbot/cogs/audio/audio.py:2407
msgid "No tracks found."
msgstr ""
-#: redbot/cogs/audio/audio.py:1383
+#: redbot/cogs/audio/audio.py:2413
msgid "Added {num} tracks from the {playlist_name} playlist. {num_bad} track(s) could not be loaded."
msgstr ""
-#: redbot/cogs/audio/audio.py:1388
+#: redbot/cogs/audio/audio.py:2418
msgid "Added {num} tracks from the {playlist_name} playlist."
msgstr ""
-#: redbot/cogs/audio/audio.py:1392
+#: redbot/cogs/audio/audio.py:2422
msgid "Playlist Saved"
msgstr ""
-#: redbot/cogs/audio/audio.py:1403
+#: redbot/cogs/audio/audio.py:2433
msgid "You need the DJ role to use playlists."
msgstr ""
-#: redbot/cogs/audio/audio.py:1432
+#: redbot/cogs/audio/audio.py:2471
msgid "You must be in the voice channel to use the playlist command."
msgstr ""
-#: redbot/cogs/audio/audio.py:1464
+#: redbot/cogs/audio/audio.py:2525
#, docstring
msgid "Skip to the start of the previously played track."
msgstr ""
-#: redbot/cogs/audio/audio.py:1474 redbot/cogs/audio/audio.py:2121
+#: redbot/cogs/audio/audio.py:2535 redbot/cogs/audio/audio.py:3317
msgid "You need the DJ role to skip tracks."
msgstr ""
-#: redbot/cogs/audio/audio.py:1479 redbot/cogs/audio/audio.py:2115
+#: redbot/cogs/audio/audio.py:2540 redbot/cogs/audio/audio.py:3311
msgid "You must be in the voice channel to skip the music."
msgstr ""
-#: redbot/cogs/audio/audio.py:1482
+#: redbot/cogs/audio/audio.py:2543
msgid "Turn shuffle off to use this command."
msgstr ""
-#: redbot/cogs/audio/audio.py:1484
+#: redbot/cogs/audio/audio.py:2545
msgid "No previous track."
msgstr ""
-#: redbot/cogs/audio/audio.py:1501
+#: redbot/cogs/audio/audio.py:2562
msgid "Replaying Track"
msgstr ""
-#: redbot/cogs/audio/audio.py:1509
+#: redbot/cogs/audio/audio.py:2571
#, docstring
-msgid "List the queue.\n\n"
-" Use [p]queue search to search the queue.\n"
-" "
+msgid "List the songs in the queue."
msgstr ""
-#: redbot/cogs/audio/audio.py:1514 redbot/cogs/audio/audio.py:1517
-#: redbot/cogs/audio/audio.py:1544 redbot/cogs/audio/audio.py:2221
-#: redbot/cogs/audio/audio.py:2225 redbot/cogs/audio/audio.py:2232
-msgid "There's nothing in the queue."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:1553
+#: redbot/cogs/audio/audio.py:2622
msgid "**Currently livestreaming:**"
msgstr ""
-#: redbot/cogs/audio/audio.py:1559 redbot/cogs/audio/audio.py:1569
-#: redbot/cogs/audio/audio.py:1575
+#: redbot/cogs/audio/audio.py:2628 redbot/cogs/audio/audio.py:2638
+#: redbot/cogs/audio/audio.py:2644
msgid "Playing: "
msgstr ""
-#: redbot/cogs/audio/audio.py:1562 redbot/cogs/audio/audio.py:1570
-msgid "Requested by: **{user}**\n"
+#: redbot/cogs/audio/audio.py:2631
+msgid "Requested by: **{user}**\\n"
msgstr ""
-#: redbot/cogs/audio/audio.py:1577
+#: redbot/cogs/audio/audio.py:2639
+msgid "Requested by: **{user}**\\n"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2646
msgid "Requested by: **{user}**"
msgstr ""
-#: redbot/cogs/audio/audio.py:1595 redbot/cogs/audio/audio.py:1599
-#: redbot/cogs/audio/audio.py:1604
-msgid "requested by **{user}**\n"
+#: redbot/cogs/audio/audio.py:2664
+msgid "requested by **{user}**\\n"
msgstr ""
-#: redbot/cogs/audio/audio.py:1615
+#: redbot/cogs/audio/audio.py:2668
+msgid "requested by **{user}**\\n"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2673
+msgid "requested by **{user}**\\n"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2684
msgid "Page {page_num}/{total_pages} | {num_tracks} tracks, {num_remaining} remaining"
msgstr ""
-#: redbot/cogs/audio/audio.py:1624
+#: redbot/cogs/audio/audio.py:2693
msgid "Repeat"
msgstr ""
-#: redbot/cogs/audio/audio.py:1626
+#: redbot/cogs/audio/audio.py:2695
msgid "Shuffle"
msgstr ""
-#: redbot/cogs/audio/audio.py:1683
+#: redbot/cogs/audio/audio.py:2740
msgid "Matching Tracks:"
msgstr ""
-#: redbot/cogs/audio/audio.py:1686 redbot/cogs/audio/audio.py:2010
+#: redbot/cogs/audio/audio.py:2743 redbot/cogs/audio/audio.py:3182
msgid "Page {page_num}/{total_pages}"
msgstr ""
-#: redbot/cogs/audio/audio.py:1695
+#: redbot/cogs/audio/audio.py:2752
+#, docstring
+msgid "Clears the queue."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2764
+msgid "You need the DJ role to clear the queue."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2766
+msgid "The queue has been cleared."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2771
+#, docstring
+msgid "Removes songs from the queue if the requester is not in the voice channel."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2783
+msgid "You need the DJ role to clean the queue."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2794
+msgid "Removed 0 tracks."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2798
+msgid "Removed {removed_tracks} tracks queued by members outside of the voice channel."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2806
+#, docstring
+msgid "Search the queue."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2829
#, docstring
msgid "Toggle repeat."
msgstr ""
-#: redbot/cogs/audio/audio.py:1701
+#: redbot/cogs/audio/audio.py:2835
msgid "You need the DJ role to toggle repeat."
msgstr ""
-#: redbot/cogs/audio/audio.py:1712
+#: redbot/cogs/audio/audio.py:2843
msgid "You must be in the voice channel to toggle repeat."
msgstr ""
-#: redbot/cogs/audio/audio.py:1715
+#: redbot/cogs/audio/audio.py:2849
msgid "Repeat tracks: {true_or_false}."
msgstr ""
-#: redbot/cogs/audio/audio.py:1721
+#: redbot/cogs/audio/audio.py:2857
#, docstring
msgid "Remove a specific track number from the queue."
msgstr ""
-#: redbot/cogs/audio/audio.py:1727
+#: redbot/cogs/audio/audio.py:2863
msgid "Nothing queued."
msgstr ""
-#: redbot/cogs/audio/audio.py:1730
+#: redbot/cogs/audio/audio.py:2866
msgid "You need the DJ role to remove tracks."
msgstr ""
-#: redbot/cogs/audio/audio.py:1735
+#: redbot/cogs/audio/audio.py:2871
msgid "You must be in the voice channel to manage the queue."
msgstr ""
-#: redbot/cogs/audio/audio.py:1751
+#: redbot/cogs/audio/audio.py:2887
msgid "Removed {track} from the queue."
msgstr ""
-#: redbot/cogs/audio/audio.py:1757
+#: redbot/cogs/audio/audio.py:2894
#, docstring
-msgid "Pick a track with a search.\n\n"
-" Use `[p]search list ` to queue all tracks found\n"
-" on YouTube. `[p]search sc ` will search SoundCloud\n"
-" instead of YouTube.\n"
-" "
+msgid "Pick a track with a search.\\n\\n Use `[p]search list ` to queue all tracks found\\n on YouTube. `[p]search sc ` will search SoundCloud\\n instead of YouTube.\\n "
msgstr ""
-#: redbot/cogs/audio/audio.py:1814
+#: redbot/cogs/audio/audio.py:2958
msgid "You must be in the voice channel to enqueue tracks."
msgstr ""
-#: redbot/cogs/audio/audio.py:1831
-msgid "Queued {num} track(s)."
+#: redbot/cogs/audio/audio.py:2997
+msgid "Queued {num} track(s).{maxlength_msg}"
msgstr ""
-#: redbot/cogs/audio/audio.py:1837
+#: redbot/cogs/audio/audio.py:3003
msgid "{time} until start of search playback: starts at #{position} in queue"
msgstr ""
-#: redbot/cogs/audio/audio.py:1997
+#: redbot/cogs/audio/audio.py:3169
msgid "Tracks Found:"
msgstr ""
-#: redbot/cogs/audio/audio.py:1998
+#: redbot/cogs/audio/audio.py:3170
msgid "search results"
msgstr ""
-#: redbot/cogs/audio/audio.py:2001
+#: redbot/cogs/audio/audio.py:3173
msgid "Folders Found:"
msgstr ""
-#: redbot/cogs/audio/audio.py:2002
+#: redbot/cogs/audio/audio.py:3174
msgid "local folders"
msgstr ""
-#: redbot/cogs/audio/audio.py:2004
+#: redbot/cogs/audio/audio.py:3176
msgid "Files Found:"
msgstr ""
-#: redbot/cogs/audio/audio.py:2005
+#: redbot/cogs/audio/audio.py:3177
msgid "local tracks"
msgstr ""
-#: redbot/cogs/audio/audio.py:2022
+#: redbot/cogs/audio/audio.py:3195
#, docstring
-msgid "Seek ahead or behind on a track by seconds."
+msgid "Seek ahead or behind on a track by seconds or a to a specific time.\\n\\n Accepts seconds or a value formatted like 00:00:00 (`hh:mm:ss`) or 00:00 (`mm:ss`)."
msgstr ""
-#: redbot/cogs/audio/audio.py:2031
+#: redbot/cogs/audio/audio.py:3206
msgid "You must be in the voice channel to use seek."
msgstr ""
-#: redbot/cogs/audio/audio.py:2036
+#: redbot/cogs/audio/audio.py:3211
msgid "You need the DJ role to use seek."
msgstr ""
-#: redbot/cogs/audio/audio.py:2042 redbot/cogs/audio/audio.py:2278
+#: redbot/cogs/audio/audio.py:3217 redbot/cogs/audio/audio.py:3510
msgid "There are other people listening - vote to skip instead."
msgstr ""
-#: redbot/cogs/audio/audio.py:2046
+#: redbot/cogs/audio/audio.py:3221
msgid "Can't seek on a stream."
msgstr ""
-#: redbot/cogs/audio/audio.py:2052
+#: redbot/cogs/audio/audio.py:3230
+msgid "Invalid input for the time to seek."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:3236
msgid "Moved {num_seconds}s to 00:00:00"
msgstr ""
-#: redbot/cogs/audio/audio.py:2057
+#: redbot/cogs/audio/audio.py:3241
msgid "Moved {num_seconds}s to {time}"
msgstr ""
-#: redbot/cogs/audio/audio.py:2068
+#: redbot/cogs/audio/audio.py:3249
+msgid "Moved to {time}"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:3261
#, docstring
msgid "Toggle shuffle."
msgstr ""
-#: redbot/cogs/audio/audio.py:2072
+#: redbot/cogs/audio/audio.py:3265
msgid "You need the DJ role to toggle shuffle."
msgstr ""
-#: redbot/cogs/audio/audio.py:2083
+#: redbot/cogs/audio/audio.py:3273
msgid "You must be in the voice channel to toggle shuffle."
msgstr ""
-#: redbot/cogs/audio/audio.py:2086
+#: redbot/cogs/audio/audio.py:3279
msgid "Shuffle tracks: {true_or_false}."
msgstr ""
-#: redbot/cogs/audio/audio.py:2092
+#: redbot/cogs/audio/audio.py:3287
#, docstring
-msgid "Make Red sing one of her songs"
+msgid "Make Red sing one of her songs."
msgstr ""
-#: redbot/cogs/audio/audio.py:2107
+#: redbot/cogs/audio/audio.py:3303
#, docstring
-msgid "Skip to the next track."
+msgid "Skip to the next track, or to a given track number."
msgstr ""
-#: redbot/cogs/audio/audio.py:2126
+#: redbot/cogs/audio/audio.py:3322
+msgid "Can't skip to a specific track in vote mode without the DJ role."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:3326
msgid "I removed your vote to skip."
msgstr ""
-#: redbot/cogs/audio/audio.py:2129
+#: redbot/cogs/audio/audio.py:3329
msgid "You voted to skip."
msgstr ""
-#: redbot/cogs/audio/audio.py:2142
+#: redbot/cogs/audio/audio.py:3342
msgid "Vote threshold met."
msgstr ""
-#: redbot/cogs/audio/audio.py:2145
+#: redbot/cogs/audio/audio.py:3345
msgid " Votes: {num_votes}/{num_members} ({cur_percent}% out of {required_percent}% needed)"
msgstr ""
-#: redbot/cogs/audio/audio.py:2228
+#: redbot/cogs/audio/audio.py:3425
msgid "Currently livestreaming {track}"
msgstr ""
-#: redbot/cogs/audio/audio.py:2235
+#: redbot/cogs/audio/audio.py:3432
msgid "{time} left on {track}"
msgstr ""
-#: redbot/cogs/audio/audio.py:2253
+#: redbot/cogs/audio/audio.py:3441
+msgid "Track number must be equal to or greater than 1."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:3454
+msgid "Can't skip to a track while shuffle is enabled."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:3470
msgid "Track Skipped"
msgstr ""
-#: redbot/cogs/audio/audio.py:2261
+#: redbot/cogs/audio/audio.py:3493
#, docstring
msgid "Stop playback and clear the queue."
msgstr ""
-#: redbot/cogs/audio/audio.py:2271
+#: redbot/cogs/audio/audio.py:3503
msgid "You must be in the voice channel to stop the music."
msgstr ""
-#: redbot/cogs/audio/audio.py:2282
+#: redbot/cogs/audio/audio.py:3514
msgid "You need the DJ role to stop the music."
msgstr ""
-#: redbot/cogs/audio/audio.py:2284
+#: redbot/cogs/audio/audio.py:3516
msgid "Stopping..."
msgstr ""
-#: redbot/cogs/audio/audio.py:2294
+#: redbot/cogs/audio/audio.py:3531
+#, docstring
+msgid "Summon the bot to a voice channel."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:3535
+msgid "You need the DJ role to summon the bot."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:3565
#, docstring
msgid "Set the volume, 1% - 150%."
msgstr ""
-#: redbot/cogs/audio/audio.py:2300
+#: redbot/cogs/audio/audio.py:3571
msgid "Current Volume:"
msgstr ""
-#: redbot/cogs/audio/audio.py:2312
+#: redbot/cogs/audio/audio.py:3583
msgid "You must be in the voice channel to change the volume."
msgstr ""
-#: redbot/cogs/audio/audio.py:2318
+#: redbot/cogs/audio/audio.py:3589
msgid "You need the DJ role to change the volume."
msgstr ""
-#: redbot/cogs/audio/audio.py:2331
+#: redbot/cogs/audio/audio.py:3602
msgid "Volume:"
msgstr ""
-#: redbot/cogs/audio/audio.py:2341
+#: redbot/cogs/audio/audio.py:3613
#, docstring
msgid "Lavalink server configuration options."
msgstr ""
-#: redbot/cogs/audio/audio.py:2346
+#: redbot/cogs/audio/audio.py:3618
#, docstring
msgid "Toggle using external lavalink servers."
msgstr ""
-#: redbot/cogs/audio/audio.py:2357 redbot/cogs/audio/audio.py:2366
+#: redbot/cogs/audio/audio.py:3625 redbot/cogs/audio/audio.py:3635
msgid "External lavalink server: {true_or_false}."
msgstr ""
-#: redbot/cogs/audio/audio.py:2361
-msgid "Defaults reset."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:2373
+#: redbot/cogs/audio/audio.py:3642
#, docstring
msgid "Set the lavalink server host."
msgstr ""
-#: redbot/cogs/audio/audio.py:2377 redbot/cogs/audio/audio.py:2382
+#: redbot/cogs/audio/audio.py:3646 redbot/cogs/audio/audio.py:3651
msgid "Host set to {host}."
msgstr ""
-#: redbot/cogs/audio/audio.py:2379 redbot/cogs/audio/audio.py:2395
-#: redbot/cogs/audio/audio.py:2413 redbot/cogs/audio/audio.py:2429
+#: redbot/cogs/audio/audio.py:3648 redbot/cogs/audio/audio.py:3664
+#: redbot/cogs/audio/audio.py:3682 redbot/cogs/audio/audio.py:3698
msgid "External lavalink server set to True."
msgstr ""
-#: redbot/cogs/audio/audio.py:2388
+#: redbot/cogs/audio/audio.py:3657
#, docstring
msgid "Set the lavalink server password."
msgstr ""
-#: redbot/cogs/audio/audio.py:2393 redbot/cogs/audio/audio.py:2399
+#: redbot/cogs/audio/audio.py:3662 redbot/cogs/audio/audio.py:3668
msgid "Server password set to {password}."
msgstr ""
-#: redbot/cogs/audio/audio.py:2406
+#: redbot/cogs/audio/audio.py:3675
#, docstring
msgid "Set the lavalink REST server port."
msgstr ""
-#: redbot/cogs/audio/audio.py:2411 redbot/cogs/audio/audio.py:2416
+#: redbot/cogs/audio/audio.py:3680 redbot/cogs/audio/audio.py:3685
msgid "REST port set to {port}."
msgstr ""
-#: redbot/cogs/audio/audio.py:2422
+#: redbot/cogs/audio/audio.py:3691
#, docstring
msgid "Set the lavalink websocket server port."
msgstr ""
-#: redbot/cogs/audio/audio.py:2427 redbot/cogs/audio/audio.py:2432
+#: redbot/cogs/audio/audio.py:3696 redbot/cogs/audio/audio.py:3701
msgid "Websocket port set to {port}."
msgstr ""
-#: redbot/cogs/audio/audio.py:2461
+#: redbot/cogs/audio/audio.py:3801
msgid "Not enough {currency} ({required_credits} required)."
msgstr ""
diff --git a/redbot/cogs/audio/locales/bg-BG.po b/redbot/cogs/audio/locales/bg-BG.po
index 49685e1e0..d33dbb82b 100644
--- a/redbot/cogs/audio/locales/bg-BG.po
+++ b/redbot/cogs/audio/locales/bg-BG.po
@@ -1,14 +1,14 @@
msgid ""
msgstr ""
"Project-Id-Version: red-discordbot\n"
-"POT-Creation-Date: 2019-02-17 02:24+0000\n"
-"PO-Revision-Date: 2019-02-25 03:06\n"
-"Last-Translator: Kowlin \n"
+"POT-Creation-Date: 2019-07-05 22:33+0200\n"
+"PO-Revision-Date: 2019-07-06 16:12\n"
+"Last-Translator: Robert Jansen (Kowlin)\n"
"Language-Team: Bulgarian\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"Generated-By: redgettext 2.2\n"
+"Generated-By: redgettext 3.0\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: crowdin.com\n"
"X-Crowdin-Project: red-discordbot\n"
@@ -16,971 +16,1275 @@ msgstr ""
"X-Crowdin-File: /cogs/audio/locales/messages.pot\n"
"Language: bg_BG\n"
-#: redbot/cogs/audio/audio.py:38
+#: redbot/cogs/audio/audio.py:47
#, docstring
msgid "Play audio through voice channels."
msgstr ""
-#: redbot/cogs/audio/audio.py:173 redbot/cogs/audio/audio.py:735
-msgid "Now Playing"
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:177
-msgid "Track length: {length} | Requested by: {user}"
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:201 redbot/cogs/audio/audio.py:227
+#: redbot/cogs/audio/audio.py:260
msgid "music in {} servers"
msgstr ""
-#: redbot/cogs/audio/audio.py:211
+#: redbot/cogs/audio/audio.py:300 redbot/cogs/audio/audio.py:1317
+msgid "Now Playing"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:304
+msgid "Track length: {length} | Requested by: {user}"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:331
msgid "Queue ended."
msgstr ""
-#: redbot/cogs/audio/audio.py:240
+#: redbot/cogs/audio/audio.py:350
msgid "Track Error"
msgstr ""
-#: redbot/cogs/audio/audio.py:245
+#: redbot/cogs/audio/audio.py:355
msgid "Skipping..."
msgstr ""
-#: redbot/cogs/audio/audio.py:252
+#: redbot/cogs/audio/audio.py:363
#, docstring
msgid "Music configuration options."
msgstr ""
-#: redbot/cogs/audio/audio.py:258
+#: redbot/cogs/audio/audio.py:369
#, docstring
-msgid "Toggle DJ mode.\n\n"
-" DJ mode allows users with the DJ role to use audio commands.\n"
-" "
+msgid "Toggle the bot auto-disconnecting when done playing.\\n\\n This setting takes precedence over [p]audioset emptydisconnect.\\n "
msgstr ""
-#: redbot/cogs/audio/audio.py:265
+#: redbot/cogs/audio/audio.py:377
+msgid "Auto-disconnection at queue end: {true_or_false}."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:385
+#, docstring
+msgid "Toggle DJ mode.\\n\\n DJ mode allows users with the DJ role to use audio commands.\\n "
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:392
msgid "Please set a role to use with DJ mode. Enter the role name or ID now."
msgstr ""
-#: redbot/cogs/audio/audio.py:273
+#: redbot/cogs/audio/audio.py:400
msgid "Response timed out, try again later."
msgstr ""
-#: redbot/cogs/audio/audio.py:284
+#: redbot/cogs/audio/audio.py:405
+msgid "DJ role enabled: {true_or_false}."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:411
#, docstring
msgid "Auto-disconnection after x seconds while stopped. 0 to disable."
msgstr ""
-#: redbot/cogs/audio/audio.py:286 redbot/cogs/audio/audio.py:317
-#: redbot/cogs/audio/audio.py:405
+#: redbot/cogs/audio/audio.py:413 redbot/cogs/audio/audio.py:436
+#: redbot/cogs/audio/audio.py:543 redbot/cogs/audio/audio.py:687
msgid "Can't be less than zero."
msgstr ""
-#: redbot/cogs/audio/audio.py:291
+#: redbot/cogs/audio/audio.py:418
msgid "Empty disconnect disabled."
msgstr ""
-#: redbot/cogs/audio/audio.py:296
+#: redbot/cogs/audio/audio.py:423
msgid "Empty disconnect timer set to {num_seconds}."
msgstr ""
-#: redbot/cogs/audio/audio.py:307
-#, docstring
-msgid "Set the role to use for DJ mode."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:310
-msgid "DJ role set to: {role.name}."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:315
+#: redbot/cogs/audio/audio.py:434
#, docstring
msgid "Set a price for queueing tracks for non-mods. 0 to disable."
msgstr ""
-#: redbot/cogs/audio/audio.py:320
+#: redbot/cogs/audio/audio.py:439
msgid "Jukebox mode disabled."
msgstr ""
-#: redbot/cogs/audio/audio.py:325
+#: redbot/cogs/audio/audio.py:444
msgid "Track queueing command price set to {price} {currency}."
msgstr ""
-#: redbot/cogs/audio/audio.py:336
+#: redbot/cogs/audio/audio.py:455
+#, docstring
+msgid "Set the localtracks path if the Lavalink.jar is not run from the Audio data folder.\\n\\n Leave the path blank to reset the path to the default, the Audio data directory.\\n "
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:463
+msgid "The localtracks path location has been reset to the default location."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:466
+msgid "This setting is only for bot owners to set a localtracks folder location if the Lavalink.jar is being ran from outside of the Audio data directory.\\nIn the example below, the full path for 'ParentDirectory' must be passed to this command.\\nThe path must not contain spaces.\\n```\\nParentDirectory\\n |__ localtracks (folder)\\n | |__ Awesome Album Name (folder)\\n | |__01 Cool Song.mp3\\n | |__02 Groovy Song.mp3\\n |\\n |__ Lavalink.jar\\n |__ application.yml\\n```\\nThe folder path given to this command must contain the Lavalink.jar, the application.yml, and the localtracks folder.\\nUse this command with no path given to reset it to the default, the Audio data directory for this bot.\\nDo you want to continue to set the provided path for local tracks?"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:505
+msgid "{local_path} does not seem like a valid path."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:520
+msgid "The path that was entered does not have {filelist} file in that location. The path will still be saved, but please check the path and the file location before attempting to play local tracks or start your Lavalink.jar."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:530
+msgid "Localtracks path set to: {local_path}."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:536
+#, docstring
+msgid "Max length of a track to queue in seconds. 0 to disable.\\n\\n Accepts seconds or a value formatted like 00:00:00 (`hh:mm:ss`) or 00:00 (`mm:ss`).\\n Invalid input will turn the max length setting off."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:545
+msgid "Track max length disabled."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:549
+msgid "Track max length set to {seconds}."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:559
#, docstring
msgid "Toggle track announcement and other bot messages."
msgstr ""
-#: redbot/cogs/audio/audio.py:340
+#: redbot/cogs/audio/audio.py:563
msgid "Verbose mode on: {true_or_false}."
msgstr ""
-#: redbot/cogs/audio/audio.py:345
+#: redbot/cogs/audio/audio.py:569
+#, docstring
+msgid "Toggle the domain restriction on Audio.\\n\\n When toggled off, users will be able to play songs from non-commercial websites and links.\\n When toggled on, users are restricted to YouTube, SoundCloud, Mixer, Vimeo, Twitch, and Bandcamp links."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:576
+msgid "Commercial links only: {true_or_false}."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:582
+#, docstring
+msgid "Set the role to use for DJ mode."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:585
+msgid "DJ role set to: {role.name}."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:589
#, docstring
msgid "Show the current settings."
msgstr ""
-#: redbot/cogs/audio/audio.py:358
+#: redbot/cogs/audio/audio.py:604
msgid "Server Settings"
msgstr ""
-#: redbot/cogs/audio/audio.py:360
-msgid "Disconnect timer: [{num_seconds}]\n"
+#: redbot/cogs/audio/audio.py:606
+msgid "Auto-disconnect: [{dc}]\\n"
msgstr ""
-#: redbot/cogs/audio/audio.py:364
-msgid "DJ Role: [{role.name}]\n"
+#: redbot/cogs/audio/audio.py:609
+msgid "Disconnect timer: [{num_seconds}]\\n"
msgstr ""
-#: redbot/cogs/audio/audio.py:366
-msgid "Jukebox: [{jukebox_name}]\n"
+#: redbot/cogs/audio/audio.py:613
+msgid "DJ Role: [{role.name}]\\n"
msgstr ""
-#: redbot/cogs/audio/audio.py:367
-msgid "Command price: [{jukebox_price}]\n"
+#: redbot/cogs/audio/audio.py:615
+msgid "Jukebox: [{jukebox_name}]\\n"
msgstr ""
-#: redbot/cogs/audio/audio.py:368
-msgid "Repeat: [{repeat}]\n"
-"Shuffle: [{shuffle}]\n"
-"Song notify msgs: [{notify}]\n"
-"Songs as status: [{status}]\n"
+#: redbot/cogs/audio/audio.py:616
+msgid "Command price: [{jukebox_price}]\\n"
msgstr ""
-#: redbot/cogs/audio/audio.py:375
-msgid "Thumbnails: [{0}]\n"
+#: redbot/cogs/audio/audio.py:618
+msgid "Max track length: [{tracklength}]\\n"
msgstr ""
-#: redbot/cogs/audio/audio.py:377
-msgid "Vote skip: [{vote_enabled}]\n"
-"Skip percentage: [{vote_percent}%]\n"
+#: redbot/cogs/audio/audio.py:621
+msgid "Repeat: [{repeat}]\\nShuffle: [{shuffle}]\\nSong notify msgs: [{notify}]\\nSongs as status: [{status}]\\n"
msgstr ""
-#: redbot/cogs/audio/audio.py:380
-msgid "---Lavalink Settings---\n"
-"Cog version: [{version}]\n"
-"Jar build: [{jarbuild}]\n"
-"External server: [{use_external_lavalink}]"
+#: redbot/cogs/audio/audio.py:628
+msgid "Thumbnails: [{0}]\\n"
msgstr ""
-#: redbot/cogs/audio/audio.py:393
+#: redbot/cogs/audio/audio.py:630
+msgid "Vote skip: [{vote_enabled}]\\nSkip percentage: [{vote_percent}%]\\n"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:633
+msgid "---Lavalink Settings--- \\nCog version: [{version}]\\nJar build: [{jarbuild}]\\nExternal server: [{use_external_lavalink}]\\n"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:640
+msgid "Localtracks path: [{localpath}]\\n"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:648
#, docstring
-msgid "Toggle displaying a thumbnail on audio messages."
+msgid "Instructions to set the Spotify API tokens."
msgstr ""
-#: redbot/cogs/audio/audio.py:397
-msgid "Thumbnail display: {true_or_false}."
+#: redbot/cogs/audio/audio.py:649
+msgid "1. Go to Spotify developers and log in with your Spotify account.\\n(https://developer.spotify.com/dashboard/applications)\\n2. Click \\\"Create An App\\\".\\n3. Fill out the form provided with your app name, etc.\\n4. When asked if you're developing commercial integration select \\\"No\\\".\\n5. Accept the terms and conditions.\\n6. Copy your client ID and your client secret into:\\n`{prefix}set api spotify client_id, client_secret,`"
msgstr ""
-#: redbot/cogs/audio/audio.py:403
-#, docstring
-msgid "Percentage needed for non-mods to skip tracks. 0 to disable."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:411
-msgid "Voting disabled. All users can use queue management commands."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:416
-msgid "Vote percentage set to {percent}%."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:425
+#: redbot/cogs/audio/audio.py:665
#, docstring
msgid "Enable/disable tracks' titles as status."
msgstr ""
-#: redbot/cogs/audio/audio.py:429
+#: redbot/cogs/audio/audio.py:669
msgid "Song titles as status: {true_or_false}."
msgstr ""
-#: redbot/cogs/audio/audio.py:435
+#: redbot/cogs/audio/audio.py:675
+#, docstring
+msgid "Toggle displaying a thumbnail on audio messages."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:679
+msgid "Thumbnail display: {true_or_false}."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:685
+#, docstring
+msgid "Percentage needed for non-mods to skip tracks. 0 to disable."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:693
+msgid "Voting disabled. All users can use queue management commands."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:698
+msgid "Vote percentage set to {percent}%."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:707
+#, docstring
+msgid "Instructions to set the YouTube API key."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:726
#, docstring
msgid "Audio stats."
msgstr ""
-#: redbot/cogs/audio/audio.py:469 redbot/cogs/audio/audio.py:489
-#: redbot/cogs/audio/audio.py:698 redbot/cogs/audio/audio.py:788
-#: redbot/cogs/audio/audio.py:804 redbot/cogs/audio/audio.py:829
-#: redbot/cogs/audio/audio.py:836 redbot/cogs/audio/audio.py:1179
-#: redbot/cogs/audio/audio.py:1466 redbot/cogs/audio/audio.py:1724
-#: redbot/cogs/audio/audio.py:2026 redbot/cogs/audio/audio.py:2063
-#: redbot/cogs/audio/audio.py:2109 redbot/cogs/audio/audio.py:2265
-#: redbot/cogs/audio/audio.py:2304 redbot/cogs/audio/audio.py:2334
+#: redbot/cogs/audio/audio.py:754 redbot/cogs/audio/audio.py:782
+#: redbot/cogs/audio/audio.py:819 redbot/cogs/audio/audio.py:847
+#: redbot/cogs/audio/audio.py:914 redbot/cogs/audio/audio.py:932
+#: redbot/cogs/audio/audio.py:956 redbot/cogs/audio/audio.py:1026
+#: redbot/cogs/audio/audio.py:1280 redbot/cogs/audio/audio.py:1371
+#: redbot/cogs/audio/audio.py:1388 redbot/cogs/audio/audio.py:1411
+#: redbot/cogs/audio/audio.py:1419 redbot/cogs/audio/audio.py:2190
+#: redbot/cogs/audio/audio.py:2527 redbot/cogs/audio/audio.py:2860
+#: redbot/cogs/audio/audio.py:3201 redbot/cogs/audio/audio.py:3255
+#: redbot/cogs/audio/audio.py:3305 redbot/cogs/audio/audio.py:3497
+#: redbot/cogs/audio/audio.py:3575 redbot/cogs/audio/audio.py:3605
msgid "Nothing playing."
msgstr ""
-#: redbot/cogs/audio/audio.py:473
+#: redbot/cogs/audio/audio.py:758
msgid "Not connected anywhere."
msgstr ""
-#: redbot/cogs/audio/audio.py:478
-msgid "Connected in {num} servers:"
+#: redbot/cogs/audio/audio.py:764
+msgid "Playing in {num}/{total} servers:"
msgstr ""
-#: redbot/cogs/audio/audio.py:486
+#: redbot/cogs/audio/audio.py:779
#, docstring
msgid "Bump a track number to the top of the queue."
msgstr ""
-#: redbot/cogs/audio/audio.py:495
+#: redbot/cogs/audio/audio.py:788
msgid "You must be in the voice channel to bump a track."
msgstr ""
-#: redbot/cogs/audio/audio.py:499
+#: redbot/cogs/audio/audio.py:792
msgid "You need the DJ role to bump tracks."
msgstr ""
-#: redbot/cogs/audio/audio.py:502 redbot/cogs/audio/audio.py:1739
+#: redbot/cogs/audio/audio.py:795 redbot/cogs/audio/audio.py:2875
msgid "Song number must be greater than 1 and within the queue limit."
msgstr ""
-#: redbot/cogs/audio/audio.py:517
+#: redbot/cogs/audio/audio.py:810
msgid "Moved {track} to the top of the queue."
msgstr ""
-#: redbot/cogs/audio/audio.py:523
+#: redbot/cogs/audio/audio.py:817
#, docstring
msgid "Disconnect from the voice channel."
msgstr ""
-#: redbot/cogs/audio/audio.py:528
+#: redbot/cogs/audio/audio.py:826
msgid "You need the DJ role to disconnect."
msgstr ""
-#: redbot/cogs/audio/audio.py:532
+#: redbot/cogs/audio/audio.py:830
msgid "There are other people listening to music."
msgstr ""
-#: redbot/cogs/audio/audio.py:540
+#: redbot/cogs/audio/audio.py:845
+#, docstring
+msgid "Equalizer management."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:865
+#, docstring
+msgid "Delete a saved eq preset."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:887
+#, docstring
+msgid "List saved eq presets."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:890
+msgid "No saved equalizer presets."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:897
+msgid "{num} preset(s)"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:903
+#, docstring
+msgid "Load a saved eq preset."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:930
+#, docstring
+msgid "Reset the eq to 0 across all bands."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:946
+msgid "Equalizer values have been reset."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:954
+#, docstring
+msgid "Save the current eq settings to a preset."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:958
+msgid "Please enter a name for this equalizer preset."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:972
+msgid "No equalizer preset name entered, try the command again later."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:981 redbot/cogs/audio/audio.py:2213
+msgid "Try the command again with a shorter name."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:985
+msgid "Preset name already exists, do you want to replace it?"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:994
+msgid "Not saving preset."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1019
+#, docstring
+msgid "Set an eq band with a band number or name and value.\\n\\n Band positions are 1-15 and values have a range of -0.25 to 1.0.\\n Band names are 25, 40, 63, 100, 160, 250, 400, 630, 1k, 1.6k, 2.5k, 4k, 6.3k, 10k, and 16k Hz.\\n Setting a band value to -0.25 nullifies it while +0.25 is double.\\n "
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1063
+msgid "Valid band numbers are 1-15 or the band names listed in the help for this command."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1099
#, docstring
msgid "Local playback commands."
msgstr ""
-#: redbot/cogs/audio/audio.py:545
+#: redbot/cogs/audio/audio.py:1104
#, docstring
msgid "Play all songs in a localtracks folder."
msgstr ""
-#: redbot/cogs/audio/audio.py:552
+#: redbot/cogs/audio/audio.py:1115
+msgid "No localtracks folder named {name}."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1121
#, docstring
msgid "Play a local track."
msgstr ""
-#: redbot/cogs/audio/audio.py:557
+#: redbot/cogs/audio/audio.py:1126
msgid "No local track folders found."
msgstr ""
-#: redbot/cogs/audio/audio.py:600
+#: redbot/cogs/audio/audio.py:1169
#, docstring
msgid "Search for songs across all localtracks folders."
msgstr ""
-#: redbot/cogs/audio/audio.py:605
+#: redbot/cogs/audio/audio.py:1174
msgid "No album folders found."
msgstr ""
-#: redbot/cogs/audio/audio.py:612 redbot/cogs/audio/audio.py:1634
+#: redbot/cogs/audio/audio.py:1181 redbot/cogs/audio/audio.py:2816
msgid "No matches."
msgstr ""
-#: redbot/cogs/audio/audio.py:688
+#: redbot/cogs/audio/audio.py:1269
msgid "No localtracks folder."
msgstr ""
-#: redbot/cogs/audio/audio.py:696
+#: redbot/cogs/audio/audio.py:1278
#, docstring
msgid "Now playing."
msgstr ""
-#: redbot/cogs/audio/audio.py:716
+#: redbot/cogs/audio/audio.py:1298
msgid "Requested by: **{track.requester}**"
msgstr ""
-#: redbot/cogs/audio/audio.py:726
+#: redbot/cogs/audio/audio.py:1308
msgid "Nothing."
msgstr ""
-#: redbot/cogs/audio/audio.py:785
+#: redbot/cogs/audio/audio.py:1368
#, docstring
-msgid "Pause and resume."
+msgid "Pause or resume a playing track."
msgstr ""
-#: redbot/cogs/audio/audio.py:794
-msgid "You must be in the voice channel to pause the music."
+#: redbot/cogs/audio/audio.py:1377
+msgid "You must be in the voice channel pause or resume."
msgstr ""
-#: redbot/cogs/audio/audio.py:800
-msgid "You need the DJ role to pause tracks."
+#: redbot/cogs/audio/audio.py:1384
+msgid "You need the DJ role to pause or resume tracks."
msgstr ""
-#: redbot/cogs/audio/audio.py:814
+#: redbot/cogs/audio/audio.py:1401
msgid "Track Paused"
msgstr ""
-#: redbot/cogs/audio/audio.py:821
+#: redbot/cogs/audio/audio.py:1407
msgid "Track Resumed"
msgstr ""
-#: redbot/cogs/audio/audio.py:826
-msgid "Track is paused."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:828
-msgid "Track is playing."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:834
+#: redbot/cogs/audio/audio.py:1417
#, docstring
msgid "Queue percentage."
msgstr ""
-#: redbot/cogs/audio/audio.py:860
+#: redbot/cogs/audio/audio.py:1443
msgid "Nothing in the queue."
msgstr ""
-#: redbot/cogs/audio/audio.py:882
+#: redbot/cogs/audio/audio.py:1465
msgid "Queued and playing tracks:"
msgstr ""
-#: redbot/cogs/audio/audio.py:890
+#: redbot/cogs/audio/audio.py:1474
#, docstring
msgid "Play a URL or search for a track."
msgstr ""
-#: redbot/cogs/audio/audio.py:900 redbot/cogs/audio/audio.py:1411
-#: redbot/cogs/audio/audio.py:1795
+#: redbot/cogs/audio/audio.py:1481
+msgid "That URL is not allowed."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1484 redbot/cogs/audio/audio.py:2437
+#: redbot/cogs/audio/audio.py:2928 redbot/cogs/audio/audio.py:3047
+msgid "Connection to Lavalink has failed."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1486 redbot/cogs/audio/audio.py:2439
+#: redbot/cogs/audio/audio.py:2930 redbot/cogs/audio/audio.py:3049
+msgid "Please check your console or logs for details."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1495 redbot/cogs/audio/audio.py:2449
+#: redbot/cogs/audio/audio.py:2939 redbot/cogs/audio/audio.py:3543
msgid "I don't have permission to connect to your channel."
msgstr ""
-#: redbot/cogs/audio/audio.py:906 redbot/cogs/audio/audio.py:1422
-#: redbot/cogs/audio/audio.py:1801 redbot/cogs/audio/audio.py:1889
+#: redbot/cogs/audio/audio.py:1501 redbot/cogs/audio/audio.py:2461
+#: redbot/cogs/audio/audio.py:2945 redbot/cogs/audio/audio.py:3056
+#: redbot/cogs/audio/audio.py:3555
msgid "Connect to a voice channel first."
msgstr ""
-#: redbot/cogs/audio/audio.py:909 redbot/cogs/audio/audio.py:1418
-#: redbot/cogs/audio/audio.py:1804 redbot/cogs/audio/audio.py:1892
+#: redbot/cogs/audio/audio.py:1504 redbot/cogs/audio/audio.py:2457
+#: redbot/cogs/audio/audio.py:2948 redbot/cogs/audio/audio.py:3059
+#: redbot/cogs/audio/audio.py:3558
msgid "Connection to Lavalink has not yet been established."
msgstr ""
-#: redbot/cogs/audio/audio.py:913
+#: redbot/cogs/audio/audio.py:1508
msgid "You need the DJ role to queue tracks."
msgstr ""
-#: redbot/cogs/audio/audio.py:922
+#: redbot/cogs/audio/audio.py:1519
msgid "You must be in the voice channel to use the play command."
msgstr ""
-#: redbot/cogs/audio/audio.py:928
+#: redbot/cogs/audio/audio.py:1525
msgid "No tracks to play."
msgstr ""
-#: redbot/cogs/audio/audio.py:942 redbot/cogs/audio/audio.py:1450
-#: redbot/cogs/audio/audio.py:1828 redbot/cogs/audio/audio.py:1865
+#: redbot/cogs/audio/audio.py:1565
+msgid "The owner needs to set the Spotify client ID, Spotify client secret, and YouTube API key before Spotify URLs or codes can be used. \\nSee `{prefix}audioset youtubeapi` and `{prefix}audioset spotifyapi` for instructions."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1575 redbot/cogs/audio/audio.py:2493
+msgid "Wait until the playlist has finished loading."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1592 redbot/cogs/audio/audio.py:1657
+#: redbot/cogs/audio/audio.py:2499 redbot/cogs/audio/audio.py:2509
+#: redbot/cogs/audio/audio.py:2973 redbot/cogs/audio/audio.py:3027
msgid "Nothing found."
msgstr ""
-#: redbot/cogs/audio/audio.py:953 redbot/cogs/audio/audio.py:1295
+#: redbot/cogs/audio/audio.py:1600
+msgid "The Spotify API key or client secret has not been set properly. \\nUse `{prefix}audioset spotifyapi` for instructions."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1639 redbot/cogs/audio/audio.py:1776
+msgid "This doesn't seem to be a valid Spotify URL or code."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1688 redbot/cogs/audio/audio.py:2320
msgid "Playlist Enqueued"
msgstr ""
-#: redbot/cogs/audio/audio.py:954 redbot/cogs/audio/audio.py:1296
-msgid "Added {num} tracks to the queue."
+#: redbot/cogs/audio/audio.py:1689 redbot/cogs/audio/audio.py:2321
+msgid "Added {num} tracks to the queue.{maxlength_msg}"
msgstr ""
-#: redbot/cogs/audio/audio.py:958
+#: redbot/cogs/audio/audio.py:1695
msgid "{time} until start of playlist playback: starts at #{position} in queue"
msgstr ""
-#: redbot/cogs/audio/audio.py:980 redbot/cogs/audio/audio.py:1938
+#: redbot/cogs/audio/audio.py:1711 redbot/cogs/audio/audio.py:3125
+msgid "Track exceeds maximum length."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1717
+msgid "Nothing found. Check your Lavalink logs for details."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1732 redbot/cogs/audio/audio.py:3108
msgid "Track Enqueued"
msgstr ""
-#: redbot/cogs/audio/audio.py:984 redbot/cogs/audio/audio.py:1944
+#: redbot/cogs/audio/audio.py:1736 redbot/cogs/audio/audio.py:3114
msgid "{time} until track playback: #{position} in queue"
msgstr ""
-#: redbot/cogs/audio/audio.py:989 redbot/cogs/audio/audio.py:1949
+#: redbot/cogs/audio/audio.py:1741 redbot/cogs/audio/audio.py:3119
msgid "#{position} in queue"
msgstr ""
-#: redbot/cogs/audio/audio.py:997
+#: redbot/cogs/audio/audio.py:1761
+msgid "The Spotify API key or client secret has not been set properly. \\nUse `{prefix}audioset spotifyapi` for instructions."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1793 redbot/cogs/audio/audio.py:2384
+msgid "Please wait, adding tracks..."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1809
+msgid "The connection was reset while loading the playlist."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1826 redbot/cogs/audio/audio.py:2401
+msgid "Loading track {num}/{total}..."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1840
+msgid "Approximate time remaining: {seconds}"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1850
+msgid "Nothing found.\\nThe YouTube API key may be invalid or you may be rate limited on YouTube's search service.\\nCheck the YouTube API key again and follow the instructions at `{prefix}audioset youtubeapi`."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1871
#, docstring
msgid "Playlist configuration options."
msgstr ""
-#: redbot/cogs/audio/audio.py:1002
+#: redbot/cogs/audio/audio.py:1876
#, docstring
-msgid "Add a track URL, playlist link, or quick search to a playlist.\n\n"
-" The track(s) will be appended to the end of the playlist.\n"
-" "
+msgid "Add a track URL, playlist link, or quick search to a playlist.\\n\\n The track(s) will be appended to the end of the playlist.\\n "
msgstr ""
-#: redbot/cogs/audio/audio.py:1014 redbot/cogs/audio/audio.py:1078
-#: redbot/cogs/audio/audio.py:1228
+#: redbot/cogs/audio/audio.py:1888 redbot/cogs/audio/audio.py:2028
+#: redbot/cogs/audio/audio.py:2241
msgid "You are not the author of that playlist."
msgstr ""
-#: redbot/cogs/audio/audio.py:1024
+#: redbot/cogs/audio/audio.py:1898
msgid "{track} is already in {playlist}."
msgstr ""
-#: redbot/cogs/audio/audio.py:1033 redbot/cogs/audio/audio.py:1082
-#: redbot/cogs/audio/audio.py:1092 redbot/cogs/audio/audio.py:1231
+#: redbot/cogs/audio/audio.py:1907 redbot/cogs/audio/audio.py:2032
+#: redbot/cogs/audio/audio.py:2081 redbot/cogs/audio/audio.py:2244
msgid "No playlist with that name."
msgstr ""
-#: redbot/cogs/audio/audio.py:1040
+#: redbot/cogs/audio/audio.py:1914
msgid "{track} appended to {playlist}."
msgstr ""
-#: redbot/cogs/audio/audio.py:1046
+#: redbot/cogs/audio/audio.py:1920
msgid "{num} tracks appended to {playlist}."
msgstr ""
-#: redbot/cogs/audio/audio.py:1053
+#: redbot/cogs/audio/audio.py:1928
+#, docstring
+msgid "Copy a playlist from one server to another."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1932
+msgid "Invalid server ID for source server."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1934
+msgid "Invalid server ID for target server."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1939
+msgid "No playlist with that name in {from_guild_name}."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1950
+msgid "Playlist {name} copied from {from_guild_name} to {to_guild_name}."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1962
+msgid "A playlist with that name already exists in {to_guild_name}.\\nPlease enter a new name for this playlist."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1975
+msgid "Try the playlist copy command again with a shorter name."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1980
+msgid "Playlist name already exists in {to_guild_name}, try the playlist copy command again with a different name."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1986 redbot/cogs/audio/audio.py:2220
+msgid "No playlist name entered, try again later."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1991
+msgid "Playlist {name} copied from {from_guild_name} to {to_guild_name}.\\nNew playlist name on {to_guild_name}: {new_name}"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2003
#, docstring
msgid "Create an empty playlist."
msgstr ""
-#: redbot/cogs/audio/audio.py:1057 redbot/cogs/audio/audio.py:1172
+#: redbot/cogs/audio/audio.py:2007 redbot/cogs/audio/audio.py:2183
msgid "You need the DJ role to save playlists."
msgstr ""
-#: redbot/cogs/audio/audio.py:1061 redbot/cogs/audio/audio.py:1176
-#: redbot/cogs/audio/audio.py:1204
+#: redbot/cogs/audio/audio.py:2011 redbot/cogs/audio/audio.py:2187
+#: redbot/cogs/audio/audio.py:2217
msgid "Playlist name already exists, try again with a different name."
msgstr ""
-#: redbot/cogs/audio/audio.py:1067
+#: redbot/cogs/audio/audio.py:2017
msgid "Empty playlist {name} created."
msgstr ""
-#: redbot/cogs/audio/audio.py:1071
+#: redbot/cogs/audio/audio.py:2021
#, docstring
msgid "Delete a saved playlist."
msgstr ""
-#: redbot/cogs/audio/audio.py:1083
+#: redbot/cogs/audio/audio.py:2033
msgid "{name} playlist deleted."
msgstr ""
-#: redbot/cogs/audio/audio.py:1087
+#: redbot/cogs/audio/audio.py:2039
+#, docstring
+msgid "Download a copy of a playlist.\\n\\n These files can be used with the [p]playlist upload command.\\n Red v2-compatible playlists can be generated by passing True\\n for the v2 variable."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2061
+msgid "That playlist has no tracks."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2063 redbot/cogs/audio/audio.py:2331
+msgid "That playlist doesn't exist."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2076
#, docstring
msgid "Retrieve information from a saved playlist."
msgstr ""
-#: redbot/cogs/audio/audio.py:1100
-msgid "**Custom playlist.**"
+#: redbot/cogs/audio/audio.py:2101
+msgid "Playlist info for {playlist_name}:\\n"
msgstr ""
-#: redbot/cogs/audio/audio.py:1102
-msgid "URL: <{url}>"
+#: redbot/cogs/audio/audio.py:2105
+msgid "Playlist info for {playlist_name}:\\nURL: {url}"
msgstr ""
-#: redbot/cogs/audio/audio.py:1105
-msgid "Playlist info for {playlist_name}:"
+#: redbot/cogs/audio/audio.py:2116
+msgid "Author: {author_name} | {num} track(s)"
msgstr ""
-#: redbot/cogs/audio/audio.py:1106
-msgid "Author: **{author_name}**\n"
-"{url}"
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:1110
-msgid "{num} track(s)"
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:1115
+#: redbot/cogs/audio/audio.py:2126
#, docstring
msgid "List saved playlists."
msgstr ""
-#: redbot/cogs/audio/audio.py:1118
+#: redbot/cogs/audio/audio.py:2129
msgid "No saved playlists."
msgstr ""
-#: redbot/cogs/audio/audio.py:1130
+#: redbot/cogs/audio/audio.py:2141
msgid "Tracks: {num}"
msgstr ""
-#: redbot/cogs/audio/audio.py:1131
-msgid "Author: {name}\n"
+#: redbot/cogs/audio/audio.py:2142
+msgid "Author: {name}\\n"
msgstr ""
-#: redbot/cogs/audio/audio.py:1155
+#: redbot/cogs/audio/audio.py:2166
msgid "Playlists for {server_name}:"
msgstr ""
-#: redbot/cogs/audio/audio.py:1159
+#: redbot/cogs/audio/audio.py:2170
msgid "Page {page_num}/{total_pages} | {num} playlists"
msgstr ""
-#: redbot/cogs/audio/audio.py:1168
+#: redbot/cogs/audio/audio.py:2179
#, docstring
msgid "Save the queue to a playlist."
msgstr ""
-#: redbot/cogs/audio/audio.py:1189
+#: redbot/cogs/audio/audio.py:2193 redbot/cogs/audio/audio.py:2590
+#: redbot/cogs/audio/audio.py:2593 redbot/cogs/audio/audio.py:2613
+#: redbot/cogs/audio/audio.py:2756 redbot/cogs/audio/audio.py:2759
+#: redbot/cogs/audio/audio.py:2775 redbot/cogs/audio/audio.py:2778
+#: redbot/cogs/audio/audio.py:2810 redbot/cogs/audio/audio.py:2812
+#: redbot/cogs/audio/audio.py:3418 redbot/cogs/audio/audio.py:3422
+#: redbot/cogs/audio/audio.py:3429
+msgid "There's nothing in the queue."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2202
msgid "Please enter a name for this playlist."
msgstr ""
-#: redbot/cogs/audio/audio.py:1200
-msgid "Try the command again with a shorter name."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:1207
-msgid "No playlist name entered, try again later."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:1214
+#: redbot/cogs/audio/audio.py:2227
msgid "Playlist {name} saved from current queue: {num} tracks added."
msgstr ""
-#: redbot/cogs/audio/audio.py:1221
+#: redbot/cogs/audio/audio.py:2234
#, docstring
msgid "Remove a track from a playlist by url."
msgstr ""
-#: redbot/cogs/audio/audio.py:1235
+#: redbot/cogs/audio/audio.py:2248
msgid "URL not in playlist."
msgstr ""
-#: redbot/cogs/audio/audio.py:1239
+#: redbot/cogs/audio/audio.py:2252
msgid "No tracks left, removing playlist."
msgstr ""
-#: redbot/cogs/audio/audio.py:1246
+#: redbot/cogs/audio/audio.py:2259
msgid "{num} entries have been removed from the {playlist_name} playlist."
msgstr ""
-#: redbot/cogs/audio/audio.py:1253
+#: redbot/cogs/audio/audio.py:2266
msgid "The track has been removed from the {playlist_name} playlist."
msgstr ""
-#: redbot/cogs/audio/audio.py:1260
+#: redbot/cogs/audio/audio.py:2273
#, docstring
msgid "Save a playlist from a url."
msgstr ""
-#: redbot/cogs/audio/audio.py:1272
+#: redbot/cogs/audio/audio.py:2285
msgid "Playlist {name} saved: {num} tracks added."
msgstr ""
-#: redbot/cogs/audio/audio.py:1279
+#: redbot/cogs/audio/audio.py:2292
#, docstring
msgid "Load a playlist into the queue."
msgstr ""
-#: redbot/cogs/audio/audio.py:1304
-msgid "That playlist doesn't exist."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:1309
+#: redbot/cogs/audio/audio.py:2336
#, docstring
msgid "Convert a Red v2 playlist file to a playlist."
msgstr ""
-#: redbot/cogs/audio/audio.py:1315
+#: redbot/cogs/audio/audio.py:2342
msgid "Please upload the playlist file. Any other message will cancel this operation."
msgstr ""
-#: redbot/cogs/audio/audio.py:1323
+#: redbot/cogs/audio/audio.py:2350
msgid "No file detected, try again later."
msgstr ""
-#: redbot/cogs/audio/audio.py:1327
+#: redbot/cogs/audio/audio.py:2354
msgid "Upload cancelled."
msgstr ""
-#: redbot/cogs/audio/audio.py:1331
+#: redbot/cogs/audio/audio.py:2358
msgid "Only playlist files can be uploaded."
msgstr ""
-#: redbot/cogs/audio/audio.py:1336
+#: redbot/cogs/audio/audio.py:2363
msgid "Not a valid playlist file."
msgstr ""
-#: redbot/cogs/audio/audio.py:1352
+#: redbot/cogs/audio/audio.py:2379
msgid "A playlist already exists with this name."
msgstr ""
-#: redbot/cogs/audio/audio.py:1357
-msgid "Please wait, adding tracks..."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:1371
-msgid "Loading track {num}/{total}..."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:1377
+#: redbot/cogs/audio/audio.py:2407
msgid "No tracks found."
msgstr ""
-#: redbot/cogs/audio/audio.py:1383
+#: redbot/cogs/audio/audio.py:2413
msgid "Added {num} tracks from the {playlist_name} playlist. {num_bad} track(s) could not be loaded."
msgstr ""
-#: redbot/cogs/audio/audio.py:1388
+#: redbot/cogs/audio/audio.py:2418
msgid "Added {num} tracks from the {playlist_name} playlist."
msgstr ""
-#: redbot/cogs/audio/audio.py:1392
+#: redbot/cogs/audio/audio.py:2422
msgid "Playlist Saved"
msgstr ""
-#: redbot/cogs/audio/audio.py:1403
+#: redbot/cogs/audio/audio.py:2433
msgid "You need the DJ role to use playlists."
msgstr ""
-#: redbot/cogs/audio/audio.py:1432
+#: redbot/cogs/audio/audio.py:2471
msgid "You must be in the voice channel to use the playlist command."
msgstr ""
-#: redbot/cogs/audio/audio.py:1464
+#: redbot/cogs/audio/audio.py:2525
#, docstring
msgid "Skip to the start of the previously played track."
msgstr ""
-#: redbot/cogs/audio/audio.py:1474 redbot/cogs/audio/audio.py:2121
+#: redbot/cogs/audio/audio.py:2535 redbot/cogs/audio/audio.py:3317
msgid "You need the DJ role to skip tracks."
msgstr ""
-#: redbot/cogs/audio/audio.py:1479 redbot/cogs/audio/audio.py:2115
+#: redbot/cogs/audio/audio.py:2540 redbot/cogs/audio/audio.py:3311
msgid "You must be in the voice channel to skip the music."
msgstr ""
-#: redbot/cogs/audio/audio.py:1482
+#: redbot/cogs/audio/audio.py:2543
msgid "Turn shuffle off to use this command."
msgstr ""
-#: redbot/cogs/audio/audio.py:1484
+#: redbot/cogs/audio/audio.py:2545
msgid "No previous track."
msgstr ""
-#: redbot/cogs/audio/audio.py:1501
+#: redbot/cogs/audio/audio.py:2562
msgid "Replaying Track"
msgstr ""
-#: redbot/cogs/audio/audio.py:1509
+#: redbot/cogs/audio/audio.py:2571
#, docstring
-msgid "List the queue.\n\n"
-" Use [p]queue search to search the queue.\n"
-" "
+msgid "List the songs in the queue."
msgstr ""
-#: redbot/cogs/audio/audio.py:1514 redbot/cogs/audio/audio.py:1517
-#: redbot/cogs/audio/audio.py:1544 redbot/cogs/audio/audio.py:2221
-#: redbot/cogs/audio/audio.py:2225 redbot/cogs/audio/audio.py:2232
-msgid "There's nothing in the queue."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:1553
+#: redbot/cogs/audio/audio.py:2622
msgid "**Currently livestreaming:**"
msgstr ""
-#: redbot/cogs/audio/audio.py:1559 redbot/cogs/audio/audio.py:1569
-#: redbot/cogs/audio/audio.py:1575
+#: redbot/cogs/audio/audio.py:2628 redbot/cogs/audio/audio.py:2638
+#: redbot/cogs/audio/audio.py:2644
msgid "Playing: "
msgstr ""
-#: redbot/cogs/audio/audio.py:1562 redbot/cogs/audio/audio.py:1570
-msgid "Requested by: **{user}**\n"
+#: redbot/cogs/audio/audio.py:2631
+msgid "Requested by: **{user}**\\n"
msgstr ""
-#: redbot/cogs/audio/audio.py:1577
+#: redbot/cogs/audio/audio.py:2639
+msgid "Requested by: **{user}**\\n"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2646
msgid "Requested by: **{user}**"
msgstr ""
-#: redbot/cogs/audio/audio.py:1595 redbot/cogs/audio/audio.py:1599
-#: redbot/cogs/audio/audio.py:1604
-msgid "requested by **{user}**\n"
+#: redbot/cogs/audio/audio.py:2664
+msgid "requested by **{user}**\\n"
msgstr ""
-#: redbot/cogs/audio/audio.py:1615
+#: redbot/cogs/audio/audio.py:2668
+msgid "requested by **{user}**\\n"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2673
+msgid "requested by **{user}**\\n"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2684
msgid "Page {page_num}/{total_pages} | {num_tracks} tracks, {num_remaining} remaining"
msgstr ""
-#: redbot/cogs/audio/audio.py:1624
+#: redbot/cogs/audio/audio.py:2693
msgid "Repeat"
msgstr ""
-#: redbot/cogs/audio/audio.py:1626
+#: redbot/cogs/audio/audio.py:2695
msgid "Shuffle"
msgstr ""
-#: redbot/cogs/audio/audio.py:1683
+#: redbot/cogs/audio/audio.py:2740
msgid "Matching Tracks:"
msgstr ""
-#: redbot/cogs/audio/audio.py:1686 redbot/cogs/audio/audio.py:2010
+#: redbot/cogs/audio/audio.py:2743 redbot/cogs/audio/audio.py:3182
msgid "Page {page_num}/{total_pages}"
msgstr ""
-#: redbot/cogs/audio/audio.py:1695
+#: redbot/cogs/audio/audio.py:2752
+#, docstring
+msgid "Clears the queue."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2764
+msgid "You need the DJ role to clear the queue."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2766
+msgid "The queue has been cleared."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2771
+#, docstring
+msgid "Removes songs from the queue if the requester is not in the voice channel."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2783
+msgid "You need the DJ role to clean the queue."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2794
+msgid "Removed 0 tracks."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2798
+msgid "Removed {removed_tracks} tracks queued by members outside of the voice channel."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2806
+#, docstring
+msgid "Search the queue."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2829
#, docstring
msgid "Toggle repeat."
msgstr ""
-#: redbot/cogs/audio/audio.py:1701
+#: redbot/cogs/audio/audio.py:2835
msgid "You need the DJ role to toggle repeat."
msgstr ""
-#: redbot/cogs/audio/audio.py:1712
+#: redbot/cogs/audio/audio.py:2843
msgid "You must be in the voice channel to toggle repeat."
msgstr ""
-#: redbot/cogs/audio/audio.py:1715
+#: redbot/cogs/audio/audio.py:2849
msgid "Repeat tracks: {true_or_false}."
msgstr ""
-#: redbot/cogs/audio/audio.py:1721
+#: redbot/cogs/audio/audio.py:2857
#, docstring
msgid "Remove a specific track number from the queue."
msgstr ""
-#: redbot/cogs/audio/audio.py:1727
+#: redbot/cogs/audio/audio.py:2863
msgid "Nothing queued."
msgstr ""
-#: redbot/cogs/audio/audio.py:1730
+#: redbot/cogs/audio/audio.py:2866
msgid "You need the DJ role to remove tracks."
msgstr ""
-#: redbot/cogs/audio/audio.py:1735
+#: redbot/cogs/audio/audio.py:2871
msgid "You must be in the voice channel to manage the queue."
msgstr ""
-#: redbot/cogs/audio/audio.py:1751
+#: redbot/cogs/audio/audio.py:2887
msgid "Removed {track} from the queue."
msgstr ""
-#: redbot/cogs/audio/audio.py:1757
+#: redbot/cogs/audio/audio.py:2894
#, docstring
-msgid "Pick a track with a search.\n\n"
-" Use `[p]search list ` to queue all tracks found\n"
-" on YouTube. `[p]search sc ` will search SoundCloud\n"
-" instead of YouTube.\n"
-" "
+msgid "Pick a track with a search.\\n\\n Use `[p]search list ` to queue all tracks found\\n on YouTube. `[p]search sc ` will search SoundCloud\\n instead of YouTube.\\n "
msgstr ""
-#: redbot/cogs/audio/audio.py:1814
+#: redbot/cogs/audio/audio.py:2958
msgid "You must be in the voice channel to enqueue tracks."
msgstr ""
-#: redbot/cogs/audio/audio.py:1831
-msgid "Queued {num} track(s)."
+#: redbot/cogs/audio/audio.py:2997
+msgid "Queued {num} track(s).{maxlength_msg}"
msgstr ""
-#: redbot/cogs/audio/audio.py:1837
+#: redbot/cogs/audio/audio.py:3003
msgid "{time} until start of search playback: starts at #{position} in queue"
msgstr ""
-#: redbot/cogs/audio/audio.py:1997
+#: redbot/cogs/audio/audio.py:3169
msgid "Tracks Found:"
msgstr ""
-#: redbot/cogs/audio/audio.py:1998
+#: redbot/cogs/audio/audio.py:3170
msgid "search results"
msgstr ""
-#: redbot/cogs/audio/audio.py:2001
+#: redbot/cogs/audio/audio.py:3173
msgid "Folders Found:"
msgstr ""
-#: redbot/cogs/audio/audio.py:2002
+#: redbot/cogs/audio/audio.py:3174
msgid "local folders"
msgstr ""
-#: redbot/cogs/audio/audio.py:2004
+#: redbot/cogs/audio/audio.py:3176
msgid "Files Found:"
msgstr ""
-#: redbot/cogs/audio/audio.py:2005
+#: redbot/cogs/audio/audio.py:3177
msgid "local tracks"
msgstr ""
-#: redbot/cogs/audio/audio.py:2022
+#: redbot/cogs/audio/audio.py:3195
#, docstring
-msgid "Seek ahead or behind on a track by seconds."
+msgid "Seek ahead or behind on a track by seconds or a to a specific time.\\n\\n Accepts seconds or a value formatted like 00:00:00 (`hh:mm:ss`) or 00:00 (`mm:ss`)."
msgstr ""
-#: redbot/cogs/audio/audio.py:2031
+#: redbot/cogs/audio/audio.py:3206
msgid "You must be in the voice channel to use seek."
msgstr ""
-#: redbot/cogs/audio/audio.py:2036
+#: redbot/cogs/audio/audio.py:3211
msgid "You need the DJ role to use seek."
msgstr ""
-#: redbot/cogs/audio/audio.py:2042 redbot/cogs/audio/audio.py:2278
+#: redbot/cogs/audio/audio.py:3217 redbot/cogs/audio/audio.py:3510
msgid "There are other people listening - vote to skip instead."
msgstr ""
-#: redbot/cogs/audio/audio.py:2046
+#: redbot/cogs/audio/audio.py:3221
msgid "Can't seek on a stream."
msgstr ""
-#: redbot/cogs/audio/audio.py:2052
+#: redbot/cogs/audio/audio.py:3230
+msgid "Invalid input for the time to seek."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:3236
msgid "Moved {num_seconds}s to 00:00:00"
msgstr ""
-#: redbot/cogs/audio/audio.py:2057
+#: redbot/cogs/audio/audio.py:3241
msgid "Moved {num_seconds}s to {time}"
msgstr ""
-#: redbot/cogs/audio/audio.py:2068
+#: redbot/cogs/audio/audio.py:3249
+msgid "Moved to {time}"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:3261
#, docstring
msgid "Toggle shuffle."
msgstr ""
-#: redbot/cogs/audio/audio.py:2072
+#: redbot/cogs/audio/audio.py:3265
msgid "You need the DJ role to toggle shuffle."
msgstr ""
-#: redbot/cogs/audio/audio.py:2083
+#: redbot/cogs/audio/audio.py:3273
msgid "You must be in the voice channel to toggle shuffle."
msgstr ""
-#: redbot/cogs/audio/audio.py:2086
+#: redbot/cogs/audio/audio.py:3279
msgid "Shuffle tracks: {true_or_false}."
msgstr ""
-#: redbot/cogs/audio/audio.py:2092
+#: redbot/cogs/audio/audio.py:3287
#, docstring
-msgid "Make Red sing one of her songs"
+msgid "Make Red sing one of her songs."
msgstr ""
-#: redbot/cogs/audio/audio.py:2107
+#: redbot/cogs/audio/audio.py:3303
#, docstring
-msgid "Skip to the next track."
+msgid "Skip to the next track, or to a given track number."
msgstr ""
-#: redbot/cogs/audio/audio.py:2126
+#: redbot/cogs/audio/audio.py:3322
+msgid "Can't skip to a specific track in vote mode without the DJ role."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:3326
msgid "I removed your vote to skip."
msgstr ""
-#: redbot/cogs/audio/audio.py:2129
+#: redbot/cogs/audio/audio.py:3329
msgid "You voted to skip."
msgstr ""
-#: redbot/cogs/audio/audio.py:2142
+#: redbot/cogs/audio/audio.py:3342
msgid "Vote threshold met."
msgstr ""
-#: redbot/cogs/audio/audio.py:2145
+#: redbot/cogs/audio/audio.py:3345
msgid " Votes: {num_votes}/{num_members} ({cur_percent}% out of {required_percent}% needed)"
msgstr ""
-#: redbot/cogs/audio/audio.py:2228
+#: redbot/cogs/audio/audio.py:3425
msgid "Currently livestreaming {track}"
msgstr ""
-#: redbot/cogs/audio/audio.py:2235
+#: redbot/cogs/audio/audio.py:3432
msgid "{time} left on {track}"
msgstr ""
-#: redbot/cogs/audio/audio.py:2253
+#: redbot/cogs/audio/audio.py:3441
+msgid "Track number must be equal to or greater than 1."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:3454
+msgid "Can't skip to a track while shuffle is enabled."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:3470
msgid "Track Skipped"
msgstr ""
-#: redbot/cogs/audio/audio.py:2261
+#: redbot/cogs/audio/audio.py:3493
#, docstring
msgid "Stop playback and clear the queue."
msgstr ""
-#: redbot/cogs/audio/audio.py:2271
+#: redbot/cogs/audio/audio.py:3503
msgid "You must be in the voice channel to stop the music."
msgstr ""
-#: redbot/cogs/audio/audio.py:2282
+#: redbot/cogs/audio/audio.py:3514
msgid "You need the DJ role to stop the music."
msgstr ""
-#: redbot/cogs/audio/audio.py:2284
+#: redbot/cogs/audio/audio.py:3516
msgid "Stopping..."
msgstr ""
-#: redbot/cogs/audio/audio.py:2294
+#: redbot/cogs/audio/audio.py:3531
+#, docstring
+msgid "Summon the bot to a voice channel."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:3535
+msgid "You need the DJ role to summon the bot."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:3565
#, docstring
msgid "Set the volume, 1% - 150%."
msgstr ""
-#: redbot/cogs/audio/audio.py:2300
+#: redbot/cogs/audio/audio.py:3571
msgid "Current Volume:"
msgstr ""
-#: redbot/cogs/audio/audio.py:2312
+#: redbot/cogs/audio/audio.py:3583
msgid "You must be in the voice channel to change the volume."
msgstr ""
-#: redbot/cogs/audio/audio.py:2318
+#: redbot/cogs/audio/audio.py:3589
msgid "You need the DJ role to change the volume."
msgstr ""
-#: redbot/cogs/audio/audio.py:2331
+#: redbot/cogs/audio/audio.py:3602
msgid "Volume:"
msgstr ""
-#: redbot/cogs/audio/audio.py:2341
+#: redbot/cogs/audio/audio.py:3613
#, docstring
msgid "Lavalink server configuration options."
msgstr ""
-#: redbot/cogs/audio/audio.py:2346
+#: redbot/cogs/audio/audio.py:3618
#, docstring
msgid "Toggle using external lavalink servers."
msgstr ""
-#: redbot/cogs/audio/audio.py:2357 redbot/cogs/audio/audio.py:2366
+#: redbot/cogs/audio/audio.py:3625 redbot/cogs/audio/audio.py:3635
msgid "External lavalink server: {true_or_false}."
msgstr ""
-#: redbot/cogs/audio/audio.py:2361
-msgid "Defaults reset."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:2373
+#: redbot/cogs/audio/audio.py:3642
#, docstring
msgid "Set the lavalink server host."
msgstr ""
-#: redbot/cogs/audio/audio.py:2377 redbot/cogs/audio/audio.py:2382
+#: redbot/cogs/audio/audio.py:3646 redbot/cogs/audio/audio.py:3651
msgid "Host set to {host}."
msgstr ""
-#: redbot/cogs/audio/audio.py:2379 redbot/cogs/audio/audio.py:2395
-#: redbot/cogs/audio/audio.py:2413 redbot/cogs/audio/audio.py:2429
+#: redbot/cogs/audio/audio.py:3648 redbot/cogs/audio/audio.py:3664
+#: redbot/cogs/audio/audio.py:3682 redbot/cogs/audio/audio.py:3698
msgid "External lavalink server set to True."
msgstr ""
-#: redbot/cogs/audio/audio.py:2388
+#: redbot/cogs/audio/audio.py:3657
#, docstring
msgid "Set the lavalink server password."
msgstr ""
-#: redbot/cogs/audio/audio.py:2393 redbot/cogs/audio/audio.py:2399
+#: redbot/cogs/audio/audio.py:3662 redbot/cogs/audio/audio.py:3668
msgid "Server password set to {password}."
msgstr ""
-#: redbot/cogs/audio/audio.py:2406
+#: redbot/cogs/audio/audio.py:3675
#, docstring
msgid "Set the lavalink REST server port."
msgstr ""
-#: redbot/cogs/audio/audio.py:2411 redbot/cogs/audio/audio.py:2416
+#: redbot/cogs/audio/audio.py:3680 redbot/cogs/audio/audio.py:3685
msgid "REST port set to {port}."
msgstr ""
-#: redbot/cogs/audio/audio.py:2422
+#: redbot/cogs/audio/audio.py:3691
#, docstring
msgid "Set the lavalink websocket server port."
msgstr ""
-#: redbot/cogs/audio/audio.py:2427 redbot/cogs/audio/audio.py:2432
+#: redbot/cogs/audio/audio.py:3696 redbot/cogs/audio/audio.py:3701
msgid "Websocket port set to {port}."
msgstr ""
-#: redbot/cogs/audio/audio.py:2461
+#: redbot/cogs/audio/audio.py:3801
msgid "Not enough {currency} ({required_credits} required)."
msgstr ""
diff --git a/redbot/cogs/audio/locales/cs-CZ.po b/redbot/cogs/audio/locales/cs-CZ.po
new file mode 100644
index 000000000..6d1a3303b
--- /dev/null
+++ b/redbot/cogs/audio/locales/cs-CZ.po
@@ -0,0 +1,1290 @@
+msgid ""
+msgstr ""
+"Project-Id-Version: red-discordbot\n"
+"POT-Creation-Date: 2019-07-05 22:33+0200\n"
+"PO-Revision-Date: 2019-07-14 02:15\n"
+"Last-Translator: Robert Jansen (Kowlin)\n"
+"Language-Team: Czech\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: redgettext 3.0\n"
+"Plural-Forms: nplurals=4; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 3;\n"
+"X-Generator: crowdin.com\n"
+"X-Crowdin-Project: red-discordbot\n"
+"X-Crowdin-Language: cs\n"
+"X-Crowdin-File: /cogs/audio/locales/messages.pot\n"
+"Language: cs_CZ\n"
+
+#: redbot/cogs/audio/audio.py:47
+#, docstring
+msgid "Play audio through voice channels."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:260
+msgid "music in {} servers"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:300 redbot/cogs/audio/audio.py:1317
+msgid "Now Playing"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:304
+msgid "Track length: {length} | Requested by: {user}"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:331
+msgid "Queue ended."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:350
+msgid "Track Error"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:355
+msgid "Skipping..."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:363
+#, docstring
+msgid "Music configuration options."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:369
+#, docstring
+msgid "Toggle the bot auto-disconnecting when done playing.\\n\\n This setting takes precedence over [p]audioset emptydisconnect.\\n "
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:377
+msgid "Auto-disconnection at queue end: {true_or_false}."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:385
+#, docstring
+msgid "Toggle DJ mode.\\n\\n DJ mode allows users with the DJ role to use audio commands.\\n "
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:392
+msgid "Please set a role to use with DJ mode. Enter the role name or ID now."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:400
+msgid "Response timed out, try again later."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:405
+msgid "DJ role enabled: {true_or_false}."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:411
+#, docstring
+msgid "Auto-disconnection after x seconds while stopped. 0 to disable."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:413 redbot/cogs/audio/audio.py:436
+#: redbot/cogs/audio/audio.py:543 redbot/cogs/audio/audio.py:687
+msgid "Can't be less than zero."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:418
+msgid "Empty disconnect disabled."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:423
+msgid "Empty disconnect timer set to {num_seconds}."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:434
+#, docstring
+msgid "Set a price for queueing tracks for non-mods. 0 to disable."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:439
+msgid "Jukebox mode disabled."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:444
+msgid "Track queueing command price set to {price} {currency}."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:455
+#, docstring
+msgid "Set the localtracks path if the Lavalink.jar is not run from the Audio data folder.\\n\\n Leave the path blank to reset the path to the default, the Audio data directory.\\n "
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:463
+msgid "The localtracks path location has been reset to the default location."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:466
+msgid "This setting is only for bot owners to set a localtracks folder location if the Lavalink.jar is being ran from outside of the Audio data directory.\\nIn the example below, the full path for 'ParentDirectory' must be passed to this command.\\nThe path must not contain spaces.\\n```\\nParentDirectory\\n |__ localtracks (folder)\\n | |__ Awesome Album Name (folder)\\n | |__01 Cool Song.mp3\\n | |__02 Groovy Song.mp3\\n |\\n |__ Lavalink.jar\\n |__ application.yml\\n```\\nThe folder path given to this command must contain the Lavalink.jar, the application.yml, and the localtracks folder.\\nUse this command with no path given to reset it to the default, the Audio data directory for this bot.\\nDo you want to continue to set the provided path for local tracks?"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:505
+msgid "{local_path} does not seem like a valid path."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:520
+msgid "The path that was entered does not have {filelist} file in that location. The path will still be saved, but please check the path and the file location before attempting to play local tracks or start your Lavalink.jar."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:530
+msgid "Localtracks path set to: {local_path}."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:536
+#, docstring
+msgid "Max length of a track to queue in seconds. 0 to disable.\\n\\n Accepts seconds or a value formatted like 00:00:00 (`hh:mm:ss`) or 00:00 (`mm:ss`).\\n Invalid input will turn the max length setting off."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:545
+msgid "Track max length disabled."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:549
+msgid "Track max length set to {seconds}."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:559
+#, docstring
+msgid "Toggle track announcement and other bot messages."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:563
+msgid "Verbose mode on: {true_or_false}."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:569
+#, docstring
+msgid "Toggle the domain restriction on Audio.\\n\\n When toggled off, users will be able to play songs from non-commercial websites and links.\\n When toggled on, users are restricted to YouTube, SoundCloud, Mixer, Vimeo, Twitch, and Bandcamp links."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:576
+msgid "Commercial links only: {true_or_false}."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:582
+#, docstring
+msgid "Set the role to use for DJ mode."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:585
+msgid "DJ role set to: {role.name}."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:589
+#, docstring
+msgid "Show the current settings."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:604
+msgid "Server Settings"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:606
+msgid "Auto-disconnect: [{dc}]\\n"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:609
+msgid "Disconnect timer: [{num_seconds}]\\n"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:613
+msgid "DJ Role: [{role.name}]\\n"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:615
+msgid "Jukebox: [{jukebox_name}]\\n"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:616
+msgid "Command price: [{jukebox_price}]\\n"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:618
+msgid "Max track length: [{tracklength}]\\n"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:621
+msgid "Repeat: [{repeat}]\\nShuffle: [{shuffle}]\\nSong notify msgs: [{notify}]\\nSongs as status: [{status}]\\n"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:628
+msgid "Thumbnails: [{0}]\\n"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:630
+msgid "Vote skip: [{vote_enabled}]\\nSkip percentage: [{vote_percent}%]\\n"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:633
+msgid "---Lavalink Settings--- \\nCog version: [{version}]\\nJar build: [{jarbuild}]\\nExternal server: [{use_external_lavalink}]\\n"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:640
+msgid "Localtracks path: [{localpath}]\\n"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:648
+#, docstring
+msgid "Instructions to set the Spotify API tokens."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:649
+msgid "1. Go to Spotify developers and log in with your Spotify account.\\n(https://developer.spotify.com/dashboard/applications)\\n2. Click \\\"Create An App\\\".\\n3. Fill out the form provided with your app name, etc.\\n4. When asked if you're developing commercial integration select \\\"No\\\".\\n5. Accept the terms and conditions.\\n6. Copy your client ID and your client secret into:\\n`{prefix}set api spotify client_id, client_secret,`"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:665
+#, docstring
+msgid "Enable/disable tracks' titles as status."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:669
+msgid "Song titles as status: {true_or_false}."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:675
+#, docstring
+msgid "Toggle displaying a thumbnail on audio messages."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:679
+msgid "Thumbnail display: {true_or_false}."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:685
+#, docstring
+msgid "Percentage needed for non-mods to skip tracks. 0 to disable."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:693
+msgid "Voting disabled. All users can use queue management commands."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:698
+msgid "Vote percentage set to {percent}%."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:707
+#, docstring
+msgid "Instructions to set the YouTube API key."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:726
+#, docstring
+msgid "Audio stats."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:754 redbot/cogs/audio/audio.py:782
+#: redbot/cogs/audio/audio.py:819 redbot/cogs/audio/audio.py:847
+#: redbot/cogs/audio/audio.py:914 redbot/cogs/audio/audio.py:932
+#: redbot/cogs/audio/audio.py:956 redbot/cogs/audio/audio.py:1026
+#: redbot/cogs/audio/audio.py:1280 redbot/cogs/audio/audio.py:1371
+#: redbot/cogs/audio/audio.py:1388 redbot/cogs/audio/audio.py:1411
+#: redbot/cogs/audio/audio.py:1419 redbot/cogs/audio/audio.py:2190
+#: redbot/cogs/audio/audio.py:2527 redbot/cogs/audio/audio.py:2860
+#: redbot/cogs/audio/audio.py:3201 redbot/cogs/audio/audio.py:3255
+#: redbot/cogs/audio/audio.py:3305 redbot/cogs/audio/audio.py:3497
+#: redbot/cogs/audio/audio.py:3575 redbot/cogs/audio/audio.py:3605
+msgid "Nothing playing."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:758
+msgid "Not connected anywhere."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:764
+msgid "Playing in {num}/{total} servers:"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:779
+#, docstring
+msgid "Bump a track number to the top of the queue."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:788
+msgid "You must be in the voice channel to bump a track."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:792
+msgid "You need the DJ role to bump tracks."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:795 redbot/cogs/audio/audio.py:2875
+msgid "Song number must be greater than 1 and within the queue limit."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:810
+msgid "Moved {track} to the top of the queue."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:817
+#, docstring
+msgid "Disconnect from the voice channel."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:826
+msgid "You need the DJ role to disconnect."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:830
+msgid "There are other people listening to music."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:845
+#, docstring
+msgid "Equalizer management."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:865
+#, docstring
+msgid "Delete a saved eq preset."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:887
+#, docstring
+msgid "List saved eq presets."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:890
+msgid "No saved equalizer presets."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:897
+msgid "{num} preset(s)"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:903
+#, docstring
+msgid "Load a saved eq preset."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:930
+#, docstring
+msgid "Reset the eq to 0 across all bands."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:946
+msgid "Equalizer values have been reset."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:954
+#, docstring
+msgid "Save the current eq settings to a preset."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:958
+msgid "Please enter a name for this equalizer preset."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:972
+msgid "No equalizer preset name entered, try the command again later."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:981 redbot/cogs/audio/audio.py:2213
+msgid "Try the command again with a shorter name."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:985
+msgid "Preset name already exists, do you want to replace it?"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:994
+msgid "Not saving preset."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1019
+#, docstring
+msgid "Set an eq band with a band number or name and value.\\n\\n Band positions are 1-15 and values have a range of -0.25 to 1.0.\\n Band names are 25, 40, 63, 100, 160, 250, 400, 630, 1k, 1.6k, 2.5k, 4k, 6.3k, 10k, and 16k Hz.\\n Setting a band value to -0.25 nullifies it while +0.25 is double.\\n "
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1063
+msgid "Valid band numbers are 1-15 or the band names listed in the help for this command."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1099
+#, docstring
+msgid "Local playback commands."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1104
+#, docstring
+msgid "Play all songs in a localtracks folder."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1115
+msgid "No localtracks folder named {name}."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1121
+#, docstring
+msgid "Play a local track."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1126
+msgid "No local track folders found."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1169
+#, docstring
+msgid "Search for songs across all localtracks folders."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1174
+msgid "No album folders found."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1181 redbot/cogs/audio/audio.py:2816
+msgid "No matches."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1269
+msgid "No localtracks folder."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1278
+#, docstring
+msgid "Now playing."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1298
+msgid "Requested by: **{track.requester}**"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1308
+msgid "Nothing."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1368
+#, docstring
+msgid "Pause or resume a playing track."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1377
+msgid "You must be in the voice channel pause or resume."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1384
+msgid "You need the DJ role to pause or resume tracks."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1401
+msgid "Track Paused"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1407
+msgid "Track Resumed"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1417
+#, docstring
+msgid "Queue percentage."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1443
+msgid "Nothing in the queue."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1465
+msgid "Queued and playing tracks:"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1474
+#, docstring
+msgid "Play a URL or search for a track."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1481
+msgid "That URL is not allowed."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1484 redbot/cogs/audio/audio.py:2437
+#: redbot/cogs/audio/audio.py:2928 redbot/cogs/audio/audio.py:3047
+msgid "Connection to Lavalink has failed."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1486 redbot/cogs/audio/audio.py:2439
+#: redbot/cogs/audio/audio.py:2930 redbot/cogs/audio/audio.py:3049
+msgid "Please check your console or logs for details."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1495 redbot/cogs/audio/audio.py:2449
+#: redbot/cogs/audio/audio.py:2939 redbot/cogs/audio/audio.py:3543
+msgid "I don't have permission to connect to your channel."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1501 redbot/cogs/audio/audio.py:2461
+#: redbot/cogs/audio/audio.py:2945 redbot/cogs/audio/audio.py:3056
+#: redbot/cogs/audio/audio.py:3555
+msgid "Connect to a voice channel first."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1504 redbot/cogs/audio/audio.py:2457
+#: redbot/cogs/audio/audio.py:2948 redbot/cogs/audio/audio.py:3059
+#: redbot/cogs/audio/audio.py:3558
+msgid "Connection to Lavalink has not yet been established."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1508
+msgid "You need the DJ role to queue tracks."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1519
+msgid "You must be in the voice channel to use the play command."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1525
+msgid "No tracks to play."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1565
+msgid "The owner needs to set the Spotify client ID, Spotify client secret, and YouTube API key before Spotify URLs or codes can be used. \\nSee `{prefix}audioset youtubeapi` and `{prefix}audioset spotifyapi` for instructions."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1575 redbot/cogs/audio/audio.py:2493
+msgid "Wait until the playlist has finished loading."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1592 redbot/cogs/audio/audio.py:1657
+#: redbot/cogs/audio/audio.py:2499 redbot/cogs/audio/audio.py:2509
+#: redbot/cogs/audio/audio.py:2973 redbot/cogs/audio/audio.py:3027
+msgid "Nothing found."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1600
+msgid "The Spotify API key or client secret has not been set properly. \\nUse `{prefix}audioset spotifyapi` for instructions."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1639 redbot/cogs/audio/audio.py:1776
+msgid "This doesn't seem to be a valid Spotify URL or code."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1688 redbot/cogs/audio/audio.py:2320
+msgid "Playlist Enqueued"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1689 redbot/cogs/audio/audio.py:2321
+msgid "Added {num} tracks to the queue.{maxlength_msg}"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1695
+msgid "{time} until start of playlist playback: starts at #{position} in queue"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1711 redbot/cogs/audio/audio.py:3125
+msgid "Track exceeds maximum length."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1717
+msgid "Nothing found. Check your Lavalink logs for details."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1732 redbot/cogs/audio/audio.py:3108
+msgid "Track Enqueued"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1736 redbot/cogs/audio/audio.py:3114
+msgid "{time} until track playback: #{position} in queue"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1741 redbot/cogs/audio/audio.py:3119
+msgid "#{position} in queue"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1761
+msgid "The Spotify API key or client secret has not been set properly. \\nUse `{prefix}audioset spotifyapi` for instructions."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1793 redbot/cogs/audio/audio.py:2384
+msgid "Please wait, adding tracks..."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1809
+msgid "The connection was reset while loading the playlist."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1826 redbot/cogs/audio/audio.py:2401
+msgid "Loading track {num}/{total}..."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1840
+msgid "Approximate time remaining: {seconds}"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1850
+msgid "Nothing found.\\nThe YouTube API key may be invalid or you may be rate limited on YouTube's search service.\\nCheck the YouTube API key again and follow the instructions at `{prefix}audioset youtubeapi`."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1871
+#, docstring
+msgid "Playlist configuration options."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1876
+#, docstring
+msgid "Add a track URL, playlist link, or quick search to a playlist.\\n\\n The track(s) will be appended to the end of the playlist.\\n "
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1888 redbot/cogs/audio/audio.py:2028
+#: redbot/cogs/audio/audio.py:2241
+msgid "You are not the author of that playlist."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1898
+msgid "{track} is already in {playlist}."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1907 redbot/cogs/audio/audio.py:2032
+#: redbot/cogs/audio/audio.py:2081 redbot/cogs/audio/audio.py:2244
+msgid "No playlist with that name."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1914
+msgid "{track} appended to {playlist}."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1920
+msgid "{num} tracks appended to {playlist}."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1928
+#, docstring
+msgid "Copy a playlist from one server to another."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1932
+msgid "Invalid server ID for source server."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1934
+msgid "Invalid server ID for target server."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1939
+msgid "No playlist with that name in {from_guild_name}."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1950
+msgid "Playlist {name} copied from {from_guild_name} to {to_guild_name}."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1962
+msgid "A playlist with that name already exists in {to_guild_name}.\\nPlease enter a new name for this playlist."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1975
+msgid "Try the playlist copy command again with a shorter name."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1980
+msgid "Playlist name already exists in {to_guild_name}, try the playlist copy command again with a different name."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1986 redbot/cogs/audio/audio.py:2220
+msgid "No playlist name entered, try again later."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1991
+msgid "Playlist {name} copied from {from_guild_name} to {to_guild_name}.\\nNew playlist name on {to_guild_name}: {new_name}"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2003
+#, docstring
+msgid "Create an empty playlist."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2007 redbot/cogs/audio/audio.py:2183
+msgid "You need the DJ role to save playlists."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2011 redbot/cogs/audio/audio.py:2187
+#: redbot/cogs/audio/audio.py:2217
+msgid "Playlist name already exists, try again with a different name."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2017
+msgid "Empty playlist {name} created."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2021
+#, docstring
+msgid "Delete a saved playlist."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2033
+msgid "{name} playlist deleted."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2039
+#, docstring
+msgid "Download a copy of a playlist.\\n\\n These files can be used with the [p]playlist upload command.\\n Red v2-compatible playlists can be generated by passing True\\n for the v2 variable."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2061
+msgid "That playlist has no tracks."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2063 redbot/cogs/audio/audio.py:2331
+msgid "That playlist doesn't exist."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2076
+#, docstring
+msgid "Retrieve information from a saved playlist."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2101
+msgid "Playlist info for {playlist_name}:\\n"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2105
+msgid "Playlist info for {playlist_name}:\\nURL: {url}"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2116
+msgid "Author: {author_name} | {num} track(s)"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2126
+#, docstring
+msgid "List saved playlists."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2129
+msgid "No saved playlists."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2141
+msgid "Tracks: {num}"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2142
+msgid "Author: {name}\\n"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2166
+msgid "Playlists for {server_name}:"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2170
+msgid "Page {page_num}/{total_pages} | {num} playlists"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2179
+#, docstring
+msgid "Save the queue to a playlist."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2193 redbot/cogs/audio/audio.py:2590
+#: redbot/cogs/audio/audio.py:2593 redbot/cogs/audio/audio.py:2613
+#: redbot/cogs/audio/audio.py:2756 redbot/cogs/audio/audio.py:2759
+#: redbot/cogs/audio/audio.py:2775 redbot/cogs/audio/audio.py:2778
+#: redbot/cogs/audio/audio.py:2810 redbot/cogs/audio/audio.py:2812
+#: redbot/cogs/audio/audio.py:3418 redbot/cogs/audio/audio.py:3422
+#: redbot/cogs/audio/audio.py:3429
+msgid "There's nothing in the queue."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2202
+msgid "Please enter a name for this playlist."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2227
+msgid "Playlist {name} saved from current queue: {num} tracks added."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2234
+#, docstring
+msgid "Remove a track from a playlist by url."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2248
+msgid "URL not in playlist."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2252
+msgid "No tracks left, removing playlist."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2259
+msgid "{num} entries have been removed from the {playlist_name} playlist."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2266
+msgid "The track has been removed from the {playlist_name} playlist."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2273
+#, docstring
+msgid "Save a playlist from a url."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2285
+msgid "Playlist {name} saved: {num} tracks added."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2292
+#, docstring
+msgid "Load a playlist into the queue."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2336
+#, docstring
+msgid "Convert a Red v2 playlist file to a playlist."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2342
+msgid "Please upload the playlist file. Any other message will cancel this operation."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2350
+msgid "No file detected, try again later."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2354
+msgid "Upload cancelled."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2358
+msgid "Only playlist files can be uploaded."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2363
+msgid "Not a valid playlist file."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2379
+msgid "A playlist already exists with this name."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2407
+msgid "No tracks found."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2413
+msgid "Added {num} tracks from the {playlist_name} playlist. {num_bad} track(s) could not be loaded."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2418
+msgid "Added {num} tracks from the {playlist_name} playlist."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2422
+msgid "Playlist Saved"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2433
+msgid "You need the DJ role to use playlists."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2471
+msgid "You must be in the voice channel to use the playlist command."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2525
+#, docstring
+msgid "Skip to the start of the previously played track."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2535 redbot/cogs/audio/audio.py:3317
+msgid "You need the DJ role to skip tracks."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2540 redbot/cogs/audio/audio.py:3311
+msgid "You must be in the voice channel to skip the music."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2543
+msgid "Turn shuffle off to use this command."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2545
+msgid "No previous track."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2562
+msgid "Replaying Track"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2571
+#, docstring
+msgid "List the songs in the queue."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2622
+msgid "**Currently livestreaming:**"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2628 redbot/cogs/audio/audio.py:2638
+#: redbot/cogs/audio/audio.py:2644
+msgid "Playing: "
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2631
+msgid "Requested by: **{user}**\\n"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2639
+msgid "Requested by: **{user}**\\n"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2646
+msgid "Requested by: **{user}**"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2664
+msgid "requested by **{user}**\\n"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2668
+msgid "requested by **{user}**\\n"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2673
+msgid "requested by **{user}**\\n"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2684
+msgid "Page {page_num}/{total_pages} | {num_tracks} tracks, {num_remaining} remaining"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2693
+msgid "Repeat"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2695
+msgid "Shuffle"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2740
+msgid "Matching Tracks:"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2743 redbot/cogs/audio/audio.py:3182
+msgid "Page {page_num}/{total_pages}"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2752
+#, docstring
+msgid "Clears the queue."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2764
+msgid "You need the DJ role to clear the queue."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2766
+msgid "The queue has been cleared."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2771
+#, docstring
+msgid "Removes songs from the queue if the requester is not in the voice channel."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2783
+msgid "You need the DJ role to clean the queue."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2794
+msgid "Removed 0 tracks."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2798
+msgid "Removed {removed_tracks} tracks queued by members outside of the voice channel."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2806
+#, docstring
+msgid "Search the queue."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2829
+#, docstring
+msgid "Toggle repeat."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2835
+msgid "You need the DJ role to toggle repeat."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2843
+msgid "You must be in the voice channel to toggle repeat."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2849
+msgid "Repeat tracks: {true_or_false}."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2857
+#, docstring
+msgid "Remove a specific track number from the queue."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2863
+msgid "Nothing queued."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2866
+msgid "You need the DJ role to remove tracks."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2871
+msgid "You must be in the voice channel to manage the queue."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2887
+msgid "Removed {track} from the queue."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2894
+#, docstring
+msgid "Pick a track with a search.\\n\\n Use `[p]search list ` to queue all tracks found\\n on YouTube. `[p]search sc ` will search SoundCloud\\n instead of YouTube.\\n "
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2958
+msgid "You must be in the voice channel to enqueue tracks."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2997
+msgid "Queued {num} track(s).{maxlength_msg}"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:3003
+msgid "{time} until start of search playback: starts at #{position} in queue"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:3169
+msgid "Tracks Found:"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:3170
+msgid "search results"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:3173
+msgid "Folders Found:"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:3174
+msgid "local folders"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:3176
+msgid "Files Found:"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:3177
+msgid "local tracks"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:3195
+#, docstring
+msgid "Seek ahead or behind on a track by seconds or a to a specific time.\\n\\n Accepts seconds or a value formatted like 00:00:00 (`hh:mm:ss`) or 00:00 (`mm:ss`)."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:3206
+msgid "You must be in the voice channel to use seek."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:3211
+msgid "You need the DJ role to use seek."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:3217 redbot/cogs/audio/audio.py:3510
+msgid "There are other people listening - vote to skip instead."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:3221
+msgid "Can't seek on a stream."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:3230
+msgid "Invalid input for the time to seek."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:3236
+msgid "Moved {num_seconds}s to 00:00:00"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:3241
+msgid "Moved {num_seconds}s to {time}"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:3249
+msgid "Moved to {time}"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:3261
+#, docstring
+msgid "Toggle shuffle."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:3265
+msgid "You need the DJ role to toggle shuffle."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:3273
+msgid "You must be in the voice channel to toggle shuffle."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:3279
+msgid "Shuffle tracks: {true_or_false}."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:3287
+#, docstring
+msgid "Make Red sing one of her songs."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:3303
+#, docstring
+msgid "Skip to the next track, or to a given track number."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:3322
+msgid "Can't skip to a specific track in vote mode without the DJ role."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:3326
+msgid "I removed your vote to skip."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:3329
+msgid "You voted to skip."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:3342
+msgid "Vote threshold met."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:3345
+msgid " Votes: {num_votes}/{num_members} ({cur_percent}% out of {required_percent}% needed)"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:3425
+msgid "Currently livestreaming {track}"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:3432
+msgid "{time} left on {track}"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:3441
+msgid "Track number must be equal to or greater than 1."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:3454
+msgid "Can't skip to a track while shuffle is enabled."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:3470
+msgid "Track Skipped"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:3493
+#, docstring
+msgid "Stop playback and clear the queue."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:3503
+msgid "You must be in the voice channel to stop the music."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:3514
+msgid "You need the DJ role to stop the music."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:3516
+msgid "Stopping..."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:3531
+#, docstring
+msgid "Summon the bot to a voice channel."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:3535
+msgid "You need the DJ role to summon the bot."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:3565
+#, docstring
+msgid "Set the volume, 1% - 150%."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:3571
+msgid "Current Volume:"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:3583
+msgid "You must be in the voice channel to change the volume."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:3589
+msgid "You need the DJ role to change the volume."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:3602
+msgid "Volume:"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:3613
+#, docstring
+msgid "Lavalink server configuration options."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:3618
+#, docstring
+msgid "Toggle using external lavalink servers."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:3625 redbot/cogs/audio/audio.py:3635
+msgid "External lavalink server: {true_or_false}."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:3642
+#, docstring
+msgid "Set the lavalink server host."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:3646 redbot/cogs/audio/audio.py:3651
+msgid "Host set to {host}."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:3648 redbot/cogs/audio/audio.py:3664
+#: redbot/cogs/audio/audio.py:3682 redbot/cogs/audio/audio.py:3698
+msgid "External lavalink server set to True."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:3657
+#, docstring
+msgid "Set the lavalink server password."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:3662 redbot/cogs/audio/audio.py:3668
+msgid "Server password set to {password}."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:3675
+#, docstring
+msgid "Set the lavalink REST server port."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:3680 redbot/cogs/audio/audio.py:3685
+msgid "REST port set to {port}."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:3691
+#, docstring
+msgid "Set the lavalink websocket server port."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:3696 redbot/cogs/audio/audio.py:3701
+msgid "Websocket port set to {port}."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:3801
+msgid "Not enough {currency} ({required_credits} required)."
+msgstr ""
+
diff --git a/redbot/cogs/audio/locales/da-DK.po b/redbot/cogs/audio/locales/da-DK.po
index 065069bd9..fa716bc74 100644
--- a/redbot/cogs/audio/locales/da-DK.po
+++ b/redbot/cogs/audio/locales/da-DK.po
@@ -1,14 +1,14 @@
msgid ""
msgstr ""
"Project-Id-Version: red-discordbot\n"
-"POT-Creation-Date: 2019-02-17 02:24+0000\n"
-"PO-Revision-Date: 2019-02-25 03:07\n"
-"Last-Translator: Kowlin \n"
+"POT-Creation-Date: 2019-07-05 22:33+0200\n"
+"PO-Revision-Date: 2019-07-06 16:12\n"
+"Last-Translator: Robert Jansen (Kowlin)\n"
"Language-Team: Danish\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"Generated-By: redgettext 2.2\n"
+"Generated-By: redgettext 3.0\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: crowdin.com\n"
"X-Crowdin-Project: red-discordbot\n"
@@ -16,971 +16,1275 @@ msgstr ""
"X-Crowdin-File: /cogs/audio/locales/messages.pot\n"
"Language: da_DK\n"
-#: redbot/cogs/audio/audio.py:38
+#: redbot/cogs/audio/audio.py:47
#, docstring
msgid "Play audio through voice channels."
msgstr ""
-#: redbot/cogs/audio/audio.py:173 redbot/cogs/audio/audio.py:735
-msgid "Now Playing"
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:177
-msgid "Track length: {length} | Requested by: {user}"
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:201 redbot/cogs/audio/audio.py:227
+#: redbot/cogs/audio/audio.py:260
msgid "music in {} servers"
msgstr ""
-#: redbot/cogs/audio/audio.py:211
+#: redbot/cogs/audio/audio.py:300 redbot/cogs/audio/audio.py:1317
+msgid "Now Playing"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:304
+msgid "Track length: {length} | Requested by: {user}"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:331
msgid "Queue ended."
msgstr ""
-#: redbot/cogs/audio/audio.py:240
+#: redbot/cogs/audio/audio.py:350
msgid "Track Error"
msgstr ""
-#: redbot/cogs/audio/audio.py:245
+#: redbot/cogs/audio/audio.py:355
msgid "Skipping..."
msgstr ""
-#: redbot/cogs/audio/audio.py:252
+#: redbot/cogs/audio/audio.py:363
#, docstring
msgid "Music configuration options."
msgstr ""
-#: redbot/cogs/audio/audio.py:258
+#: redbot/cogs/audio/audio.py:369
#, docstring
-msgid "Toggle DJ mode.\n\n"
-" DJ mode allows users with the DJ role to use audio commands.\n"
-" "
+msgid "Toggle the bot auto-disconnecting when done playing.\\n\\n This setting takes precedence over [p]audioset emptydisconnect.\\n "
msgstr ""
-#: redbot/cogs/audio/audio.py:265
+#: redbot/cogs/audio/audio.py:377
+msgid "Auto-disconnection at queue end: {true_or_false}."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:385
+#, docstring
+msgid "Toggle DJ mode.\\n\\n DJ mode allows users with the DJ role to use audio commands.\\n "
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:392
msgid "Please set a role to use with DJ mode. Enter the role name or ID now."
msgstr ""
-#: redbot/cogs/audio/audio.py:273
+#: redbot/cogs/audio/audio.py:400
msgid "Response timed out, try again later."
msgstr ""
-#: redbot/cogs/audio/audio.py:284
+#: redbot/cogs/audio/audio.py:405
+msgid "DJ role enabled: {true_or_false}."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:411
#, docstring
msgid "Auto-disconnection after x seconds while stopped. 0 to disable."
msgstr ""
-#: redbot/cogs/audio/audio.py:286 redbot/cogs/audio/audio.py:317
-#: redbot/cogs/audio/audio.py:405
+#: redbot/cogs/audio/audio.py:413 redbot/cogs/audio/audio.py:436
+#: redbot/cogs/audio/audio.py:543 redbot/cogs/audio/audio.py:687
msgid "Can't be less than zero."
msgstr ""
-#: redbot/cogs/audio/audio.py:291
+#: redbot/cogs/audio/audio.py:418
msgid "Empty disconnect disabled."
msgstr ""
-#: redbot/cogs/audio/audio.py:296
+#: redbot/cogs/audio/audio.py:423
msgid "Empty disconnect timer set to {num_seconds}."
msgstr ""
-#: redbot/cogs/audio/audio.py:307
-#, docstring
-msgid "Set the role to use for DJ mode."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:310
-msgid "DJ role set to: {role.name}."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:315
+#: redbot/cogs/audio/audio.py:434
#, docstring
msgid "Set a price for queueing tracks for non-mods. 0 to disable."
msgstr ""
-#: redbot/cogs/audio/audio.py:320
+#: redbot/cogs/audio/audio.py:439
msgid "Jukebox mode disabled."
msgstr ""
-#: redbot/cogs/audio/audio.py:325
+#: redbot/cogs/audio/audio.py:444
msgid "Track queueing command price set to {price} {currency}."
msgstr ""
-#: redbot/cogs/audio/audio.py:336
+#: redbot/cogs/audio/audio.py:455
+#, docstring
+msgid "Set the localtracks path if the Lavalink.jar is not run from the Audio data folder.\\n\\n Leave the path blank to reset the path to the default, the Audio data directory.\\n "
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:463
+msgid "The localtracks path location has been reset to the default location."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:466
+msgid "This setting is only for bot owners to set a localtracks folder location if the Lavalink.jar is being ran from outside of the Audio data directory.\\nIn the example below, the full path for 'ParentDirectory' must be passed to this command.\\nThe path must not contain spaces.\\n```\\nParentDirectory\\n |__ localtracks (folder)\\n | |__ Awesome Album Name (folder)\\n | |__01 Cool Song.mp3\\n | |__02 Groovy Song.mp3\\n |\\n |__ Lavalink.jar\\n |__ application.yml\\n```\\nThe folder path given to this command must contain the Lavalink.jar, the application.yml, and the localtracks folder.\\nUse this command with no path given to reset it to the default, the Audio data directory for this bot.\\nDo you want to continue to set the provided path for local tracks?"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:505
+msgid "{local_path} does not seem like a valid path."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:520
+msgid "The path that was entered does not have {filelist} file in that location. The path will still be saved, but please check the path and the file location before attempting to play local tracks or start your Lavalink.jar."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:530
+msgid "Localtracks path set to: {local_path}."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:536
+#, docstring
+msgid "Max length of a track to queue in seconds. 0 to disable.\\n\\n Accepts seconds or a value formatted like 00:00:00 (`hh:mm:ss`) or 00:00 (`mm:ss`).\\n Invalid input will turn the max length setting off."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:545
+msgid "Track max length disabled."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:549
+msgid "Track max length set to {seconds}."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:559
#, docstring
msgid "Toggle track announcement and other bot messages."
msgstr ""
-#: redbot/cogs/audio/audio.py:340
+#: redbot/cogs/audio/audio.py:563
msgid "Verbose mode on: {true_or_false}."
msgstr ""
-#: redbot/cogs/audio/audio.py:345
+#: redbot/cogs/audio/audio.py:569
+#, docstring
+msgid "Toggle the domain restriction on Audio.\\n\\n When toggled off, users will be able to play songs from non-commercial websites and links.\\n When toggled on, users are restricted to YouTube, SoundCloud, Mixer, Vimeo, Twitch, and Bandcamp links."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:576
+msgid "Commercial links only: {true_or_false}."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:582
+#, docstring
+msgid "Set the role to use for DJ mode."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:585
+msgid "DJ role set to: {role.name}."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:589
#, docstring
msgid "Show the current settings."
msgstr ""
-#: redbot/cogs/audio/audio.py:358
+#: redbot/cogs/audio/audio.py:604
msgid "Server Settings"
msgstr ""
-#: redbot/cogs/audio/audio.py:360
-msgid "Disconnect timer: [{num_seconds}]\n"
+#: redbot/cogs/audio/audio.py:606
+msgid "Auto-disconnect: [{dc}]\\n"
msgstr ""
-#: redbot/cogs/audio/audio.py:364
-msgid "DJ Role: [{role.name}]\n"
+#: redbot/cogs/audio/audio.py:609
+msgid "Disconnect timer: [{num_seconds}]\\n"
msgstr ""
-#: redbot/cogs/audio/audio.py:366
-msgid "Jukebox: [{jukebox_name}]\n"
+#: redbot/cogs/audio/audio.py:613
+msgid "DJ Role: [{role.name}]\\n"
msgstr ""
-#: redbot/cogs/audio/audio.py:367
-msgid "Command price: [{jukebox_price}]\n"
+#: redbot/cogs/audio/audio.py:615
+msgid "Jukebox: [{jukebox_name}]\\n"
msgstr ""
-#: redbot/cogs/audio/audio.py:368
-msgid "Repeat: [{repeat}]\n"
-"Shuffle: [{shuffle}]\n"
-"Song notify msgs: [{notify}]\n"
-"Songs as status: [{status}]\n"
+#: redbot/cogs/audio/audio.py:616
+msgid "Command price: [{jukebox_price}]\\n"
msgstr ""
-#: redbot/cogs/audio/audio.py:375
-msgid "Thumbnails: [{0}]\n"
+#: redbot/cogs/audio/audio.py:618
+msgid "Max track length: [{tracklength}]\\n"
msgstr ""
-#: redbot/cogs/audio/audio.py:377
-msgid "Vote skip: [{vote_enabled}]\n"
-"Skip percentage: [{vote_percent}%]\n"
+#: redbot/cogs/audio/audio.py:621
+msgid "Repeat: [{repeat}]\\nShuffle: [{shuffle}]\\nSong notify msgs: [{notify}]\\nSongs as status: [{status}]\\n"
msgstr ""
-#: redbot/cogs/audio/audio.py:380
-msgid "---Lavalink Settings---\n"
-"Cog version: [{version}]\n"
-"Jar build: [{jarbuild}]\n"
-"External server: [{use_external_lavalink}]"
+#: redbot/cogs/audio/audio.py:628
+msgid "Thumbnails: [{0}]\\n"
msgstr ""
-#: redbot/cogs/audio/audio.py:393
+#: redbot/cogs/audio/audio.py:630
+msgid "Vote skip: [{vote_enabled}]\\nSkip percentage: [{vote_percent}%]\\n"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:633
+msgid "---Lavalink Settings--- \\nCog version: [{version}]\\nJar build: [{jarbuild}]\\nExternal server: [{use_external_lavalink}]\\n"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:640
+msgid "Localtracks path: [{localpath}]\\n"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:648
#, docstring
-msgid "Toggle displaying a thumbnail on audio messages."
+msgid "Instructions to set the Spotify API tokens."
msgstr ""
-#: redbot/cogs/audio/audio.py:397
-msgid "Thumbnail display: {true_or_false}."
+#: redbot/cogs/audio/audio.py:649
+msgid "1. Go to Spotify developers and log in with your Spotify account.\\n(https://developer.spotify.com/dashboard/applications)\\n2. Click \\\"Create An App\\\".\\n3. Fill out the form provided with your app name, etc.\\n4. When asked if you're developing commercial integration select \\\"No\\\".\\n5. Accept the terms and conditions.\\n6. Copy your client ID and your client secret into:\\n`{prefix}set api spotify client_id, client_secret,`"
msgstr ""
-#: redbot/cogs/audio/audio.py:403
-#, docstring
-msgid "Percentage needed for non-mods to skip tracks. 0 to disable."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:411
-msgid "Voting disabled. All users can use queue management commands."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:416
-msgid "Vote percentage set to {percent}%."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:425
+#: redbot/cogs/audio/audio.py:665
#, docstring
msgid "Enable/disable tracks' titles as status."
msgstr ""
-#: redbot/cogs/audio/audio.py:429
+#: redbot/cogs/audio/audio.py:669
msgid "Song titles as status: {true_or_false}."
msgstr ""
-#: redbot/cogs/audio/audio.py:435
+#: redbot/cogs/audio/audio.py:675
+#, docstring
+msgid "Toggle displaying a thumbnail on audio messages."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:679
+msgid "Thumbnail display: {true_or_false}."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:685
+#, docstring
+msgid "Percentage needed for non-mods to skip tracks. 0 to disable."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:693
+msgid "Voting disabled. All users can use queue management commands."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:698
+msgid "Vote percentage set to {percent}%."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:707
+#, docstring
+msgid "Instructions to set the YouTube API key."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:726
#, docstring
msgid "Audio stats."
msgstr ""
-#: redbot/cogs/audio/audio.py:469 redbot/cogs/audio/audio.py:489
-#: redbot/cogs/audio/audio.py:698 redbot/cogs/audio/audio.py:788
-#: redbot/cogs/audio/audio.py:804 redbot/cogs/audio/audio.py:829
-#: redbot/cogs/audio/audio.py:836 redbot/cogs/audio/audio.py:1179
-#: redbot/cogs/audio/audio.py:1466 redbot/cogs/audio/audio.py:1724
-#: redbot/cogs/audio/audio.py:2026 redbot/cogs/audio/audio.py:2063
-#: redbot/cogs/audio/audio.py:2109 redbot/cogs/audio/audio.py:2265
-#: redbot/cogs/audio/audio.py:2304 redbot/cogs/audio/audio.py:2334
+#: redbot/cogs/audio/audio.py:754 redbot/cogs/audio/audio.py:782
+#: redbot/cogs/audio/audio.py:819 redbot/cogs/audio/audio.py:847
+#: redbot/cogs/audio/audio.py:914 redbot/cogs/audio/audio.py:932
+#: redbot/cogs/audio/audio.py:956 redbot/cogs/audio/audio.py:1026
+#: redbot/cogs/audio/audio.py:1280 redbot/cogs/audio/audio.py:1371
+#: redbot/cogs/audio/audio.py:1388 redbot/cogs/audio/audio.py:1411
+#: redbot/cogs/audio/audio.py:1419 redbot/cogs/audio/audio.py:2190
+#: redbot/cogs/audio/audio.py:2527 redbot/cogs/audio/audio.py:2860
+#: redbot/cogs/audio/audio.py:3201 redbot/cogs/audio/audio.py:3255
+#: redbot/cogs/audio/audio.py:3305 redbot/cogs/audio/audio.py:3497
+#: redbot/cogs/audio/audio.py:3575 redbot/cogs/audio/audio.py:3605
msgid "Nothing playing."
msgstr ""
-#: redbot/cogs/audio/audio.py:473
+#: redbot/cogs/audio/audio.py:758
msgid "Not connected anywhere."
msgstr ""
-#: redbot/cogs/audio/audio.py:478
-msgid "Connected in {num} servers:"
+#: redbot/cogs/audio/audio.py:764
+msgid "Playing in {num}/{total} servers:"
msgstr ""
-#: redbot/cogs/audio/audio.py:486
+#: redbot/cogs/audio/audio.py:779
#, docstring
msgid "Bump a track number to the top of the queue."
msgstr ""
-#: redbot/cogs/audio/audio.py:495
+#: redbot/cogs/audio/audio.py:788
msgid "You must be in the voice channel to bump a track."
msgstr ""
-#: redbot/cogs/audio/audio.py:499
+#: redbot/cogs/audio/audio.py:792
msgid "You need the DJ role to bump tracks."
msgstr ""
-#: redbot/cogs/audio/audio.py:502 redbot/cogs/audio/audio.py:1739
+#: redbot/cogs/audio/audio.py:795 redbot/cogs/audio/audio.py:2875
msgid "Song number must be greater than 1 and within the queue limit."
msgstr ""
-#: redbot/cogs/audio/audio.py:517
+#: redbot/cogs/audio/audio.py:810
msgid "Moved {track} to the top of the queue."
msgstr ""
-#: redbot/cogs/audio/audio.py:523
+#: redbot/cogs/audio/audio.py:817
#, docstring
msgid "Disconnect from the voice channel."
msgstr ""
-#: redbot/cogs/audio/audio.py:528
+#: redbot/cogs/audio/audio.py:826
msgid "You need the DJ role to disconnect."
msgstr ""
-#: redbot/cogs/audio/audio.py:532
+#: redbot/cogs/audio/audio.py:830
msgid "There are other people listening to music."
msgstr ""
-#: redbot/cogs/audio/audio.py:540
+#: redbot/cogs/audio/audio.py:845
+#, docstring
+msgid "Equalizer management."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:865
+#, docstring
+msgid "Delete a saved eq preset."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:887
+#, docstring
+msgid "List saved eq presets."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:890
+msgid "No saved equalizer presets."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:897
+msgid "{num} preset(s)"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:903
+#, docstring
+msgid "Load a saved eq preset."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:930
+#, docstring
+msgid "Reset the eq to 0 across all bands."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:946
+msgid "Equalizer values have been reset."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:954
+#, docstring
+msgid "Save the current eq settings to a preset."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:958
+msgid "Please enter a name for this equalizer preset."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:972
+msgid "No equalizer preset name entered, try the command again later."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:981 redbot/cogs/audio/audio.py:2213
+msgid "Try the command again with a shorter name."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:985
+msgid "Preset name already exists, do you want to replace it?"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:994
+msgid "Not saving preset."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1019
+#, docstring
+msgid "Set an eq band with a band number or name and value.\\n\\n Band positions are 1-15 and values have a range of -0.25 to 1.0.\\n Band names are 25, 40, 63, 100, 160, 250, 400, 630, 1k, 1.6k, 2.5k, 4k, 6.3k, 10k, and 16k Hz.\\n Setting a band value to -0.25 nullifies it while +0.25 is double.\\n "
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1063
+msgid "Valid band numbers are 1-15 or the band names listed in the help for this command."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1099
#, docstring
msgid "Local playback commands."
msgstr ""
-#: redbot/cogs/audio/audio.py:545
+#: redbot/cogs/audio/audio.py:1104
#, docstring
msgid "Play all songs in a localtracks folder."
msgstr ""
-#: redbot/cogs/audio/audio.py:552
+#: redbot/cogs/audio/audio.py:1115
+msgid "No localtracks folder named {name}."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1121
#, docstring
msgid "Play a local track."
msgstr ""
-#: redbot/cogs/audio/audio.py:557
+#: redbot/cogs/audio/audio.py:1126
msgid "No local track folders found."
msgstr ""
-#: redbot/cogs/audio/audio.py:600
+#: redbot/cogs/audio/audio.py:1169
#, docstring
msgid "Search for songs across all localtracks folders."
msgstr ""
-#: redbot/cogs/audio/audio.py:605
+#: redbot/cogs/audio/audio.py:1174
msgid "No album folders found."
msgstr ""
-#: redbot/cogs/audio/audio.py:612 redbot/cogs/audio/audio.py:1634
+#: redbot/cogs/audio/audio.py:1181 redbot/cogs/audio/audio.py:2816
msgid "No matches."
msgstr ""
-#: redbot/cogs/audio/audio.py:688
+#: redbot/cogs/audio/audio.py:1269
msgid "No localtracks folder."
msgstr ""
-#: redbot/cogs/audio/audio.py:696
+#: redbot/cogs/audio/audio.py:1278
#, docstring
msgid "Now playing."
msgstr ""
-#: redbot/cogs/audio/audio.py:716
+#: redbot/cogs/audio/audio.py:1298
msgid "Requested by: **{track.requester}**"
msgstr ""
-#: redbot/cogs/audio/audio.py:726
+#: redbot/cogs/audio/audio.py:1308
msgid "Nothing."
msgstr ""
-#: redbot/cogs/audio/audio.py:785
+#: redbot/cogs/audio/audio.py:1368
#, docstring
-msgid "Pause and resume."
+msgid "Pause or resume a playing track."
msgstr ""
-#: redbot/cogs/audio/audio.py:794
-msgid "You must be in the voice channel to pause the music."
+#: redbot/cogs/audio/audio.py:1377
+msgid "You must be in the voice channel pause or resume."
msgstr ""
-#: redbot/cogs/audio/audio.py:800
-msgid "You need the DJ role to pause tracks."
+#: redbot/cogs/audio/audio.py:1384
+msgid "You need the DJ role to pause or resume tracks."
msgstr ""
-#: redbot/cogs/audio/audio.py:814
+#: redbot/cogs/audio/audio.py:1401
msgid "Track Paused"
msgstr ""
-#: redbot/cogs/audio/audio.py:821
+#: redbot/cogs/audio/audio.py:1407
msgid "Track Resumed"
msgstr ""
-#: redbot/cogs/audio/audio.py:826
-msgid "Track is paused."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:828
-msgid "Track is playing."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:834
+#: redbot/cogs/audio/audio.py:1417
#, docstring
msgid "Queue percentage."
msgstr ""
-#: redbot/cogs/audio/audio.py:860
+#: redbot/cogs/audio/audio.py:1443
msgid "Nothing in the queue."
msgstr ""
-#: redbot/cogs/audio/audio.py:882
+#: redbot/cogs/audio/audio.py:1465
msgid "Queued and playing tracks:"
msgstr ""
-#: redbot/cogs/audio/audio.py:890
+#: redbot/cogs/audio/audio.py:1474
#, docstring
msgid "Play a URL or search for a track."
msgstr ""
-#: redbot/cogs/audio/audio.py:900 redbot/cogs/audio/audio.py:1411
-#: redbot/cogs/audio/audio.py:1795
+#: redbot/cogs/audio/audio.py:1481
+msgid "That URL is not allowed."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1484 redbot/cogs/audio/audio.py:2437
+#: redbot/cogs/audio/audio.py:2928 redbot/cogs/audio/audio.py:3047
+msgid "Connection to Lavalink has failed."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1486 redbot/cogs/audio/audio.py:2439
+#: redbot/cogs/audio/audio.py:2930 redbot/cogs/audio/audio.py:3049
+msgid "Please check your console or logs for details."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1495 redbot/cogs/audio/audio.py:2449
+#: redbot/cogs/audio/audio.py:2939 redbot/cogs/audio/audio.py:3543
msgid "I don't have permission to connect to your channel."
msgstr ""
-#: redbot/cogs/audio/audio.py:906 redbot/cogs/audio/audio.py:1422
-#: redbot/cogs/audio/audio.py:1801 redbot/cogs/audio/audio.py:1889
+#: redbot/cogs/audio/audio.py:1501 redbot/cogs/audio/audio.py:2461
+#: redbot/cogs/audio/audio.py:2945 redbot/cogs/audio/audio.py:3056
+#: redbot/cogs/audio/audio.py:3555
msgid "Connect to a voice channel first."
msgstr ""
-#: redbot/cogs/audio/audio.py:909 redbot/cogs/audio/audio.py:1418
-#: redbot/cogs/audio/audio.py:1804 redbot/cogs/audio/audio.py:1892
+#: redbot/cogs/audio/audio.py:1504 redbot/cogs/audio/audio.py:2457
+#: redbot/cogs/audio/audio.py:2948 redbot/cogs/audio/audio.py:3059
+#: redbot/cogs/audio/audio.py:3558
msgid "Connection to Lavalink has not yet been established."
msgstr ""
-#: redbot/cogs/audio/audio.py:913
+#: redbot/cogs/audio/audio.py:1508
msgid "You need the DJ role to queue tracks."
msgstr ""
-#: redbot/cogs/audio/audio.py:922
+#: redbot/cogs/audio/audio.py:1519
msgid "You must be in the voice channel to use the play command."
msgstr ""
-#: redbot/cogs/audio/audio.py:928
+#: redbot/cogs/audio/audio.py:1525
msgid "No tracks to play."
msgstr ""
-#: redbot/cogs/audio/audio.py:942 redbot/cogs/audio/audio.py:1450
-#: redbot/cogs/audio/audio.py:1828 redbot/cogs/audio/audio.py:1865
+#: redbot/cogs/audio/audio.py:1565
+msgid "The owner needs to set the Spotify client ID, Spotify client secret, and YouTube API key before Spotify URLs or codes can be used. \\nSee `{prefix}audioset youtubeapi` and `{prefix}audioset spotifyapi` for instructions."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1575 redbot/cogs/audio/audio.py:2493
+msgid "Wait until the playlist has finished loading."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1592 redbot/cogs/audio/audio.py:1657
+#: redbot/cogs/audio/audio.py:2499 redbot/cogs/audio/audio.py:2509
+#: redbot/cogs/audio/audio.py:2973 redbot/cogs/audio/audio.py:3027
msgid "Nothing found."
msgstr ""
-#: redbot/cogs/audio/audio.py:953 redbot/cogs/audio/audio.py:1295
+#: redbot/cogs/audio/audio.py:1600
+msgid "The Spotify API key or client secret has not been set properly. \\nUse `{prefix}audioset spotifyapi` for instructions."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1639 redbot/cogs/audio/audio.py:1776
+msgid "This doesn't seem to be a valid Spotify URL or code."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1688 redbot/cogs/audio/audio.py:2320
msgid "Playlist Enqueued"
msgstr ""
-#: redbot/cogs/audio/audio.py:954 redbot/cogs/audio/audio.py:1296
-msgid "Added {num} tracks to the queue."
+#: redbot/cogs/audio/audio.py:1689 redbot/cogs/audio/audio.py:2321
+msgid "Added {num} tracks to the queue.{maxlength_msg}"
msgstr ""
-#: redbot/cogs/audio/audio.py:958
+#: redbot/cogs/audio/audio.py:1695
msgid "{time} until start of playlist playback: starts at #{position} in queue"
msgstr ""
-#: redbot/cogs/audio/audio.py:980 redbot/cogs/audio/audio.py:1938
+#: redbot/cogs/audio/audio.py:1711 redbot/cogs/audio/audio.py:3125
+msgid "Track exceeds maximum length."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1717
+msgid "Nothing found. Check your Lavalink logs for details."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1732 redbot/cogs/audio/audio.py:3108
msgid "Track Enqueued"
msgstr ""
-#: redbot/cogs/audio/audio.py:984 redbot/cogs/audio/audio.py:1944
+#: redbot/cogs/audio/audio.py:1736 redbot/cogs/audio/audio.py:3114
msgid "{time} until track playback: #{position} in queue"
msgstr ""
-#: redbot/cogs/audio/audio.py:989 redbot/cogs/audio/audio.py:1949
+#: redbot/cogs/audio/audio.py:1741 redbot/cogs/audio/audio.py:3119
msgid "#{position} in queue"
msgstr ""
-#: redbot/cogs/audio/audio.py:997
+#: redbot/cogs/audio/audio.py:1761
+msgid "The Spotify API key or client secret has not been set properly. \\nUse `{prefix}audioset spotifyapi` for instructions."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1793 redbot/cogs/audio/audio.py:2384
+msgid "Please wait, adding tracks..."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1809
+msgid "The connection was reset while loading the playlist."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1826 redbot/cogs/audio/audio.py:2401
+msgid "Loading track {num}/{total}..."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1840
+msgid "Approximate time remaining: {seconds}"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1850
+msgid "Nothing found.\\nThe YouTube API key may be invalid or you may be rate limited on YouTube's search service.\\nCheck the YouTube API key again and follow the instructions at `{prefix}audioset youtubeapi`."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1871
#, docstring
msgid "Playlist configuration options."
msgstr ""
-#: redbot/cogs/audio/audio.py:1002
+#: redbot/cogs/audio/audio.py:1876
#, docstring
-msgid "Add a track URL, playlist link, or quick search to a playlist.\n\n"
-" The track(s) will be appended to the end of the playlist.\n"
-" "
+msgid "Add a track URL, playlist link, or quick search to a playlist.\\n\\n The track(s) will be appended to the end of the playlist.\\n "
msgstr ""
-#: redbot/cogs/audio/audio.py:1014 redbot/cogs/audio/audio.py:1078
-#: redbot/cogs/audio/audio.py:1228
+#: redbot/cogs/audio/audio.py:1888 redbot/cogs/audio/audio.py:2028
+#: redbot/cogs/audio/audio.py:2241
msgid "You are not the author of that playlist."
msgstr ""
-#: redbot/cogs/audio/audio.py:1024
+#: redbot/cogs/audio/audio.py:1898
msgid "{track} is already in {playlist}."
msgstr ""
-#: redbot/cogs/audio/audio.py:1033 redbot/cogs/audio/audio.py:1082
-#: redbot/cogs/audio/audio.py:1092 redbot/cogs/audio/audio.py:1231
+#: redbot/cogs/audio/audio.py:1907 redbot/cogs/audio/audio.py:2032
+#: redbot/cogs/audio/audio.py:2081 redbot/cogs/audio/audio.py:2244
msgid "No playlist with that name."
msgstr ""
-#: redbot/cogs/audio/audio.py:1040
+#: redbot/cogs/audio/audio.py:1914
msgid "{track} appended to {playlist}."
msgstr ""
-#: redbot/cogs/audio/audio.py:1046
+#: redbot/cogs/audio/audio.py:1920
msgid "{num} tracks appended to {playlist}."
msgstr ""
-#: redbot/cogs/audio/audio.py:1053
+#: redbot/cogs/audio/audio.py:1928
+#, docstring
+msgid "Copy a playlist from one server to another."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1932
+msgid "Invalid server ID for source server."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1934
+msgid "Invalid server ID for target server."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1939
+msgid "No playlist with that name in {from_guild_name}."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1950
+msgid "Playlist {name} copied from {from_guild_name} to {to_guild_name}."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1962
+msgid "A playlist with that name already exists in {to_guild_name}.\\nPlease enter a new name for this playlist."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1975
+msgid "Try the playlist copy command again with a shorter name."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1980
+msgid "Playlist name already exists in {to_guild_name}, try the playlist copy command again with a different name."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1986 redbot/cogs/audio/audio.py:2220
+msgid "No playlist name entered, try again later."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1991
+msgid "Playlist {name} copied from {from_guild_name} to {to_guild_name}.\\nNew playlist name on {to_guild_name}: {new_name}"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2003
#, docstring
msgid "Create an empty playlist."
msgstr ""
-#: redbot/cogs/audio/audio.py:1057 redbot/cogs/audio/audio.py:1172
+#: redbot/cogs/audio/audio.py:2007 redbot/cogs/audio/audio.py:2183
msgid "You need the DJ role to save playlists."
msgstr ""
-#: redbot/cogs/audio/audio.py:1061 redbot/cogs/audio/audio.py:1176
-#: redbot/cogs/audio/audio.py:1204
+#: redbot/cogs/audio/audio.py:2011 redbot/cogs/audio/audio.py:2187
+#: redbot/cogs/audio/audio.py:2217
msgid "Playlist name already exists, try again with a different name."
msgstr ""
-#: redbot/cogs/audio/audio.py:1067
+#: redbot/cogs/audio/audio.py:2017
msgid "Empty playlist {name} created."
msgstr ""
-#: redbot/cogs/audio/audio.py:1071
+#: redbot/cogs/audio/audio.py:2021
#, docstring
msgid "Delete a saved playlist."
msgstr ""
-#: redbot/cogs/audio/audio.py:1083
+#: redbot/cogs/audio/audio.py:2033
msgid "{name} playlist deleted."
msgstr ""
-#: redbot/cogs/audio/audio.py:1087
+#: redbot/cogs/audio/audio.py:2039
+#, docstring
+msgid "Download a copy of a playlist.\\n\\n These files can be used with the [p]playlist upload command.\\n Red v2-compatible playlists can be generated by passing True\\n for the v2 variable."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2061
+msgid "That playlist has no tracks."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2063 redbot/cogs/audio/audio.py:2331
+msgid "That playlist doesn't exist."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2076
#, docstring
msgid "Retrieve information from a saved playlist."
msgstr ""
-#: redbot/cogs/audio/audio.py:1100
-msgid "**Custom playlist.**"
+#: redbot/cogs/audio/audio.py:2101
+msgid "Playlist info for {playlist_name}:\\n"
msgstr ""
-#: redbot/cogs/audio/audio.py:1102
-msgid "URL: <{url}>"
+#: redbot/cogs/audio/audio.py:2105
+msgid "Playlist info for {playlist_name}:\\nURL: {url}"
msgstr ""
-#: redbot/cogs/audio/audio.py:1105
-msgid "Playlist info for {playlist_name}:"
+#: redbot/cogs/audio/audio.py:2116
+msgid "Author: {author_name} | {num} track(s)"
msgstr ""
-#: redbot/cogs/audio/audio.py:1106
-msgid "Author: **{author_name}**\n"
-"{url}"
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:1110
-msgid "{num} track(s)"
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:1115
+#: redbot/cogs/audio/audio.py:2126
#, docstring
msgid "List saved playlists."
msgstr ""
-#: redbot/cogs/audio/audio.py:1118
+#: redbot/cogs/audio/audio.py:2129
msgid "No saved playlists."
msgstr ""
-#: redbot/cogs/audio/audio.py:1130
+#: redbot/cogs/audio/audio.py:2141
msgid "Tracks: {num}"
msgstr ""
-#: redbot/cogs/audio/audio.py:1131
-msgid "Author: {name}\n"
+#: redbot/cogs/audio/audio.py:2142
+msgid "Author: {name}\\n"
msgstr ""
-#: redbot/cogs/audio/audio.py:1155
+#: redbot/cogs/audio/audio.py:2166
msgid "Playlists for {server_name}:"
msgstr ""
-#: redbot/cogs/audio/audio.py:1159
+#: redbot/cogs/audio/audio.py:2170
msgid "Page {page_num}/{total_pages} | {num} playlists"
msgstr ""
-#: redbot/cogs/audio/audio.py:1168
+#: redbot/cogs/audio/audio.py:2179
#, docstring
msgid "Save the queue to a playlist."
msgstr ""
-#: redbot/cogs/audio/audio.py:1189
+#: redbot/cogs/audio/audio.py:2193 redbot/cogs/audio/audio.py:2590
+#: redbot/cogs/audio/audio.py:2593 redbot/cogs/audio/audio.py:2613
+#: redbot/cogs/audio/audio.py:2756 redbot/cogs/audio/audio.py:2759
+#: redbot/cogs/audio/audio.py:2775 redbot/cogs/audio/audio.py:2778
+#: redbot/cogs/audio/audio.py:2810 redbot/cogs/audio/audio.py:2812
+#: redbot/cogs/audio/audio.py:3418 redbot/cogs/audio/audio.py:3422
+#: redbot/cogs/audio/audio.py:3429
+msgid "There's nothing in the queue."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2202
msgid "Please enter a name for this playlist."
msgstr ""
-#: redbot/cogs/audio/audio.py:1200
-msgid "Try the command again with a shorter name."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:1207
-msgid "No playlist name entered, try again later."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:1214
+#: redbot/cogs/audio/audio.py:2227
msgid "Playlist {name} saved from current queue: {num} tracks added."
msgstr ""
-#: redbot/cogs/audio/audio.py:1221
+#: redbot/cogs/audio/audio.py:2234
#, docstring
msgid "Remove a track from a playlist by url."
msgstr ""
-#: redbot/cogs/audio/audio.py:1235
+#: redbot/cogs/audio/audio.py:2248
msgid "URL not in playlist."
msgstr ""
-#: redbot/cogs/audio/audio.py:1239
+#: redbot/cogs/audio/audio.py:2252
msgid "No tracks left, removing playlist."
msgstr ""
-#: redbot/cogs/audio/audio.py:1246
+#: redbot/cogs/audio/audio.py:2259
msgid "{num} entries have been removed from the {playlist_name} playlist."
msgstr ""
-#: redbot/cogs/audio/audio.py:1253
+#: redbot/cogs/audio/audio.py:2266
msgid "The track has been removed from the {playlist_name} playlist."
msgstr ""
-#: redbot/cogs/audio/audio.py:1260
+#: redbot/cogs/audio/audio.py:2273
#, docstring
msgid "Save a playlist from a url."
msgstr ""
-#: redbot/cogs/audio/audio.py:1272
+#: redbot/cogs/audio/audio.py:2285
msgid "Playlist {name} saved: {num} tracks added."
msgstr ""
-#: redbot/cogs/audio/audio.py:1279
+#: redbot/cogs/audio/audio.py:2292
#, docstring
msgid "Load a playlist into the queue."
msgstr ""
-#: redbot/cogs/audio/audio.py:1304
-msgid "That playlist doesn't exist."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:1309
+#: redbot/cogs/audio/audio.py:2336
#, docstring
msgid "Convert a Red v2 playlist file to a playlist."
msgstr ""
-#: redbot/cogs/audio/audio.py:1315
+#: redbot/cogs/audio/audio.py:2342
msgid "Please upload the playlist file. Any other message will cancel this operation."
msgstr ""
-#: redbot/cogs/audio/audio.py:1323
+#: redbot/cogs/audio/audio.py:2350
msgid "No file detected, try again later."
msgstr ""
-#: redbot/cogs/audio/audio.py:1327
+#: redbot/cogs/audio/audio.py:2354
msgid "Upload cancelled."
msgstr ""
-#: redbot/cogs/audio/audio.py:1331
+#: redbot/cogs/audio/audio.py:2358
msgid "Only playlist files can be uploaded."
msgstr ""
-#: redbot/cogs/audio/audio.py:1336
+#: redbot/cogs/audio/audio.py:2363
msgid "Not a valid playlist file."
msgstr ""
-#: redbot/cogs/audio/audio.py:1352
+#: redbot/cogs/audio/audio.py:2379
msgid "A playlist already exists with this name."
msgstr ""
-#: redbot/cogs/audio/audio.py:1357
-msgid "Please wait, adding tracks..."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:1371
-msgid "Loading track {num}/{total}..."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:1377
+#: redbot/cogs/audio/audio.py:2407
msgid "No tracks found."
msgstr ""
-#: redbot/cogs/audio/audio.py:1383
+#: redbot/cogs/audio/audio.py:2413
msgid "Added {num} tracks from the {playlist_name} playlist. {num_bad} track(s) could not be loaded."
msgstr ""
-#: redbot/cogs/audio/audio.py:1388
+#: redbot/cogs/audio/audio.py:2418
msgid "Added {num} tracks from the {playlist_name} playlist."
msgstr ""
-#: redbot/cogs/audio/audio.py:1392
+#: redbot/cogs/audio/audio.py:2422
msgid "Playlist Saved"
msgstr ""
-#: redbot/cogs/audio/audio.py:1403
+#: redbot/cogs/audio/audio.py:2433
msgid "You need the DJ role to use playlists."
msgstr ""
-#: redbot/cogs/audio/audio.py:1432
+#: redbot/cogs/audio/audio.py:2471
msgid "You must be in the voice channel to use the playlist command."
msgstr ""
-#: redbot/cogs/audio/audio.py:1464
+#: redbot/cogs/audio/audio.py:2525
#, docstring
msgid "Skip to the start of the previously played track."
msgstr ""
-#: redbot/cogs/audio/audio.py:1474 redbot/cogs/audio/audio.py:2121
+#: redbot/cogs/audio/audio.py:2535 redbot/cogs/audio/audio.py:3317
msgid "You need the DJ role to skip tracks."
msgstr ""
-#: redbot/cogs/audio/audio.py:1479 redbot/cogs/audio/audio.py:2115
+#: redbot/cogs/audio/audio.py:2540 redbot/cogs/audio/audio.py:3311
msgid "You must be in the voice channel to skip the music."
msgstr ""
-#: redbot/cogs/audio/audio.py:1482
+#: redbot/cogs/audio/audio.py:2543
msgid "Turn shuffle off to use this command."
msgstr ""
-#: redbot/cogs/audio/audio.py:1484
+#: redbot/cogs/audio/audio.py:2545
msgid "No previous track."
msgstr ""
-#: redbot/cogs/audio/audio.py:1501
+#: redbot/cogs/audio/audio.py:2562
msgid "Replaying Track"
msgstr ""
-#: redbot/cogs/audio/audio.py:1509
+#: redbot/cogs/audio/audio.py:2571
#, docstring
-msgid "List the queue.\n\n"
-" Use [p]queue search to search the queue.\n"
-" "
+msgid "List the songs in the queue."
msgstr ""
-#: redbot/cogs/audio/audio.py:1514 redbot/cogs/audio/audio.py:1517
-#: redbot/cogs/audio/audio.py:1544 redbot/cogs/audio/audio.py:2221
-#: redbot/cogs/audio/audio.py:2225 redbot/cogs/audio/audio.py:2232
-msgid "There's nothing in the queue."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:1553
+#: redbot/cogs/audio/audio.py:2622
msgid "**Currently livestreaming:**"
msgstr ""
-#: redbot/cogs/audio/audio.py:1559 redbot/cogs/audio/audio.py:1569
-#: redbot/cogs/audio/audio.py:1575
+#: redbot/cogs/audio/audio.py:2628 redbot/cogs/audio/audio.py:2638
+#: redbot/cogs/audio/audio.py:2644
msgid "Playing: "
msgstr ""
-#: redbot/cogs/audio/audio.py:1562 redbot/cogs/audio/audio.py:1570
-msgid "Requested by: **{user}**\n"
+#: redbot/cogs/audio/audio.py:2631
+msgid "Requested by: **{user}**\\n"
msgstr ""
-#: redbot/cogs/audio/audio.py:1577
+#: redbot/cogs/audio/audio.py:2639
+msgid "Requested by: **{user}**\\n"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2646
msgid "Requested by: **{user}**"
msgstr ""
-#: redbot/cogs/audio/audio.py:1595 redbot/cogs/audio/audio.py:1599
-#: redbot/cogs/audio/audio.py:1604
-msgid "requested by **{user}**\n"
+#: redbot/cogs/audio/audio.py:2664
+msgid "requested by **{user}**\\n"
msgstr ""
-#: redbot/cogs/audio/audio.py:1615
+#: redbot/cogs/audio/audio.py:2668
+msgid "requested by **{user}**\\n"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2673
+msgid "requested by **{user}**\\n"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2684
msgid "Page {page_num}/{total_pages} | {num_tracks} tracks, {num_remaining} remaining"
msgstr ""
-#: redbot/cogs/audio/audio.py:1624
+#: redbot/cogs/audio/audio.py:2693
msgid "Repeat"
msgstr ""
-#: redbot/cogs/audio/audio.py:1626
+#: redbot/cogs/audio/audio.py:2695
msgid "Shuffle"
msgstr ""
-#: redbot/cogs/audio/audio.py:1683
+#: redbot/cogs/audio/audio.py:2740
msgid "Matching Tracks:"
msgstr ""
-#: redbot/cogs/audio/audio.py:1686 redbot/cogs/audio/audio.py:2010
+#: redbot/cogs/audio/audio.py:2743 redbot/cogs/audio/audio.py:3182
msgid "Page {page_num}/{total_pages}"
msgstr ""
-#: redbot/cogs/audio/audio.py:1695
+#: redbot/cogs/audio/audio.py:2752
+#, docstring
+msgid "Clears the queue."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2764
+msgid "You need the DJ role to clear the queue."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2766
+msgid "The queue has been cleared."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2771
+#, docstring
+msgid "Removes songs from the queue if the requester is not in the voice channel."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2783
+msgid "You need the DJ role to clean the queue."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2794
+msgid "Removed 0 tracks."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2798
+msgid "Removed {removed_tracks} tracks queued by members outside of the voice channel."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2806
+#, docstring
+msgid "Search the queue."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2829
#, docstring
msgid "Toggle repeat."
msgstr ""
-#: redbot/cogs/audio/audio.py:1701
+#: redbot/cogs/audio/audio.py:2835
msgid "You need the DJ role to toggle repeat."
msgstr ""
-#: redbot/cogs/audio/audio.py:1712
+#: redbot/cogs/audio/audio.py:2843
msgid "You must be in the voice channel to toggle repeat."
msgstr ""
-#: redbot/cogs/audio/audio.py:1715
+#: redbot/cogs/audio/audio.py:2849
msgid "Repeat tracks: {true_or_false}."
msgstr ""
-#: redbot/cogs/audio/audio.py:1721
+#: redbot/cogs/audio/audio.py:2857
#, docstring
msgid "Remove a specific track number from the queue."
msgstr ""
-#: redbot/cogs/audio/audio.py:1727
+#: redbot/cogs/audio/audio.py:2863
msgid "Nothing queued."
msgstr ""
-#: redbot/cogs/audio/audio.py:1730
+#: redbot/cogs/audio/audio.py:2866
msgid "You need the DJ role to remove tracks."
msgstr ""
-#: redbot/cogs/audio/audio.py:1735
+#: redbot/cogs/audio/audio.py:2871
msgid "You must be in the voice channel to manage the queue."
msgstr ""
-#: redbot/cogs/audio/audio.py:1751
+#: redbot/cogs/audio/audio.py:2887
msgid "Removed {track} from the queue."
msgstr ""
-#: redbot/cogs/audio/audio.py:1757
+#: redbot/cogs/audio/audio.py:2894
#, docstring
-msgid "Pick a track with a search.\n\n"
-" Use `[p]search list ` to queue all tracks found\n"
-" on YouTube. `[p]search sc ` will search SoundCloud\n"
-" instead of YouTube.\n"
-" "
+msgid "Pick a track with a search.\\n\\n Use `[p]search list ` to queue all tracks found\\n on YouTube. `[p]search sc ` will search SoundCloud\\n instead of YouTube.\\n "
msgstr ""
-#: redbot/cogs/audio/audio.py:1814
+#: redbot/cogs/audio/audio.py:2958
msgid "You must be in the voice channel to enqueue tracks."
msgstr ""
-#: redbot/cogs/audio/audio.py:1831
-msgid "Queued {num} track(s)."
+#: redbot/cogs/audio/audio.py:2997
+msgid "Queued {num} track(s).{maxlength_msg}"
msgstr ""
-#: redbot/cogs/audio/audio.py:1837
+#: redbot/cogs/audio/audio.py:3003
msgid "{time} until start of search playback: starts at #{position} in queue"
msgstr ""
-#: redbot/cogs/audio/audio.py:1997
+#: redbot/cogs/audio/audio.py:3169
msgid "Tracks Found:"
msgstr ""
-#: redbot/cogs/audio/audio.py:1998
+#: redbot/cogs/audio/audio.py:3170
msgid "search results"
msgstr ""
-#: redbot/cogs/audio/audio.py:2001
+#: redbot/cogs/audio/audio.py:3173
msgid "Folders Found:"
msgstr ""
-#: redbot/cogs/audio/audio.py:2002
+#: redbot/cogs/audio/audio.py:3174
msgid "local folders"
msgstr ""
-#: redbot/cogs/audio/audio.py:2004
+#: redbot/cogs/audio/audio.py:3176
msgid "Files Found:"
msgstr ""
-#: redbot/cogs/audio/audio.py:2005
+#: redbot/cogs/audio/audio.py:3177
msgid "local tracks"
msgstr ""
-#: redbot/cogs/audio/audio.py:2022
+#: redbot/cogs/audio/audio.py:3195
#, docstring
-msgid "Seek ahead or behind on a track by seconds."
+msgid "Seek ahead or behind on a track by seconds or a to a specific time.\\n\\n Accepts seconds or a value formatted like 00:00:00 (`hh:mm:ss`) or 00:00 (`mm:ss`)."
msgstr ""
-#: redbot/cogs/audio/audio.py:2031
+#: redbot/cogs/audio/audio.py:3206
msgid "You must be in the voice channel to use seek."
msgstr ""
-#: redbot/cogs/audio/audio.py:2036
+#: redbot/cogs/audio/audio.py:3211
msgid "You need the DJ role to use seek."
msgstr ""
-#: redbot/cogs/audio/audio.py:2042 redbot/cogs/audio/audio.py:2278
+#: redbot/cogs/audio/audio.py:3217 redbot/cogs/audio/audio.py:3510
msgid "There are other people listening - vote to skip instead."
msgstr ""
-#: redbot/cogs/audio/audio.py:2046
+#: redbot/cogs/audio/audio.py:3221
msgid "Can't seek on a stream."
msgstr ""
-#: redbot/cogs/audio/audio.py:2052
+#: redbot/cogs/audio/audio.py:3230
+msgid "Invalid input for the time to seek."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:3236
msgid "Moved {num_seconds}s to 00:00:00"
msgstr ""
-#: redbot/cogs/audio/audio.py:2057
+#: redbot/cogs/audio/audio.py:3241
msgid "Moved {num_seconds}s to {time}"
msgstr ""
-#: redbot/cogs/audio/audio.py:2068
+#: redbot/cogs/audio/audio.py:3249
+msgid "Moved to {time}"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:3261
#, docstring
msgid "Toggle shuffle."
msgstr ""
-#: redbot/cogs/audio/audio.py:2072
+#: redbot/cogs/audio/audio.py:3265
msgid "You need the DJ role to toggle shuffle."
msgstr ""
-#: redbot/cogs/audio/audio.py:2083
+#: redbot/cogs/audio/audio.py:3273
msgid "You must be in the voice channel to toggle shuffle."
msgstr ""
-#: redbot/cogs/audio/audio.py:2086
+#: redbot/cogs/audio/audio.py:3279
msgid "Shuffle tracks: {true_or_false}."
msgstr ""
-#: redbot/cogs/audio/audio.py:2092
+#: redbot/cogs/audio/audio.py:3287
#, docstring
-msgid "Make Red sing one of her songs"
+msgid "Make Red sing one of her songs."
msgstr ""
-#: redbot/cogs/audio/audio.py:2107
+#: redbot/cogs/audio/audio.py:3303
#, docstring
-msgid "Skip to the next track."
+msgid "Skip to the next track, or to a given track number."
msgstr ""
-#: redbot/cogs/audio/audio.py:2126
+#: redbot/cogs/audio/audio.py:3322
+msgid "Can't skip to a specific track in vote mode without the DJ role."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:3326
msgid "I removed your vote to skip."
msgstr ""
-#: redbot/cogs/audio/audio.py:2129
+#: redbot/cogs/audio/audio.py:3329
msgid "You voted to skip."
msgstr ""
-#: redbot/cogs/audio/audio.py:2142
+#: redbot/cogs/audio/audio.py:3342
msgid "Vote threshold met."
msgstr ""
-#: redbot/cogs/audio/audio.py:2145
+#: redbot/cogs/audio/audio.py:3345
msgid " Votes: {num_votes}/{num_members} ({cur_percent}% out of {required_percent}% needed)"
msgstr ""
-#: redbot/cogs/audio/audio.py:2228
+#: redbot/cogs/audio/audio.py:3425
msgid "Currently livestreaming {track}"
msgstr ""
-#: redbot/cogs/audio/audio.py:2235
+#: redbot/cogs/audio/audio.py:3432
msgid "{time} left on {track}"
msgstr ""
-#: redbot/cogs/audio/audio.py:2253
+#: redbot/cogs/audio/audio.py:3441
+msgid "Track number must be equal to or greater than 1."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:3454
+msgid "Can't skip to a track while shuffle is enabled."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:3470
msgid "Track Skipped"
msgstr ""
-#: redbot/cogs/audio/audio.py:2261
+#: redbot/cogs/audio/audio.py:3493
#, docstring
msgid "Stop playback and clear the queue."
msgstr ""
-#: redbot/cogs/audio/audio.py:2271
+#: redbot/cogs/audio/audio.py:3503
msgid "You must be in the voice channel to stop the music."
msgstr ""
-#: redbot/cogs/audio/audio.py:2282
+#: redbot/cogs/audio/audio.py:3514
msgid "You need the DJ role to stop the music."
msgstr ""
-#: redbot/cogs/audio/audio.py:2284
+#: redbot/cogs/audio/audio.py:3516
msgid "Stopping..."
msgstr ""
-#: redbot/cogs/audio/audio.py:2294
+#: redbot/cogs/audio/audio.py:3531
+#, docstring
+msgid "Summon the bot to a voice channel."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:3535
+msgid "You need the DJ role to summon the bot."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:3565
#, docstring
msgid "Set the volume, 1% - 150%."
msgstr ""
-#: redbot/cogs/audio/audio.py:2300
+#: redbot/cogs/audio/audio.py:3571
msgid "Current Volume:"
msgstr ""
-#: redbot/cogs/audio/audio.py:2312
+#: redbot/cogs/audio/audio.py:3583
msgid "You must be in the voice channel to change the volume."
msgstr ""
-#: redbot/cogs/audio/audio.py:2318
+#: redbot/cogs/audio/audio.py:3589
msgid "You need the DJ role to change the volume."
msgstr ""
-#: redbot/cogs/audio/audio.py:2331
+#: redbot/cogs/audio/audio.py:3602
msgid "Volume:"
msgstr ""
-#: redbot/cogs/audio/audio.py:2341
+#: redbot/cogs/audio/audio.py:3613
#, docstring
msgid "Lavalink server configuration options."
msgstr ""
-#: redbot/cogs/audio/audio.py:2346
+#: redbot/cogs/audio/audio.py:3618
#, docstring
msgid "Toggle using external lavalink servers."
msgstr ""
-#: redbot/cogs/audio/audio.py:2357 redbot/cogs/audio/audio.py:2366
+#: redbot/cogs/audio/audio.py:3625 redbot/cogs/audio/audio.py:3635
msgid "External lavalink server: {true_or_false}."
msgstr ""
-#: redbot/cogs/audio/audio.py:2361
-msgid "Defaults reset."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:2373
+#: redbot/cogs/audio/audio.py:3642
#, docstring
msgid "Set the lavalink server host."
msgstr ""
-#: redbot/cogs/audio/audio.py:2377 redbot/cogs/audio/audio.py:2382
+#: redbot/cogs/audio/audio.py:3646 redbot/cogs/audio/audio.py:3651
msgid "Host set to {host}."
msgstr ""
-#: redbot/cogs/audio/audio.py:2379 redbot/cogs/audio/audio.py:2395
-#: redbot/cogs/audio/audio.py:2413 redbot/cogs/audio/audio.py:2429
+#: redbot/cogs/audio/audio.py:3648 redbot/cogs/audio/audio.py:3664
+#: redbot/cogs/audio/audio.py:3682 redbot/cogs/audio/audio.py:3698
msgid "External lavalink server set to True."
msgstr ""
-#: redbot/cogs/audio/audio.py:2388
+#: redbot/cogs/audio/audio.py:3657
#, docstring
msgid "Set the lavalink server password."
msgstr ""
-#: redbot/cogs/audio/audio.py:2393 redbot/cogs/audio/audio.py:2399
+#: redbot/cogs/audio/audio.py:3662 redbot/cogs/audio/audio.py:3668
msgid "Server password set to {password}."
msgstr ""
-#: redbot/cogs/audio/audio.py:2406
+#: redbot/cogs/audio/audio.py:3675
#, docstring
msgid "Set the lavalink REST server port."
msgstr ""
-#: redbot/cogs/audio/audio.py:2411 redbot/cogs/audio/audio.py:2416
+#: redbot/cogs/audio/audio.py:3680 redbot/cogs/audio/audio.py:3685
msgid "REST port set to {port}."
msgstr ""
-#: redbot/cogs/audio/audio.py:2422
+#: redbot/cogs/audio/audio.py:3691
#, docstring
msgid "Set the lavalink websocket server port."
msgstr ""
-#: redbot/cogs/audio/audio.py:2427 redbot/cogs/audio/audio.py:2432
+#: redbot/cogs/audio/audio.py:3696 redbot/cogs/audio/audio.py:3701
msgid "Websocket port set to {port}."
msgstr ""
-#: redbot/cogs/audio/audio.py:2461
+#: redbot/cogs/audio/audio.py:3801
msgid "Not enough {currency} ({required_credits} required)."
msgstr ""
diff --git a/redbot/cogs/audio/locales/de-DE.po b/redbot/cogs/audio/locales/de-DE.po
index a8073dc55..940139d7a 100644
--- a/redbot/cogs/audio/locales/de-DE.po
+++ b/redbot/cogs/audio/locales/de-DE.po
@@ -1,14 +1,14 @@
msgid ""
msgstr ""
"Project-Id-Version: red-discordbot\n"
-"POT-Creation-Date: 2019-02-17 02:24+0000\n"
-"PO-Revision-Date: 2019-02-25 03:07\n"
-"Last-Translator: Kowlin \n"
+"POT-Creation-Date: 2019-07-05 22:33+0200\n"
+"PO-Revision-Date: 2019-07-06 16:12\n"
+"Last-Translator: Robert Jansen (Kowlin)\n"
"Language-Team: German\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"Generated-By: redgettext 2.2\n"
+"Generated-By: redgettext 3.0\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: crowdin.com\n"
"X-Crowdin-Project: red-discordbot\n"
@@ -16,979 +16,1275 @@ msgstr ""
"X-Crowdin-File: /cogs/audio/locales/messages.pot\n"
"Language: de_DE\n"
-#: redbot/cogs/audio/audio.py:38
+#: redbot/cogs/audio/audio.py:47
#, docstring
msgid "Play audio through voice channels."
msgstr "Spiele Audio über Sprachkanäle ab."
-#: redbot/cogs/audio/audio.py:173 redbot/cogs/audio/audio.py:735
-msgid "Now Playing"
-msgstr "Jetzt läuft"
-
-#: redbot/cogs/audio/audio.py:177
-msgid "Track length: {length} | Requested by: {user}"
-msgstr "Länge des Tracks: {length} | Angefordert von: {user}"
-
-#: redbot/cogs/audio/audio.py:201 redbot/cogs/audio/audio.py:227
+#: redbot/cogs/audio/audio.py:260
msgid "music in {} servers"
msgstr "Musik in {} Servern"
-#: redbot/cogs/audio/audio.py:211
+#: redbot/cogs/audio/audio.py:300 redbot/cogs/audio/audio.py:1317
+msgid "Now Playing"
+msgstr "Jetzt läuft"
+
+#: redbot/cogs/audio/audio.py:304
+msgid "Track length: {length} | Requested by: {user}"
+msgstr "Länge des Tracks: {length} | Angefordert von: {user}"
+
+#: redbot/cogs/audio/audio.py:331
msgid "Queue ended."
msgstr "Warteschlange beendet."
-#: redbot/cogs/audio/audio.py:240
+#: redbot/cogs/audio/audio.py:350
msgid "Track Error"
msgstr "Track-Fehler"
-#: redbot/cogs/audio/audio.py:245
+#: redbot/cogs/audio/audio.py:355
msgid "Skipping..."
msgstr "Überspringe..."
-#: redbot/cogs/audio/audio.py:252
+#: redbot/cogs/audio/audio.py:363
#, docstring
msgid "Music configuration options."
msgstr "Musik Konfigurationsoptionen."
-#: redbot/cogs/audio/audio.py:258
+#: redbot/cogs/audio/audio.py:369
#, docstring
-msgid "Toggle DJ mode.\n\n"
-" DJ mode allows users with the DJ role to use audio commands.\n"
-" "
-msgstr "Schalte DJ Mode um.\n\n"
-" DJ Mode erlaubt Benutzern mit der DJ Rolle die Audio Befehle zu nutzen. "
+msgid "Toggle the bot auto-disconnecting when done playing.\\n\\n This setting takes precedence over [p]audioset emptydisconnect.\\n "
+msgstr ""
-#: redbot/cogs/audio/audio.py:265
+#: redbot/cogs/audio/audio.py:377
+msgid "Auto-disconnection at queue end: {true_or_false}."
+msgstr "Automatischer Disconnect beim Playlistende: {true_or_false}."
+
+#: redbot/cogs/audio/audio.py:385
+#, docstring
+msgid "Toggle DJ mode.\\n\\n DJ mode allows users with the DJ role to use audio commands.\\n "
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:392
msgid "Please set a role to use with DJ mode. Enter the role name or ID now."
msgstr "Bitte wähle eine Rolle für den DJ Mode. Gib den Rollen Namen oder die ID jetzt ein."
-#: redbot/cogs/audio/audio.py:273
+#: redbot/cogs/audio/audio.py:400
msgid "Response timed out, try again later."
msgstr "Zeitüberschreitung der Antwort, versuch es später erneut."
-#: redbot/cogs/audio/audio.py:284
+#: redbot/cogs/audio/audio.py:405
+msgid "DJ role enabled: {true_or_false}."
+msgstr "DJ Rolle aktiviert: {true_or_false}."
+
+#: redbot/cogs/audio/audio.py:411
#, docstring
msgid "Auto-disconnection after x seconds while stopped. 0 to disable."
msgstr "Auto-Disconnect nach x Sekunden wenn gestoppt. 0 zum deaktivieren."
-#: redbot/cogs/audio/audio.py:286 redbot/cogs/audio/audio.py:317
-#: redbot/cogs/audio/audio.py:405
+#: redbot/cogs/audio/audio.py:413 redbot/cogs/audio/audio.py:436
+#: redbot/cogs/audio/audio.py:543 redbot/cogs/audio/audio.py:687
msgid "Can't be less than zero."
msgstr "Kann nicht weniger als Null sein."
-#: redbot/cogs/audio/audio.py:291
+#: redbot/cogs/audio/audio.py:418
msgid "Empty disconnect disabled."
-msgstr "Leerer Kanal Disconnect deaktiviert."
+msgstr "Trennung bei leerem Kanal deaktiviert."
-#: redbot/cogs/audio/audio.py:296
+#: redbot/cogs/audio/audio.py:423
msgid "Empty disconnect timer set to {num_seconds}."
msgstr "Leerer Kanal Disconnect Timer gesetzt auf {num_seconds}."
-#: redbot/cogs/audio/audio.py:307
+#: redbot/cogs/audio/audio.py:434
+#, docstring
+msgid "Set a price for queueing tracks for non-mods. 0 to disable."
+msgstr "Lege einen Preis für Nicht-Mods fest, um Lieder einzureihen. 0 zum Deaktivieren."
+
+#: redbot/cogs/audio/audio.py:439
+msgid "Jukebox mode disabled."
+msgstr "Jukebox Modus deaktiviert."
+
+#: redbot/cogs/audio/audio.py:444
+msgid "Track queueing command price set to {price} {currency}."
+msgstr "Der Preis für das Hinzufügen eines Titels in die Warteschlange wurde auf {price} {currency} gesetzt."
+
+#: redbot/cogs/audio/audio.py:455
+#, docstring
+msgid "Set the localtracks path if the Lavalink.jar is not run from the Audio data folder.\\n\\n Leave the path blank to reset the path to the default, the Audio data directory.\\n "
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:463
+msgid "The localtracks path location has been reset to the default location."
+msgstr "Der Pfad für Lokale Musik wurde zu dem standart Pfad zurückgesetzt."
+
+#: redbot/cogs/audio/audio.py:466
+msgid "This setting is only for bot owners to set a localtracks folder location if the Lavalink.jar is being ran from outside of the Audio data directory.\\nIn the example below, the full path for 'ParentDirectory' must be passed to this command.\\nThe path must not contain spaces.\\n```\\nParentDirectory\\n |__ localtracks (folder)\\n | |__ Awesome Album Name (folder)\\n | |__01 Cool Song.mp3\\n | |__02 Groovy Song.mp3\\n |\\n |__ Lavalink.jar\\n |__ application.yml\\n```\\nThe folder path given to this command must contain the Lavalink.jar, the application.yml, and the localtracks folder.\\nUse this command with no path given to reset it to the default, the Audio data directory for this bot.\\nDo you want to continue to set the provided path for local tracks?"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:505
+msgid "{local_path} does not seem like a valid path."
+msgstr "{local_path} sieht nicht wie ein gültiges Verzeichnis aus."
+
+#: redbot/cogs/audio/audio.py:520
+msgid "The path that was entered does not have {filelist} file in that location. The path will still be saved, but please check the path and the file location before attempting to play local tracks or start your Lavalink.jar."
+msgstr "Das angegebene Verzeichnis besitzt keine {filelist}, Das Verzeichnis wird gespeichert, aber bitte Kontrollieren das Verzeichnis bevor du versuchst lokale Lieder abzuspielen oder deine Lavalink.jar zu starten."
+
+#: redbot/cogs/audio/audio.py:530
+msgid "Localtracks path set to: {local_path}."
+msgstr "Lokaler Pfad gesetzt zu: {local_path}."
+
+#: redbot/cogs/audio/audio.py:536
+#, docstring
+msgid "Max length of a track to queue in seconds. 0 to disable.\\n\\n Accepts seconds or a value formatted like 00:00:00 (`hh:mm:ss`) or 00:00 (`mm:ss`).\\n Invalid input will turn the max length setting off."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:545
+msgid "Track max length disabled."
+msgstr "Maximale Track länge deaktiviert."
+
+#: redbot/cogs/audio/audio.py:549
+msgid "Track max length set to {seconds}."
+msgstr "Maximale Track länge gesetzt zu: {seconds}."
+
+#: redbot/cogs/audio/audio.py:559
+#, docstring
+msgid "Toggle track announcement and other bot messages."
+msgstr "Titel-Ankündigung und andere Bot-Nachrichten umschalten."
+
+#: redbot/cogs/audio/audio.py:563
+msgid "Verbose mode on: {true_or_false}."
+msgstr "Ausführlicher Modus eingeschaltet: {true_or_false}."
+
+#: redbot/cogs/audio/audio.py:569
+#, docstring
+msgid "Toggle the domain restriction on Audio.\\n\\n When toggled off, users will be able to play songs from non-commercial websites and links.\\n When toggled on, users are restricted to YouTube, SoundCloud, Mixer, Vimeo, Twitch, and Bandcamp links."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:576
+msgid "Commercial links only: {true_or_false}."
+msgstr "Kommerzielle Links nur: {true_or_false}."
+
+#: redbot/cogs/audio/audio.py:582
#, docstring
msgid "Set the role to use for DJ mode."
msgstr "Wähle die Rolle die für den DJ Mode genutzt wird."
-#: redbot/cogs/audio/audio.py:310
+#: redbot/cogs/audio/audio.py:585
msgid "DJ role set to: {role.name}."
msgstr "DJ Rolle gesetzt auf: {role.name}."
-#: redbot/cogs/audio/audio.py:315
-#, docstring
-msgid "Set a price for queueing tracks for non-mods. 0 to disable."
-msgstr "Setze einen Preis um Lieder einzureihen für Nicht-Mods. 0 zum deaktivieren."
-
-#: redbot/cogs/audio/audio.py:320
-msgid "Jukebox mode disabled."
-msgstr "Jukebox Modus deaktiviert."
-
-#: redbot/cogs/audio/audio.py:325
-msgid "Track queueing command price set to {price} {currency}."
-msgstr "Der Preis für das Hinzufügen eines Tracks in die Warteschlange wurde auf {price} {currency} gesetzt."
-
-#: redbot/cogs/audio/audio.py:336
-#, docstring
-msgid "Toggle track announcement and other bot messages."
-msgstr "Track-Ankündigung und andere Bot-Nachrichten umschalten."
-
-#: redbot/cogs/audio/audio.py:340
-msgid "Verbose mode on: {true_or_false}."
-msgstr "Ausführlichen Modus auf: {true_or_false}."
-
-#: redbot/cogs/audio/audio.py:345
+#: redbot/cogs/audio/audio.py:589
#, docstring
msgid "Show the current settings."
-msgstr "Zeige aktuelle Einstellungen an"
+msgstr "Zeige die aktuellen Einstellungen an."
-#: redbot/cogs/audio/audio.py:358
+#: redbot/cogs/audio/audio.py:604
msgid "Server Settings"
msgstr "Server Einstellungen"
-#: redbot/cogs/audio/audio.py:360
-msgid "Disconnect timer: [{num_seconds}]\n"
-msgstr "Disconnect timer: [{num_seconds}]\n"
+#: redbot/cogs/audio/audio.py:606
+msgid "Auto-disconnect: [{dc}]\\n"
+msgstr ""
-#: redbot/cogs/audio/audio.py:364
-msgid "DJ Role: [{role.name}]\n"
-msgstr "DJ Rolle: [{role.name}]\n"
+#: redbot/cogs/audio/audio.py:609
+msgid "Disconnect timer: [{num_seconds}]\\n"
+msgstr ""
-#: redbot/cogs/audio/audio.py:366
-msgid "Jukebox: [{jukebox_name}]\n"
-msgstr "Jukebox: [{jukebox_name}]\n"
+#: redbot/cogs/audio/audio.py:613
+msgid "DJ Role: [{role.name}]\\n"
+msgstr ""
-#: redbot/cogs/audio/audio.py:367
-msgid "Command price: [{jukebox_price}]\n"
-msgstr "Befehlspreis: [{jukebox_price}]\n"
+#: redbot/cogs/audio/audio.py:615
+msgid "Jukebox: [{jukebox_name}]\\n"
+msgstr ""
-#: redbot/cogs/audio/audio.py:368
-msgid "Repeat: [{repeat}]\n"
-"Shuffle: [{shuffle}]\n"
-"Song notify msgs: [{notify}]\n"
-"Songs as status: [{status}]\n"
-msgstr "Wiederholung: [{repeat}]\n"
-"Shuffle: [{shuffle}]\n"
-"Song benachrichtigen Msgs: [{notify}]\n"
-"Songs als Status: [{status}]\n"
+#: redbot/cogs/audio/audio.py:616
+msgid "Command price: [{jukebox_price}]\\n"
+msgstr ""
-#: redbot/cogs/audio/audio.py:375
-msgid "Thumbnails: [{0}]\n"
-msgstr "Miniaturansichten: [{0}]\n"
+#: redbot/cogs/audio/audio.py:618
+msgid "Max track length: [{tracklength}]\\n"
+msgstr ""
-#: redbot/cogs/audio/audio.py:377
-msgid "Vote skip: [{vote_enabled}]\n"
-"Skip percentage: [{vote_percent}%]\n"
-msgstr "Abstimmung überspringen: [{vote_enabled}]\n"
-"Skip Prozentsatz: [%{vote_percent}]\n"
+#: redbot/cogs/audio/audio.py:621
+msgid "Repeat: [{repeat}]\\nShuffle: [{shuffle}]\\nSong notify msgs: [{notify}]\\nSongs as status: [{status}]\\n"
+msgstr ""
-#: redbot/cogs/audio/audio.py:380
-msgid "---Lavalink Settings---\n"
-"Cog version: [{version}]\n"
-"Jar build: [{jarbuild}]\n"
-"External server: [{use_external_lavalink}]"
-msgstr "---Lavalink Einstellungen---\n"
-"Cog Version: [{version}]\n"
-"Jar build: [{jarbuild}]\n"
-"Externer Server: [{use_external_lavalink}]"
+#: redbot/cogs/audio/audio.py:628
+msgid "Thumbnails: [{0}]\\n"
+msgstr ""
-#: redbot/cogs/audio/audio.py:393
+#: redbot/cogs/audio/audio.py:630
+msgid "Vote skip: [{vote_enabled}]\\nSkip percentage: [{vote_percent}%]\\n"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:633
+msgid "---Lavalink Settings--- \\nCog version: [{version}]\\nJar build: [{jarbuild}]\\nExternal server: [{use_external_lavalink}]\\n"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:640
+msgid "Localtracks path: [{localpath}]\\n"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:648
#, docstring
-msgid "Toggle displaying a thumbnail on audio messages."
-msgstr "Zeigt ein Vorschaubild auf Audionachrichten an."
+msgid "Instructions to set the Spotify API tokens."
+msgstr "Anleitung um die Spotify API tokens einzurichten."
-#: redbot/cogs/audio/audio.py:397
-msgid "Thumbnail display: {true_or_false}."
-msgstr "Miniaturansicht: {true_or_false}."
+#: redbot/cogs/audio/audio.py:649
+msgid "1. Go to Spotify developers and log in with your Spotify account.\\n(https://developer.spotify.com/dashboard/applications)\\n2. Click \\\"Create An App\\\".\\n3. Fill out the form provided with your app name, etc.\\n4. When asked if you're developing commercial integration select \\\"No\\\".\\n5. Accept the terms and conditions.\\n6. Copy your client ID and your client secret into:\\n`{prefix}set api spotify client_id, client_secret,`"
+msgstr ""
-#: redbot/cogs/audio/audio.py:403
-#, docstring
-msgid "Percentage needed for non-mods to skip tracks. 0 to disable."
-msgstr "Prozentsatz benötigt für Nicht-Mods, um Tracks zu überspringen. 0 um zu deaktivieren."
-
-#: redbot/cogs/audio/audio.py:411
-msgid "Voting disabled. All users can use queue management commands."
-msgstr "Voting deaktiviert. Alle Benutzer können Queue Management Befehle verwenden."
-
-#: redbot/cogs/audio/audio.py:416
-msgid "Vote percentage set to {percent}%."
-msgstr "Stimmen-Anteil auf {percent} % festgelegt."
-
-#: redbot/cogs/audio/audio.py:425
+#: redbot/cogs/audio/audio.py:665
#, docstring
msgid "Enable/disable tracks' titles as status."
-msgstr "Aktivieren/Deaktivieren Track-Titel als Status."
+msgstr "Aktiviert/Deaktiviert Titel als Status."
-#: redbot/cogs/audio/audio.py:429
+#: redbot/cogs/audio/audio.py:669
msgid "Song titles as status: {true_or_false}."
msgstr "Titel als Status: {true_or_false}."
-#: redbot/cogs/audio/audio.py:435
+#: redbot/cogs/audio/audio.py:675
+#, docstring
+msgid "Toggle displaying a thumbnail on audio messages."
+msgstr "Zeige Miniaturbilder bei Audio-Mitteilungen an."
+
+#: redbot/cogs/audio/audio.py:679
+msgid "Thumbnail display: {true_or_false}."
+msgstr "Miniaturansicht: {true_or_false}."
+
+#: redbot/cogs/audio/audio.py:685
+#, docstring
+msgid "Percentage needed for non-mods to skip tracks. 0 to disable."
+msgstr "Benötigte Stimmen in Prozent für Nicht-Mods, um Titel zu überspringen. 0 um zum Deaktivieren."
+
+#: redbot/cogs/audio/audio.py:693
+msgid "Voting disabled. All users can use queue management commands."
+msgstr "Abstimmung deaktiviert. Alle Benutzer können Warteschlangen Management Befehle verwenden."
+
+#: redbot/cogs/audio/audio.py:698
+msgid "Vote percentage set to {percent}%."
+msgstr "Stimmen-Anteil auf {percent} % festgelegt."
+
+#: redbot/cogs/audio/audio.py:707
+#, docstring
+msgid "Instructions to set the YouTube API key."
+msgstr "Anleitung um den YouTube API key einzurichten."
+
+#: redbot/cogs/audio/audio.py:726
#, docstring
msgid "Audio stats."
msgstr "Audio-Statistiken."
-#: redbot/cogs/audio/audio.py:469 redbot/cogs/audio/audio.py:489
-#: redbot/cogs/audio/audio.py:698 redbot/cogs/audio/audio.py:788
-#: redbot/cogs/audio/audio.py:804 redbot/cogs/audio/audio.py:829
-#: redbot/cogs/audio/audio.py:836 redbot/cogs/audio/audio.py:1179
-#: redbot/cogs/audio/audio.py:1466 redbot/cogs/audio/audio.py:1724
-#: redbot/cogs/audio/audio.py:2026 redbot/cogs/audio/audio.py:2063
-#: redbot/cogs/audio/audio.py:2109 redbot/cogs/audio/audio.py:2265
-#: redbot/cogs/audio/audio.py:2304 redbot/cogs/audio/audio.py:2334
+#: redbot/cogs/audio/audio.py:754 redbot/cogs/audio/audio.py:782
+#: redbot/cogs/audio/audio.py:819 redbot/cogs/audio/audio.py:847
+#: redbot/cogs/audio/audio.py:914 redbot/cogs/audio/audio.py:932
+#: redbot/cogs/audio/audio.py:956 redbot/cogs/audio/audio.py:1026
+#: redbot/cogs/audio/audio.py:1280 redbot/cogs/audio/audio.py:1371
+#: redbot/cogs/audio/audio.py:1388 redbot/cogs/audio/audio.py:1411
+#: redbot/cogs/audio/audio.py:1419 redbot/cogs/audio/audio.py:2190
+#: redbot/cogs/audio/audio.py:2527 redbot/cogs/audio/audio.py:2860
+#: redbot/cogs/audio/audio.py:3201 redbot/cogs/audio/audio.py:3255
+#: redbot/cogs/audio/audio.py:3305 redbot/cogs/audio/audio.py:3497
+#: redbot/cogs/audio/audio.py:3575 redbot/cogs/audio/audio.py:3605
msgid "Nothing playing."
-msgstr "Nichts spielt."
+msgstr "Keine Wiedergabe."
-#: redbot/cogs/audio/audio.py:473
+#: redbot/cogs/audio/audio.py:758
msgid "Not connected anywhere."
-msgstr "Nicht überall verbunden."
+msgstr "Keine Verbindungen."
-#: redbot/cogs/audio/audio.py:478
-msgid "Connected in {num} servers:"
-msgstr "Verbunden in {num} Server:"
+#: redbot/cogs/audio/audio.py:764
+msgid "Playing in {num}/{total} servers:"
+msgstr "Spielt in {num}/{total} Serverm:"
-#: redbot/cogs/audio/audio.py:486
+#: redbot/cogs/audio/audio.py:779
#, docstring
msgid "Bump a track number to the top of the queue."
msgstr "Befördert einen Track mit einer bestimmten Nummer an die Spitze der Warteschlange."
-#: redbot/cogs/audio/audio.py:495
+#: redbot/cogs/audio/audio.py:788
msgid "You must be in the voice channel to bump a track."
-msgstr "Du musst dich in dem Sprackkanal des Bot's befinden, um die Reihenfolge der Warteschlange zu verändern."
+msgstr "Du musst dich in dem Sprachkanal befinden, um einen Titel an den Anfang der Warteschlange zu schieben."
-#: redbot/cogs/audio/audio.py:499
+#: redbot/cogs/audio/audio.py:792
msgid "You need the DJ role to bump tracks."
-msgstr "Du benötigst die DJ-Rolle, um die Warteschlange zu verändern."
+msgstr "Du benötigst die DJ Rolle, um Titel an den Anfang zu schieben."
-#: redbot/cogs/audio/audio.py:502 redbot/cogs/audio/audio.py:1739
+#: redbot/cogs/audio/audio.py:795 redbot/cogs/audio/audio.py:2875
msgid "Song number must be greater than 1 and within the queue limit."
msgstr "Die Track Nummer muss zwischen 1 und der Anzahl an Tracks in der Warteschlange liegen."
-#: redbot/cogs/audio/audio.py:517
+#: redbot/cogs/audio/audio.py:810
msgid "Moved {track} to the top of the queue."
msgstr "{track} wurde an die Spitze der Warteschlange gesetzt."
-#: redbot/cogs/audio/audio.py:523
+#: redbot/cogs/audio/audio.py:817
#, docstring
msgid "Disconnect from the voice channel."
-msgstr "Verlasse den Sprachkanal."
+msgstr "Verbindung zum Sprachkanal trennen."
-#: redbot/cogs/audio/audio.py:528
+#: redbot/cogs/audio/audio.py:826
msgid "You need the DJ role to disconnect."
-msgstr "Du benötigst die DJ-Rolle, um die Verbindung zu trennen."
+msgstr "Du benötigst die DJ Rolle, um die Verbindung zu trennen."
-#: redbot/cogs/audio/audio.py:532
+#: redbot/cogs/audio/audio.py:830
msgid "There are other people listening to music."
msgstr "Es gerade andere Leute, die Musik hören."
-#: redbot/cogs/audio/audio.py:540
+#: redbot/cogs/audio/audio.py:845
+#, docstring
+msgid "Equalizer management."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:865
+#, docstring
+msgid "Delete a saved eq preset."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:887
+#, docstring
+msgid "List saved eq presets."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:890
+msgid "No saved equalizer presets."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:897
+msgid "{num} preset(s)"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:903
+#, docstring
+msgid "Load a saved eq preset."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:930
+#, docstring
+msgid "Reset the eq to 0 across all bands."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:946
+msgid "Equalizer values have been reset."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:954
+#, docstring
+msgid "Save the current eq settings to a preset."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:958
+msgid "Please enter a name for this equalizer preset."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:972
+msgid "No equalizer preset name entered, try the command again later."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:981 redbot/cogs/audio/audio.py:2213
+msgid "Try the command again with a shorter name."
+msgstr "Bitte den Befehl mit einem kürzeren Namen erneut versuchen."
+
+#: redbot/cogs/audio/audio.py:985
+msgid "Preset name already exists, do you want to replace it?"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:994
+msgid "Not saving preset."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1019
+#, docstring
+msgid "Set an eq band with a band number or name and value.\\n\\n Band positions are 1-15 and values have a range of -0.25 to 1.0.\\n Band names are 25, 40, 63, 100, 160, 250, 400, 630, 1k, 1.6k, 2.5k, 4k, 6.3k, 10k, and 16k Hz.\\n Setting a band value to -0.25 nullifies it while +0.25 is double.\\n "
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1063
+msgid "Valid band numbers are 1-15 or the band names listed in the help for this command."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1099
#, docstring
msgid "Local playback commands."
msgstr "Befehle zur lokalen Wiedergabe."
-#: redbot/cogs/audio/audio.py:545
+#: redbot/cogs/audio/audio.py:1104
#, docstring
msgid "Play all songs in a localtracks folder."
msgstr "Spielt alle Tracks ab, welche sich in einem Lokalen Ordner befinden."
-#: redbot/cogs/audio/audio.py:552
+#: redbot/cogs/audio/audio.py:1115
+msgid "No localtracks folder named {name}."
+msgstr "Kein Lokaler Musikordner mit dem Namen {name}."
+
+#: redbot/cogs/audio/audio.py:1121
#, docstring
msgid "Play a local track."
msgstr "Spielt einen Lokalen Track ab."
-#: redbot/cogs/audio/audio.py:557
+#: redbot/cogs/audio/audio.py:1126
msgid "No local track folders found."
msgstr "Es wurde kein lokaler Track-Ordner gefunden."
-#: redbot/cogs/audio/audio.py:600
+#: redbot/cogs/audio/audio.py:1169
#, docstring
msgid "Search for songs across all localtracks folders."
msgstr "Sucht nach Tracks in allen lokalen Ordnern."
-#: redbot/cogs/audio/audio.py:605
+#: redbot/cogs/audio/audio.py:1174
msgid "No album folders found."
-msgstr "Es wurde kein Album-Ordner gefunden."
+msgstr "Keine Album-Ordner gefunden."
-#: redbot/cogs/audio/audio.py:612 redbot/cogs/audio/audio.py:1634
+#: redbot/cogs/audio/audio.py:1181 redbot/cogs/audio/audio.py:2816
msgid "No matches."
-msgstr "Keine Übereinstimmungen."
+msgstr "Keine Treffer."
-#: redbot/cogs/audio/audio.py:688
+#: redbot/cogs/audio/audio.py:1269
msgid "No localtracks folder."
msgstr "Es existiert kein Lokaler Track-Ordner."
-#: redbot/cogs/audio/audio.py:696
+#: redbot/cogs/audio/audio.py:1278
#, docstring
msgid "Now playing."
msgstr "Aktuelle Wiedergabe."
-#: redbot/cogs/audio/audio.py:716
+#: redbot/cogs/audio/audio.py:1298
msgid "Requested by: **{track.requester}**"
msgstr "Hinzugefügt von: **{track.requester}**"
-#: redbot/cogs/audio/audio.py:726
+#: redbot/cogs/audio/audio.py:1308
msgid "Nothing."
msgstr "Nichts."
-#: redbot/cogs/audio/audio.py:785
+#: redbot/cogs/audio/audio.py:1368
#, docstring
-msgid "Pause and resume."
-msgstr "Wiedergabe anhalten, zum fortsetzen `[p]resume`."
+msgid "Pause or resume a playing track."
+msgstr "Pausiere oder setze ein spielendes Lied fort."
-#: redbot/cogs/audio/audio.py:794
-msgid "You must be in the voice channel to pause the music."
-msgstr "Du musst dich in dem Sprackkanal des Bot's befinden, um die Wiedergabe zu pausieren."
+#: redbot/cogs/audio/audio.py:1377
+msgid "You must be in the voice channel pause or resume."
+msgstr "Du musst im Voice Channel sein um zu pausieren oder fortzusetzen."
-#: redbot/cogs/audio/audio.py:800
-msgid "You need the DJ role to pause tracks."
-msgstr "Du benötigst die DJ-Rolle, um die Wiedergabe zu pausieren."
+#: redbot/cogs/audio/audio.py:1384
+msgid "You need the DJ role to pause or resume tracks."
+msgstr "Du brachst die DJ Rolle um zu pausieren oder um fortzusetzen."
-#: redbot/cogs/audio/audio.py:814
+#: redbot/cogs/audio/audio.py:1401
msgid "Track Paused"
-msgstr "Track angehalten."
+msgstr "Titel pausiert"
-#: redbot/cogs/audio/audio.py:821
+#: redbot/cogs/audio/audio.py:1407
msgid "Track Resumed"
-msgstr "Track wird fortgesetzt."
+msgstr "Titel wird fortgesetzt"
-#: redbot/cogs/audio/audio.py:826
-msgid "Track is paused."
-msgstr "Track ist pausiert."
-
-#: redbot/cogs/audio/audio.py:828
-msgid "Track is playing."
-msgstr "Track wird wiedergegeben."
-
-#: redbot/cogs/audio/audio.py:834
+#: redbot/cogs/audio/audio.py:1417
#, docstring
msgid "Queue percentage."
-msgstr "Anteile in Warteschlange (in Prozent)."
+msgstr "Position in Warteschlange (in Prozent)."
-#: redbot/cogs/audio/audio.py:860
+#: redbot/cogs/audio/audio.py:1443
msgid "Nothing in the queue."
msgstr "Die Warteschlange ist leer."
-#: redbot/cogs/audio/audio.py:882
+#: redbot/cogs/audio/audio.py:1465
msgid "Queued and playing tracks:"
-msgstr ""
+msgstr "Eingereihte und spielende Titel:"
-#: redbot/cogs/audio/audio.py:890
+#: redbot/cogs/audio/audio.py:1474
#, docstring
msgid "Play a URL or search for a track."
+msgstr "Spiele eine URL ab oder suche nach einem Titel."
+
+#: redbot/cogs/audio/audio.py:1481
+msgid "That URL is not allowed."
+msgstr "Dieser Link ist nicht erlaubt."
+
+#: redbot/cogs/audio/audio.py:1484 redbot/cogs/audio/audio.py:2437
+#: redbot/cogs/audio/audio.py:2928 redbot/cogs/audio/audio.py:3047
+msgid "Connection to Lavalink has failed."
msgstr ""
-#: redbot/cogs/audio/audio.py:900 redbot/cogs/audio/audio.py:1411
-#: redbot/cogs/audio/audio.py:1795
+#: redbot/cogs/audio/audio.py:1486 redbot/cogs/audio/audio.py:2439
+#: redbot/cogs/audio/audio.py:2930 redbot/cogs/audio/audio.py:3049
+msgid "Please check your console or logs for details."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1495 redbot/cogs/audio/audio.py:2449
+#: redbot/cogs/audio/audio.py:2939 redbot/cogs/audio/audio.py:3543
msgid "I don't have permission to connect to your channel."
-msgstr ""
+msgstr "Ich habe keine Berechtigung, um mich zu deinem Kanal zu verbinden."
-#: redbot/cogs/audio/audio.py:906 redbot/cogs/audio/audio.py:1422
-#: redbot/cogs/audio/audio.py:1801 redbot/cogs/audio/audio.py:1889
+#: redbot/cogs/audio/audio.py:1501 redbot/cogs/audio/audio.py:2461
+#: redbot/cogs/audio/audio.py:2945 redbot/cogs/audio/audio.py:3056
+#: redbot/cogs/audio/audio.py:3555
msgid "Connect to a voice channel first."
-msgstr ""
+msgstr "Verbinde dich zuerst mit einem Sprachkanal."
-#: redbot/cogs/audio/audio.py:909 redbot/cogs/audio/audio.py:1418
-#: redbot/cogs/audio/audio.py:1804 redbot/cogs/audio/audio.py:1892
+#: redbot/cogs/audio/audio.py:1504 redbot/cogs/audio/audio.py:2457
+#: redbot/cogs/audio/audio.py:2948 redbot/cogs/audio/audio.py:3059
+#: redbot/cogs/audio/audio.py:3558
msgid "Connection to Lavalink has not yet been established."
-msgstr ""
+msgstr "Verbindung zu Lavalink wurde noch nicht hergestellt."
-#: redbot/cogs/audio/audio.py:913
+#: redbot/cogs/audio/audio.py:1508
msgid "You need the DJ role to queue tracks."
-msgstr ""
+msgstr "Du benötigst die DJ Rolle um Titel einzureihen."
-#: redbot/cogs/audio/audio.py:922
+#: redbot/cogs/audio/audio.py:1519
msgid "You must be in the voice channel to use the play command."
-msgstr ""
+msgstr "Du musst dich in dem Sprachkanal befinden, um den play Befehl zu verwenden."
-#: redbot/cogs/audio/audio.py:928
+#: redbot/cogs/audio/audio.py:1525
msgid "No tracks to play."
+msgstr "Keine Titel zum Abspielen."
+
+#: redbot/cogs/audio/audio.py:1565
+msgid "The owner needs to set the Spotify client ID, Spotify client secret, and YouTube API key before Spotify URLs or codes can be used. \\nSee `{prefix}audioset youtubeapi` and `{prefix}audioset spotifyapi` for instructions."
msgstr ""
-#: redbot/cogs/audio/audio.py:942 redbot/cogs/audio/audio.py:1450
-#: redbot/cogs/audio/audio.py:1828 redbot/cogs/audio/audio.py:1865
+#: redbot/cogs/audio/audio.py:1575 redbot/cogs/audio/audio.py:2493
+msgid "Wait until the playlist has finished loading."
+msgstr "Warte bis die Playlist fertig geladen hat."
+
+#: redbot/cogs/audio/audio.py:1592 redbot/cogs/audio/audio.py:1657
+#: redbot/cogs/audio/audio.py:2499 redbot/cogs/audio/audio.py:2509
+#: redbot/cogs/audio/audio.py:2973 redbot/cogs/audio/audio.py:3027
msgid "Nothing found."
+msgstr "Nichts gefunden."
+
+#: redbot/cogs/audio/audio.py:1600
+msgid "The Spotify API key or client secret has not been set properly. \\nUse `{prefix}audioset spotifyapi` for instructions."
msgstr ""
-#: redbot/cogs/audio/audio.py:953 redbot/cogs/audio/audio.py:1295
+#: redbot/cogs/audio/audio.py:1639 redbot/cogs/audio/audio.py:1776
+msgid "This doesn't seem to be a valid Spotify URL or code."
+msgstr "Das sieht nicht nach einem gültigen Spotify Code oder einer gültigen URL aus."
+
+#: redbot/cogs/audio/audio.py:1688 redbot/cogs/audio/audio.py:2320
msgid "Playlist Enqueued"
-msgstr ""
+msgstr "Wiedergabeliste eingereiht"
-#: redbot/cogs/audio/audio.py:954 redbot/cogs/audio/audio.py:1296
-msgid "Added {num} tracks to the queue."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:958
-msgid "{time} until start of playlist playback: starts at #{position} in queue"
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:980 redbot/cogs/audio/audio.py:1938
-msgid "Track Enqueued"
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:984 redbot/cogs/audio/audio.py:1944
-msgid "{time} until track playback: #{position} in queue"
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:989 redbot/cogs/audio/audio.py:1949
-msgid "#{position} in queue"
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:997
-#, docstring
-msgid "Playlist configuration options."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:1002
-#, docstring
-msgid "Add a track URL, playlist link, or quick search to a playlist.\n\n"
-" The track(s) will be appended to the end of the playlist.\n"
-" "
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:1014 redbot/cogs/audio/audio.py:1078
-#: redbot/cogs/audio/audio.py:1228
-msgid "You are not the author of that playlist."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:1024
-msgid "{track} is already in {playlist}."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:1033 redbot/cogs/audio/audio.py:1082
-#: redbot/cogs/audio/audio.py:1092 redbot/cogs/audio/audio.py:1231
-msgid "No playlist with that name."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:1040
-msgid "{track} appended to {playlist}."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:1046
-msgid "{num} tracks appended to {playlist}."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:1053
-#, docstring
-msgid "Create an empty playlist."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:1057 redbot/cogs/audio/audio.py:1172
-msgid "You need the DJ role to save playlists."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:1061 redbot/cogs/audio/audio.py:1176
-#: redbot/cogs/audio/audio.py:1204
-msgid "Playlist name already exists, try again with a different name."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:1067
-msgid "Empty playlist {name} created."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:1071
-#, docstring
-msgid "Delete a saved playlist."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:1083
-msgid "{name} playlist deleted."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:1087
-#, docstring
-msgid "Retrieve information from a saved playlist."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:1100
-msgid "**Custom playlist.**"
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:1102
-msgid "URL: <{url}>"
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:1105
-msgid "Playlist info for {playlist_name}:"
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:1106
-msgid "Author: **{author_name}**\n"
-"{url}"
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:1110
-msgid "{num} track(s)"
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:1115
-#, docstring
-msgid "List saved playlists."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:1118
-msgid "No saved playlists."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:1130
-msgid "Tracks: {num}"
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:1131
-msgid "Author: {name}\n"
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:1155
-msgid "Playlists for {server_name}:"
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:1159
-msgid "Page {page_num}/{total_pages} | {num} playlists"
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:1168
-#, docstring
-msgid "Save the queue to a playlist."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:1189
-msgid "Please enter a name for this playlist."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:1200
-msgid "Try the command again with a shorter name."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:1207
-msgid "No playlist name entered, try again later."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:1214
-msgid "Playlist {name} saved from current queue: {num} tracks added."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:1221
-#, docstring
-msgid "Remove a track from a playlist by url."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:1235
-msgid "URL not in playlist."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:1239
-msgid "No tracks left, removing playlist."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:1246
-msgid "{num} entries have been removed from the {playlist_name} playlist."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:1253
-msgid "The track has been removed from the {playlist_name} playlist."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:1260
-#, docstring
-msgid "Save a playlist from a url."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:1272
-msgid "Playlist {name} saved: {num} tracks added."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:1279
-#, docstring
-msgid "Load a playlist into the queue."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:1304
-msgid "That playlist doesn't exist."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:1309
-#, docstring
-msgid "Convert a Red v2 playlist file to a playlist."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:1315
-msgid "Please upload the playlist file. Any other message will cancel this operation."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:1323
-msgid "No file detected, try again later."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:1327
-msgid "Upload cancelled."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:1331
-msgid "Only playlist files can be uploaded."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:1336
-msgid "Not a valid playlist file."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:1352
-msgid "A playlist already exists with this name."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:1357
-msgid "Please wait, adding tracks..."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:1371
-msgid "Loading track {num}/{total}..."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:1377
-msgid "No tracks found."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:1383
-msgid "Added {num} tracks from the {playlist_name} playlist. {num_bad} track(s) could not be loaded."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:1388
-msgid "Added {num} tracks from the {playlist_name} playlist."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:1392
-msgid "Playlist Saved"
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:1403
-msgid "You need the DJ role to use playlists."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:1432
-msgid "You must be in the voice channel to use the playlist command."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:1464
-#, docstring
-msgid "Skip to the start of the previously played track."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:1474 redbot/cogs/audio/audio.py:2121
-msgid "You need the DJ role to skip tracks."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:1479 redbot/cogs/audio/audio.py:2115
-msgid "You must be in the voice channel to skip the music."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:1482
-msgid "Turn shuffle off to use this command."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:1484
-msgid "No previous track."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:1501
-msgid "Replaying Track"
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:1509
-#, docstring
-msgid "List the queue.\n\n"
-" Use [p]queue search to search the queue.\n"
-" "
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:1514 redbot/cogs/audio/audio.py:1517
-#: redbot/cogs/audio/audio.py:1544 redbot/cogs/audio/audio.py:2221
-#: redbot/cogs/audio/audio.py:2225 redbot/cogs/audio/audio.py:2232
-msgid "There's nothing in the queue."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:1553
-msgid "**Currently livestreaming:**"
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:1559 redbot/cogs/audio/audio.py:1569
-#: redbot/cogs/audio/audio.py:1575
-msgid "Playing: "
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:1562 redbot/cogs/audio/audio.py:1570
-msgid "Requested by: **{user}**\n"
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:1577
-msgid "Requested by: **{user}**"
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:1595 redbot/cogs/audio/audio.py:1599
-#: redbot/cogs/audio/audio.py:1604
-msgid "requested by **{user}**\n"
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:1615
-msgid "Page {page_num}/{total_pages} | {num_tracks} tracks, {num_remaining} remaining"
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:1624
-msgid "Repeat"
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:1626
-msgid "Shuffle"
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:1683
-msgid "Matching Tracks:"
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:1686 redbot/cogs/audio/audio.py:2010
-msgid "Page {page_num}/{total_pages}"
-msgstr ""
+#: redbot/cogs/audio/audio.py:1689 redbot/cogs/audio/audio.py:2321
+msgid "Added {num} tracks to the queue.{maxlength_msg}"
+msgstr "Es wurden {num} Tracks zu der Playlist hinzugefügt.{maxlength_msg}"
#: redbot/cogs/audio/audio.py:1695
+msgid "{time} until start of playlist playback: starts at #{position} in queue"
+msgstr "{time} bis zum Start der Wiedergabeliste: beginnt bei #{position} in der Warteschlange"
+
+#: redbot/cogs/audio/audio.py:1711 redbot/cogs/audio/audio.py:3125
+msgid "Track exceeds maximum length."
+msgstr "Der Track überschreitet die maximale Länge."
+
+#: redbot/cogs/audio/audio.py:1717
+msgid "Nothing found. Check your Lavalink logs for details."
+msgstr "Nichts Gefunden. Kontrolliere deine Lavalink logs für Details."
+
+#: redbot/cogs/audio/audio.py:1732 redbot/cogs/audio/audio.py:3108
+msgid "Track Enqueued"
+msgstr "Titel eingereiht"
+
+#: redbot/cogs/audio/audio.py:1736 redbot/cogs/audio/audio.py:3114
+msgid "{time} until track playback: #{position} in queue"
+msgstr "{time} bis zur Wiedergabe des Titels: #{position} in der Warteschlange"
+
+#: redbot/cogs/audio/audio.py:1741 redbot/cogs/audio/audio.py:3119
+msgid "#{position} in queue"
+msgstr "#{position} in der Warteschlange"
+
+#: redbot/cogs/audio/audio.py:1761
+msgid "The Spotify API key or client secret has not been set properly. \\nUse `{prefix}audioset spotifyapi` for instructions."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1793 redbot/cogs/audio/audio.py:2384
+msgid "Please wait, adding tracks..."
+msgstr "Bitte warten, füge Titel hinzu..."
+
+#: redbot/cogs/audio/audio.py:1809
+msgid "The connection was reset while loading the playlist."
+msgstr "Die Verbindung wurde zurückgesetzt beim Laden der Playlist."
+
+#: redbot/cogs/audio/audio.py:1826 redbot/cogs/audio/audio.py:2401
+msgid "Loading track {num}/{total}..."
+msgstr "Lade Titel {num}/{total}..."
+
+#: redbot/cogs/audio/audio.py:1840
+msgid "Approximate time remaining: {seconds}"
+msgstr "Ungefähre Zeit verbleibend: {seconds}"
+
+#: redbot/cogs/audio/audio.py:1850
+msgid "Nothing found.\\nThe YouTube API key may be invalid or you may be rate limited on YouTube's search service.\\nCheck the YouTube API key again and follow the instructions at `{prefix}audioset youtubeapi`."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1871
#, docstring
-msgid "Toggle repeat."
-msgstr ""
+msgid "Playlist configuration options."
+msgstr "Einstellungen der Wiedergabeliste-Optionen."
-#: redbot/cogs/audio/audio.py:1701
-msgid "You need the DJ role to toggle repeat."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:1712
-msgid "You must be in the voice channel to toggle repeat."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:1715
-msgid "Repeat tracks: {true_or_false}."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:1721
+#: redbot/cogs/audio/audio.py:1876
#, docstring
-msgid "Remove a specific track number from the queue."
+msgid "Add a track URL, playlist link, or quick search to a playlist.\\n\\n The track(s) will be appended to the end of the playlist.\\n "
msgstr ""
-#: redbot/cogs/audio/audio.py:1727
-msgid "Nothing queued."
-msgstr ""
+#: redbot/cogs/audio/audio.py:1888 redbot/cogs/audio/audio.py:2028
+#: redbot/cogs/audio/audio.py:2241
+msgid "You are not the author of that playlist."
+msgstr "Du bist nicht der Ersteller dieser Wiedergabeliste."
-#: redbot/cogs/audio/audio.py:1730
-msgid "You need the DJ role to remove tracks."
-msgstr ""
+#: redbot/cogs/audio/audio.py:1898
+msgid "{track} is already in {playlist}."
+msgstr "{track} ist bereits in {playlist}."
-#: redbot/cogs/audio/audio.py:1735
-msgid "You must be in the voice channel to manage the queue."
-msgstr ""
+#: redbot/cogs/audio/audio.py:1907 redbot/cogs/audio/audio.py:2032
+#: redbot/cogs/audio/audio.py:2081 redbot/cogs/audio/audio.py:2244
+msgid "No playlist with that name."
+msgstr "Es gibt keine Wiedergabeliste mit diesem Namen."
-#: redbot/cogs/audio/audio.py:1751
-msgid "Removed {track} from the queue."
-msgstr ""
+#: redbot/cogs/audio/audio.py:1914
+msgid "{track} appended to {playlist}."
+msgstr "{track} angehängt an {playlist}."
-#: redbot/cogs/audio/audio.py:1757
+#: redbot/cogs/audio/audio.py:1920
+msgid "{num} tracks appended to {playlist}."
+msgstr "{num} Titel an {playlist} angehangen."
+
+#: redbot/cogs/audio/audio.py:1928
#, docstring
-msgid "Pick a track with a search.\n\n"
-" Use `[p]search list ` to queue all tracks found\n"
-" on YouTube. `[p]search sc ` will search SoundCloud\n"
-" instead of YouTube.\n"
-" "
+msgid "Copy a playlist from one server to another."
+msgstr "Kopiere eine Playlist von einem Server zum anderen."
+
+#: redbot/cogs/audio/audio.py:1932
+msgid "Invalid server ID for source server."
+msgstr "Ungültige Server ID vom Quell Server."
+
+#: redbot/cogs/audio/audio.py:1934
+msgid "Invalid server ID for target server."
+msgstr "Ungültige Server ID für den Ziel Server."
+
+#: redbot/cogs/audio/audio.py:1939
+msgid "No playlist with that name in {from_guild_name}."
+msgstr "Keine Playlist mit dem Namen gefunden in {from_guild_name}."
+
+#: redbot/cogs/audio/audio.py:1950
+msgid "Playlist {name} copied from {from_guild_name} to {to_guild_name}."
+msgstr "Playlist {name} kopiert von {from_guild_name} zu {to_guild_name}."
+
+#: redbot/cogs/audio/audio.py:1962
+msgid "A playlist with that name already exists in {to_guild_name}.\\nPlease enter a new name for this playlist."
msgstr ""
-#: redbot/cogs/audio/audio.py:1814
-msgid "You must be in the voice channel to enqueue tracks."
+#: redbot/cogs/audio/audio.py:1975
+msgid "Try the playlist copy command again with a shorter name."
+msgstr "Versuche den Playlist kopier Befehl erneut mit einem kürzeren Namen."
+
+#: redbot/cogs/audio/audio.py:1980
+msgid "Playlist name already exists in {to_guild_name}, try the playlist copy command again with a different name."
+msgstr "Playlist Name existiert bereits in {to_guild_name}, versuche den Befehl erneut mit einem anderen Namen."
+
+#: redbot/cogs/audio/audio.py:1986 redbot/cogs/audio/audio.py:2220
+msgid "No playlist name entered, try again later."
+msgstr "Kein Name der Wiedergabeliste angegeben, versuche es später erneut."
+
+#: redbot/cogs/audio/audio.py:1991
+msgid "Playlist {name} copied from {from_guild_name} to {to_guild_name}.\\nNew playlist name on {to_guild_name}: {new_name}"
msgstr ""
-#: redbot/cogs/audio/audio.py:1831
-msgid "Queued {num} track(s)."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:1837
-msgid "{time} until start of search playback: starts at #{position} in queue"
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:1997
-msgid "Tracks Found:"
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:1998
-msgid "search results"
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:2001
-msgid "Folders Found:"
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:2002
-msgid "local folders"
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:2004
-msgid "Files Found:"
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:2005
-msgid "local tracks"
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:2022
+#: redbot/cogs/audio/audio.py:2003
#, docstring
-msgid "Seek ahead or behind on a track by seconds."
-msgstr ""
+msgid "Create an empty playlist."
+msgstr "Erstelle eine leere Wiedergabeliste."
-#: redbot/cogs/audio/audio.py:2031
-msgid "You must be in the voice channel to use seek."
-msgstr ""
+#: redbot/cogs/audio/audio.py:2007 redbot/cogs/audio/audio.py:2183
+msgid "You need the DJ role to save playlists."
+msgstr "Du benötigst die DJ Rolle, um Wiedergabelisten zu speichern."
-#: redbot/cogs/audio/audio.py:2036
-msgid "You need the DJ role to use seek."
-msgstr ""
+#: redbot/cogs/audio/audio.py:2011 redbot/cogs/audio/audio.py:2187
+#: redbot/cogs/audio/audio.py:2217
+msgid "Playlist name already exists, try again with a different name."
+msgstr "Wiedergabeliste mit diesem Namen existiert bereits, versuche es erneut mit einem anderen Namen."
-#: redbot/cogs/audio/audio.py:2042 redbot/cogs/audio/audio.py:2278
-msgid "There are other people listening - vote to skip instead."
-msgstr ""
+#: redbot/cogs/audio/audio.py:2017
+msgid "Empty playlist {name} created."
+msgstr "Leere Wiedergabeliste {name} erstellt."
-#: redbot/cogs/audio/audio.py:2046
-msgid "Can't seek on a stream."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:2052
-msgid "Moved {num_seconds}s to 00:00:00"
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:2057
-msgid "Moved {num_seconds}s to {time}"
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:2068
+#: redbot/cogs/audio/audio.py:2021
#, docstring
-msgid "Toggle shuffle."
-msgstr ""
+msgid "Delete a saved playlist."
+msgstr "Lösche eine gespeicherte Wiedergabeliste."
-#: redbot/cogs/audio/audio.py:2072
-msgid "You need the DJ role to toggle shuffle."
-msgstr ""
+#: redbot/cogs/audio/audio.py:2033
+msgid "{name} playlist deleted."
+msgstr "{name} Wiedergabeliste gelöscht."
-#: redbot/cogs/audio/audio.py:2083
-msgid "You must be in the voice channel to toggle shuffle."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:2086
-msgid "Shuffle tracks: {true_or_false}."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:2092
+#: redbot/cogs/audio/audio.py:2039
#, docstring
-msgid "Make Red sing one of her songs"
+msgid "Download a copy of a playlist.\\n\\n These files can be used with the [p]playlist upload command.\\n Red v2-compatible playlists can be generated by passing True\\n for the v2 variable."
msgstr ""
-#: redbot/cogs/audio/audio.py:2107
+#: redbot/cogs/audio/audio.py:2061
+msgid "That playlist has no tracks."
+msgstr "Die Playlist hat keine Lieder."
+
+#: redbot/cogs/audio/audio.py:2063 redbot/cogs/audio/audio.py:2331
+msgid "That playlist doesn't exist."
+msgstr "Diese Wiedergabeliste existiert nicht."
+
+#: redbot/cogs/audio/audio.py:2076
#, docstring
-msgid "Skip to the next track."
+msgid "Retrieve information from a saved playlist."
+msgstr "Informationen aus einer gespeicherten Wiedergabeliste abrufen."
+
+#: redbot/cogs/audio/audio.py:2101
+msgid "Playlist info for {playlist_name}:\\n"
msgstr ""
+#: redbot/cogs/audio/audio.py:2105
+msgid "Playlist info for {playlist_name}:\\nURL: {url}"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2116
+msgid "Author: {author_name} | {num} track(s)"
+msgstr "Autor: {author_name} | {num} Lied(er)"
+
#: redbot/cogs/audio/audio.py:2126
-msgid "I removed your vote to skip."
-msgstr ""
+#, docstring
+msgid "List saved playlists."
+msgstr "Liste gespeicherte Wiedergabelisten auf."
#: redbot/cogs/audio/audio.py:2129
-msgid "You voted to skip."
-msgstr ""
+msgid "No saved playlists."
+msgstr "Keine gespeicherten Wiedergabelisten."
+
+#: redbot/cogs/audio/audio.py:2141
+msgid "Tracks: {num}"
+msgstr "Titel: {num}"
#: redbot/cogs/audio/audio.py:2142
-msgid "Vote threshold met."
+msgid "Author: {name}\\n"
msgstr ""
-#: redbot/cogs/audio/audio.py:2145
-msgid " Votes: {num_votes}/{num_members} ({cur_percent}% out of {required_percent}% needed)"
-msgstr ""
+#: redbot/cogs/audio/audio.py:2166
+msgid "Playlists for {server_name}:"
+msgstr "Wiedergabelisten für {server_name}:"
-#: redbot/cogs/audio/audio.py:2228
-msgid "Currently livestreaming {track}"
-msgstr ""
+#: redbot/cogs/audio/audio.py:2170
+msgid "Page {page_num}/{total_pages} | {num} playlists"
+msgstr "Seite {page_num}/{total_pages} | {num} Wiedergabelisten"
-#: redbot/cogs/audio/audio.py:2235
-msgid "{time} left on {track}"
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:2253
-msgid "Track Skipped"
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:2261
+#: redbot/cogs/audio/audio.py:2179
#, docstring
-msgid "Stop playback and clear the queue."
-msgstr ""
+msgid "Save the queue to a playlist."
+msgstr "Speichert die Warteschlange als eine Wiedergabeliste."
-#: redbot/cogs/audio/audio.py:2271
-msgid "You must be in the voice channel to stop the music."
-msgstr ""
+#: redbot/cogs/audio/audio.py:2193 redbot/cogs/audio/audio.py:2590
+#: redbot/cogs/audio/audio.py:2593 redbot/cogs/audio/audio.py:2613
+#: redbot/cogs/audio/audio.py:2756 redbot/cogs/audio/audio.py:2759
+#: redbot/cogs/audio/audio.py:2775 redbot/cogs/audio/audio.py:2778
+#: redbot/cogs/audio/audio.py:2810 redbot/cogs/audio/audio.py:2812
+#: redbot/cogs/audio/audio.py:3418 redbot/cogs/audio/audio.py:3422
+#: redbot/cogs/audio/audio.py:3429
+msgid "There's nothing in the queue."
+msgstr "Die Warteschlange ist leer."
-#: redbot/cogs/audio/audio.py:2282
-msgid "You need the DJ role to stop the music."
-msgstr ""
+#: redbot/cogs/audio/audio.py:2202
+msgid "Please enter a name for this playlist."
+msgstr "Bitte einen Namen für die Wiedergabeliste eingeben."
-#: redbot/cogs/audio/audio.py:2284
-msgid "Stopping..."
-msgstr ""
+#: redbot/cogs/audio/audio.py:2227
+msgid "Playlist {name} saved from current queue: {num} tracks added."
+msgstr "Wiedergabeliste {name} aus aktueller Warteschlange gespeichert: {num} Titel hinzugefügt."
-#: redbot/cogs/audio/audio.py:2294
+#: redbot/cogs/audio/audio.py:2234
#, docstring
-msgid "Set the volume, 1% - 150%."
-msgstr ""
+msgid "Remove a track from a playlist by url."
+msgstr "Entferne einen Titel von einer Wiedergabeliste anhand einer URL."
-#: redbot/cogs/audio/audio.py:2300
-msgid "Current Volume:"
-msgstr ""
+#: redbot/cogs/audio/audio.py:2248
+msgid "URL not in playlist."
+msgstr "URL ist nicht in der Wiedergabeliste."
-#: redbot/cogs/audio/audio.py:2312
-msgid "You must be in the voice channel to change the volume."
-msgstr ""
+#: redbot/cogs/audio/audio.py:2252
+msgid "No tracks left, removing playlist."
+msgstr "Keine Titel mehr übrig, entferne Wiedergabeliste."
-#: redbot/cogs/audio/audio.py:2318
-msgid "You need the DJ role to change the volume."
-msgstr ""
+#: redbot/cogs/audio/audio.py:2259
+msgid "{num} entries have been removed from the {playlist_name} playlist."
+msgstr "{num} Einträge wurden aus der Wiedergabeliste {playlist_name} entfernt."
-#: redbot/cogs/audio/audio.py:2331
-msgid "Volume:"
-msgstr ""
+#: redbot/cogs/audio/audio.py:2266
+msgid "The track has been removed from the {playlist_name} playlist."
+msgstr "Der Titel wurde aus der Wiedergabeliste {playlist_name} entfernt."
-#: redbot/cogs/audio/audio.py:2341
+#: redbot/cogs/audio/audio.py:2273
#, docstring
-msgid "Lavalink server configuration options."
-msgstr ""
+msgid "Save a playlist from a url."
+msgstr "Wiedergabeliste aus einer URL erstellen."
-#: redbot/cogs/audio/audio.py:2346
+#: redbot/cogs/audio/audio.py:2285
+msgid "Playlist {name} saved: {num} tracks added."
+msgstr "Wiedergabeliste {name} gespeichert: {num} Titel hinzugefügt."
+
+#: redbot/cogs/audio/audio.py:2292
#, docstring
-msgid "Toggle using external lavalink servers."
-msgstr ""
+msgid "Load a playlist into the queue."
+msgstr "Lade eine Wiedergabeliste in die Warteschlange."
-#: redbot/cogs/audio/audio.py:2357 redbot/cogs/audio/audio.py:2366
-msgid "External lavalink server: {true_or_false}."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:2361
-msgid "Defaults reset."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:2373
+#: redbot/cogs/audio/audio.py:2336
#, docstring
-msgid "Set the lavalink server host."
-msgstr ""
+msgid "Convert a Red v2 playlist file to a playlist."
+msgstr "Konvertiere eine Red v2 Wiedergabeliste Datei zu einer Wiedergabeliste."
-#: redbot/cogs/audio/audio.py:2377 redbot/cogs/audio/audio.py:2382
-msgid "Host set to {host}."
-msgstr ""
+#: redbot/cogs/audio/audio.py:2342
+msgid "Please upload the playlist file. Any other message will cancel this operation."
+msgstr "Bitte lade die Wiedergabeliste Datei hoch. Weitere Nachrichten werden diesen Vorgang abbrechen."
-#: redbot/cogs/audio/audio.py:2379 redbot/cogs/audio/audio.py:2395
-#: redbot/cogs/audio/audio.py:2413 redbot/cogs/audio/audio.py:2429
-msgid "External lavalink server set to True."
-msgstr ""
+#: redbot/cogs/audio/audio.py:2350
+msgid "No file detected, try again later."
+msgstr "Keine Datei erkannt, versuche es später erneut."
-#: redbot/cogs/audio/audio.py:2388
-#, docstring
-msgid "Set the lavalink server password."
-msgstr ""
+#: redbot/cogs/audio/audio.py:2354
+msgid "Upload cancelled."
+msgstr "Upload abgebrochen."
-#: redbot/cogs/audio/audio.py:2393 redbot/cogs/audio/audio.py:2399
-msgid "Server password set to {password}."
-msgstr ""
+#: redbot/cogs/audio/audio.py:2358
+msgid "Only playlist files can be uploaded."
+msgstr "Nur Wiedergabeliste Dateien können hochgeladen werden."
-#: redbot/cogs/audio/audio.py:2406
-#, docstring
-msgid "Set the lavalink REST server port."
-msgstr ""
+#: redbot/cogs/audio/audio.py:2363
+msgid "Not a valid playlist file."
+msgstr "Keine gültige Wiedergabeliste Datei."
-#: redbot/cogs/audio/audio.py:2411 redbot/cogs/audio/audio.py:2416
-msgid "REST port set to {port}."
-msgstr ""
+#: redbot/cogs/audio/audio.py:2379
+msgid "A playlist already exists with this name."
+msgstr "Eine Wiedergabeliste mit diesem Namen existiert bereits."
+
+#: redbot/cogs/audio/audio.py:2407
+msgid "No tracks found."
+msgstr "Keine Titel gefunden."
+
+#: redbot/cogs/audio/audio.py:2413
+msgid "Added {num} tracks from the {playlist_name} playlist. {num_bad} track(s) could not be loaded."
+msgstr "{num} Titel aus der {playlist_name} Wiedergabeliste hinzugefügt. {num_bad} Titel konnten nicht geladen werden."
+
+#: redbot/cogs/audio/audio.py:2418
+msgid "Added {num} tracks from the {playlist_name} playlist."
+msgstr "{num} Titel aus der {playlist_name} Wiedergabeliste hinzugefügt."
#: redbot/cogs/audio/audio.py:2422
+msgid "Playlist Saved"
+msgstr "Wiedergabeliste gespeichert"
+
+#: redbot/cogs/audio/audio.py:2433
+msgid "You need the DJ role to use playlists."
+msgstr "Du benötigst die DJ Rolle, um Wiedergabelisten zu verwenden."
+
+#: redbot/cogs/audio/audio.py:2471
+msgid "You must be in the voice channel to use the playlist command."
+msgstr "Du musst dich in dem Sprachkanal befinden, um den Wiedergabelisten Befehl zu verwenden."
+
+#: redbot/cogs/audio/audio.py:2525
+#, docstring
+msgid "Skip to the start of the previously played track."
+msgstr "Zum Anfang des zuvor abgespielten Titels springen."
+
+#: redbot/cogs/audio/audio.py:2535 redbot/cogs/audio/audio.py:3317
+msgid "You need the DJ role to skip tracks."
+msgstr "Du benötigst die DJ Rolle um Titel zu überspringen."
+
+#: redbot/cogs/audio/audio.py:2540 redbot/cogs/audio/audio.py:3311
+msgid "You must be in the voice channel to skip the music."
+msgstr "Du musst dich in dem Sprachkanal befinden, um Titel zu überspringen."
+
+#: redbot/cogs/audio/audio.py:2543
+msgid "Turn shuffle off to use this command."
+msgstr "Schalte die zufällige Wiedergabe aus, um diesen Befehl zu verwenden."
+
+#: redbot/cogs/audio/audio.py:2545
+msgid "No previous track."
+msgstr "Kein vorheriger Titel."
+
+#: redbot/cogs/audio/audio.py:2562
+msgid "Replaying Track"
+msgstr "Titel wird wiederholt"
+
+#: redbot/cogs/audio/audio.py:2571
+#, docstring
+msgid "List the songs in the queue."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2622
+msgid "**Currently livestreaming:**"
+msgstr "**Aktueller Livestream:**"
+
+#: redbot/cogs/audio/audio.py:2628 redbot/cogs/audio/audio.py:2638
+#: redbot/cogs/audio/audio.py:2644
+msgid "Playing: "
+msgstr "Gerade läuft: "
+
+#: redbot/cogs/audio/audio.py:2631
+msgid "Requested by: **{user}**\\n"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2639
+msgid "Requested by: **{user}**\\n"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2646
+msgid "Requested by: **{user}**"
+msgstr "Angefragt von: **{user}**"
+
+#: redbot/cogs/audio/audio.py:2664
+msgid "requested by **{user}**\\n"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2668
+msgid "requested by **{user}**\\n"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2673
+msgid "requested by **{user}**\\n"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2684
+msgid "Page {page_num}/{total_pages} | {num_tracks} tracks, {num_remaining} remaining"
+msgstr "Seite {page_num}/{total_pages} | {num_tracks} Titel, {num_remaining} verbleibend"
+
+#: redbot/cogs/audio/audio.py:2693
+msgid "Repeat"
+msgstr "Wiederholen"
+
+#: redbot/cogs/audio/audio.py:2695
+msgid "Shuffle"
+msgstr "Zufällige Wiedergabe"
+
+#: redbot/cogs/audio/audio.py:2740
+msgid "Matching Tracks:"
+msgstr "Passende Titel:"
+
+#: redbot/cogs/audio/audio.py:2743 redbot/cogs/audio/audio.py:3182
+msgid "Page {page_num}/{total_pages}"
+msgstr "Seite {page_num}/{total_pages}"
+
+#: redbot/cogs/audio/audio.py:2752
+#, docstring
+msgid "Clears the queue."
+msgstr "Leert die Playlist."
+
+#: redbot/cogs/audio/audio.py:2764
+msgid "You need the DJ role to clear the queue."
+msgstr "Du brauchst die DJ Rolle um die Playlist zu leeren."
+
+#: redbot/cogs/audio/audio.py:2766
+msgid "The queue has been cleared."
+msgstr "Die Playlist wurde geleert."
+
+#: redbot/cogs/audio/audio.py:2771
+#, docstring
+msgid "Removes songs from the queue if the requester is not in the voice channel."
+msgstr "Entfernt Lieder von der Playlist, wenn der Autor nicht im Voice Channel ist."
+
+#: redbot/cogs/audio/audio.py:2783
+msgid "You need the DJ role to clean the queue."
+msgstr "Du brauchst die DJ Rolle um die Playlist zu leeren."
+
+#: redbot/cogs/audio/audio.py:2794
+msgid "Removed 0 tracks."
+msgstr "0 Lieder entfernt."
+
+#: redbot/cogs/audio/audio.py:2798
+msgid "Removed {removed_tracks} tracks queued by members outside of the voice channel."
+msgstr "Es wurden Lieder entfernt die von Leuten außerhalb des Voice Channels angefordert wurden: {removed_tracks}."
+
+#: redbot/cogs/audio/audio.py:2806
+#, docstring
+msgid "Search the queue."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2829
+#, docstring
+msgid "Toggle repeat."
+msgstr "Wiederholung umschalten."
+
+#: redbot/cogs/audio/audio.py:2835
+msgid "You need the DJ role to toggle repeat."
+msgstr "Du benötigst die DJ Rolle um Wiederholung umzuschalten."
+
+#: redbot/cogs/audio/audio.py:2843
+msgid "You must be in the voice channel to toggle repeat."
+msgstr "Du musst dich in dem Sprachkanal befinden, um Wiederholung umzuschalten."
+
+#: redbot/cogs/audio/audio.py:2849
+msgid "Repeat tracks: {true_or_false}."
+msgstr "Titel wiederholen: {true_or_false}."
+
+#: redbot/cogs/audio/audio.py:2857
+#, docstring
+msgid "Remove a specific track number from the queue."
+msgstr "Entferne einen bestimmten Titel aus der Warteschlange."
+
+#: redbot/cogs/audio/audio.py:2863
+msgid "Nothing queued."
+msgstr "Nichts eingereiht."
+
+#: redbot/cogs/audio/audio.py:2866
+msgid "You need the DJ role to remove tracks."
+msgstr "Du benötigst die DJ Rolle um Titel zu entfernen."
+
+#: redbot/cogs/audio/audio.py:2871
+msgid "You must be in the voice channel to manage the queue."
+msgstr "Du musst dich in dem Sprachkanal befinden, um die Warteschlange zu verwalten."
+
+#: redbot/cogs/audio/audio.py:2887
+msgid "Removed {track} from the queue."
+msgstr "{track} aus der Warteschlange entfernt."
+
+#: redbot/cogs/audio/audio.py:2894
+#, docstring
+msgid "Pick a track with a search.\\n\\n Use `[p]search list ` to queue all tracks found\\n on YouTube. `[p]search sc ` will search SoundCloud\\n instead of YouTube.\\n "
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2958
+msgid "You must be in the voice channel to enqueue tracks."
+msgstr "Du musst dich in dem Sprachkanal befinden, um Titel einzureihen."
+
+#: redbot/cogs/audio/audio.py:2997
+msgid "Queued {num} track(s).{maxlength_msg}"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:3003
+msgid "{time} until start of search playback: starts at #{position} in queue"
+msgstr "{time} bis zum Start der Wiedergabesuche: startet an #{position} in der Warteschlange"
+
+#: redbot/cogs/audio/audio.py:3169
+msgid "Tracks Found:"
+msgstr "Titel gefunden:"
+
+#: redbot/cogs/audio/audio.py:3170
+msgid "search results"
+msgstr "Suchergebnisse"
+
+#: redbot/cogs/audio/audio.py:3173
+msgid "Folders Found:"
+msgstr "Ordner gefunden:"
+
+#: redbot/cogs/audio/audio.py:3174
+msgid "local folders"
+msgstr "lokale Ordner"
+
+#: redbot/cogs/audio/audio.py:3176
+msgid "Files Found:"
+msgstr "Dateien gefunden:"
+
+#: redbot/cogs/audio/audio.py:3177
+msgid "local tracks"
+msgstr "lokale Titel"
+
+#: redbot/cogs/audio/audio.py:3195
+#, docstring
+msgid "Seek ahead or behind on a track by seconds or a to a specific time.\\n\\n Accepts seconds or a value formatted like 00:00:00 (`hh:mm:ss`) or 00:00 (`mm:ss`)."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:3206
+msgid "You must be in the voice channel to use seek."
+msgstr "Du musst dich in dem Sprachkanal befinden, um Spulen zu können."
+
+#: redbot/cogs/audio/audio.py:3211
+msgid "You need the DJ role to use seek."
+msgstr "Du benötigst die DJ Rolle, um zu Spulen."
+
+#: redbot/cogs/audio/audio.py:3217 redbot/cogs/audio/audio.py:3510
+msgid "There are other people listening - vote to skip instead."
+msgstr "Es hören andere Leute zu - stimme stattdessen zum Überspringen ab."
+
+#: redbot/cogs/audio/audio.py:3221
+msgid "Can't seek on a stream."
+msgstr "Ein Stream kann nicht gespult werden."
+
+#: redbot/cogs/audio/audio.py:3230
+msgid "Invalid input for the time to seek."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:3236
+msgid "Moved {num_seconds}s to 00:00:00"
+msgstr "Verschiebe {num_seconds}s nach 00:00:00"
+
+#: redbot/cogs/audio/audio.py:3241
+msgid "Moved {num_seconds}s to {time}"
+msgstr "Verschiebe {num_seconds}s nach {time}"
+
+#: redbot/cogs/audio/audio.py:3249
+msgid "Moved to {time}"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:3261
+#, docstring
+msgid "Toggle shuffle."
+msgstr "Schalte zufällige Wiedergabe um."
+
+#: redbot/cogs/audio/audio.py:3265
+msgid "You need the DJ role to toggle shuffle."
+msgstr "Du benötigst die DJ Rolle, um zufällige Wiedergabe umzuschalten."
+
+#: redbot/cogs/audio/audio.py:3273
+msgid "You must be in the voice channel to toggle shuffle."
+msgstr "Du musst dich in dem Sprachkanal befinden, um zufällige Wiedergabe umzuschalten."
+
+#: redbot/cogs/audio/audio.py:3279
+msgid "Shuffle tracks: {true_or_false}."
+msgstr "Zufällige Wiedergabe: {true_or_false}."
+
+#: redbot/cogs/audio/audio.py:3287
+#, docstring
+msgid "Make Red sing one of her songs."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:3303
+#, docstring
+msgid "Skip to the next track, or to a given track number."
+msgstr "Überspringe zum nächsten Lied oder geben eine Nummer für ein Lied an."
+
+#: redbot/cogs/audio/audio.py:3322
+msgid "Can't skip to a specific track in vote mode without the DJ role."
+msgstr "Kann ohne DJ Rolle nicht auf einen bestimmten Track im Abstimmmodus überspringen."
+
+#: redbot/cogs/audio/audio.py:3326
+msgid "I removed your vote to skip."
+msgstr "Ich habe deine Stimme zum Überspringen entfernt."
+
+#: redbot/cogs/audio/audio.py:3329
+msgid "You voted to skip."
+msgstr "Du hast für das Überspringen gestimmt."
+
+#: redbot/cogs/audio/audio.py:3342
+msgid "Vote threshold met."
+msgstr "Abstimmungsschwelle erreicht."
+
+#: redbot/cogs/audio/audio.py:3345
+msgid " Votes: {num_votes}/{num_members} ({cur_percent}% out of {required_percent}% needed)"
+msgstr " Abstimmungen: {num_votes}/{num_members} ({cur_percent}% von {required_percent}% erforderlich)"
+
+#: redbot/cogs/audio/audio.py:3425
+msgid "Currently livestreaming {track}"
+msgstr "Livestreame derzeit {track}"
+
+#: redbot/cogs/audio/audio.py:3432
+msgid "{time} left on {track}"
+msgstr "{time} Zeit übrig von {track}"
+
+#: redbot/cogs/audio/audio.py:3441
+msgid "Track number must be equal to or greater than 1."
+msgstr "Die Nummer, des Liedes, muss größer oder gleich 1 sein."
+
+#: redbot/cogs/audio/audio.py:3454
+msgid "Can't skip to a track while shuffle is enabled."
+msgstr "Kann nicht auf einen Track überspringen, während der Shuffle Modus aktiviert ist."
+
+#: redbot/cogs/audio/audio.py:3470
+msgid "Track Skipped"
+msgstr "Titel übersprungen"
+
+#: redbot/cogs/audio/audio.py:3493
+#, docstring
+msgid "Stop playback and clear the queue."
+msgstr "Stoppe Wiedergabe und leere die Warteschlange."
+
+#: redbot/cogs/audio/audio.py:3503
+msgid "You must be in the voice channel to stop the music."
+msgstr "Du musst dich in dem Sprachkanal befinden, um die Wiedergabe zu stoppen."
+
+#: redbot/cogs/audio/audio.py:3514
+msgid "You need the DJ role to stop the music."
+msgstr "Du benötigst die DJ Rolle, um die Wiedergabe zu stoppen."
+
+#: redbot/cogs/audio/audio.py:3516
+msgid "Stopping..."
+msgstr "Stoppe..."
+
+#: redbot/cogs/audio/audio.py:3531
+#, docstring
+msgid "Summon the bot to a voice channel."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:3535
+msgid "You need the DJ role to summon the bot."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:3565
+#, docstring
+msgid "Set the volume, 1% - 150%."
+msgstr "Setze die Lautstärke, 1% - 150%."
+
+#: redbot/cogs/audio/audio.py:3571
+msgid "Current Volume:"
+msgstr "Aktuelle Lautstärke:"
+
+#: redbot/cogs/audio/audio.py:3583
+msgid "You must be in the voice channel to change the volume."
+msgstr "Du musst dich in dem Sprachkanal befinden, um die Lautstärke zu verändern."
+
+#: redbot/cogs/audio/audio.py:3589
+msgid "You need the DJ role to change the volume."
+msgstr "Du benötigst die DJ Rolle, um die Lautstärke zu ändern."
+
+#: redbot/cogs/audio/audio.py:3602
+msgid "Volume:"
+msgstr "Lautstärke:"
+
+#: redbot/cogs/audio/audio.py:3613
+#, docstring
+msgid "Lavalink server configuration options."
+msgstr "Lavalink Server Konfigurationsoptionen."
+
+#: redbot/cogs/audio/audio.py:3618
+#, docstring
+msgid "Toggle using external lavalink servers."
+msgstr "Schalte Benutzung von externem Lavalink Server um."
+
+#: redbot/cogs/audio/audio.py:3625 redbot/cogs/audio/audio.py:3635
+msgid "External lavalink server: {true_or_false}."
+msgstr "Externer Lavalink Server: {true_or_false}."
+
+#: redbot/cogs/audio/audio.py:3642
+#, docstring
+msgid "Set the lavalink server host."
+msgstr "Lege den Lavalink Server Host fest."
+
+#: redbot/cogs/audio/audio.py:3646 redbot/cogs/audio/audio.py:3651
+msgid "Host set to {host}."
+msgstr "Host gesetzt auf {host}."
+
+#: redbot/cogs/audio/audio.py:3648 redbot/cogs/audio/audio.py:3664
+#: redbot/cogs/audio/audio.py:3682 redbot/cogs/audio/audio.py:3698
+msgid "External lavalink server set to True."
+msgstr "Externer Lavalink Server gesetzt auf Wahr."
+
+#: redbot/cogs/audio/audio.py:3657
+#, docstring
+msgid "Set the lavalink server password."
+msgstr "Lege das Lavalink Server Passwort fest."
+
+#: redbot/cogs/audio/audio.py:3662 redbot/cogs/audio/audio.py:3668
+msgid "Server password set to {password}."
+msgstr "Server Passwort auf {password} gesetzt."
+
+#: redbot/cogs/audio/audio.py:3675
+#, docstring
+msgid "Set the lavalink REST server port."
+msgstr "Lege den Lavalink REST Server Port fest."
+
+#: redbot/cogs/audio/audio.py:3680 redbot/cogs/audio/audio.py:3685
+msgid "REST port set to {port}."
+msgstr "REST Port auf {port} gesetzt."
+
+#: redbot/cogs/audio/audio.py:3691
#, docstring
msgid "Set the lavalink websocket server port."
-msgstr ""
+msgstr "Lege den Lavalink Websocket Server Port fest."
-#: redbot/cogs/audio/audio.py:2427 redbot/cogs/audio/audio.py:2432
+#: redbot/cogs/audio/audio.py:3696 redbot/cogs/audio/audio.py:3701
msgid "Websocket port set to {port}."
-msgstr ""
+msgstr "Websocket Port auf {port} gesetzt."
-#: redbot/cogs/audio/audio.py:2461
+#: redbot/cogs/audio/audio.py:3801
msgid "Not enough {currency} ({required_credits} required)."
-msgstr ""
+msgstr "Nicht genug {currency} ({required_credits} erforderlich)."
diff --git a/redbot/cogs/audio/locales/el-GR.po b/redbot/cogs/audio/locales/el-GR.po
index 9c31265d8..ace3dbd52 100644
--- a/redbot/cogs/audio/locales/el-GR.po
+++ b/redbot/cogs/audio/locales/el-GR.po
@@ -1,14 +1,14 @@
msgid ""
msgstr ""
"Project-Id-Version: red-discordbot\n"
-"POT-Creation-Date: 2019-02-17 02:24+0000\n"
-"PO-Revision-Date: 2019-02-25 03:07\n"
-"Last-Translator: Kowlin \n"
+"POT-Creation-Date: 2019-07-05 22:33+0200\n"
+"PO-Revision-Date: 2019-07-06 16:12\n"
+"Last-Translator: Robert Jansen (Kowlin)\n"
"Language-Team: Greek\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"Generated-By: redgettext 2.2\n"
+"Generated-By: redgettext 3.0\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: crowdin.com\n"
"X-Crowdin-Project: red-discordbot\n"
@@ -16,971 +16,1275 @@ msgstr ""
"X-Crowdin-File: /cogs/audio/locales/messages.pot\n"
"Language: el_GR\n"
-#: redbot/cogs/audio/audio.py:38
+#: redbot/cogs/audio/audio.py:47
#, docstring
msgid "Play audio through voice channels."
msgstr ""
-#: redbot/cogs/audio/audio.py:173 redbot/cogs/audio/audio.py:735
-msgid "Now Playing"
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:177
-msgid "Track length: {length} | Requested by: {user}"
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:201 redbot/cogs/audio/audio.py:227
+#: redbot/cogs/audio/audio.py:260
msgid "music in {} servers"
msgstr ""
-#: redbot/cogs/audio/audio.py:211
+#: redbot/cogs/audio/audio.py:300 redbot/cogs/audio/audio.py:1317
+msgid "Now Playing"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:304
+msgid "Track length: {length} | Requested by: {user}"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:331
msgid "Queue ended."
msgstr ""
-#: redbot/cogs/audio/audio.py:240
+#: redbot/cogs/audio/audio.py:350
msgid "Track Error"
msgstr ""
-#: redbot/cogs/audio/audio.py:245
+#: redbot/cogs/audio/audio.py:355
msgid "Skipping..."
msgstr ""
-#: redbot/cogs/audio/audio.py:252
+#: redbot/cogs/audio/audio.py:363
#, docstring
msgid "Music configuration options."
msgstr ""
-#: redbot/cogs/audio/audio.py:258
+#: redbot/cogs/audio/audio.py:369
#, docstring
-msgid "Toggle DJ mode.\n\n"
-" DJ mode allows users with the DJ role to use audio commands.\n"
-" "
+msgid "Toggle the bot auto-disconnecting when done playing.\\n\\n This setting takes precedence over [p]audioset emptydisconnect.\\n "
msgstr ""
-#: redbot/cogs/audio/audio.py:265
+#: redbot/cogs/audio/audio.py:377
+msgid "Auto-disconnection at queue end: {true_or_false}."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:385
+#, docstring
+msgid "Toggle DJ mode.\\n\\n DJ mode allows users with the DJ role to use audio commands.\\n "
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:392
msgid "Please set a role to use with DJ mode. Enter the role name or ID now."
msgstr ""
-#: redbot/cogs/audio/audio.py:273
+#: redbot/cogs/audio/audio.py:400
msgid "Response timed out, try again later."
msgstr ""
-#: redbot/cogs/audio/audio.py:284
+#: redbot/cogs/audio/audio.py:405
+msgid "DJ role enabled: {true_or_false}."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:411
#, docstring
msgid "Auto-disconnection after x seconds while stopped. 0 to disable."
msgstr ""
-#: redbot/cogs/audio/audio.py:286 redbot/cogs/audio/audio.py:317
-#: redbot/cogs/audio/audio.py:405
+#: redbot/cogs/audio/audio.py:413 redbot/cogs/audio/audio.py:436
+#: redbot/cogs/audio/audio.py:543 redbot/cogs/audio/audio.py:687
msgid "Can't be less than zero."
msgstr ""
-#: redbot/cogs/audio/audio.py:291
+#: redbot/cogs/audio/audio.py:418
msgid "Empty disconnect disabled."
msgstr ""
-#: redbot/cogs/audio/audio.py:296
+#: redbot/cogs/audio/audio.py:423
msgid "Empty disconnect timer set to {num_seconds}."
msgstr ""
-#: redbot/cogs/audio/audio.py:307
-#, docstring
-msgid "Set the role to use for DJ mode."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:310
-msgid "DJ role set to: {role.name}."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:315
+#: redbot/cogs/audio/audio.py:434
#, docstring
msgid "Set a price for queueing tracks for non-mods. 0 to disable."
msgstr ""
-#: redbot/cogs/audio/audio.py:320
+#: redbot/cogs/audio/audio.py:439
msgid "Jukebox mode disabled."
msgstr ""
-#: redbot/cogs/audio/audio.py:325
+#: redbot/cogs/audio/audio.py:444
msgid "Track queueing command price set to {price} {currency}."
msgstr ""
-#: redbot/cogs/audio/audio.py:336
+#: redbot/cogs/audio/audio.py:455
+#, docstring
+msgid "Set the localtracks path if the Lavalink.jar is not run from the Audio data folder.\\n\\n Leave the path blank to reset the path to the default, the Audio data directory.\\n "
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:463
+msgid "The localtracks path location has been reset to the default location."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:466
+msgid "This setting is only for bot owners to set a localtracks folder location if the Lavalink.jar is being ran from outside of the Audio data directory.\\nIn the example below, the full path for 'ParentDirectory' must be passed to this command.\\nThe path must not contain spaces.\\n```\\nParentDirectory\\n |__ localtracks (folder)\\n | |__ Awesome Album Name (folder)\\n | |__01 Cool Song.mp3\\n | |__02 Groovy Song.mp3\\n |\\n |__ Lavalink.jar\\n |__ application.yml\\n```\\nThe folder path given to this command must contain the Lavalink.jar, the application.yml, and the localtracks folder.\\nUse this command with no path given to reset it to the default, the Audio data directory for this bot.\\nDo you want to continue to set the provided path for local tracks?"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:505
+msgid "{local_path} does not seem like a valid path."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:520
+msgid "The path that was entered does not have {filelist} file in that location. The path will still be saved, but please check the path and the file location before attempting to play local tracks or start your Lavalink.jar."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:530
+msgid "Localtracks path set to: {local_path}."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:536
+#, docstring
+msgid "Max length of a track to queue in seconds. 0 to disable.\\n\\n Accepts seconds or a value formatted like 00:00:00 (`hh:mm:ss`) or 00:00 (`mm:ss`).\\n Invalid input will turn the max length setting off."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:545
+msgid "Track max length disabled."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:549
+msgid "Track max length set to {seconds}."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:559
#, docstring
msgid "Toggle track announcement and other bot messages."
msgstr ""
-#: redbot/cogs/audio/audio.py:340
+#: redbot/cogs/audio/audio.py:563
msgid "Verbose mode on: {true_or_false}."
msgstr ""
-#: redbot/cogs/audio/audio.py:345
+#: redbot/cogs/audio/audio.py:569
+#, docstring
+msgid "Toggle the domain restriction on Audio.\\n\\n When toggled off, users will be able to play songs from non-commercial websites and links.\\n When toggled on, users are restricted to YouTube, SoundCloud, Mixer, Vimeo, Twitch, and Bandcamp links."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:576
+msgid "Commercial links only: {true_or_false}."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:582
+#, docstring
+msgid "Set the role to use for DJ mode."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:585
+msgid "DJ role set to: {role.name}."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:589
#, docstring
msgid "Show the current settings."
msgstr ""
-#: redbot/cogs/audio/audio.py:358
+#: redbot/cogs/audio/audio.py:604
msgid "Server Settings"
msgstr ""
-#: redbot/cogs/audio/audio.py:360
-msgid "Disconnect timer: [{num_seconds}]\n"
+#: redbot/cogs/audio/audio.py:606
+msgid "Auto-disconnect: [{dc}]\\n"
msgstr ""
-#: redbot/cogs/audio/audio.py:364
-msgid "DJ Role: [{role.name}]\n"
+#: redbot/cogs/audio/audio.py:609
+msgid "Disconnect timer: [{num_seconds}]\\n"
msgstr ""
-#: redbot/cogs/audio/audio.py:366
-msgid "Jukebox: [{jukebox_name}]\n"
+#: redbot/cogs/audio/audio.py:613
+msgid "DJ Role: [{role.name}]\\n"
msgstr ""
-#: redbot/cogs/audio/audio.py:367
-msgid "Command price: [{jukebox_price}]\n"
+#: redbot/cogs/audio/audio.py:615
+msgid "Jukebox: [{jukebox_name}]\\n"
msgstr ""
-#: redbot/cogs/audio/audio.py:368
-msgid "Repeat: [{repeat}]\n"
-"Shuffle: [{shuffle}]\n"
-"Song notify msgs: [{notify}]\n"
-"Songs as status: [{status}]\n"
+#: redbot/cogs/audio/audio.py:616
+msgid "Command price: [{jukebox_price}]\\n"
msgstr ""
-#: redbot/cogs/audio/audio.py:375
-msgid "Thumbnails: [{0}]\n"
+#: redbot/cogs/audio/audio.py:618
+msgid "Max track length: [{tracklength}]\\n"
msgstr ""
-#: redbot/cogs/audio/audio.py:377
-msgid "Vote skip: [{vote_enabled}]\n"
-"Skip percentage: [{vote_percent}%]\n"
+#: redbot/cogs/audio/audio.py:621
+msgid "Repeat: [{repeat}]\\nShuffle: [{shuffle}]\\nSong notify msgs: [{notify}]\\nSongs as status: [{status}]\\n"
msgstr ""
-#: redbot/cogs/audio/audio.py:380
-msgid "---Lavalink Settings---\n"
-"Cog version: [{version}]\n"
-"Jar build: [{jarbuild}]\n"
-"External server: [{use_external_lavalink}]"
+#: redbot/cogs/audio/audio.py:628
+msgid "Thumbnails: [{0}]\\n"
msgstr ""
-#: redbot/cogs/audio/audio.py:393
+#: redbot/cogs/audio/audio.py:630
+msgid "Vote skip: [{vote_enabled}]\\nSkip percentage: [{vote_percent}%]\\n"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:633
+msgid "---Lavalink Settings--- \\nCog version: [{version}]\\nJar build: [{jarbuild}]\\nExternal server: [{use_external_lavalink}]\\n"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:640
+msgid "Localtracks path: [{localpath}]\\n"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:648
#, docstring
-msgid "Toggle displaying a thumbnail on audio messages."
+msgid "Instructions to set the Spotify API tokens."
msgstr ""
-#: redbot/cogs/audio/audio.py:397
-msgid "Thumbnail display: {true_or_false}."
+#: redbot/cogs/audio/audio.py:649
+msgid "1. Go to Spotify developers and log in with your Spotify account.\\n(https://developer.spotify.com/dashboard/applications)\\n2. Click \\\"Create An App\\\".\\n3. Fill out the form provided with your app name, etc.\\n4. When asked if you're developing commercial integration select \\\"No\\\".\\n5. Accept the terms and conditions.\\n6. Copy your client ID and your client secret into:\\n`{prefix}set api spotify client_id, client_secret,`"
msgstr ""
-#: redbot/cogs/audio/audio.py:403
-#, docstring
-msgid "Percentage needed for non-mods to skip tracks. 0 to disable."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:411
-msgid "Voting disabled. All users can use queue management commands."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:416
-msgid "Vote percentage set to {percent}%."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:425
+#: redbot/cogs/audio/audio.py:665
#, docstring
msgid "Enable/disable tracks' titles as status."
msgstr ""
-#: redbot/cogs/audio/audio.py:429
+#: redbot/cogs/audio/audio.py:669
msgid "Song titles as status: {true_or_false}."
msgstr ""
-#: redbot/cogs/audio/audio.py:435
+#: redbot/cogs/audio/audio.py:675
+#, docstring
+msgid "Toggle displaying a thumbnail on audio messages."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:679
+msgid "Thumbnail display: {true_or_false}."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:685
+#, docstring
+msgid "Percentage needed for non-mods to skip tracks. 0 to disable."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:693
+msgid "Voting disabled. All users can use queue management commands."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:698
+msgid "Vote percentage set to {percent}%."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:707
+#, docstring
+msgid "Instructions to set the YouTube API key."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:726
#, docstring
msgid "Audio stats."
msgstr ""
-#: redbot/cogs/audio/audio.py:469 redbot/cogs/audio/audio.py:489
-#: redbot/cogs/audio/audio.py:698 redbot/cogs/audio/audio.py:788
-#: redbot/cogs/audio/audio.py:804 redbot/cogs/audio/audio.py:829
-#: redbot/cogs/audio/audio.py:836 redbot/cogs/audio/audio.py:1179
-#: redbot/cogs/audio/audio.py:1466 redbot/cogs/audio/audio.py:1724
-#: redbot/cogs/audio/audio.py:2026 redbot/cogs/audio/audio.py:2063
-#: redbot/cogs/audio/audio.py:2109 redbot/cogs/audio/audio.py:2265
-#: redbot/cogs/audio/audio.py:2304 redbot/cogs/audio/audio.py:2334
+#: redbot/cogs/audio/audio.py:754 redbot/cogs/audio/audio.py:782
+#: redbot/cogs/audio/audio.py:819 redbot/cogs/audio/audio.py:847
+#: redbot/cogs/audio/audio.py:914 redbot/cogs/audio/audio.py:932
+#: redbot/cogs/audio/audio.py:956 redbot/cogs/audio/audio.py:1026
+#: redbot/cogs/audio/audio.py:1280 redbot/cogs/audio/audio.py:1371
+#: redbot/cogs/audio/audio.py:1388 redbot/cogs/audio/audio.py:1411
+#: redbot/cogs/audio/audio.py:1419 redbot/cogs/audio/audio.py:2190
+#: redbot/cogs/audio/audio.py:2527 redbot/cogs/audio/audio.py:2860
+#: redbot/cogs/audio/audio.py:3201 redbot/cogs/audio/audio.py:3255
+#: redbot/cogs/audio/audio.py:3305 redbot/cogs/audio/audio.py:3497
+#: redbot/cogs/audio/audio.py:3575 redbot/cogs/audio/audio.py:3605
msgid "Nothing playing."
msgstr ""
-#: redbot/cogs/audio/audio.py:473
+#: redbot/cogs/audio/audio.py:758
msgid "Not connected anywhere."
msgstr ""
-#: redbot/cogs/audio/audio.py:478
-msgid "Connected in {num} servers:"
+#: redbot/cogs/audio/audio.py:764
+msgid "Playing in {num}/{total} servers:"
msgstr ""
-#: redbot/cogs/audio/audio.py:486
+#: redbot/cogs/audio/audio.py:779
#, docstring
msgid "Bump a track number to the top of the queue."
msgstr ""
-#: redbot/cogs/audio/audio.py:495
+#: redbot/cogs/audio/audio.py:788
msgid "You must be in the voice channel to bump a track."
msgstr ""
-#: redbot/cogs/audio/audio.py:499
+#: redbot/cogs/audio/audio.py:792
msgid "You need the DJ role to bump tracks."
msgstr ""
-#: redbot/cogs/audio/audio.py:502 redbot/cogs/audio/audio.py:1739
+#: redbot/cogs/audio/audio.py:795 redbot/cogs/audio/audio.py:2875
msgid "Song number must be greater than 1 and within the queue limit."
msgstr ""
-#: redbot/cogs/audio/audio.py:517
+#: redbot/cogs/audio/audio.py:810
msgid "Moved {track} to the top of the queue."
msgstr ""
-#: redbot/cogs/audio/audio.py:523
+#: redbot/cogs/audio/audio.py:817
#, docstring
msgid "Disconnect from the voice channel."
msgstr ""
-#: redbot/cogs/audio/audio.py:528
+#: redbot/cogs/audio/audio.py:826
msgid "You need the DJ role to disconnect."
msgstr ""
-#: redbot/cogs/audio/audio.py:532
+#: redbot/cogs/audio/audio.py:830
msgid "There are other people listening to music."
msgstr ""
-#: redbot/cogs/audio/audio.py:540
+#: redbot/cogs/audio/audio.py:845
+#, docstring
+msgid "Equalizer management."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:865
+#, docstring
+msgid "Delete a saved eq preset."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:887
+#, docstring
+msgid "List saved eq presets."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:890
+msgid "No saved equalizer presets."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:897
+msgid "{num} preset(s)"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:903
+#, docstring
+msgid "Load a saved eq preset."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:930
+#, docstring
+msgid "Reset the eq to 0 across all bands."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:946
+msgid "Equalizer values have been reset."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:954
+#, docstring
+msgid "Save the current eq settings to a preset."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:958
+msgid "Please enter a name for this equalizer preset."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:972
+msgid "No equalizer preset name entered, try the command again later."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:981 redbot/cogs/audio/audio.py:2213
+msgid "Try the command again with a shorter name."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:985
+msgid "Preset name already exists, do you want to replace it?"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:994
+msgid "Not saving preset."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1019
+#, docstring
+msgid "Set an eq band with a band number or name and value.\\n\\n Band positions are 1-15 and values have a range of -0.25 to 1.0.\\n Band names are 25, 40, 63, 100, 160, 250, 400, 630, 1k, 1.6k, 2.5k, 4k, 6.3k, 10k, and 16k Hz.\\n Setting a band value to -0.25 nullifies it while +0.25 is double.\\n "
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1063
+msgid "Valid band numbers are 1-15 or the band names listed in the help for this command."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1099
#, docstring
msgid "Local playback commands."
msgstr ""
-#: redbot/cogs/audio/audio.py:545
+#: redbot/cogs/audio/audio.py:1104
#, docstring
msgid "Play all songs in a localtracks folder."
msgstr ""
-#: redbot/cogs/audio/audio.py:552
+#: redbot/cogs/audio/audio.py:1115
+msgid "No localtracks folder named {name}."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1121
#, docstring
msgid "Play a local track."
msgstr ""
-#: redbot/cogs/audio/audio.py:557
+#: redbot/cogs/audio/audio.py:1126
msgid "No local track folders found."
msgstr ""
-#: redbot/cogs/audio/audio.py:600
+#: redbot/cogs/audio/audio.py:1169
#, docstring
msgid "Search for songs across all localtracks folders."
msgstr ""
-#: redbot/cogs/audio/audio.py:605
+#: redbot/cogs/audio/audio.py:1174
msgid "No album folders found."
msgstr ""
-#: redbot/cogs/audio/audio.py:612 redbot/cogs/audio/audio.py:1634
+#: redbot/cogs/audio/audio.py:1181 redbot/cogs/audio/audio.py:2816
msgid "No matches."
msgstr ""
-#: redbot/cogs/audio/audio.py:688
+#: redbot/cogs/audio/audio.py:1269
msgid "No localtracks folder."
msgstr ""
-#: redbot/cogs/audio/audio.py:696
+#: redbot/cogs/audio/audio.py:1278
#, docstring
msgid "Now playing."
msgstr ""
-#: redbot/cogs/audio/audio.py:716
+#: redbot/cogs/audio/audio.py:1298
msgid "Requested by: **{track.requester}**"
msgstr ""
-#: redbot/cogs/audio/audio.py:726
+#: redbot/cogs/audio/audio.py:1308
msgid "Nothing."
msgstr ""
-#: redbot/cogs/audio/audio.py:785
+#: redbot/cogs/audio/audio.py:1368
#, docstring
-msgid "Pause and resume."
+msgid "Pause or resume a playing track."
msgstr ""
-#: redbot/cogs/audio/audio.py:794
-msgid "You must be in the voice channel to pause the music."
+#: redbot/cogs/audio/audio.py:1377
+msgid "You must be in the voice channel pause or resume."
msgstr ""
-#: redbot/cogs/audio/audio.py:800
-msgid "You need the DJ role to pause tracks."
+#: redbot/cogs/audio/audio.py:1384
+msgid "You need the DJ role to pause or resume tracks."
msgstr ""
-#: redbot/cogs/audio/audio.py:814
+#: redbot/cogs/audio/audio.py:1401
msgid "Track Paused"
msgstr ""
-#: redbot/cogs/audio/audio.py:821
+#: redbot/cogs/audio/audio.py:1407
msgid "Track Resumed"
msgstr ""
-#: redbot/cogs/audio/audio.py:826
-msgid "Track is paused."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:828
-msgid "Track is playing."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:834
+#: redbot/cogs/audio/audio.py:1417
#, docstring
msgid "Queue percentage."
msgstr ""
-#: redbot/cogs/audio/audio.py:860
+#: redbot/cogs/audio/audio.py:1443
msgid "Nothing in the queue."
msgstr ""
-#: redbot/cogs/audio/audio.py:882
+#: redbot/cogs/audio/audio.py:1465
msgid "Queued and playing tracks:"
msgstr ""
-#: redbot/cogs/audio/audio.py:890
+#: redbot/cogs/audio/audio.py:1474
#, docstring
msgid "Play a URL or search for a track."
msgstr ""
-#: redbot/cogs/audio/audio.py:900 redbot/cogs/audio/audio.py:1411
-#: redbot/cogs/audio/audio.py:1795
+#: redbot/cogs/audio/audio.py:1481
+msgid "That URL is not allowed."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1484 redbot/cogs/audio/audio.py:2437
+#: redbot/cogs/audio/audio.py:2928 redbot/cogs/audio/audio.py:3047
+msgid "Connection to Lavalink has failed."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1486 redbot/cogs/audio/audio.py:2439
+#: redbot/cogs/audio/audio.py:2930 redbot/cogs/audio/audio.py:3049
+msgid "Please check your console or logs for details."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1495 redbot/cogs/audio/audio.py:2449
+#: redbot/cogs/audio/audio.py:2939 redbot/cogs/audio/audio.py:3543
msgid "I don't have permission to connect to your channel."
msgstr ""
-#: redbot/cogs/audio/audio.py:906 redbot/cogs/audio/audio.py:1422
-#: redbot/cogs/audio/audio.py:1801 redbot/cogs/audio/audio.py:1889
+#: redbot/cogs/audio/audio.py:1501 redbot/cogs/audio/audio.py:2461
+#: redbot/cogs/audio/audio.py:2945 redbot/cogs/audio/audio.py:3056
+#: redbot/cogs/audio/audio.py:3555
msgid "Connect to a voice channel first."
msgstr ""
-#: redbot/cogs/audio/audio.py:909 redbot/cogs/audio/audio.py:1418
-#: redbot/cogs/audio/audio.py:1804 redbot/cogs/audio/audio.py:1892
+#: redbot/cogs/audio/audio.py:1504 redbot/cogs/audio/audio.py:2457
+#: redbot/cogs/audio/audio.py:2948 redbot/cogs/audio/audio.py:3059
+#: redbot/cogs/audio/audio.py:3558
msgid "Connection to Lavalink has not yet been established."
msgstr ""
-#: redbot/cogs/audio/audio.py:913
+#: redbot/cogs/audio/audio.py:1508
msgid "You need the DJ role to queue tracks."
msgstr ""
-#: redbot/cogs/audio/audio.py:922
+#: redbot/cogs/audio/audio.py:1519
msgid "You must be in the voice channel to use the play command."
msgstr ""
-#: redbot/cogs/audio/audio.py:928
+#: redbot/cogs/audio/audio.py:1525
msgid "No tracks to play."
msgstr ""
-#: redbot/cogs/audio/audio.py:942 redbot/cogs/audio/audio.py:1450
-#: redbot/cogs/audio/audio.py:1828 redbot/cogs/audio/audio.py:1865
+#: redbot/cogs/audio/audio.py:1565
+msgid "The owner needs to set the Spotify client ID, Spotify client secret, and YouTube API key before Spotify URLs or codes can be used. \\nSee `{prefix}audioset youtubeapi` and `{prefix}audioset spotifyapi` for instructions."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1575 redbot/cogs/audio/audio.py:2493
+msgid "Wait until the playlist has finished loading."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1592 redbot/cogs/audio/audio.py:1657
+#: redbot/cogs/audio/audio.py:2499 redbot/cogs/audio/audio.py:2509
+#: redbot/cogs/audio/audio.py:2973 redbot/cogs/audio/audio.py:3027
msgid "Nothing found."
msgstr ""
-#: redbot/cogs/audio/audio.py:953 redbot/cogs/audio/audio.py:1295
+#: redbot/cogs/audio/audio.py:1600
+msgid "The Spotify API key or client secret has not been set properly. \\nUse `{prefix}audioset spotifyapi` for instructions."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1639 redbot/cogs/audio/audio.py:1776
+msgid "This doesn't seem to be a valid Spotify URL or code."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1688 redbot/cogs/audio/audio.py:2320
msgid "Playlist Enqueued"
msgstr ""
-#: redbot/cogs/audio/audio.py:954 redbot/cogs/audio/audio.py:1296
-msgid "Added {num} tracks to the queue."
+#: redbot/cogs/audio/audio.py:1689 redbot/cogs/audio/audio.py:2321
+msgid "Added {num} tracks to the queue.{maxlength_msg}"
msgstr ""
-#: redbot/cogs/audio/audio.py:958
+#: redbot/cogs/audio/audio.py:1695
msgid "{time} until start of playlist playback: starts at #{position} in queue"
msgstr ""
-#: redbot/cogs/audio/audio.py:980 redbot/cogs/audio/audio.py:1938
+#: redbot/cogs/audio/audio.py:1711 redbot/cogs/audio/audio.py:3125
+msgid "Track exceeds maximum length."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1717
+msgid "Nothing found. Check your Lavalink logs for details."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1732 redbot/cogs/audio/audio.py:3108
msgid "Track Enqueued"
msgstr ""
-#: redbot/cogs/audio/audio.py:984 redbot/cogs/audio/audio.py:1944
+#: redbot/cogs/audio/audio.py:1736 redbot/cogs/audio/audio.py:3114
msgid "{time} until track playback: #{position} in queue"
msgstr ""
-#: redbot/cogs/audio/audio.py:989 redbot/cogs/audio/audio.py:1949
+#: redbot/cogs/audio/audio.py:1741 redbot/cogs/audio/audio.py:3119
msgid "#{position} in queue"
msgstr ""
-#: redbot/cogs/audio/audio.py:997
+#: redbot/cogs/audio/audio.py:1761
+msgid "The Spotify API key or client secret has not been set properly. \\nUse `{prefix}audioset spotifyapi` for instructions."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1793 redbot/cogs/audio/audio.py:2384
+msgid "Please wait, adding tracks..."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1809
+msgid "The connection was reset while loading the playlist."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1826 redbot/cogs/audio/audio.py:2401
+msgid "Loading track {num}/{total}..."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1840
+msgid "Approximate time remaining: {seconds}"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1850
+msgid "Nothing found.\\nThe YouTube API key may be invalid or you may be rate limited on YouTube's search service.\\nCheck the YouTube API key again and follow the instructions at `{prefix}audioset youtubeapi`."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1871
#, docstring
msgid "Playlist configuration options."
msgstr ""
-#: redbot/cogs/audio/audio.py:1002
+#: redbot/cogs/audio/audio.py:1876
#, docstring
-msgid "Add a track URL, playlist link, or quick search to a playlist.\n\n"
-" The track(s) will be appended to the end of the playlist.\n"
-" "
+msgid "Add a track URL, playlist link, or quick search to a playlist.\\n\\n The track(s) will be appended to the end of the playlist.\\n "
msgstr ""
-#: redbot/cogs/audio/audio.py:1014 redbot/cogs/audio/audio.py:1078
-#: redbot/cogs/audio/audio.py:1228
+#: redbot/cogs/audio/audio.py:1888 redbot/cogs/audio/audio.py:2028
+#: redbot/cogs/audio/audio.py:2241
msgid "You are not the author of that playlist."
msgstr ""
-#: redbot/cogs/audio/audio.py:1024
+#: redbot/cogs/audio/audio.py:1898
msgid "{track} is already in {playlist}."
msgstr ""
-#: redbot/cogs/audio/audio.py:1033 redbot/cogs/audio/audio.py:1082
-#: redbot/cogs/audio/audio.py:1092 redbot/cogs/audio/audio.py:1231
+#: redbot/cogs/audio/audio.py:1907 redbot/cogs/audio/audio.py:2032
+#: redbot/cogs/audio/audio.py:2081 redbot/cogs/audio/audio.py:2244
msgid "No playlist with that name."
msgstr ""
-#: redbot/cogs/audio/audio.py:1040
+#: redbot/cogs/audio/audio.py:1914
msgid "{track} appended to {playlist}."
msgstr ""
-#: redbot/cogs/audio/audio.py:1046
+#: redbot/cogs/audio/audio.py:1920
msgid "{num} tracks appended to {playlist}."
msgstr ""
-#: redbot/cogs/audio/audio.py:1053
+#: redbot/cogs/audio/audio.py:1928
+#, docstring
+msgid "Copy a playlist from one server to another."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1932
+msgid "Invalid server ID for source server."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1934
+msgid "Invalid server ID for target server."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1939
+msgid "No playlist with that name in {from_guild_name}."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1950
+msgid "Playlist {name} copied from {from_guild_name} to {to_guild_name}."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1962
+msgid "A playlist with that name already exists in {to_guild_name}.\\nPlease enter a new name for this playlist."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1975
+msgid "Try the playlist copy command again with a shorter name."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1980
+msgid "Playlist name already exists in {to_guild_name}, try the playlist copy command again with a different name."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1986 redbot/cogs/audio/audio.py:2220
+msgid "No playlist name entered, try again later."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1991
+msgid "Playlist {name} copied from {from_guild_name} to {to_guild_name}.\\nNew playlist name on {to_guild_name}: {new_name}"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2003
#, docstring
msgid "Create an empty playlist."
msgstr ""
-#: redbot/cogs/audio/audio.py:1057 redbot/cogs/audio/audio.py:1172
+#: redbot/cogs/audio/audio.py:2007 redbot/cogs/audio/audio.py:2183
msgid "You need the DJ role to save playlists."
msgstr ""
-#: redbot/cogs/audio/audio.py:1061 redbot/cogs/audio/audio.py:1176
-#: redbot/cogs/audio/audio.py:1204
+#: redbot/cogs/audio/audio.py:2011 redbot/cogs/audio/audio.py:2187
+#: redbot/cogs/audio/audio.py:2217
msgid "Playlist name already exists, try again with a different name."
msgstr ""
-#: redbot/cogs/audio/audio.py:1067
+#: redbot/cogs/audio/audio.py:2017
msgid "Empty playlist {name} created."
msgstr ""
-#: redbot/cogs/audio/audio.py:1071
+#: redbot/cogs/audio/audio.py:2021
#, docstring
msgid "Delete a saved playlist."
msgstr ""
-#: redbot/cogs/audio/audio.py:1083
+#: redbot/cogs/audio/audio.py:2033
msgid "{name} playlist deleted."
msgstr ""
-#: redbot/cogs/audio/audio.py:1087
+#: redbot/cogs/audio/audio.py:2039
+#, docstring
+msgid "Download a copy of a playlist.\\n\\n These files can be used with the [p]playlist upload command.\\n Red v2-compatible playlists can be generated by passing True\\n for the v2 variable."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2061
+msgid "That playlist has no tracks."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2063 redbot/cogs/audio/audio.py:2331
+msgid "That playlist doesn't exist."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2076
#, docstring
msgid "Retrieve information from a saved playlist."
msgstr ""
-#: redbot/cogs/audio/audio.py:1100
-msgid "**Custom playlist.**"
+#: redbot/cogs/audio/audio.py:2101
+msgid "Playlist info for {playlist_name}:\\n"
msgstr ""
-#: redbot/cogs/audio/audio.py:1102
-msgid "URL: <{url}>"
+#: redbot/cogs/audio/audio.py:2105
+msgid "Playlist info for {playlist_name}:\\nURL: {url}"
msgstr ""
-#: redbot/cogs/audio/audio.py:1105
-msgid "Playlist info for {playlist_name}:"
+#: redbot/cogs/audio/audio.py:2116
+msgid "Author: {author_name} | {num} track(s)"
msgstr ""
-#: redbot/cogs/audio/audio.py:1106
-msgid "Author: **{author_name}**\n"
-"{url}"
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:1110
-msgid "{num} track(s)"
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:1115
+#: redbot/cogs/audio/audio.py:2126
#, docstring
msgid "List saved playlists."
msgstr ""
-#: redbot/cogs/audio/audio.py:1118
+#: redbot/cogs/audio/audio.py:2129
msgid "No saved playlists."
msgstr ""
-#: redbot/cogs/audio/audio.py:1130
+#: redbot/cogs/audio/audio.py:2141
msgid "Tracks: {num}"
msgstr ""
-#: redbot/cogs/audio/audio.py:1131
-msgid "Author: {name}\n"
+#: redbot/cogs/audio/audio.py:2142
+msgid "Author: {name}\\n"
msgstr ""
-#: redbot/cogs/audio/audio.py:1155
+#: redbot/cogs/audio/audio.py:2166
msgid "Playlists for {server_name}:"
msgstr ""
-#: redbot/cogs/audio/audio.py:1159
+#: redbot/cogs/audio/audio.py:2170
msgid "Page {page_num}/{total_pages} | {num} playlists"
msgstr ""
-#: redbot/cogs/audio/audio.py:1168
+#: redbot/cogs/audio/audio.py:2179
#, docstring
msgid "Save the queue to a playlist."
msgstr ""
-#: redbot/cogs/audio/audio.py:1189
+#: redbot/cogs/audio/audio.py:2193 redbot/cogs/audio/audio.py:2590
+#: redbot/cogs/audio/audio.py:2593 redbot/cogs/audio/audio.py:2613
+#: redbot/cogs/audio/audio.py:2756 redbot/cogs/audio/audio.py:2759
+#: redbot/cogs/audio/audio.py:2775 redbot/cogs/audio/audio.py:2778
+#: redbot/cogs/audio/audio.py:2810 redbot/cogs/audio/audio.py:2812
+#: redbot/cogs/audio/audio.py:3418 redbot/cogs/audio/audio.py:3422
+#: redbot/cogs/audio/audio.py:3429
+msgid "There's nothing in the queue."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2202
msgid "Please enter a name for this playlist."
msgstr ""
-#: redbot/cogs/audio/audio.py:1200
-msgid "Try the command again with a shorter name."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:1207
-msgid "No playlist name entered, try again later."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:1214
+#: redbot/cogs/audio/audio.py:2227
msgid "Playlist {name} saved from current queue: {num} tracks added."
msgstr ""
-#: redbot/cogs/audio/audio.py:1221
+#: redbot/cogs/audio/audio.py:2234
#, docstring
msgid "Remove a track from a playlist by url."
msgstr ""
-#: redbot/cogs/audio/audio.py:1235
+#: redbot/cogs/audio/audio.py:2248
msgid "URL not in playlist."
msgstr ""
-#: redbot/cogs/audio/audio.py:1239
+#: redbot/cogs/audio/audio.py:2252
msgid "No tracks left, removing playlist."
msgstr ""
-#: redbot/cogs/audio/audio.py:1246
+#: redbot/cogs/audio/audio.py:2259
msgid "{num} entries have been removed from the {playlist_name} playlist."
msgstr ""
-#: redbot/cogs/audio/audio.py:1253
+#: redbot/cogs/audio/audio.py:2266
msgid "The track has been removed from the {playlist_name} playlist."
msgstr ""
-#: redbot/cogs/audio/audio.py:1260
+#: redbot/cogs/audio/audio.py:2273
#, docstring
msgid "Save a playlist from a url."
msgstr ""
-#: redbot/cogs/audio/audio.py:1272
+#: redbot/cogs/audio/audio.py:2285
msgid "Playlist {name} saved: {num} tracks added."
msgstr ""
-#: redbot/cogs/audio/audio.py:1279
+#: redbot/cogs/audio/audio.py:2292
#, docstring
msgid "Load a playlist into the queue."
msgstr ""
-#: redbot/cogs/audio/audio.py:1304
-msgid "That playlist doesn't exist."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:1309
+#: redbot/cogs/audio/audio.py:2336
#, docstring
msgid "Convert a Red v2 playlist file to a playlist."
msgstr ""
-#: redbot/cogs/audio/audio.py:1315
+#: redbot/cogs/audio/audio.py:2342
msgid "Please upload the playlist file. Any other message will cancel this operation."
msgstr ""
-#: redbot/cogs/audio/audio.py:1323
+#: redbot/cogs/audio/audio.py:2350
msgid "No file detected, try again later."
msgstr ""
-#: redbot/cogs/audio/audio.py:1327
+#: redbot/cogs/audio/audio.py:2354
msgid "Upload cancelled."
msgstr ""
-#: redbot/cogs/audio/audio.py:1331
+#: redbot/cogs/audio/audio.py:2358
msgid "Only playlist files can be uploaded."
msgstr ""
-#: redbot/cogs/audio/audio.py:1336
+#: redbot/cogs/audio/audio.py:2363
msgid "Not a valid playlist file."
msgstr ""
-#: redbot/cogs/audio/audio.py:1352
+#: redbot/cogs/audio/audio.py:2379
msgid "A playlist already exists with this name."
msgstr ""
-#: redbot/cogs/audio/audio.py:1357
-msgid "Please wait, adding tracks..."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:1371
-msgid "Loading track {num}/{total}..."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:1377
+#: redbot/cogs/audio/audio.py:2407
msgid "No tracks found."
msgstr ""
-#: redbot/cogs/audio/audio.py:1383
+#: redbot/cogs/audio/audio.py:2413
msgid "Added {num} tracks from the {playlist_name} playlist. {num_bad} track(s) could not be loaded."
msgstr ""
-#: redbot/cogs/audio/audio.py:1388
+#: redbot/cogs/audio/audio.py:2418
msgid "Added {num} tracks from the {playlist_name} playlist."
msgstr ""
-#: redbot/cogs/audio/audio.py:1392
+#: redbot/cogs/audio/audio.py:2422
msgid "Playlist Saved"
msgstr ""
-#: redbot/cogs/audio/audio.py:1403
+#: redbot/cogs/audio/audio.py:2433
msgid "You need the DJ role to use playlists."
msgstr ""
-#: redbot/cogs/audio/audio.py:1432
+#: redbot/cogs/audio/audio.py:2471
msgid "You must be in the voice channel to use the playlist command."
msgstr ""
-#: redbot/cogs/audio/audio.py:1464
+#: redbot/cogs/audio/audio.py:2525
#, docstring
msgid "Skip to the start of the previously played track."
msgstr ""
-#: redbot/cogs/audio/audio.py:1474 redbot/cogs/audio/audio.py:2121
+#: redbot/cogs/audio/audio.py:2535 redbot/cogs/audio/audio.py:3317
msgid "You need the DJ role to skip tracks."
msgstr ""
-#: redbot/cogs/audio/audio.py:1479 redbot/cogs/audio/audio.py:2115
+#: redbot/cogs/audio/audio.py:2540 redbot/cogs/audio/audio.py:3311
msgid "You must be in the voice channel to skip the music."
msgstr ""
-#: redbot/cogs/audio/audio.py:1482
+#: redbot/cogs/audio/audio.py:2543
msgid "Turn shuffle off to use this command."
msgstr ""
-#: redbot/cogs/audio/audio.py:1484
+#: redbot/cogs/audio/audio.py:2545
msgid "No previous track."
msgstr ""
-#: redbot/cogs/audio/audio.py:1501
+#: redbot/cogs/audio/audio.py:2562
msgid "Replaying Track"
msgstr ""
-#: redbot/cogs/audio/audio.py:1509
+#: redbot/cogs/audio/audio.py:2571
#, docstring
-msgid "List the queue.\n\n"
-" Use [p]queue search to search the queue.\n"
-" "
+msgid "List the songs in the queue."
msgstr ""
-#: redbot/cogs/audio/audio.py:1514 redbot/cogs/audio/audio.py:1517
-#: redbot/cogs/audio/audio.py:1544 redbot/cogs/audio/audio.py:2221
-#: redbot/cogs/audio/audio.py:2225 redbot/cogs/audio/audio.py:2232
-msgid "There's nothing in the queue."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:1553
+#: redbot/cogs/audio/audio.py:2622
msgid "**Currently livestreaming:**"
msgstr ""
-#: redbot/cogs/audio/audio.py:1559 redbot/cogs/audio/audio.py:1569
-#: redbot/cogs/audio/audio.py:1575
+#: redbot/cogs/audio/audio.py:2628 redbot/cogs/audio/audio.py:2638
+#: redbot/cogs/audio/audio.py:2644
msgid "Playing: "
msgstr ""
-#: redbot/cogs/audio/audio.py:1562 redbot/cogs/audio/audio.py:1570
-msgid "Requested by: **{user}**\n"
+#: redbot/cogs/audio/audio.py:2631
+msgid "Requested by: **{user}**\\n"
msgstr ""
-#: redbot/cogs/audio/audio.py:1577
+#: redbot/cogs/audio/audio.py:2639
+msgid "Requested by: **{user}**\\n"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2646
msgid "Requested by: **{user}**"
msgstr ""
-#: redbot/cogs/audio/audio.py:1595 redbot/cogs/audio/audio.py:1599
-#: redbot/cogs/audio/audio.py:1604
-msgid "requested by **{user}**\n"
+#: redbot/cogs/audio/audio.py:2664
+msgid "requested by **{user}**\\n"
msgstr ""
-#: redbot/cogs/audio/audio.py:1615
+#: redbot/cogs/audio/audio.py:2668
+msgid "requested by **{user}**\\n"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2673
+msgid "requested by **{user}**\\n"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2684
msgid "Page {page_num}/{total_pages} | {num_tracks} tracks, {num_remaining} remaining"
msgstr ""
-#: redbot/cogs/audio/audio.py:1624
+#: redbot/cogs/audio/audio.py:2693
msgid "Repeat"
msgstr ""
-#: redbot/cogs/audio/audio.py:1626
+#: redbot/cogs/audio/audio.py:2695
msgid "Shuffle"
msgstr ""
-#: redbot/cogs/audio/audio.py:1683
+#: redbot/cogs/audio/audio.py:2740
msgid "Matching Tracks:"
msgstr ""
-#: redbot/cogs/audio/audio.py:1686 redbot/cogs/audio/audio.py:2010
+#: redbot/cogs/audio/audio.py:2743 redbot/cogs/audio/audio.py:3182
msgid "Page {page_num}/{total_pages}"
msgstr ""
-#: redbot/cogs/audio/audio.py:1695
+#: redbot/cogs/audio/audio.py:2752
+#, docstring
+msgid "Clears the queue."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2764
+msgid "You need the DJ role to clear the queue."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2766
+msgid "The queue has been cleared."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2771
+#, docstring
+msgid "Removes songs from the queue if the requester is not in the voice channel."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2783
+msgid "You need the DJ role to clean the queue."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2794
+msgid "Removed 0 tracks."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2798
+msgid "Removed {removed_tracks} tracks queued by members outside of the voice channel."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2806
+#, docstring
+msgid "Search the queue."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2829
#, docstring
msgid "Toggle repeat."
msgstr ""
-#: redbot/cogs/audio/audio.py:1701
+#: redbot/cogs/audio/audio.py:2835
msgid "You need the DJ role to toggle repeat."
msgstr ""
-#: redbot/cogs/audio/audio.py:1712
+#: redbot/cogs/audio/audio.py:2843
msgid "You must be in the voice channel to toggle repeat."
msgstr ""
-#: redbot/cogs/audio/audio.py:1715
+#: redbot/cogs/audio/audio.py:2849
msgid "Repeat tracks: {true_or_false}."
msgstr ""
-#: redbot/cogs/audio/audio.py:1721
+#: redbot/cogs/audio/audio.py:2857
#, docstring
msgid "Remove a specific track number from the queue."
msgstr ""
-#: redbot/cogs/audio/audio.py:1727
+#: redbot/cogs/audio/audio.py:2863
msgid "Nothing queued."
msgstr ""
-#: redbot/cogs/audio/audio.py:1730
+#: redbot/cogs/audio/audio.py:2866
msgid "You need the DJ role to remove tracks."
msgstr ""
-#: redbot/cogs/audio/audio.py:1735
+#: redbot/cogs/audio/audio.py:2871
msgid "You must be in the voice channel to manage the queue."
msgstr ""
-#: redbot/cogs/audio/audio.py:1751
+#: redbot/cogs/audio/audio.py:2887
msgid "Removed {track} from the queue."
msgstr ""
-#: redbot/cogs/audio/audio.py:1757
+#: redbot/cogs/audio/audio.py:2894
#, docstring
-msgid "Pick a track with a search.\n\n"
-" Use `[p]search list ` to queue all tracks found\n"
-" on YouTube. `[p]search sc ` will search SoundCloud\n"
-" instead of YouTube.\n"
-" "
+msgid "Pick a track with a search.\\n\\n Use `[p]search list ` to queue all tracks found\\n on YouTube. `[p]search sc ` will search SoundCloud\\n instead of YouTube.\\n "
msgstr ""
-#: redbot/cogs/audio/audio.py:1814
+#: redbot/cogs/audio/audio.py:2958
msgid "You must be in the voice channel to enqueue tracks."
msgstr ""
-#: redbot/cogs/audio/audio.py:1831
-msgid "Queued {num} track(s)."
+#: redbot/cogs/audio/audio.py:2997
+msgid "Queued {num} track(s).{maxlength_msg}"
msgstr ""
-#: redbot/cogs/audio/audio.py:1837
+#: redbot/cogs/audio/audio.py:3003
msgid "{time} until start of search playback: starts at #{position} in queue"
msgstr ""
-#: redbot/cogs/audio/audio.py:1997
+#: redbot/cogs/audio/audio.py:3169
msgid "Tracks Found:"
msgstr ""
-#: redbot/cogs/audio/audio.py:1998
+#: redbot/cogs/audio/audio.py:3170
msgid "search results"
msgstr ""
-#: redbot/cogs/audio/audio.py:2001
+#: redbot/cogs/audio/audio.py:3173
msgid "Folders Found:"
msgstr ""
-#: redbot/cogs/audio/audio.py:2002
+#: redbot/cogs/audio/audio.py:3174
msgid "local folders"
msgstr ""
-#: redbot/cogs/audio/audio.py:2004
+#: redbot/cogs/audio/audio.py:3176
msgid "Files Found:"
msgstr ""
-#: redbot/cogs/audio/audio.py:2005
+#: redbot/cogs/audio/audio.py:3177
msgid "local tracks"
msgstr ""
-#: redbot/cogs/audio/audio.py:2022
+#: redbot/cogs/audio/audio.py:3195
#, docstring
-msgid "Seek ahead or behind on a track by seconds."
+msgid "Seek ahead or behind on a track by seconds or a to a specific time.\\n\\n Accepts seconds or a value formatted like 00:00:00 (`hh:mm:ss`) or 00:00 (`mm:ss`)."
msgstr ""
-#: redbot/cogs/audio/audio.py:2031
+#: redbot/cogs/audio/audio.py:3206
msgid "You must be in the voice channel to use seek."
msgstr ""
-#: redbot/cogs/audio/audio.py:2036
+#: redbot/cogs/audio/audio.py:3211
msgid "You need the DJ role to use seek."
msgstr ""
-#: redbot/cogs/audio/audio.py:2042 redbot/cogs/audio/audio.py:2278
+#: redbot/cogs/audio/audio.py:3217 redbot/cogs/audio/audio.py:3510
msgid "There are other people listening - vote to skip instead."
msgstr ""
-#: redbot/cogs/audio/audio.py:2046
+#: redbot/cogs/audio/audio.py:3221
msgid "Can't seek on a stream."
msgstr ""
-#: redbot/cogs/audio/audio.py:2052
+#: redbot/cogs/audio/audio.py:3230
+msgid "Invalid input for the time to seek."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:3236
msgid "Moved {num_seconds}s to 00:00:00"
msgstr ""
-#: redbot/cogs/audio/audio.py:2057
+#: redbot/cogs/audio/audio.py:3241
msgid "Moved {num_seconds}s to {time}"
msgstr ""
-#: redbot/cogs/audio/audio.py:2068
+#: redbot/cogs/audio/audio.py:3249
+msgid "Moved to {time}"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:3261
#, docstring
msgid "Toggle shuffle."
msgstr ""
-#: redbot/cogs/audio/audio.py:2072
+#: redbot/cogs/audio/audio.py:3265
msgid "You need the DJ role to toggle shuffle."
msgstr ""
-#: redbot/cogs/audio/audio.py:2083
+#: redbot/cogs/audio/audio.py:3273
msgid "You must be in the voice channel to toggle shuffle."
msgstr ""
-#: redbot/cogs/audio/audio.py:2086
+#: redbot/cogs/audio/audio.py:3279
msgid "Shuffle tracks: {true_or_false}."
msgstr ""
-#: redbot/cogs/audio/audio.py:2092
+#: redbot/cogs/audio/audio.py:3287
#, docstring
-msgid "Make Red sing one of her songs"
+msgid "Make Red sing one of her songs."
msgstr ""
-#: redbot/cogs/audio/audio.py:2107
+#: redbot/cogs/audio/audio.py:3303
#, docstring
-msgid "Skip to the next track."
+msgid "Skip to the next track, or to a given track number."
msgstr ""
-#: redbot/cogs/audio/audio.py:2126
+#: redbot/cogs/audio/audio.py:3322
+msgid "Can't skip to a specific track in vote mode without the DJ role."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:3326
msgid "I removed your vote to skip."
msgstr ""
-#: redbot/cogs/audio/audio.py:2129
+#: redbot/cogs/audio/audio.py:3329
msgid "You voted to skip."
msgstr ""
-#: redbot/cogs/audio/audio.py:2142
+#: redbot/cogs/audio/audio.py:3342
msgid "Vote threshold met."
msgstr ""
-#: redbot/cogs/audio/audio.py:2145
+#: redbot/cogs/audio/audio.py:3345
msgid " Votes: {num_votes}/{num_members} ({cur_percent}% out of {required_percent}% needed)"
msgstr ""
-#: redbot/cogs/audio/audio.py:2228
+#: redbot/cogs/audio/audio.py:3425
msgid "Currently livestreaming {track}"
msgstr ""
-#: redbot/cogs/audio/audio.py:2235
+#: redbot/cogs/audio/audio.py:3432
msgid "{time} left on {track}"
msgstr ""
-#: redbot/cogs/audio/audio.py:2253
+#: redbot/cogs/audio/audio.py:3441
+msgid "Track number must be equal to or greater than 1."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:3454
+msgid "Can't skip to a track while shuffle is enabled."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:3470
msgid "Track Skipped"
msgstr ""
-#: redbot/cogs/audio/audio.py:2261
+#: redbot/cogs/audio/audio.py:3493
#, docstring
msgid "Stop playback and clear the queue."
msgstr ""
-#: redbot/cogs/audio/audio.py:2271
+#: redbot/cogs/audio/audio.py:3503
msgid "You must be in the voice channel to stop the music."
msgstr ""
-#: redbot/cogs/audio/audio.py:2282
+#: redbot/cogs/audio/audio.py:3514
msgid "You need the DJ role to stop the music."
msgstr ""
-#: redbot/cogs/audio/audio.py:2284
+#: redbot/cogs/audio/audio.py:3516
msgid "Stopping..."
msgstr ""
-#: redbot/cogs/audio/audio.py:2294
+#: redbot/cogs/audio/audio.py:3531
+#, docstring
+msgid "Summon the bot to a voice channel."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:3535
+msgid "You need the DJ role to summon the bot."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:3565
#, docstring
msgid "Set the volume, 1% - 150%."
msgstr ""
-#: redbot/cogs/audio/audio.py:2300
+#: redbot/cogs/audio/audio.py:3571
msgid "Current Volume:"
msgstr ""
-#: redbot/cogs/audio/audio.py:2312
+#: redbot/cogs/audio/audio.py:3583
msgid "You must be in the voice channel to change the volume."
msgstr ""
-#: redbot/cogs/audio/audio.py:2318
+#: redbot/cogs/audio/audio.py:3589
msgid "You need the DJ role to change the volume."
msgstr ""
-#: redbot/cogs/audio/audio.py:2331
+#: redbot/cogs/audio/audio.py:3602
msgid "Volume:"
msgstr ""
-#: redbot/cogs/audio/audio.py:2341
+#: redbot/cogs/audio/audio.py:3613
#, docstring
msgid "Lavalink server configuration options."
msgstr ""
-#: redbot/cogs/audio/audio.py:2346
+#: redbot/cogs/audio/audio.py:3618
#, docstring
msgid "Toggle using external lavalink servers."
msgstr ""
-#: redbot/cogs/audio/audio.py:2357 redbot/cogs/audio/audio.py:2366
+#: redbot/cogs/audio/audio.py:3625 redbot/cogs/audio/audio.py:3635
msgid "External lavalink server: {true_or_false}."
msgstr ""
-#: redbot/cogs/audio/audio.py:2361
-msgid "Defaults reset."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:2373
+#: redbot/cogs/audio/audio.py:3642
#, docstring
msgid "Set the lavalink server host."
msgstr ""
-#: redbot/cogs/audio/audio.py:2377 redbot/cogs/audio/audio.py:2382
+#: redbot/cogs/audio/audio.py:3646 redbot/cogs/audio/audio.py:3651
msgid "Host set to {host}."
msgstr ""
-#: redbot/cogs/audio/audio.py:2379 redbot/cogs/audio/audio.py:2395
-#: redbot/cogs/audio/audio.py:2413 redbot/cogs/audio/audio.py:2429
+#: redbot/cogs/audio/audio.py:3648 redbot/cogs/audio/audio.py:3664
+#: redbot/cogs/audio/audio.py:3682 redbot/cogs/audio/audio.py:3698
msgid "External lavalink server set to True."
msgstr ""
-#: redbot/cogs/audio/audio.py:2388
+#: redbot/cogs/audio/audio.py:3657
#, docstring
msgid "Set the lavalink server password."
msgstr ""
-#: redbot/cogs/audio/audio.py:2393 redbot/cogs/audio/audio.py:2399
+#: redbot/cogs/audio/audio.py:3662 redbot/cogs/audio/audio.py:3668
msgid "Server password set to {password}."
msgstr ""
-#: redbot/cogs/audio/audio.py:2406
+#: redbot/cogs/audio/audio.py:3675
#, docstring
msgid "Set the lavalink REST server port."
msgstr ""
-#: redbot/cogs/audio/audio.py:2411 redbot/cogs/audio/audio.py:2416
+#: redbot/cogs/audio/audio.py:3680 redbot/cogs/audio/audio.py:3685
msgid "REST port set to {port}."
msgstr ""
-#: redbot/cogs/audio/audio.py:2422
+#: redbot/cogs/audio/audio.py:3691
#, docstring
msgid "Set the lavalink websocket server port."
msgstr ""
-#: redbot/cogs/audio/audio.py:2427 redbot/cogs/audio/audio.py:2432
+#: redbot/cogs/audio/audio.py:3696 redbot/cogs/audio/audio.py:3701
msgid "Websocket port set to {port}."
msgstr ""
-#: redbot/cogs/audio/audio.py:2461
+#: redbot/cogs/audio/audio.py:3801
msgid "Not enough {currency} ({required_credits} required)."
msgstr ""
diff --git a/redbot/cogs/audio/locales/en-PT.po b/redbot/cogs/audio/locales/en-PT.po
index a4e5f2dd9..368476580 100644
--- a/redbot/cogs/audio/locales/en-PT.po
+++ b/redbot/cogs/audio/locales/en-PT.po
@@ -1,14 +1,14 @@
msgid ""
msgstr ""
"Project-Id-Version: red-discordbot\n"
-"POT-Creation-Date: 2019-02-17 02:24+0000\n"
-"PO-Revision-Date: 2019-02-25 03:08\n"
-"Last-Translator: Kowlin \n"
+"POT-Creation-Date: 2019-07-05 22:33+0200\n"
+"PO-Revision-Date: 2019-07-14 02:15\n"
+"Last-Translator: Robert Jansen (Kowlin)\n"
"Language-Team: Pirate English\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"Generated-By: redgettext 2.2\n"
+"Generated-By: redgettext 3.0\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: crowdin.com\n"
"X-Crowdin-Project: red-discordbot\n"
@@ -16,971 +16,1275 @@ msgstr ""
"X-Crowdin-File: /cogs/audio/locales/messages.pot\n"
"Language: en_PT\n"
-#: redbot/cogs/audio/audio.py:38
+#: redbot/cogs/audio/audio.py:47
#, docstring
msgid "Play audio through voice channels."
msgstr ""
-#: redbot/cogs/audio/audio.py:173 redbot/cogs/audio/audio.py:735
-msgid "Now Playing"
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:177
-msgid "Track length: {length} | Requested by: {user}"
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:201 redbot/cogs/audio/audio.py:227
+#: redbot/cogs/audio/audio.py:260
msgid "music in {} servers"
msgstr ""
-#: redbot/cogs/audio/audio.py:211
+#: redbot/cogs/audio/audio.py:300 redbot/cogs/audio/audio.py:1317
+msgid "Now Playing"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:304
+msgid "Track length: {length} | Requested by: {user}"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:331
msgid "Queue ended."
msgstr ""
-#: redbot/cogs/audio/audio.py:240
+#: redbot/cogs/audio/audio.py:350
msgid "Track Error"
msgstr ""
-#: redbot/cogs/audio/audio.py:245
+#: redbot/cogs/audio/audio.py:355
msgid "Skipping..."
msgstr ""
-#: redbot/cogs/audio/audio.py:252
+#: redbot/cogs/audio/audio.py:363
#, docstring
msgid "Music configuration options."
msgstr ""
-#: redbot/cogs/audio/audio.py:258
+#: redbot/cogs/audio/audio.py:369
#, docstring
-msgid "Toggle DJ mode.\n\n"
-" DJ mode allows users with the DJ role to use audio commands.\n"
-" "
+msgid "Toggle the bot auto-disconnecting when done playing.\\n\\n This setting takes precedence over [p]audioset emptydisconnect.\\n "
msgstr ""
-#: redbot/cogs/audio/audio.py:265
+#: redbot/cogs/audio/audio.py:377
+msgid "Auto-disconnection at queue end: {true_or_false}."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:385
+#, docstring
+msgid "Toggle DJ mode.\\n\\n DJ mode allows users with the DJ role to use audio commands.\\n "
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:392
msgid "Please set a role to use with DJ mode. Enter the role name or ID now."
msgstr ""
-#: redbot/cogs/audio/audio.py:273
+#: redbot/cogs/audio/audio.py:400
msgid "Response timed out, try again later."
msgstr ""
-#: redbot/cogs/audio/audio.py:284
+#: redbot/cogs/audio/audio.py:405
+msgid "DJ role enabled: {true_or_false}."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:411
#, docstring
msgid "Auto-disconnection after x seconds while stopped. 0 to disable."
msgstr ""
-#: redbot/cogs/audio/audio.py:286 redbot/cogs/audio/audio.py:317
-#: redbot/cogs/audio/audio.py:405
+#: redbot/cogs/audio/audio.py:413 redbot/cogs/audio/audio.py:436
+#: redbot/cogs/audio/audio.py:543 redbot/cogs/audio/audio.py:687
msgid "Can't be less than zero."
msgstr ""
-#: redbot/cogs/audio/audio.py:291
+#: redbot/cogs/audio/audio.py:418
msgid "Empty disconnect disabled."
msgstr ""
-#: redbot/cogs/audio/audio.py:296
+#: redbot/cogs/audio/audio.py:423
msgid "Empty disconnect timer set to {num_seconds}."
msgstr ""
-#: redbot/cogs/audio/audio.py:307
-#, docstring
-msgid "Set the role to use for DJ mode."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:310
-msgid "DJ role set to: {role.name}."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:315
+#: redbot/cogs/audio/audio.py:434
#, docstring
msgid "Set a price for queueing tracks for non-mods. 0 to disable."
msgstr ""
-#: redbot/cogs/audio/audio.py:320
+#: redbot/cogs/audio/audio.py:439
msgid "Jukebox mode disabled."
msgstr ""
-#: redbot/cogs/audio/audio.py:325
+#: redbot/cogs/audio/audio.py:444
msgid "Track queueing command price set to {price} {currency}."
msgstr ""
-#: redbot/cogs/audio/audio.py:336
+#: redbot/cogs/audio/audio.py:455
+#, docstring
+msgid "Set the localtracks path if the Lavalink.jar is not run from the Audio data folder.\\n\\n Leave the path blank to reset the path to the default, the Audio data directory.\\n "
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:463
+msgid "The localtracks path location has been reset to the default location."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:466
+msgid "This setting is only for bot owners to set a localtracks folder location if the Lavalink.jar is being ran from outside of the Audio data directory.\\nIn the example below, the full path for 'ParentDirectory' must be passed to this command.\\nThe path must not contain spaces.\\n```\\nParentDirectory\\n |__ localtracks (folder)\\n | |__ Awesome Album Name (folder)\\n | |__01 Cool Song.mp3\\n | |__02 Groovy Song.mp3\\n |\\n |__ Lavalink.jar\\n |__ application.yml\\n```\\nThe folder path given to this command must contain the Lavalink.jar, the application.yml, and the localtracks folder.\\nUse this command with no path given to reset it to the default, the Audio data directory for this bot.\\nDo you want to continue to set the provided path for local tracks?"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:505
+msgid "{local_path} does not seem like a valid path."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:520
+msgid "The path that was entered does not have {filelist} file in that location. The path will still be saved, but please check the path and the file location before attempting to play local tracks or start your Lavalink.jar."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:530
+msgid "Localtracks path set to: {local_path}."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:536
+#, docstring
+msgid "Max length of a track to queue in seconds. 0 to disable.\\n\\n Accepts seconds or a value formatted like 00:00:00 (`hh:mm:ss`) or 00:00 (`mm:ss`).\\n Invalid input will turn the max length setting off."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:545
+msgid "Track max length disabled."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:549
+msgid "Track max length set to {seconds}."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:559
#, docstring
msgid "Toggle track announcement and other bot messages."
msgstr ""
-#: redbot/cogs/audio/audio.py:340
+#: redbot/cogs/audio/audio.py:563
msgid "Verbose mode on: {true_or_false}."
msgstr ""
-#: redbot/cogs/audio/audio.py:345
+#: redbot/cogs/audio/audio.py:569
+#, docstring
+msgid "Toggle the domain restriction on Audio.\\n\\n When toggled off, users will be able to play songs from non-commercial websites and links.\\n When toggled on, users are restricted to YouTube, SoundCloud, Mixer, Vimeo, Twitch, and Bandcamp links."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:576
+msgid "Commercial links only: {true_or_false}."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:582
+#, docstring
+msgid "Set the role to use for DJ mode."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:585
+msgid "DJ role set to: {role.name}."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:589
#, docstring
msgid "Show the current settings."
msgstr ""
-#: redbot/cogs/audio/audio.py:358
+#: redbot/cogs/audio/audio.py:604
msgid "Server Settings"
msgstr ""
-#: redbot/cogs/audio/audio.py:360
-msgid "Disconnect timer: [{num_seconds}]\n"
+#: redbot/cogs/audio/audio.py:606
+msgid "Auto-disconnect: [{dc}]\\n"
msgstr ""
-#: redbot/cogs/audio/audio.py:364
-msgid "DJ Role: [{role.name}]\n"
+#: redbot/cogs/audio/audio.py:609
+msgid "Disconnect timer: [{num_seconds}]\\n"
msgstr ""
-#: redbot/cogs/audio/audio.py:366
-msgid "Jukebox: [{jukebox_name}]\n"
+#: redbot/cogs/audio/audio.py:613
+msgid "DJ Role: [{role.name}]\\n"
msgstr ""
-#: redbot/cogs/audio/audio.py:367
-msgid "Command price: [{jukebox_price}]\n"
+#: redbot/cogs/audio/audio.py:615
+msgid "Jukebox: [{jukebox_name}]\\n"
msgstr ""
-#: redbot/cogs/audio/audio.py:368
-msgid "Repeat: [{repeat}]\n"
-"Shuffle: [{shuffle}]\n"
-"Song notify msgs: [{notify}]\n"
-"Songs as status: [{status}]\n"
+#: redbot/cogs/audio/audio.py:616
+msgid "Command price: [{jukebox_price}]\\n"
msgstr ""
-#: redbot/cogs/audio/audio.py:375
-msgid "Thumbnails: [{0}]\n"
+#: redbot/cogs/audio/audio.py:618
+msgid "Max track length: [{tracklength}]\\n"
msgstr ""
-#: redbot/cogs/audio/audio.py:377
-msgid "Vote skip: [{vote_enabled}]\n"
-"Skip percentage: [{vote_percent}%]\n"
+#: redbot/cogs/audio/audio.py:621
+msgid "Repeat: [{repeat}]\\nShuffle: [{shuffle}]\\nSong notify msgs: [{notify}]\\nSongs as status: [{status}]\\n"
msgstr ""
-#: redbot/cogs/audio/audio.py:380
-msgid "---Lavalink Settings---\n"
-"Cog version: [{version}]\n"
-"Jar build: [{jarbuild}]\n"
-"External server: [{use_external_lavalink}]"
+#: redbot/cogs/audio/audio.py:628
+msgid "Thumbnails: [{0}]\\n"
msgstr ""
-#: redbot/cogs/audio/audio.py:393
+#: redbot/cogs/audio/audio.py:630
+msgid "Vote skip: [{vote_enabled}]\\nSkip percentage: [{vote_percent}%]\\n"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:633
+msgid "---Lavalink Settings--- \\nCog version: [{version}]\\nJar build: [{jarbuild}]\\nExternal server: [{use_external_lavalink}]\\n"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:640
+msgid "Localtracks path: [{localpath}]\\n"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:648
#, docstring
-msgid "Toggle displaying a thumbnail on audio messages."
+msgid "Instructions to set the Spotify API tokens."
msgstr ""
-#: redbot/cogs/audio/audio.py:397
-msgid "Thumbnail display: {true_or_false}."
+#: redbot/cogs/audio/audio.py:649
+msgid "1. Go to Spotify developers and log in with your Spotify account.\\n(https://developer.spotify.com/dashboard/applications)\\n2. Click \\\"Create An App\\\".\\n3. Fill out the form provided with your app name, etc.\\n4. When asked if you're developing commercial integration select \\\"No\\\".\\n5. Accept the terms and conditions.\\n6. Copy your client ID and your client secret into:\\n`{prefix}set api spotify client_id, client_secret,`"
msgstr ""
-#: redbot/cogs/audio/audio.py:403
-#, docstring
-msgid "Percentage needed for non-mods to skip tracks. 0 to disable."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:411
-msgid "Voting disabled. All users can use queue management commands."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:416
-msgid "Vote percentage set to {percent}%."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:425
+#: redbot/cogs/audio/audio.py:665
#, docstring
msgid "Enable/disable tracks' titles as status."
msgstr ""
-#: redbot/cogs/audio/audio.py:429
+#: redbot/cogs/audio/audio.py:669
msgid "Song titles as status: {true_or_false}."
msgstr ""
-#: redbot/cogs/audio/audio.py:435
+#: redbot/cogs/audio/audio.py:675
+#, docstring
+msgid "Toggle displaying a thumbnail on audio messages."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:679
+msgid "Thumbnail display: {true_or_false}."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:685
+#, docstring
+msgid "Percentage needed for non-mods to skip tracks. 0 to disable."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:693
+msgid "Voting disabled. All users can use queue management commands."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:698
+msgid "Vote percentage set to {percent}%."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:707
+#, docstring
+msgid "Instructions to set the YouTube API key."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:726
#, docstring
msgid "Audio stats."
msgstr ""
-#: redbot/cogs/audio/audio.py:469 redbot/cogs/audio/audio.py:489
-#: redbot/cogs/audio/audio.py:698 redbot/cogs/audio/audio.py:788
-#: redbot/cogs/audio/audio.py:804 redbot/cogs/audio/audio.py:829
-#: redbot/cogs/audio/audio.py:836 redbot/cogs/audio/audio.py:1179
-#: redbot/cogs/audio/audio.py:1466 redbot/cogs/audio/audio.py:1724
-#: redbot/cogs/audio/audio.py:2026 redbot/cogs/audio/audio.py:2063
-#: redbot/cogs/audio/audio.py:2109 redbot/cogs/audio/audio.py:2265
-#: redbot/cogs/audio/audio.py:2304 redbot/cogs/audio/audio.py:2334
+#: redbot/cogs/audio/audio.py:754 redbot/cogs/audio/audio.py:782
+#: redbot/cogs/audio/audio.py:819 redbot/cogs/audio/audio.py:847
+#: redbot/cogs/audio/audio.py:914 redbot/cogs/audio/audio.py:932
+#: redbot/cogs/audio/audio.py:956 redbot/cogs/audio/audio.py:1026
+#: redbot/cogs/audio/audio.py:1280 redbot/cogs/audio/audio.py:1371
+#: redbot/cogs/audio/audio.py:1388 redbot/cogs/audio/audio.py:1411
+#: redbot/cogs/audio/audio.py:1419 redbot/cogs/audio/audio.py:2190
+#: redbot/cogs/audio/audio.py:2527 redbot/cogs/audio/audio.py:2860
+#: redbot/cogs/audio/audio.py:3201 redbot/cogs/audio/audio.py:3255
+#: redbot/cogs/audio/audio.py:3305 redbot/cogs/audio/audio.py:3497
+#: redbot/cogs/audio/audio.py:3575 redbot/cogs/audio/audio.py:3605
msgid "Nothing playing."
msgstr ""
-#: redbot/cogs/audio/audio.py:473
+#: redbot/cogs/audio/audio.py:758
msgid "Not connected anywhere."
msgstr ""
-#: redbot/cogs/audio/audio.py:478
-msgid "Connected in {num} servers:"
+#: redbot/cogs/audio/audio.py:764
+msgid "Playing in {num}/{total} servers:"
msgstr ""
-#: redbot/cogs/audio/audio.py:486
+#: redbot/cogs/audio/audio.py:779
#, docstring
msgid "Bump a track number to the top of the queue."
msgstr ""
-#: redbot/cogs/audio/audio.py:495
+#: redbot/cogs/audio/audio.py:788
msgid "You must be in the voice channel to bump a track."
msgstr ""
-#: redbot/cogs/audio/audio.py:499
+#: redbot/cogs/audio/audio.py:792
msgid "You need the DJ role to bump tracks."
msgstr ""
-#: redbot/cogs/audio/audio.py:502 redbot/cogs/audio/audio.py:1739
+#: redbot/cogs/audio/audio.py:795 redbot/cogs/audio/audio.py:2875
msgid "Song number must be greater than 1 and within the queue limit."
msgstr ""
-#: redbot/cogs/audio/audio.py:517
+#: redbot/cogs/audio/audio.py:810
msgid "Moved {track} to the top of the queue."
msgstr ""
-#: redbot/cogs/audio/audio.py:523
+#: redbot/cogs/audio/audio.py:817
#, docstring
msgid "Disconnect from the voice channel."
msgstr ""
-#: redbot/cogs/audio/audio.py:528
+#: redbot/cogs/audio/audio.py:826
msgid "You need the DJ role to disconnect."
msgstr ""
-#: redbot/cogs/audio/audio.py:532
+#: redbot/cogs/audio/audio.py:830
msgid "There are other people listening to music."
msgstr ""
-#: redbot/cogs/audio/audio.py:540
+#: redbot/cogs/audio/audio.py:845
+#, docstring
+msgid "Equalizer management."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:865
+#, docstring
+msgid "Delete a saved eq preset."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:887
+#, docstring
+msgid "List saved eq presets."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:890
+msgid "No saved equalizer presets."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:897
+msgid "{num} preset(s)"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:903
+#, docstring
+msgid "Load a saved eq preset."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:930
+#, docstring
+msgid "Reset the eq to 0 across all bands."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:946
+msgid "Equalizer values have been reset."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:954
+#, docstring
+msgid "Save the current eq settings to a preset."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:958
+msgid "Please enter a name for this equalizer preset."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:972
+msgid "No equalizer preset name entered, try the command again later."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:981 redbot/cogs/audio/audio.py:2213
+msgid "Try the command again with a shorter name."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:985
+msgid "Preset name already exists, do you want to replace it?"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:994
+msgid "Not saving preset."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1019
+#, docstring
+msgid "Set an eq band with a band number or name and value.\\n\\n Band positions are 1-15 and values have a range of -0.25 to 1.0.\\n Band names are 25, 40, 63, 100, 160, 250, 400, 630, 1k, 1.6k, 2.5k, 4k, 6.3k, 10k, and 16k Hz.\\n Setting a band value to -0.25 nullifies it while +0.25 is double.\\n "
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1063
+msgid "Valid band numbers are 1-15 or the band names listed in the help for this command."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1099
#, docstring
msgid "Local playback commands."
msgstr ""
-#: redbot/cogs/audio/audio.py:545
+#: redbot/cogs/audio/audio.py:1104
#, docstring
msgid "Play all songs in a localtracks folder."
msgstr ""
-#: redbot/cogs/audio/audio.py:552
+#: redbot/cogs/audio/audio.py:1115
+msgid "No localtracks folder named {name}."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1121
#, docstring
msgid "Play a local track."
msgstr ""
-#: redbot/cogs/audio/audio.py:557
+#: redbot/cogs/audio/audio.py:1126
msgid "No local track folders found."
msgstr ""
-#: redbot/cogs/audio/audio.py:600
+#: redbot/cogs/audio/audio.py:1169
#, docstring
msgid "Search for songs across all localtracks folders."
msgstr ""
-#: redbot/cogs/audio/audio.py:605
+#: redbot/cogs/audio/audio.py:1174
msgid "No album folders found."
msgstr ""
-#: redbot/cogs/audio/audio.py:612 redbot/cogs/audio/audio.py:1634
+#: redbot/cogs/audio/audio.py:1181 redbot/cogs/audio/audio.py:2816
msgid "No matches."
msgstr ""
-#: redbot/cogs/audio/audio.py:688
+#: redbot/cogs/audio/audio.py:1269
msgid "No localtracks folder."
msgstr ""
-#: redbot/cogs/audio/audio.py:696
+#: redbot/cogs/audio/audio.py:1278
#, docstring
msgid "Now playing."
msgstr ""
-#: redbot/cogs/audio/audio.py:716
+#: redbot/cogs/audio/audio.py:1298
msgid "Requested by: **{track.requester}**"
msgstr ""
-#: redbot/cogs/audio/audio.py:726
+#: redbot/cogs/audio/audio.py:1308
msgid "Nothing."
msgstr ""
-#: redbot/cogs/audio/audio.py:785
+#: redbot/cogs/audio/audio.py:1368
#, docstring
-msgid "Pause and resume."
+msgid "Pause or resume a playing track."
msgstr ""
-#: redbot/cogs/audio/audio.py:794
-msgid "You must be in the voice channel to pause the music."
+#: redbot/cogs/audio/audio.py:1377
+msgid "You must be in the voice channel pause or resume."
msgstr ""
-#: redbot/cogs/audio/audio.py:800
-msgid "You need the DJ role to pause tracks."
+#: redbot/cogs/audio/audio.py:1384
+msgid "You need the DJ role to pause or resume tracks."
msgstr ""
-#: redbot/cogs/audio/audio.py:814
+#: redbot/cogs/audio/audio.py:1401
msgid "Track Paused"
msgstr ""
-#: redbot/cogs/audio/audio.py:821
+#: redbot/cogs/audio/audio.py:1407
msgid "Track Resumed"
msgstr ""
-#: redbot/cogs/audio/audio.py:826
-msgid "Track is paused."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:828
-msgid "Track is playing."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:834
+#: redbot/cogs/audio/audio.py:1417
#, docstring
msgid "Queue percentage."
msgstr ""
-#: redbot/cogs/audio/audio.py:860
+#: redbot/cogs/audio/audio.py:1443
msgid "Nothing in the queue."
msgstr ""
-#: redbot/cogs/audio/audio.py:882
+#: redbot/cogs/audio/audio.py:1465
msgid "Queued and playing tracks:"
msgstr ""
-#: redbot/cogs/audio/audio.py:890
+#: redbot/cogs/audio/audio.py:1474
#, docstring
msgid "Play a URL or search for a track."
msgstr ""
-#: redbot/cogs/audio/audio.py:900 redbot/cogs/audio/audio.py:1411
-#: redbot/cogs/audio/audio.py:1795
+#: redbot/cogs/audio/audio.py:1481
+msgid "That URL is not allowed."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1484 redbot/cogs/audio/audio.py:2437
+#: redbot/cogs/audio/audio.py:2928 redbot/cogs/audio/audio.py:3047
+msgid "Connection to Lavalink has failed."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1486 redbot/cogs/audio/audio.py:2439
+#: redbot/cogs/audio/audio.py:2930 redbot/cogs/audio/audio.py:3049
+msgid "Please check your console or logs for details."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1495 redbot/cogs/audio/audio.py:2449
+#: redbot/cogs/audio/audio.py:2939 redbot/cogs/audio/audio.py:3543
msgid "I don't have permission to connect to your channel."
msgstr ""
-#: redbot/cogs/audio/audio.py:906 redbot/cogs/audio/audio.py:1422
-#: redbot/cogs/audio/audio.py:1801 redbot/cogs/audio/audio.py:1889
+#: redbot/cogs/audio/audio.py:1501 redbot/cogs/audio/audio.py:2461
+#: redbot/cogs/audio/audio.py:2945 redbot/cogs/audio/audio.py:3056
+#: redbot/cogs/audio/audio.py:3555
msgid "Connect to a voice channel first."
msgstr ""
-#: redbot/cogs/audio/audio.py:909 redbot/cogs/audio/audio.py:1418
-#: redbot/cogs/audio/audio.py:1804 redbot/cogs/audio/audio.py:1892
+#: redbot/cogs/audio/audio.py:1504 redbot/cogs/audio/audio.py:2457
+#: redbot/cogs/audio/audio.py:2948 redbot/cogs/audio/audio.py:3059
+#: redbot/cogs/audio/audio.py:3558
msgid "Connection to Lavalink has not yet been established."
msgstr ""
-#: redbot/cogs/audio/audio.py:913
+#: redbot/cogs/audio/audio.py:1508
msgid "You need the DJ role to queue tracks."
msgstr ""
-#: redbot/cogs/audio/audio.py:922
+#: redbot/cogs/audio/audio.py:1519
msgid "You must be in the voice channel to use the play command."
msgstr ""
-#: redbot/cogs/audio/audio.py:928
+#: redbot/cogs/audio/audio.py:1525
msgid "No tracks to play."
msgstr ""
-#: redbot/cogs/audio/audio.py:942 redbot/cogs/audio/audio.py:1450
-#: redbot/cogs/audio/audio.py:1828 redbot/cogs/audio/audio.py:1865
+#: redbot/cogs/audio/audio.py:1565
+msgid "The owner needs to set the Spotify client ID, Spotify client secret, and YouTube API key before Spotify URLs or codes can be used. \\nSee `{prefix}audioset youtubeapi` and `{prefix}audioset spotifyapi` for instructions."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1575 redbot/cogs/audio/audio.py:2493
+msgid "Wait until the playlist has finished loading."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1592 redbot/cogs/audio/audio.py:1657
+#: redbot/cogs/audio/audio.py:2499 redbot/cogs/audio/audio.py:2509
+#: redbot/cogs/audio/audio.py:2973 redbot/cogs/audio/audio.py:3027
msgid "Nothing found."
msgstr ""
-#: redbot/cogs/audio/audio.py:953 redbot/cogs/audio/audio.py:1295
+#: redbot/cogs/audio/audio.py:1600
+msgid "The Spotify API key or client secret has not been set properly. \\nUse `{prefix}audioset spotifyapi` for instructions."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1639 redbot/cogs/audio/audio.py:1776
+msgid "This doesn't seem to be a valid Spotify URL or code."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1688 redbot/cogs/audio/audio.py:2320
msgid "Playlist Enqueued"
msgstr ""
-#: redbot/cogs/audio/audio.py:954 redbot/cogs/audio/audio.py:1296
-msgid "Added {num} tracks to the queue."
+#: redbot/cogs/audio/audio.py:1689 redbot/cogs/audio/audio.py:2321
+msgid "Added {num} tracks to the queue.{maxlength_msg}"
msgstr ""
-#: redbot/cogs/audio/audio.py:958
+#: redbot/cogs/audio/audio.py:1695
msgid "{time} until start of playlist playback: starts at #{position} in queue"
msgstr ""
-#: redbot/cogs/audio/audio.py:980 redbot/cogs/audio/audio.py:1938
+#: redbot/cogs/audio/audio.py:1711 redbot/cogs/audio/audio.py:3125
+msgid "Track exceeds maximum length."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1717
+msgid "Nothing found. Check your Lavalink logs for details."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1732 redbot/cogs/audio/audio.py:3108
msgid "Track Enqueued"
msgstr ""
-#: redbot/cogs/audio/audio.py:984 redbot/cogs/audio/audio.py:1944
+#: redbot/cogs/audio/audio.py:1736 redbot/cogs/audio/audio.py:3114
msgid "{time} until track playback: #{position} in queue"
msgstr ""
-#: redbot/cogs/audio/audio.py:989 redbot/cogs/audio/audio.py:1949
+#: redbot/cogs/audio/audio.py:1741 redbot/cogs/audio/audio.py:3119
msgid "#{position} in queue"
msgstr ""
-#: redbot/cogs/audio/audio.py:997
+#: redbot/cogs/audio/audio.py:1761
+msgid "The Spotify API key or client secret has not been set properly. \\nUse `{prefix}audioset spotifyapi` for instructions."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1793 redbot/cogs/audio/audio.py:2384
+msgid "Please wait, adding tracks..."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1809
+msgid "The connection was reset while loading the playlist."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1826 redbot/cogs/audio/audio.py:2401
+msgid "Loading track {num}/{total}..."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1840
+msgid "Approximate time remaining: {seconds}"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1850
+msgid "Nothing found.\\nThe YouTube API key may be invalid or you may be rate limited on YouTube's search service.\\nCheck the YouTube API key again and follow the instructions at `{prefix}audioset youtubeapi`."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1871
#, docstring
msgid "Playlist configuration options."
msgstr ""
-#: redbot/cogs/audio/audio.py:1002
+#: redbot/cogs/audio/audio.py:1876
#, docstring
-msgid "Add a track URL, playlist link, or quick search to a playlist.\n\n"
-" The track(s) will be appended to the end of the playlist.\n"
-" "
+msgid "Add a track URL, playlist link, or quick search to a playlist.\\n\\n The track(s) will be appended to the end of the playlist.\\n "
msgstr ""
-#: redbot/cogs/audio/audio.py:1014 redbot/cogs/audio/audio.py:1078
-#: redbot/cogs/audio/audio.py:1228
+#: redbot/cogs/audio/audio.py:1888 redbot/cogs/audio/audio.py:2028
+#: redbot/cogs/audio/audio.py:2241
msgid "You are not the author of that playlist."
msgstr ""
-#: redbot/cogs/audio/audio.py:1024
+#: redbot/cogs/audio/audio.py:1898
msgid "{track} is already in {playlist}."
msgstr ""
-#: redbot/cogs/audio/audio.py:1033 redbot/cogs/audio/audio.py:1082
-#: redbot/cogs/audio/audio.py:1092 redbot/cogs/audio/audio.py:1231
+#: redbot/cogs/audio/audio.py:1907 redbot/cogs/audio/audio.py:2032
+#: redbot/cogs/audio/audio.py:2081 redbot/cogs/audio/audio.py:2244
msgid "No playlist with that name."
msgstr ""
-#: redbot/cogs/audio/audio.py:1040
+#: redbot/cogs/audio/audio.py:1914
msgid "{track} appended to {playlist}."
msgstr ""
-#: redbot/cogs/audio/audio.py:1046
+#: redbot/cogs/audio/audio.py:1920
msgid "{num} tracks appended to {playlist}."
msgstr ""
-#: redbot/cogs/audio/audio.py:1053
+#: redbot/cogs/audio/audio.py:1928
+#, docstring
+msgid "Copy a playlist from one server to another."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1932
+msgid "Invalid server ID for source server."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1934
+msgid "Invalid server ID for target server."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1939
+msgid "No playlist with that name in {from_guild_name}."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1950
+msgid "Playlist {name} copied from {from_guild_name} to {to_guild_name}."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1962
+msgid "A playlist with that name already exists in {to_guild_name}.\\nPlease enter a new name for this playlist."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1975
+msgid "Try the playlist copy command again with a shorter name."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1980
+msgid "Playlist name already exists in {to_guild_name}, try the playlist copy command again with a different name."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1986 redbot/cogs/audio/audio.py:2220
+msgid "No playlist name entered, try again later."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1991
+msgid "Playlist {name} copied from {from_guild_name} to {to_guild_name}.\\nNew playlist name on {to_guild_name}: {new_name}"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2003
#, docstring
msgid "Create an empty playlist."
msgstr ""
-#: redbot/cogs/audio/audio.py:1057 redbot/cogs/audio/audio.py:1172
+#: redbot/cogs/audio/audio.py:2007 redbot/cogs/audio/audio.py:2183
msgid "You need the DJ role to save playlists."
msgstr ""
-#: redbot/cogs/audio/audio.py:1061 redbot/cogs/audio/audio.py:1176
-#: redbot/cogs/audio/audio.py:1204
+#: redbot/cogs/audio/audio.py:2011 redbot/cogs/audio/audio.py:2187
+#: redbot/cogs/audio/audio.py:2217
msgid "Playlist name already exists, try again with a different name."
msgstr ""
-#: redbot/cogs/audio/audio.py:1067
+#: redbot/cogs/audio/audio.py:2017
msgid "Empty playlist {name} created."
msgstr ""
-#: redbot/cogs/audio/audio.py:1071
+#: redbot/cogs/audio/audio.py:2021
#, docstring
msgid "Delete a saved playlist."
msgstr ""
-#: redbot/cogs/audio/audio.py:1083
+#: redbot/cogs/audio/audio.py:2033
msgid "{name} playlist deleted."
msgstr ""
-#: redbot/cogs/audio/audio.py:1087
+#: redbot/cogs/audio/audio.py:2039
+#, docstring
+msgid "Download a copy of a playlist.\\n\\n These files can be used with the [p]playlist upload command.\\n Red v2-compatible playlists can be generated by passing True\\n for the v2 variable."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2061
+msgid "That playlist has no tracks."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2063 redbot/cogs/audio/audio.py:2331
+msgid "That playlist doesn't exist."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2076
#, docstring
msgid "Retrieve information from a saved playlist."
msgstr ""
-#: redbot/cogs/audio/audio.py:1100
-msgid "**Custom playlist.**"
+#: redbot/cogs/audio/audio.py:2101
+msgid "Playlist info for {playlist_name}:\\n"
msgstr ""
-#: redbot/cogs/audio/audio.py:1102
-msgid "URL: <{url}>"
+#: redbot/cogs/audio/audio.py:2105
+msgid "Playlist info for {playlist_name}:\\nURL: {url}"
msgstr ""
-#: redbot/cogs/audio/audio.py:1105
-msgid "Playlist info for {playlist_name}:"
+#: redbot/cogs/audio/audio.py:2116
+msgid "Author: {author_name} | {num} track(s)"
msgstr ""
-#: redbot/cogs/audio/audio.py:1106
-msgid "Author: **{author_name}**\n"
-"{url}"
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:1110
-msgid "{num} track(s)"
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:1115
+#: redbot/cogs/audio/audio.py:2126
#, docstring
msgid "List saved playlists."
msgstr ""
-#: redbot/cogs/audio/audio.py:1118
+#: redbot/cogs/audio/audio.py:2129
msgid "No saved playlists."
msgstr ""
-#: redbot/cogs/audio/audio.py:1130
+#: redbot/cogs/audio/audio.py:2141
msgid "Tracks: {num}"
msgstr ""
-#: redbot/cogs/audio/audio.py:1131
-msgid "Author: {name}\n"
+#: redbot/cogs/audio/audio.py:2142
+msgid "Author: {name}\\n"
msgstr ""
-#: redbot/cogs/audio/audio.py:1155
+#: redbot/cogs/audio/audio.py:2166
msgid "Playlists for {server_name}:"
msgstr ""
-#: redbot/cogs/audio/audio.py:1159
+#: redbot/cogs/audio/audio.py:2170
msgid "Page {page_num}/{total_pages} | {num} playlists"
msgstr ""
-#: redbot/cogs/audio/audio.py:1168
+#: redbot/cogs/audio/audio.py:2179
#, docstring
msgid "Save the queue to a playlist."
msgstr ""
-#: redbot/cogs/audio/audio.py:1189
+#: redbot/cogs/audio/audio.py:2193 redbot/cogs/audio/audio.py:2590
+#: redbot/cogs/audio/audio.py:2593 redbot/cogs/audio/audio.py:2613
+#: redbot/cogs/audio/audio.py:2756 redbot/cogs/audio/audio.py:2759
+#: redbot/cogs/audio/audio.py:2775 redbot/cogs/audio/audio.py:2778
+#: redbot/cogs/audio/audio.py:2810 redbot/cogs/audio/audio.py:2812
+#: redbot/cogs/audio/audio.py:3418 redbot/cogs/audio/audio.py:3422
+#: redbot/cogs/audio/audio.py:3429
+msgid "There's nothing in the queue."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2202
msgid "Please enter a name for this playlist."
msgstr ""
-#: redbot/cogs/audio/audio.py:1200
-msgid "Try the command again with a shorter name."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:1207
-msgid "No playlist name entered, try again later."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:1214
+#: redbot/cogs/audio/audio.py:2227
msgid "Playlist {name} saved from current queue: {num} tracks added."
msgstr ""
-#: redbot/cogs/audio/audio.py:1221
+#: redbot/cogs/audio/audio.py:2234
#, docstring
msgid "Remove a track from a playlist by url."
msgstr ""
-#: redbot/cogs/audio/audio.py:1235
+#: redbot/cogs/audio/audio.py:2248
msgid "URL not in playlist."
msgstr ""
-#: redbot/cogs/audio/audio.py:1239
+#: redbot/cogs/audio/audio.py:2252
msgid "No tracks left, removing playlist."
msgstr ""
-#: redbot/cogs/audio/audio.py:1246
+#: redbot/cogs/audio/audio.py:2259
msgid "{num} entries have been removed from the {playlist_name} playlist."
msgstr ""
-#: redbot/cogs/audio/audio.py:1253
+#: redbot/cogs/audio/audio.py:2266
msgid "The track has been removed from the {playlist_name} playlist."
msgstr ""
-#: redbot/cogs/audio/audio.py:1260
+#: redbot/cogs/audio/audio.py:2273
#, docstring
msgid "Save a playlist from a url."
msgstr ""
-#: redbot/cogs/audio/audio.py:1272
+#: redbot/cogs/audio/audio.py:2285
msgid "Playlist {name} saved: {num} tracks added."
msgstr ""
-#: redbot/cogs/audio/audio.py:1279
+#: redbot/cogs/audio/audio.py:2292
#, docstring
msgid "Load a playlist into the queue."
msgstr ""
-#: redbot/cogs/audio/audio.py:1304
-msgid "That playlist doesn't exist."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:1309
+#: redbot/cogs/audio/audio.py:2336
#, docstring
msgid "Convert a Red v2 playlist file to a playlist."
msgstr ""
-#: redbot/cogs/audio/audio.py:1315
+#: redbot/cogs/audio/audio.py:2342
msgid "Please upload the playlist file. Any other message will cancel this operation."
msgstr ""
-#: redbot/cogs/audio/audio.py:1323
+#: redbot/cogs/audio/audio.py:2350
msgid "No file detected, try again later."
msgstr ""
-#: redbot/cogs/audio/audio.py:1327
+#: redbot/cogs/audio/audio.py:2354
msgid "Upload cancelled."
msgstr ""
-#: redbot/cogs/audio/audio.py:1331
+#: redbot/cogs/audio/audio.py:2358
msgid "Only playlist files can be uploaded."
msgstr ""
-#: redbot/cogs/audio/audio.py:1336
+#: redbot/cogs/audio/audio.py:2363
msgid "Not a valid playlist file."
msgstr ""
-#: redbot/cogs/audio/audio.py:1352
+#: redbot/cogs/audio/audio.py:2379
msgid "A playlist already exists with this name."
msgstr ""
-#: redbot/cogs/audio/audio.py:1357
-msgid "Please wait, adding tracks..."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:1371
-msgid "Loading track {num}/{total}..."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:1377
+#: redbot/cogs/audio/audio.py:2407
msgid "No tracks found."
msgstr ""
-#: redbot/cogs/audio/audio.py:1383
+#: redbot/cogs/audio/audio.py:2413
msgid "Added {num} tracks from the {playlist_name} playlist. {num_bad} track(s) could not be loaded."
msgstr ""
-#: redbot/cogs/audio/audio.py:1388
+#: redbot/cogs/audio/audio.py:2418
msgid "Added {num} tracks from the {playlist_name} playlist."
msgstr ""
-#: redbot/cogs/audio/audio.py:1392
+#: redbot/cogs/audio/audio.py:2422
msgid "Playlist Saved"
msgstr ""
-#: redbot/cogs/audio/audio.py:1403
+#: redbot/cogs/audio/audio.py:2433
msgid "You need the DJ role to use playlists."
msgstr ""
-#: redbot/cogs/audio/audio.py:1432
+#: redbot/cogs/audio/audio.py:2471
msgid "You must be in the voice channel to use the playlist command."
msgstr ""
-#: redbot/cogs/audio/audio.py:1464
+#: redbot/cogs/audio/audio.py:2525
#, docstring
msgid "Skip to the start of the previously played track."
msgstr ""
-#: redbot/cogs/audio/audio.py:1474 redbot/cogs/audio/audio.py:2121
+#: redbot/cogs/audio/audio.py:2535 redbot/cogs/audio/audio.py:3317
msgid "You need the DJ role to skip tracks."
msgstr ""
-#: redbot/cogs/audio/audio.py:1479 redbot/cogs/audio/audio.py:2115
+#: redbot/cogs/audio/audio.py:2540 redbot/cogs/audio/audio.py:3311
msgid "You must be in the voice channel to skip the music."
msgstr ""
-#: redbot/cogs/audio/audio.py:1482
+#: redbot/cogs/audio/audio.py:2543
msgid "Turn shuffle off to use this command."
msgstr ""
-#: redbot/cogs/audio/audio.py:1484
+#: redbot/cogs/audio/audio.py:2545
msgid "No previous track."
msgstr ""
-#: redbot/cogs/audio/audio.py:1501
+#: redbot/cogs/audio/audio.py:2562
msgid "Replaying Track"
msgstr ""
-#: redbot/cogs/audio/audio.py:1509
+#: redbot/cogs/audio/audio.py:2571
#, docstring
-msgid "List the queue.\n\n"
-" Use [p]queue search to search the queue.\n"
-" "
+msgid "List the songs in the queue."
msgstr ""
-#: redbot/cogs/audio/audio.py:1514 redbot/cogs/audio/audio.py:1517
-#: redbot/cogs/audio/audio.py:1544 redbot/cogs/audio/audio.py:2221
-#: redbot/cogs/audio/audio.py:2225 redbot/cogs/audio/audio.py:2232
-msgid "There's nothing in the queue."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:1553
+#: redbot/cogs/audio/audio.py:2622
msgid "**Currently livestreaming:**"
msgstr ""
-#: redbot/cogs/audio/audio.py:1559 redbot/cogs/audio/audio.py:1569
-#: redbot/cogs/audio/audio.py:1575
+#: redbot/cogs/audio/audio.py:2628 redbot/cogs/audio/audio.py:2638
+#: redbot/cogs/audio/audio.py:2644
msgid "Playing: "
msgstr ""
-#: redbot/cogs/audio/audio.py:1562 redbot/cogs/audio/audio.py:1570
-msgid "Requested by: **{user}**\n"
+#: redbot/cogs/audio/audio.py:2631
+msgid "Requested by: **{user}**\\n"
msgstr ""
-#: redbot/cogs/audio/audio.py:1577
+#: redbot/cogs/audio/audio.py:2639
+msgid "Requested by: **{user}**\\n"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2646
msgid "Requested by: **{user}**"
msgstr ""
-#: redbot/cogs/audio/audio.py:1595 redbot/cogs/audio/audio.py:1599
-#: redbot/cogs/audio/audio.py:1604
-msgid "requested by **{user}**\n"
+#: redbot/cogs/audio/audio.py:2664
+msgid "requested by **{user}**\\n"
msgstr ""
-#: redbot/cogs/audio/audio.py:1615
+#: redbot/cogs/audio/audio.py:2668
+msgid "requested by **{user}**\\n"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2673
+msgid "requested by **{user}**\\n"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2684
msgid "Page {page_num}/{total_pages} | {num_tracks} tracks, {num_remaining} remaining"
msgstr ""
-#: redbot/cogs/audio/audio.py:1624
+#: redbot/cogs/audio/audio.py:2693
msgid "Repeat"
msgstr ""
-#: redbot/cogs/audio/audio.py:1626
+#: redbot/cogs/audio/audio.py:2695
msgid "Shuffle"
msgstr ""
-#: redbot/cogs/audio/audio.py:1683
+#: redbot/cogs/audio/audio.py:2740
msgid "Matching Tracks:"
msgstr ""
-#: redbot/cogs/audio/audio.py:1686 redbot/cogs/audio/audio.py:2010
+#: redbot/cogs/audio/audio.py:2743 redbot/cogs/audio/audio.py:3182
msgid "Page {page_num}/{total_pages}"
msgstr ""
-#: redbot/cogs/audio/audio.py:1695
+#: redbot/cogs/audio/audio.py:2752
+#, docstring
+msgid "Clears the queue."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2764
+msgid "You need the DJ role to clear the queue."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2766
+msgid "The queue has been cleared."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2771
+#, docstring
+msgid "Removes songs from the queue if the requester is not in the voice channel."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2783
+msgid "You need the DJ role to clean the queue."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2794
+msgid "Removed 0 tracks."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2798
+msgid "Removed {removed_tracks} tracks queued by members outside of the voice channel."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2806
+#, docstring
+msgid "Search the queue."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2829
#, docstring
msgid "Toggle repeat."
msgstr ""
-#: redbot/cogs/audio/audio.py:1701
+#: redbot/cogs/audio/audio.py:2835
msgid "You need the DJ role to toggle repeat."
msgstr ""
-#: redbot/cogs/audio/audio.py:1712
+#: redbot/cogs/audio/audio.py:2843
msgid "You must be in the voice channel to toggle repeat."
msgstr ""
-#: redbot/cogs/audio/audio.py:1715
+#: redbot/cogs/audio/audio.py:2849
msgid "Repeat tracks: {true_or_false}."
msgstr ""
-#: redbot/cogs/audio/audio.py:1721
+#: redbot/cogs/audio/audio.py:2857
#, docstring
msgid "Remove a specific track number from the queue."
msgstr ""
-#: redbot/cogs/audio/audio.py:1727
+#: redbot/cogs/audio/audio.py:2863
msgid "Nothing queued."
msgstr ""
-#: redbot/cogs/audio/audio.py:1730
+#: redbot/cogs/audio/audio.py:2866
msgid "You need the DJ role to remove tracks."
msgstr ""
-#: redbot/cogs/audio/audio.py:1735
+#: redbot/cogs/audio/audio.py:2871
msgid "You must be in the voice channel to manage the queue."
msgstr ""
-#: redbot/cogs/audio/audio.py:1751
+#: redbot/cogs/audio/audio.py:2887
msgid "Removed {track} from the queue."
msgstr ""
-#: redbot/cogs/audio/audio.py:1757
+#: redbot/cogs/audio/audio.py:2894
#, docstring
-msgid "Pick a track with a search.\n\n"
-" Use `[p]search list ` to queue all tracks found\n"
-" on YouTube. `[p]search sc ` will search SoundCloud\n"
-" instead of YouTube.\n"
-" "
+msgid "Pick a track with a search.\\n\\n Use `[p]search list ` to queue all tracks found\\n on YouTube. `[p]search sc ` will search SoundCloud\\n instead of YouTube.\\n "
msgstr ""
-#: redbot/cogs/audio/audio.py:1814
+#: redbot/cogs/audio/audio.py:2958
msgid "You must be in the voice channel to enqueue tracks."
msgstr ""
-#: redbot/cogs/audio/audio.py:1831
-msgid "Queued {num} track(s)."
+#: redbot/cogs/audio/audio.py:2997
+msgid "Queued {num} track(s).{maxlength_msg}"
msgstr ""
-#: redbot/cogs/audio/audio.py:1837
+#: redbot/cogs/audio/audio.py:3003
msgid "{time} until start of search playback: starts at #{position} in queue"
msgstr ""
-#: redbot/cogs/audio/audio.py:1997
+#: redbot/cogs/audio/audio.py:3169
msgid "Tracks Found:"
msgstr ""
-#: redbot/cogs/audio/audio.py:1998
+#: redbot/cogs/audio/audio.py:3170
msgid "search results"
msgstr ""
-#: redbot/cogs/audio/audio.py:2001
+#: redbot/cogs/audio/audio.py:3173
msgid "Folders Found:"
msgstr ""
-#: redbot/cogs/audio/audio.py:2002
+#: redbot/cogs/audio/audio.py:3174
msgid "local folders"
msgstr ""
-#: redbot/cogs/audio/audio.py:2004
+#: redbot/cogs/audio/audio.py:3176
msgid "Files Found:"
msgstr ""
-#: redbot/cogs/audio/audio.py:2005
+#: redbot/cogs/audio/audio.py:3177
msgid "local tracks"
msgstr ""
-#: redbot/cogs/audio/audio.py:2022
+#: redbot/cogs/audio/audio.py:3195
#, docstring
-msgid "Seek ahead or behind on a track by seconds."
+msgid "Seek ahead or behind on a track by seconds or a to a specific time.\\n\\n Accepts seconds or a value formatted like 00:00:00 (`hh:mm:ss`) or 00:00 (`mm:ss`)."
msgstr ""
-#: redbot/cogs/audio/audio.py:2031
+#: redbot/cogs/audio/audio.py:3206
msgid "You must be in the voice channel to use seek."
msgstr ""
-#: redbot/cogs/audio/audio.py:2036
+#: redbot/cogs/audio/audio.py:3211
msgid "You need the DJ role to use seek."
msgstr ""
-#: redbot/cogs/audio/audio.py:2042 redbot/cogs/audio/audio.py:2278
+#: redbot/cogs/audio/audio.py:3217 redbot/cogs/audio/audio.py:3510
msgid "There are other people listening - vote to skip instead."
msgstr ""
-#: redbot/cogs/audio/audio.py:2046
+#: redbot/cogs/audio/audio.py:3221
msgid "Can't seek on a stream."
msgstr ""
-#: redbot/cogs/audio/audio.py:2052
+#: redbot/cogs/audio/audio.py:3230
+msgid "Invalid input for the time to seek."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:3236
msgid "Moved {num_seconds}s to 00:00:00"
msgstr ""
-#: redbot/cogs/audio/audio.py:2057
+#: redbot/cogs/audio/audio.py:3241
msgid "Moved {num_seconds}s to {time}"
msgstr ""
-#: redbot/cogs/audio/audio.py:2068
+#: redbot/cogs/audio/audio.py:3249
+msgid "Moved to {time}"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:3261
#, docstring
msgid "Toggle shuffle."
msgstr ""
-#: redbot/cogs/audio/audio.py:2072
+#: redbot/cogs/audio/audio.py:3265
msgid "You need the DJ role to toggle shuffle."
msgstr ""
-#: redbot/cogs/audio/audio.py:2083
+#: redbot/cogs/audio/audio.py:3273
msgid "You must be in the voice channel to toggle shuffle."
msgstr ""
-#: redbot/cogs/audio/audio.py:2086
+#: redbot/cogs/audio/audio.py:3279
msgid "Shuffle tracks: {true_or_false}."
msgstr ""
-#: redbot/cogs/audio/audio.py:2092
+#: redbot/cogs/audio/audio.py:3287
#, docstring
-msgid "Make Red sing one of her songs"
+msgid "Make Red sing one of her songs."
msgstr ""
-#: redbot/cogs/audio/audio.py:2107
+#: redbot/cogs/audio/audio.py:3303
#, docstring
-msgid "Skip to the next track."
+msgid "Skip to the next track, or to a given track number."
msgstr ""
-#: redbot/cogs/audio/audio.py:2126
+#: redbot/cogs/audio/audio.py:3322
+msgid "Can't skip to a specific track in vote mode without the DJ role."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:3326
msgid "I removed your vote to skip."
msgstr ""
-#: redbot/cogs/audio/audio.py:2129
+#: redbot/cogs/audio/audio.py:3329
msgid "You voted to skip."
msgstr ""
-#: redbot/cogs/audio/audio.py:2142
+#: redbot/cogs/audio/audio.py:3342
msgid "Vote threshold met."
msgstr ""
-#: redbot/cogs/audio/audio.py:2145
+#: redbot/cogs/audio/audio.py:3345
msgid " Votes: {num_votes}/{num_members} ({cur_percent}% out of {required_percent}% needed)"
msgstr ""
-#: redbot/cogs/audio/audio.py:2228
+#: redbot/cogs/audio/audio.py:3425
msgid "Currently livestreaming {track}"
msgstr ""
-#: redbot/cogs/audio/audio.py:2235
+#: redbot/cogs/audio/audio.py:3432
msgid "{time} left on {track}"
msgstr ""
-#: redbot/cogs/audio/audio.py:2253
+#: redbot/cogs/audio/audio.py:3441
+msgid "Track number must be equal to or greater than 1."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:3454
+msgid "Can't skip to a track while shuffle is enabled."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:3470
msgid "Track Skipped"
msgstr ""
-#: redbot/cogs/audio/audio.py:2261
+#: redbot/cogs/audio/audio.py:3493
#, docstring
msgid "Stop playback and clear the queue."
msgstr ""
-#: redbot/cogs/audio/audio.py:2271
+#: redbot/cogs/audio/audio.py:3503
msgid "You must be in the voice channel to stop the music."
msgstr ""
-#: redbot/cogs/audio/audio.py:2282
+#: redbot/cogs/audio/audio.py:3514
msgid "You need the DJ role to stop the music."
msgstr ""
-#: redbot/cogs/audio/audio.py:2284
+#: redbot/cogs/audio/audio.py:3516
msgid "Stopping..."
msgstr ""
-#: redbot/cogs/audio/audio.py:2294
+#: redbot/cogs/audio/audio.py:3531
+#, docstring
+msgid "Summon the bot to a voice channel."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:3535
+msgid "You need the DJ role to summon the bot."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:3565
#, docstring
msgid "Set the volume, 1% - 150%."
msgstr ""
-#: redbot/cogs/audio/audio.py:2300
+#: redbot/cogs/audio/audio.py:3571
msgid "Current Volume:"
msgstr ""
-#: redbot/cogs/audio/audio.py:2312
+#: redbot/cogs/audio/audio.py:3583
msgid "You must be in the voice channel to change the volume."
msgstr ""
-#: redbot/cogs/audio/audio.py:2318
+#: redbot/cogs/audio/audio.py:3589
msgid "You need the DJ role to change the volume."
msgstr ""
-#: redbot/cogs/audio/audio.py:2331
+#: redbot/cogs/audio/audio.py:3602
msgid "Volume:"
msgstr ""
-#: redbot/cogs/audio/audio.py:2341
+#: redbot/cogs/audio/audio.py:3613
#, docstring
msgid "Lavalink server configuration options."
msgstr ""
-#: redbot/cogs/audio/audio.py:2346
+#: redbot/cogs/audio/audio.py:3618
#, docstring
msgid "Toggle using external lavalink servers."
msgstr ""
-#: redbot/cogs/audio/audio.py:2357 redbot/cogs/audio/audio.py:2366
+#: redbot/cogs/audio/audio.py:3625 redbot/cogs/audio/audio.py:3635
msgid "External lavalink server: {true_or_false}."
msgstr ""
-#: redbot/cogs/audio/audio.py:2361
-msgid "Defaults reset."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:2373
+#: redbot/cogs/audio/audio.py:3642
#, docstring
msgid "Set the lavalink server host."
msgstr ""
-#: redbot/cogs/audio/audio.py:2377 redbot/cogs/audio/audio.py:2382
+#: redbot/cogs/audio/audio.py:3646 redbot/cogs/audio/audio.py:3651
msgid "Host set to {host}."
msgstr ""
-#: redbot/cogs/audio/audio.py:2379 redbot/cogs/audio/audio.py:2395
-#: redbot/cogs/audio/audio.py:2413 redbot/cogs/audio/audio.py:2429
+#: redbot/cogs/audio/audio.py:3648 redbot/cogs/audio/audio.py:3664
+#: redbot/cogs/audio/audio.py:3682 redbot/cogs/audio/audio.py:3698
msgid "External lavalink server set to True."
msgstr ""
-#: redbot/cogs/audio/audio.py:2388
+#: redbot/cogs/audio/audio.py:3657
#, docstring
msgid "Set the lavalink server password."
msgstr ""
-#: redbot/cogs/audio/audio.py:2393 redbot/cogs/audio/audio.py:2399
+#: redbot/cogs/audio/audio.py:3662 redbot/cogs/audio/audio.py:3668
msgid "Server password set to {password}."
msgstr ""
-#: redbot/cogs/audio/audio.py:2406
+#: redbot/cogs/audio/audio.py:3675
#, docstring
msgid "Set the lavalink REST server port."
msgstr ""
-#: redbot/cogs/audio/audio.py:2411 redbot/cogs/audio/audio.py:2416
+#: redbot/cogs/audio/audio.py:3680 redbot/cogs/audio/audio.py:3685
msgid "REST port set to {port}."
msgstr ""
-#: redbot/cogs/audio/audio.py:2422
+#: redbot/cogs/audio/audio.py:3691
#, docstring
msgid "Set the lavalink websocket server port."
msgstr ""
-#: redbot/cogs/audio/audio.py:2427 redbot/cogs/audio/audio.py:2432
+#: redbot/cogs/audio/audio.py:3696 redbot/cogs/audio/audio.py:3701
msgid "Websocket port set to {port}."
msgstr ""
-#: redbot/cogs/audio/audio.py:2461
+#: redbot/cogs/audio/audio.py:3801
msgid "Not enough {currency} ({required_credits} required)."
msgstr ""
diff --git a/redbot/cogs/audio/locales/es-ES.po b/redbot/cogs/audio/locales/es-ES.po
index 6782ac567..c5a0a5c93 100644
--- a/redbot/cogs/audio/locales/es-ES.po
+++ b/redbot/cogs/audio/locales/es-ES.po
@@ -1,14 +1,14 @@
msgid ""
msgstr ""
"Project-Id-Version: red-discordbot\n"
-"POT-Creation-Date: 2019-02-17 02:24+0000\n"
-"PO-Revision-Date: 2019-02-25 03:06\n"
-"Last-Translator: Kowlin \n"
+"POT-Creation-Date: 2019-07-05 22:33+0200\n"
+"PO-Revision-Date: 2019-07-14 02:14\n"
+"Last-Translator: Robert Jansen (Kowlin)\n"
"Language-Team: Spanish\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"Generated-By: redgettext 2.2\n"
+"Generated-By: redgettext 3.0\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: crowdin.com\n"
"X-Crowdin-Project: red-discordbot\n"
@@ -16,971 +16,1275 @@ msgstr ""
"X-Crowdin-File: /cogs/audio/locales/messages.pot\n"
"Language: es_ES\n"
-#: redbot/cogs/audio/audio.py:38
+#: redbot/cogs/audio/audio.py:47
#, docstring
msgid "Play audio through voice channels."
-msgstr ""
+msgstr "Reproducir audio a través de canales de voz."
-#: redbot/cogs/audio/audio.py:173 redbot/cogs/audio/audio.py:735
-msgid "Now Playing"
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:177
-msgid "Track length: {length} | Requested by: {user}"
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:201 redbot/cogs/audio/audio.py:227
+#: redbot/cogs/audio/audio.py:260
msgid "music in {} servers"
-msgstr ""
+msgstr "música en {} servidores"
-#: redbot/cogs/audio/audio.py:211
+#: redbot/cogs/audio/audio.py:300 redbot/cogs/audio/audio.py:1317
+msgid "Now Playing"
+msgstr "Escuchando"
+
+#: redbot/cogs/audio/audio.py:304
+msgid "Track length: {length} | Requested by: {user}"
+msgstr "Longitud de la pista: {length} | Solicitado por: {user}"
+
+#: redbot/cogs/audio/audio.py:331
msgid "Queue ended."
-msgstr ""
+msgstr "Cola terminada."
-#: redbot/cogs/audio/audio.py:240
+#: redbot/cogs/audio/audio.py:350
msgid "Track Error"
-msgstr ""
+msgstr "Error de pista"
-#: redbot/cogs/audio/audio.py:245
+#: redbot/cogs/audio/audio.py:355
msgid "Skipping..."
-msgstr ""
+msgstr "Omitiendo..."
-#: redbot/cogs/audio/audio.py:252
+#: redbot/cogs/audio/audio.py:363
#, docstring
msgid "Music configuration options."
-msgstr ""
+msgstr "Opciones de configuración de música."
-#: redbot/cogs/audio/audio.py:258
+#: redbot/cogs/audio/audio.py:369
#, docstring
-msgid "Toggle DJ mode.\n\n"
-" DJ mode allows users with the DJ role to use audio commands.\n"
-" "
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:265
-msgid "Please set a role to use with DJ mode. Enter the role name or ID now."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:273
-msgid "Response timed out, try again later."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:284
-#, docstring
-msgid "Auto-disconnection after x seconds while stopped. 0 to disable."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:286 redbot/cogs/audio/audio.py:317
-#: redbot/cogs/audio/audio.py:405
-msgid "Can't be less than zero."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:291
-msgid "Empty disconnect disabled."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:296
-msgid "Empty disconnect timer set to {num_seconds}."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:307
-#, docstring
-msgid "Set the role to use for DJ mode."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:310
-msgid "DJ role set to: {role.name}."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:315
-#, docstring
-msgid "Set a price for queueing tracks for non-mods. 0 to disable."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:320
-msgid "Jukebox mode disabled."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:325
-msgid "Track queueing command price set to {price} {currency}."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:336
-#, docstring
-msgid "Toggle track announcement and other bot messages."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:340
-msgid "Verbose mode on: {true_or_false}."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:345
-#, docstring
-msgid "Show the current settings."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:358
-msgid "Server Settings"
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:360
-msgid "Disconnect timer: [{num_seconds}]\n"
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:364
-msgid "DJ Role: [{role.name}]\n"
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:366
-msgid "Jukebox: [{jukebox_name}]\n"
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:367
-msgid "Command price: [{jukebox_price}]\n"
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:368
-msgid "Repeat: [{repeat}]\n"
-"Shuffle: [{shuffle}]\n"
-"Song notify msgs: [{notify}]\n"
-"Songs as status: [{status}]\n"
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:375
-msgid "Thumbnails: [{0}]\n"
+msgid "Toggle the bot auto-disconnecting when done playing.\\n\\n This setting takes precedence over [p]audioset emptydisconnect.\\n "
msgstr ""
#: redbot/cogs/audio/audio.py:377
-msgid "Vote skip: [{vote_enabled}]\n"
-"Skip percentage: [{vote_percent}%]\n"
+msgid "Auto-disconnection at queue end: {true_or_false}."
msgstr ""
-#: redbot/cogs/audio/audio.py:380
-msgid "---Lavalink Settings---\n"
-"Cog version: [{version}]\n"
-"Jar build: [{jarbuild}]\n"
-"External server: [{use_external_lavalink}]"
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:393
+#: redbot/cogs/audio/audio.py:385
#, docstring
-msgid "Toggle displaying a thumbnail on audio messages."
+msgid "Toggle DJ mode.\\n\\n DJ mode allows users with the DJ role to use audio commands.\\n "
msgstr ""
-#: redbot/cogs/audio/audio.py:397
-msgid "Thumbnail display: {true_or_false}."
-msgstr ""
+#: redbot/cogs/audio/audio.py:392
+msgid "Please set a role to use with DJ mode. Enter the role name or ID now."
+msgstr "Por favor, establezca un rol para usar con el modo DJ. Introduzca el nombre de rol o ID ahora."
-#: redbot/cogs/audio/audio.py:403
-#, docstring
-msgid "Percentage needed for non-mods to skip tracks. 0 to disable."
+#: redbot/cogs/audio/audio.py:400
+msgid "Response timed out, try again later."
+msgstr "Respuesta expirada, inténtalo de nuevo más tarde."
+
+#: redbot/cogs/audio/audio.py:405
+msgid "DJ role enabled: {true_or_false}."
msgstr ""
#: redbot/cogs/audio/audio.py:411
-msgid "Voting disabled. All users can use queue management commands."
+#, docstring
+msgid "Auto-disconnection after x seconds while stopped. 0 to disable."
+msgstr "Desconexión automática después de x segundos mientras se detuvo. 0 para desactivar."
+
+#: redbot/cogs/audio/audio.py:413 redbot/cogs/audio/audio.py:436
+#: redbot/cogs/audio/audio.py:543 redbot/cogs/audio/audio.py:687
+msgid "Can't be less than zero."
+msgstr "No puede ser menor que cero."
+
+#: redbot/cogs/audio/audio.py:418
+msgid "Empty disconnect disabled."
+msgstr "Desconexion vacia desactivada."
+
+#: redbot/cogs/audio/audio.py:423
+msgid "Empty disconnect timer set to {num_seconds}."
+msgstr "Se ha establecido un temporizador de desconexión en {num_seconds}."
+
+#: redbot/cogs/audio/audio.py:434
+#, docstring
+msgid "Set a price for queueing tracks for non-mods. 0 to disable."
+msgstr "Establecer un precio para las pistas de cola para no mods. 0 para deshabilitar."
+
+#: redbot/cogs/audio/audio.py:439
+msgid "Jukebox mode disabled."
+msgstr "Modo Jukebox desactivado."
+
+#: redbot/cogs/audio/audio.py:444
+msgid "Track queueing command price set to {price} {currency}."
+msgstr "Rastrear el precio de comando en cola establecido en {price} {currency}."
+
+#: redbot/cogs/audio/audio.py:455
+#, docstring
+msgid "Set the localtracks path if the Lavalink.jar is not run from the Audio data folder.\\n\\n Leave the path blank to reset the path to the default, the Audio data directory.\\n "
msgstr ""
-#: redbot/cogs/audio/audio.py:416
-msgid "Vote percentage set to {percent}%."
+#: redbot/cogs/audio/audio.py:463
+msgid "The localtracks path location has been reset to the default location."
msgstr ""
-#: redbot/cogs/audio/audio.py:425
+#: redbot/cogs/audio/audio.py:466
+msgid "This setting is only for bot owners to set a localtracks folder location if the Lavalink.jar is being ran from outside of the Audio data directory.\\nIn the example below, the full path for 'ParentDirectory' must be passed to this command.\\nThe path must not contain spaces.\\n```\\nParentDirectory\\n |__ localtracks (folder)\\n | |__ Awesome Album Name (folder)\\n | |__01 Cool Song.mp3\\n | |__02 Groovy Song.mp3\\n |\\n |__ Lavalink.jar\\n |__ application.yml\\n```\\nThe folder path given to this command must contain the Lavalink.jar, the application.yml, and the localtracks folder.\\nUse this command with no path given to reset it to the default, the Audio data directory for this bot.\\nDo you want to continue to set the provided path for local tracks?"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:505
+msgid "{local_path} does not seem like a valid path."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:520
+msgid "The path that was entered does not have {filelist} file in that location. The path will still be saved, but please check the path and the file location before attempting to play local tracks or start your Lavalink.jar."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:530
+msgid "Localtracks path set to: {local_path}."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:536
+#, docstring
+msgid "Max length of a track to queue in seconds. 0 to disable.\\n\\n Accepts seconds or a value formatted like 00:00:00 (`hh:mm:ss`) or 00:00 (`mm:ss`).\\n Invalid input will turn the max length setting off."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:545
+msgid "Track max length disabled."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:549
+msgid "Track max length set to {seconds}."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:559
+#, docstring
+msgid "Toggle track announcement and other bot messages."
+msgstr "Alternar anuncio de la pista y otros mensajes de bot."
+
+#: redbot/cogs/audio/audio.py:563
+msgid "Verbose mode on: {true_or_false}."
+msgstr "Modo Verboso en: {true_or_false}."
+
+#: redbot/cogs/audio/audio.py:569
+#, docstring
+msgid "Toggle the domain restriction on Audio.\\n\\n When toggled off, users will be able to play songs from non-commercial websites and links.\\n When toggled on, users are restricted to YouTube, SoundCloud, Mixer, Vimeo, Twitch, and Bandcamp links."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:576
+msgid "Commercial links only: {true_or_false}."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:582
+#, docstring
+msgid "Set the role to use for DJ mode."
+msgstr "Establecer el rol a utilizar para el modo DJ."
+
+#: redbot/cogs/audio/audio.py:585
+msgid "DJ role set to: {role.name}."
+msgstr "Rol de DJ establecido en: {role.name}."
+
+#: redbot/cogs/audio/audio.py:589
+#, docstring
+msgid "Show the current settings."
+msgstr "Mostrar los ajustes actuales."
+
+#: redbot/cogs/audio/audio.py:604
+msgid "Server Settings"
+msgstr "Ajustes del servidor"
+
+#: redbot/cogs/audio/audio.py:606
+msgid "Auto-disconnect: [{dc}]\\n"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:609
+msgid "Disconnect timer: [{num_seconds}]\\n"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:613
+msgid "DJ Role: [{role.name}]\\n"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:615
+msgid "Jukebox: [{jukebox_name}]\\n"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:616
+msgid "Command price: [{jukebox_price}]\\n"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:618
+msgid "Max track length: [{tracklength}]\\n"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:621
+msgid "Repeat: [{repeat}]\\nShuffle: [{shuffle}]\\nSong notify msgs: [{notify}]\\nSongs as status: [{status}]\\n"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:628
+msgid "Thumbnails: [{0}]\\n"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:630
+msgid "Vote skip: [{vote_enabled}]\\nSkip percentage: [{vote_percent}%]\\n"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:633
+msgid "---Lavalink Settings--- \\nCog version: [{version}]\\nJar build: [{jarbuild}]\\nExternal server: [{use_external_lavalink}]\\n"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:640
+msgid "Localtracks path: [{localpath}]\\n"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:648
+#, docstring
+msgid "Instructions to set the Spotify API tokens."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:649
+msgid "1. Go to Spotify developers and log in with your Spotify account.\\n(https://developer.spotify.com/dashboard/applications)\\n2. Click \\\"Create An App\\\".\\n3. Fill out the form provided with your app name, etc.\\n4. When asked if you're developing commercial integration select \\\"No\\\".\\n5. Accept the terms and conditions.\\n6. Copy your client ID and your client secret into:\\n`{prefix}set api spotify client_id, client_secret,`"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:665
#, docstring
msgid "Enable/disable tracks' titles as status."
msgstr ""
-#: redbot/cogs/audio/audio.py:429
+#: redbot/cogs/audio/audio.py:669
msgid "Song titles as status: {true_or_false}."
msgstr ""
-#: redbot/cogs/audio/audio.py:435
+#: redbot/cogs/audio/audio.py:675
+#, docstring
+msgid "Toggle displaying a thumbnail on audio messages."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:679
+msgid "Thumbnail display: {true_or_false}."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:685
+#, docstring
+msgid "Percentage needed for non-mods to skip tracks. 0 to disable."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:693
+msgid "Voting disabled. All users can use queue management commands."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:698
+msgid "Vote percentage set to {percent}%."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:707
+#, docstring
+msgid "Instructions to set the YouTube API key."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:726
#, docstring
msgid "Audio stats."
msgstr ""
-#: redbot/cogs/audio/audio.py:469 redbot/cogs/audio/audio.py:489
-#: redbot/cogs/audio/audio.py:698 redbot/cogs/audio/audio.py:788
-#: redbot/cogs/audio/audio.py:804 redbot/cogs/audio/audio.py:829
-#: redbot/cogs/audio/audio.py:836 redbot/cogs/audio/audio.py:1179
-#: redbot/cogs/audio/audio.py:1466 redbot/cogs/audio/audio.py:1724
-#: redbot/cogs/audio/audio.py:2026 redbot/cogs/audio/audio.py:2063
-#: redbot/cogs/audio/audio.py:2109 redbot/cogs/audio/audio.py:2265
-#: redbot/cogs/audio/audio.py:2304 redbot/cogs/audio/audio.py:2334
+#: redbot/cogs/audio/audio.py:754 redbot/cogs/audio/audio.py:782
+#: redbot/cogs/audio/audio.py:819 redbot/cogs/audio/audio.py:847
+#: redbot/cogs/audio/audio.py:914 redbot/cogs/audio/audio.py:932
+#: redbot/cogs/audio/audio.py:956 redbot/cogs/audio/audio.py:1026
+#: redbot/cogs/audio/audio.py:1280 redbot/cogs/audio/audio.py:1371
+#: redbot/cogs/audio/audio.py:1388 redbot/cogs/audio/audio.py:1411
+#: redbot/cogs/audio/audio.py:1419 redbot/cogs/audio/audio.py:2190
+#: redbot/cogs/audio/audio.py:2527 redbot/cogs/audio/audio.py:2860
+#: redbot/cogs/audio/audio.py:3201 redbot/cogs/audio/audio.py:3255
+#: redbot/cogs/audio/audio.py:3305 redbot/cogs/audio/audio.py:3497
+#: redbot/cogs/audio/audio.py:3575 redbot/cogs/audio/audio.py:3605
msgid "Nothing playing."
msgstr ""
-#: redbot/cogs/audio/audio.py:473
+#: redbot/cogs/audio/audio.py:758
msgid "Not connected anywhere."
msgstr ""
-#: redbot/cogs/audio/audio.py:478
-msgid "Connected in {num} servers:"
+#: redbot/cogs/audio/audio.py:764
+msgid "Playing in {num}/{total} servers:"
msgstr ""
-#: redbot/cogs/audio/audio.py:486
+#: redbot/cogs/audio/audio.py:779
#, docstring
msgid "Bump a track number to the top of the queue."
msgstr ""
-#: redbot/cogs/audio/audio.py:495
+#: redbot/cogs/audio/audio.py:788
msgid "You must be in the voice channel to bump a track."
msgstr ""
-#: redbot/cogs/audio/audio.py:499
+#: redbot/cogs/audio/audio.py:792
msgid "You need the DJ role to bump tracks."
msgstr ""
-#: redbot/cogs/audio/audio.py:502 redbot/cogs/audio/audio.py:1739
+#: redbot/cogs/audio/audio.py:795 redbot/cogs/audio/audio.py:2875
msgid "Song number must be greater than 1 and within the queue limit."
msgstr ""
-#: redbot/cogs/audio/audio.py:517
+#: redbot/cogs/audio/audio.py:810
msgid "Moved {track} to the top of the queue."
msgstr ""
-#: redbot/cogs/audio/audio.py:523
+#: redbot/cogs/audio/audio.py:817
#, docstring
msgid "Disconnect from the voice channel."
msgstr ""
-#: redbot/cogs/audio/audio.py:528
+#: redbot/cogs/audio/audio.py:826
msgid "You need the DJ role to disconnect."
msgstr ""
-#: redbot/cogs/audio/audio.py:532
+#: redbot/cogs/audio/audio.py:830
msgid "There are other people listening to music."
msgstr ""
-#: redbot/cogs/audio/audio.py:540
+#: redbot/cogs/audio/audio.py:845
+#, docstring
+msgid "Equalizer management."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:865
+#, docstring
+msgid "Delete a saved eq preset."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:887
+#, docstring
+msgid "List saved eq presets."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:890
+msgid "No saved equalizer presets."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:897
+msgid "{num} preset(s)"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:903
+#, docstring
+msgid "Load a saved eq preset."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:930
+#, docstring
+msgid "Reset the eq to 0 across all bands."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:946
+msgid "Equalizer values have been reset."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:954
+#, docstring
+msgid "Save the current eq settings to a preset."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:958
+msgid "Please enter a name for this equalizer preset."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:972
+msgid "No equalizer preset name entered, try the command again later."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:981 redbot/cogs/audio/audio.py:2213
+msgid "Try the command again with a shorter name."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:985
+msgid "Preset name already exists, do you want to replace it?"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:994
+msgid "Not saving preset."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1019
+#, docstring
+msgid "Set an eq band with a band number or name and value.\\n\\n Band positions are 1-15 and values have a range of -0.25 to 1.0.\\n Band names are 25, 40, 63, 100, 160, 250, 400, 630, 1k, 1.6k, 2.5k, 4k, 6.3k, 10k, and 16k Hz.\\n Setting a band value to -0.25 nullifies it while +0.25 is double.\\n "
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1063
+msgid "Valid band numbers are 1-15 or the band names listed in the help for this command."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1099
#, docstring
msgid "Local playback commands."
msgstr ""
-#: redbot/cogs/audio/audio.py:545
+#: redbot/cogs/audio/audio.py:1104
#, docstring
msgid "Play all songs in a localtracks folder."
msgstr ""
-#: redbot/cogs/audio/audio.py:552
+#: redbot/cogs/audio/audio.py:1115
+msgid "No localtracks folder named {name}."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1121
#, docstring
msgid "Play a local track."
msgstr ""
-#: redbot/cogs/audio/audio.py:557
+#: redbot/cogs/audio/audio.py:1126
msgid "No local track folders found."
msgstr ""
-#: redbot/cogs/audio/audio.py:600
+#: redbot/cogs/audio/audio.py:1169
#, docstring
msgid "Search for songs across all localtracks folders."
msgstr ""
-#: redbot/cogs/audio/audio.py:605
+#: redbot/cogs/audio/audio.py:1174
msgid "No album folders found."
msgstr ""
-#: redbot/cogs/audio/audio.py:612 redbot/cogs/audio/audio.py:1634
+#: redbot/cogs/audio/audio.py:1181 redbot/cogs/audio/audio.py:2816
msgid "No matches."
msgstr ""
-#: redbot/cogs/audio/audio.py:688
+#: redbot/cogs/audio/audio.py:1269
msgid "No localtracks folder."
msgstr ""
-#: redbot/cogs/audio/audio.py:696
+#: redbot/cogs/audio/audio.py:1278
#, docstring
msgid "Now playing."
msgstr ""
-#: redbot/cogs/audio/audio.py:716
+#: redbot/cogs/audio/audio.py:1298
msgid "Requested by: **{track.requester}**"
msgstr ""
-#: redbot/cogs/audio/audio.py:726
+#: redbot/cogs/audio/audio.py:1308
msgid "Nothing."
msgstr ""
-#: redbot/cogs/audio/audio.py:785
+#: redbot/cogs/audio/audio.py:1368
#, docstring
-msgid "Pause and resume."
+msgid "Pause or resume a playing track."
msgstr ""
-#: redbot/cogs/audio/audio.py:794
-msgid "You must be in the voice channel to pause the music."
+#: redbot/cogs/audio/audio.py:1377
+msgid "You must be in the voice channel pause or resume."
msgstr ""
-#: redbot/cogs/audio/audio.py:800
-msgid "You need the DJ role to pause tracks."
+#: redbot/cogs/audio/audio.py:1384
+msgid "You need the DJ role to pause or resume tracks."
msgstr ""
-#: redbot/cogs/audio/audio.py:814
+#: redbot/cogs/audio/audio.py:1401
msgid "Track Paused"
msgstr ""
-#: redbot/cogs/audio/audio.py:821
+#: redbot/cogs/audio/audio.py:1407
msgid "Track Resumed"
msgstr ""
-#: redbot/cogs/audio/audio.py:826
-msgid "Track is paused."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:828
-msgid "Track is playing."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:834
+#: redbot/cogs/audio/audio.py:1417
#, docstring
msgid "Queue percentage."
msgstr ""
-#: redbot/cogs/audio/audio.py:860
+#: redbot/cogs/audio/audio.py:1443
msgid "Nothing in the queue."
msgstr ""
-#: redbot/cogs/audio/audio.py:882
+#: redbot/cogs/audio/audio.py:1465
msgid "Queued and playing tracks:"
msgstr ""
-#: redbot/cogs/audio/audio.py:890
+#: redbot/cogs/audio/audio.py:1474
#, docstring
msgid "Play a URL or search for a track."
msgstr ""
-#: redbot/cogs/audio/audio.py:900 redbot/cogs/audio/audio.py:1411
-#: redbot/cogs/audio/audio.py:1795
+#: redbot/cogs/audio/audio.py:1481
+msgid "That URL is not allowed."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1484 redbot/cogs/audio/audio.py:2437
+#: redbot/cogs/audio/audio.py:2928 redbot/cogs/audio/audio.py:3047
+msgid "Connection to Lavalink has failed."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1486 redbot/cogs/audio/audio.py:2439
+#: redbot/cogs/audio/audio.py:2930 redbot/cogs/audio/audio.py:3049
+msgid "Please check your console or logs for details."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1495 redbot/cogs/audio/audio.py:2449
+#: redbot/cogs/audio/audio.py:2939 redbot/cogs/audio/audio.py:3543
msgid "I don't have permission to connect to your channel."
msgstr ""
-#: redbot/cogs/audio/audio.py:906 redbot/cogs/audio/audio.py:1422
-#: redbot/cogs/audio/audio.py:1801 redbot/cogs/audio/audio.py:1889
+#: redbot/cogs/audio/audio.py:1501 redbot/cogs/audio/audio.py:2461
+#: redbot/cogs/audio/audio.py:2945 redbot/cogs/audio/audio.py:3056
+#: redbot/cogs/audio/audio.py:3555
msgid "Connect to a voice channel first."
msgstr ""
-#: redbot/cogs/audio/audio.py:909 redbot/cogs/audio/audio.py:1418
-#: redbot/cogs/audio/audio.py:1804 redbot/cogs/audio/audio.py:1892
+#: redbot/cogs/audio/audio.py:1504 redbot/cogs/audio/audio.py:2457
+#: redbot/cogs/audio/audio.py:2948 redbot/cogs/audio/audio.py:3059
+#: redbot/cogs/audio/audio.py:3558
msgid "Connection to Lavalink has not yet been established."
msgstr ""
-#: redbot/cogs/audio/audio.py:913
+#: redbot/cogs/audio/audio.py:1508
msgid "You need the DJ role to queue tracks."
msgstr ""
-#: redbot/cogs/audio/audio.py:922
+#: redbot/cogs/audio/audio.py:1519
msgid "You must be in the voice channel to use the play command."
msgstr ""
-#: redbot/cogs/audio/audio.py:928
+#: redbot/cogs/audio/audio.py:1525
msgid "No tracks to play."
msgstr ""
-#: redbot/cogs/audio/audio.py:942 redbot/cogs/audio/audio.py:1450
-#: redbot/cogs/audio/audio.py:1828 redbot/cogs/audio/audio.py:1865
+#: redbot/cogs/audio/audio.py:1565
+msgid "The owner needs to set the Spotify client ID, Spotify client secret, and YouTube API key before Spotify URLs or codes can be used. \\nSee `{prefix}audioset youtubeapi` and `{prefix}audioset spotifyapi` for instructions."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1575 redbot/cogs/audio/audio.py:2493
+msgid "Wait until the playlist has finished loading."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1592 redbot/cogs/audio/audio.py:1657
+#: redbot/cogs/audio/audio.py:2499 redbot/cogs/audio/audio.py:2509
+#: redbot/cogs/audio/audio.py:2973 redbot/cogs/audio/audio.py:3027
msgid "Nothing found."
msgstr ""
-#: redbot/cogs/audio/audio.py:953 redbot/cogs/audio/audio.py:1295
+#: redbot/cogs/audio/audio.py:1600
+msgid "The Spotify API key or client secret has not been set properly. \\nUse `{prefix}audioset spotifyapi` for instructions."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1639 redbot/cogs/audio/audio.py:1776
+msgid "This doesn't seem to be a valid Spotify URL or code."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1688 redbot/cogs/audio/audio.py:2320
msgid "Playlist Enqueued"
msgstr ""
-#: redbot/cogs/audio/audio.py:954 redbot/cogs/audio/audio.py:1296
-msgid "Added {num} tracks to the queue."
+#: redbot/cogs/audio/audio.py:1689 redbot/cogs/audio/audio.py:2321
+msgid "Added {num} tracks to the queue.{maxlength_msg}"
msgstr ""
-#: redbot/cogs/audio/audio.py:958
+#: redbot/cogs/audio/audio.py:1695
msgid "{time} until start of playlist playback: starts at #{position} in queue"
msgstr ""
-#: redbot/cogs/audio/audio.py:980 redbot/cogs/audio/audio.py:1938
+#: redbot/cogs/audio/audio.py:1711 redbot/cogs/audio/audio.py:3125
+msgid "Track exceeds maximum length."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1717
+msgid "Nothing found. Check your Lavalink logs for details."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1732 redbot/cogs/audio/audio.py:3108
msgid "Track Enqueued"
msgstr ""
-#: redbot/cogs/audio/audio.py:984 redbot/cogs/audio/audio.py:1944
+#: redbot/cogs/audio/audio.py:1736 redbot/cogs/audio/audio.py:3114
msgid "{time} until track playback: #{position} in queue"
msgstr ""
-#: redbot/cogs/audio/audio.py:989 redbot/cogs/audio/audio.py:1949
+#: redbot/cogs/audio/audio.py:1741 redbot/cogs/audio/audio.py:3119
msgid "#{position} in queue"
msgstr ""
-#: redbot/cogs/audio/audio.py:997
+#: redbot/cogs/audio/audio.py:1761
+msgid "The Spotify API key or client secret has not been set properly. \\nUse `{prefix}audioset spotifyapi` for instructions."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1793 redbot/cogs/audio/audio.py:2384
+msgid "Please wait, adding tracks..."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1809
+msgid "The connection was reset while loading the playlist."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1826 redbot/cogs/audio/audio.py:2401
+msgid "Loading track {num}/{total}..."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1840
+msgid "Approximate time remaining: {seconds}"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1850
+msgid "Nothing found.\\nThe YouTube API key may be invalid or you may be rate limited on YouTube's search service.\\nCheck the YouTube API key again and follow the instructions at `{prefix}audioset youtubeapi`."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1871
#, docstring
msgid "Playlist configuration options."
msgstr ""
-#: redbot/cogs/audio/audio.py:1002
+#: redbot/cogs/audio/audio.py:1876
#, docstring
-msgid "Add a track URL, playlist link, or quick search to a playlist.\n\n"
-" The track(s) will be appended to the end of the playlist.\n"
-" "
+msgid "Add a track URL, playlist link, or quick search to a playlist.\\n\\n The track(s) will be appended to the end of the playlist.\\n "
msgstr ""
-#: redbot/cogs/audio/audio.py:1014 redbot/cogs/audio/audio.py:1078
-#: redbot/cogs/audio/audio.py:1228
+#: redbot/cogs/audio/audio.py:1888 redbot/cogs/audio/audio.py:2028
+#: redbot/cogs/audio/audio.py:2241
msgid "You are not the author of that playlist."
msgstr ""
-#: redbot/cogs/audio/audio.py:1024
+#: redbot/cogs/audio/audio.py:1898
msgid "{track} is already in {playlist}."
msgstr ""
-#: redbot/cogs/audio/audio.py:1033 redbot/cogs/audio/audio.py:1082
-#: redbot/cogs/audio/audio.py:1092 redbot/cogs/audio/audio.py:1231
+#: redbot/cogs/audio/audio.py:1907 redbot/cogs/audio/audio.py:2032
+#: redbot/cogs/audio/audio.py:2081 redbot/cogs/audio/audio.py:2244
msgid "No playlist with that name."
msgstr ""
-#: redbot/cogs/audio/audio.py:1040
+#: redbot/cogs/audio/audio.py:1914
msgid "{track} appended to {playlist}."
msgstr ""
-#: redbot/cogs/audio/audio.py:1046
+#: redbot/cogs/audio/audio.py:1920
msgid "{num} tracks appended to {playlist}."
msgstr ""
-#: redbot/cogs/audio/audio.py:1053
+#: redbot/cogs/audio/audio.py:1928
+#, docstring
+msgid "Copy a playlist from one server to another."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1932
+msgid "Invalid server ID for source server."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1934
+msgid "Invalid server ID for target server."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1939
+msgid "No playlist with that name in {from_guild_name}."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1950
+msgid "Playlist {name} copied from {from_guild_name} to {to_guild_name}."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1962
+msgid "A playlist with that name already exists in {to_guild_name}.\\nPlease enter a new name for this playlist."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1975
+msgid "Try the playlist copy command again with a shorter name."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1980
+msgid "Playlist name already exists in {to_guild_name}, try the playlist copy command again with a different name."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1986 redbot/cogs/audio/audio.py:2220
+msgid "No playlist name entered, try again later."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1991
+msgid "Playlist {name} copied from {from_guild_name} to {to_guild_name}.\\nNew playlist name on {to_guild_name}: {new_name}"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2003
#, docstring
msgid "Create an empty playlist."
msgstr ""
-#: redbot/cogs/audio/audio.py:1057 redbot/cogs/audio/audio.py:1172
+#: redbot/cogs/audio/audio.py:2007 redbot/cogs/audio/audio.py:2183
msgid "You need the DJ role to save playlists."
msgstr ""
-#: redbot/cogs/audio/audio.py:1061 redbot/cogs/audio/audio.py:1176
-#: redbot/cogs/audio/audio.py:1204
+#: redbot/cogs/audio/audio.py:2011 redbot/cogs/audio/audio.py:2187
+#: redbot/cogs/audio/audio.py:2217
msgid "Playlist name already exists, try again with a different name."
msgstr ""
-#: redbot/cogs/audio/audio.py:1067
+#: redbot/cogs/audio/audio.py:2017
msgid "Empty playlist {name} created."
msgstr ""
-#: redbot/cogs/audio/audio.py:1071
+#: redbot/cogs/audio/audio.py:2021
#, docstring
msgid "Delete a saved playlist."
msgstr ""
-#: redbot/cogs/audio/audio.py:1083
+#: redbot/cogs/audio/audio.py:2033
msgid "{name} playlist deleted."
msgstr ""
-#: redbot/cogs/audio/audio.py:1087
+#: redbot/cogs/audio/audio.py:2039
+#, docstring
+msgid "Download a copy of a playlist.\\n\\n These files can be used with the [p]playlist upload command.\\n Red v2-compatible playlists can be generated by passing True\\n for the v2 variable."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2061
+msgid "That playlist has no tracks."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2063 redbot/cogs/audio/audio.py:2331
+msgid "That playlist doesn't exist."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2076
#, docstring
msgid "Retrieve information from a saved playlist."
msgstr ""
-#: redbot/cogs/audio/audio.py:1100
-msgid "**Custom playlist.**"
+#: redbot/cogs/audio/audio.py:2101
+msgid "Playlist info for {playlist_name}:\\n"
msgstr ""
-#: redbot/cogs/audio/audio.py:1102
-msgid "URL: <{url}>"
+#: redbot/cogs/audio/audio.py:2105
+msgid "Playlist info for {playlist_name}:\\nURL: {url}"
msgstr ""
-#: redbot/cogs/audio/audio.py:1105
-msgid "Playlist info for {playlist_name}:"
+#: redbot/cogs/audio/audio.py:2116
+msgid "Author: {author_name} | {num} track(s)"
msgstr ""
-#: redbot/cogs/audio/audio.py:1106
-msgid "Author: **{author_name}**\n"
-"{url}"
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:1110
-msgid "{num} track(s)"
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:1115
+#: redbot/cogs/audio/audio.py:2126
#, docstring
msgid "List saved playlists."
msgstr ""
-#: redbot/cogs/audio/audio.py:1118
+#: redbot/cogs/audio/audio.py:2129
msgid "No saved playlists."
msgstr ""
-#: redbot/cogs/audio/audio.py:1130
+#: redbot/cogs/audio/audio.py:2141
msgid "Tracks: {num}"
msgstr ""
-#: redbot/cogs/audio/audio.py:1131
-msgid "Author: {name}\n"
+#: redbot/cogs/audio/audio.py:2142
+msgid "Author: {name}\\n"
msgstr ""
-#: redbot/cogs/audio/audio.py:1155
+#: redbot/cogs/audio/audio.py:2166
msgid "Playlists for {server_name}:"
msgstr ""
-#: redbot/cogs/audio/audio.py:1159
+#: redbot/cogs/audio/audio.py:2170
msgid "Page {page_num}/{total_pages} | {num} playlists"
msgstr ""
-#: redbot/cogs/audio/audio.py:1168
+#: redbot/cogs/audio/audio.py:2179
#, docstring
msgid "Save the queue to a playlist."
msgstr ""
-#: redbot/cogs/audio/audio.py:1189
+#: redbot/cogs/audio/audio.py:2193 redbot/cogs/audio/audio.py:2590
+#: redbot/cogs/audio/audio.py:2593 redbot/cogs/audio/audio.py:2613
+#: redbot/cogs/audio/audio.py:2756 redbot/cogs/audio/audio.py:2759
+#: redbot/cogs/audio/audio.py:2775 redbot/cogs/audio/audio.py:2778
+#: redbot/cogs/audio/audio.py:2810 redbot/cogs/audio/audio.py:2812
+#: redbot/cogs/audio/audio.py:3418 redbot/cogs/audio/audio.py:3422
+#: redbot/cogs/audio/audio.py:3429
+msgid "There's nothing in the queue."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2202
msgid "Please enter a name for this playlist."
msgstr ""
-#: redbot/cogs/audio/audio.py:1200
-msgid "Try the command again with a shorter name."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:1207
-msgid "No playlist name entered, try again later."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:1214
+#: redbot/cogs/audio/audio.py:2227
msgid "Playlist {name} saved from current queue: {num} tracks added."
msgstr ""
-#: redbot/cogs/audio/audio.py:1221
+#: redbot/cogs/audio/audio.py:2234
#, docstring
msgid "Remove a track from a playlist by url."
msgstr ""
-#: redbot/cogs/audio/audio.py:1235
+#: redbot/cogs/audio/audio.py:2248
msgid "URL not in playlist."
msgstr ""
-#: redbot/cogs/audio/audio.py:1239
+#: redbot/cogs/audio/audio.py:2252
msgid "No tracks left, removing playlist."
msgstr ""
-#: redbot/cogs/audio/audio.py:1246
+#: redbot/cogs/audio/audio.py:2259
msgid "{num} entries have been removed from the {playlist_name} playlist."
msgstr ""
-#: redbot/cogs/audio/audio.py:1253
+#: redbot/cogs/audio/audio.py:2266
msgid "The track has been removed from the {playlist_name} playlist."
msgstr ""
-#: redbot/cogs/audio/audio.py:1260
+#: redbot/cogs/audio/audio.py:2273
#, docstring
msgid "Save a playlist from a url."
msgstr ""
-#: redbot/cogs/audio/audio.py:1272
+#: redbot/cogs/audio/audio.py:2285
msgid "Playlist {name} saved: {num} tracks added."
msgstr ""
-#: redbot/cogs/audio/audio.py:1279
+#: redbot/cogs/audio/audio.py:2292
#, docstring
msgid "Load a playlist into the queue."
msgstr ""
-#: redbot/cogs/audio/audio.py:1304
-msgid "That playlist doesn't exist."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:1309
+#: redbot/cogs/audio/audio.py:2336
#, docstring
msgid "Convert a Red v2 playlist file to a playlist."
msgstr ""
-#: redbot/cogs/audio/audio.py:1315
+#: redbot/cogs/audio/audio.py:2342
msgid "Please upload the playlist file. Any other message will cancel this operation."
msgstr ""
-#: redbot/cogs/audio/audio.py:1323
+#: redbot/cogs/audio/audio.py:2350
msgid "No file detected, try again later."
msgstr ""
-#: redbot/cogs/audio/audio.py:1327
+#: redbot/cogs/audio/audio.py:2354
msgid "Upload cancelled."
msgstr ""
-#: redbot/cogs/audio/audio.py:1331
+#: redbot/cogs/audio/audio.py:2358
msgid "Only playlist files can be uploaded."
msgstr ""
-#: redbot/cogs/audio/audio.py:1336
+#: redbot/cogs/audio/audio.py:2363
msgid "Not a valid playlist file."
msgstr ""
-#: redbot/cogs/audio/audio.py:1352
+#: redbot/cogs/audio/audio.py:2379
msgid "A playlist already exists with this name."
msgstr ""
-#: redbot/cogs/audio/audio.py:1357
-msgid "Please wait, adding tracks..."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:1371
-msgid "Loading track {num}/{total}..."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:1377
+#: redbot/cogs/audio/audio.py:2407
msgid "No tracks found."
msgstr ""
-#: redbot/cogs/audio/audio.py:1383
+#: redbot/cogs/audio/audio.py:2413
msgid "Added {num} tracks from the {playlist_name} playlist. {num_bad} track(s) could not be loaded."
msgstr ""
-#: redbot/cogs/audio/audio.py:1388
+#: redbot/cogs/audio/audio.py:2418
msgid "Added {num} tracks from the {playlist_name} playlist."
msgstr ""
-#: redbot/cogs/audio/audio.py:1392
+#: redbot/cogs/audio/audio.py:2422
msgid "Playlist Saved"
msgstr ""
-#: redbot/cogs/audio/audio.py:1403
+#: redbot/cogs/audio/audio.py:2433
msgid "You need the DJ role to use playlists."
msgstr ""
-#: redbot/cogs/audio/audio.py:1432
+#: redbot/cogs/audio/audio.py:2471
msgid "You must be in the voice channel to use the playlist command."
msgstr ""
-#: redbot/cogs/audio/audio.py:1464
+#: redbot/cogs/audio/audio.py:2525
#, docstring
msgid "Skip to the start of the previously played track."
msgstr ""
-#: redbot/cogs/audio/audio.py:1474 redbot/cogs/audio/audio.py:2121
+#: redbot/cogs/audio/audio.py:2535 redbot/cogs/audio/audio.py:3317
msgid "You need the DJ role to skip tracks."
msgstr ""
-#: redbot/cogs/audio/audio.py:1479 redbot/cogs/audio/audio.py:2115
+#: redbot/cogs/audio/audio.py:2540 redbot/cogs/audio/audio.py:3311
msgid "You must be in the voice channel to skip the music."
msgstr ""
-#: redbot/cogs/audio/audio.py:1482
+#: redbot/cogs/audio/audio.py:2543
msgid "Turn shuffle off to use this command."
msgstr ""
-#: redbot/cogs/audio/audio.py:1484
+#: redbot/cogs/audio/audio.py:2545
msgid "No previous track."
msgstr ""
-#: redbot/cogs/audio/audio.py:1501
+#: redbot/cogs/audio/audio.py:2562
msgid "Replaying Track"
msgstr ""
-#: redbot/cogs/audio/audio.py:1509
+#: redbot/cogs/audio/audio.py:2571
#, docstring
-msgid "List the queue.\n\n"
-" Use [p]queue search to search the queue.\n"
-" "
+msgid "List the songs in the queue."
msgstr ""
-#: redbot/cogs/audio/audio.py:1514 redbot/cogs/audio/audio.py:1517
-#: redbot/cogs/audio/audio.py:1544 redbot/cogs/audio/audio.py:2221
-#: redbot/cogs/audio/audio.py:2225 redbot/cogs/audio/audio.py:2232
-msgid "There's nothing in the queue."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:1553
+#: redbot/cogs/audio/audio.py:2622
msgid "**Currently livestreaming:**"
msgstr ""
-#: redbot/cogs/audio/audio.py:1559 redbot/cogs/audio/audio.py:1569
-#: redbot/cogs/audio/audio.py:1575
+#: redbot/cogs/audio/audio.py:2628 redbot/cogs/audio/audio.py:2638
+#: redbot/cogs/audio/audio.py:2644
msgid "Playing: "
msgstr ""
-#: redbot/cogs/audio/audio.py:1562 redbot/cogs/audio/audio.py:1570
-msgid "Requested by: **{user}**\n"
+#: redbot/cogs/audio/audio.py:2631
+msgid "Requested by: **{user}**\\n"
msgstr ""
-#: redbot/cogs/audio/audio.py:1577
+#: redbot/cogs/audio/audio.py:2639
+msgid "Requested by: **{user}**\\n"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2646
msgid "Requested by: **{user}**"
msgstr ""
-#: redbot/cogs/audio/audio.py:1595 redbot/cogs/audio/audio.py:1599
-#: redbot/cogs/audio/audio.py:1604
-msgid "requested by **{user}**\n"
+#: redbot/cogs/audio/audio.py:2664
+msgid "requested by **{user}**\\n"
msgstr ""
-#: redbot/cogs/audio/audio.py:1615
+#: redbot/cogs/audio/audio.py:2668
+msgid "requested by **{user}**\\n"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2673
+msgid "requested by **{user}**\\n"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2684
msgid "Page {page_num}/{total_pages} | {num_tracks} tracks, {num_remaining} remaining"
msgstr ""
-#: redbot/cogs/audio/audio.py:1624
+#: redbot/cogs/audio/audio.py:2693
msgid "Repeat"
msgstr ""
-#: redbot/cogs/audio/audio.py:1626
+#: redbot/cogs/audio/audio.py:2695
msgid "Shuffle"
msgstr ""
-#: redbot/cogs/audio/audio.py:1683
+#: redbot/cogs/audio/audio.py:2740
msgid "Matching Tracks:"
msgstr ""
-#: redbot/cogs/audio/audio.py:1686 redbot/cogs/audio/audio.py:2010
+#: redbot/cogs/audio/audio.py:2743 redbot/cogs/audio/audio.py:3182
msgid "Page {page_num}/{total_pages}"
msgstr ""
-#: redbot/cogs/audio/audio.py:1695
+#: redbot/cogs/audio/audio.py:2752
+#, docstring
+msgid "Clears the queue."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2764
+msgid "You need the DJ role to clear the queue."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2766
+msgid "The queue has been cleared."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2771
+#, docstring
+msgid "Removes songs from the queue if the requester is not in the voice channel."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2783
+msgid "You need the DJ role to clean the queue."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2794
+msgid "Removed 0 tracks."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2798
+msgid "Removed {removed_tracks} tracks queued by members outside of the voice channel."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2806
+#, docstring
+msgid "Search the queue."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2829
#, docstring
msgid "Toggle repeat."
msgstr ""
-#: redbot/cogs/audio/audio.py:1701
+#: redbot/cogs/audio/audio.py:2835
msgid "You need the DJ role to toggle repeat."
msgstr ""
-#: redbot/cogs/audio/audio.py:1712
+#: redbot/cogs/audio/audio.py:2843
msgid "You must be in the voice channel to toggle repeat."
msgstr ""
-#: redbot/cogs/audio/audio.py:1715
+#: redbot/cogs/audio/audio.py:2849
msgid "Repeat tracks: {true_or_false}."
msgstr ""
-#: redbot/cogs/audio/audio.py:1721
+#: redbot/cogs/audio/audio.py:2857
#, docstring
msgid "Remove a specific track number from the queue."
msgstr ""
-#: redbot/cogs/audio/audio.py:1727
+#: redbot/cogs/audio/audio.py:2863
msgid "Nothing queued."
msgstr ""
-#: redbot/cogs/audio/audio.py:1730
+#: redbot/cogs/audio/audio.py:2866
msgid "You need the DJ role to remove tracks."
msgstr ""
-#: redbot/cogs/audio/audio.py:1735
+#: redbot/cogs/audio/audio.py:2871
msgid "You must be in the voice channel to manage the queue."
msgstr ""
-#: redbot/cogs/audio/audio.py:1751
+#: redbot/cogs/audio/audio.py:2887
msgid "Removed {track} from the queue."
msgstr ""
-#: redbot/cogs/audio/audio.py:1757
+#: redbot/cogs/audio/audio.py:2894
#, docstring
-msgid "Pick a track with a search.\n\n"
-" Use `[p]search list ` to queue all tracks found\n"
-" on YouTube. `[p]search sc ` will search SoundCloud\n"
-" instead of YouTube.\n"
-" "
+msgid "Pick a track with a search.\\n\\n Use `[p]search list ` to queue all tracks found\\n on YouTube. `[p]search sc ` will search SoundCloud\\n instead of YouTube.\\n "
msgstr ""
-#: redbot/cogs/audio/audio.py:1814
+#: redbot/cogs/audio/audio.py:2958
msgid "You must be in the voice channel to enqueue tracks."
msgstr ""
-#: redbot/cogs/audio/audio.py:1831
-msgid "Queued {num} track(s)."
+#: redbot/cogs/audio/audio.py:2997
+msgid "Queued {num} track(s).{maxlength_msg}"
msgstr ""
-#: redbot/cogs/audio/audio.py:1837
+#: redbot/cogs/audio/audio.py:3003
msgid "{time} until start of search playback: starts at #{position} in queue"
msgstr ""
-#: redbot/cogs/audio/audio.py:1997
+#: redbot/cogs/audio/audio.py:3169
msgid "Tracks Found:"
msgstr ""
-#: redbot/cogs/audio/audio.py:1998
+#: redbot/cogs/audio/audio.py:3170
msgid "search results"
msgstr ""
-#: redbot/cogs/audio/audio.py:2001
+#: redbot/cogs/audio/audio.py:3173
msgid "Folders Found:"
msgstr ""
-#: redbot/cogs/audio/audio.py:2002
+#: redbot/cogs/audio/audio.py:3174
msgid "local folders"
msgstr ""
-#: redbot/cogs/audio/audio.py:2004
+#: redbot/cogs/audio/audio.py:3176
msgid "Files Found:"
msgstr ""
-#: redbot/cogs/audio/audio.py:2005
+#: redbot/cogs/audio/audio.py:3177
msgid "local tracks"
msgstr ""
-#: redbot/cogs/audio/audio.py:2022
+#: redbot/cogs/audio/audio.py:3195
#, docstring
-msgid "Seek ahead or behind on a track by seconds."
+msgid "Seek ahead or behind on a track by seconds or a to a specific time.\\n\\n Accepts seconds or a value formatted like 00:00:00 (`hh:mm:ss`) or 00:00 (`mm:ss`)."
msgstr ""
-#: redbot/cogs/audio/audio.py:2031
+#: redbot/cogs/audio/audio.py:3206
msgid "You must be in the voice channel to use seek."
msgstr ""
-#: redbot/cogs/audio/audio.py:2036
+#: redbot/cogs/audio/audio.py:3211
msgid "You need the DJ role to use seek."
msgstr ""
-#: redbot/cogs/audio/audio.py:2042 redbot/cogs/audio/audio.py:2278
+#: redbot/cogs/audio/audio.py:3217 redbot/cogs/audio/audio.py:3510
msgid "There are other people listening - vote to skip instead."
msgstr ""
-#: redbot/cogs/audio/audio.py:2046
+#: redbot/cogs/audio/audio.py:3221
msgid "Can't seek on a stream."
msgstr ""
-#: redbot/cogs/audio/audio.py:2052
+#: redbot/cogs/audio/audio.py:3230
+msgid "Invalid input for the time to seek."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:3236
msgid "Moved {num_seconds}s to 00:00:00"
msgstr ""
-#: redbot/cogs/audio/audio.py:2057
+#: redbot/cogs/audio/audio.py:3241
msgid "Moved {num_seconds}s to {time}"
msgstr ""
-#: redbot/cogs/audio/audio.py:2068
+#: redbot/cogs/audio/audio.py:3249
+msgid "Moved to {time}"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:3261
#, docstring
msgid "Toggle shuffle."
msgstr ""
-#: redbot/cogs/audio/audio.py:2072
+#: redbot/cogs/audio/audio.py:3265
msgid "You need the DJ role to toggle shuffle."
msgstr ""
-#: redbot/cogs/audio/audio.py:2083
+#: redbot/cogs/audio/audio.py:3273
msgid "You must be in the voice channel to toggle shuffle."
msgstr ""
-#: redbot/cogs/audio/audio.py:2086
+#: redbot/cogs/audio/audio.py:3279
msgid "Shuffle tracks: {true_or_false}."
msgstr ""
-#: redbot/cogs/audio/audio.py:2092
+#: redbot/cogs/audio/audio.py:3287
#, docstring
-msgid "Make Red sing one of her songs"
+msgid "Make Red sing one of her songs."
msgstr ""
-#: redbot/cogs/audio/audio.py:2107
+#: redbot/cogs/audio/audio.py:3303
#, docstring
-msgid "Skip to the next track."
+msgid "Skip to the next track, or to a given track number."
msgstr ""
-#: redbot/cogs/audio/audio.py:2126
+#: redbot/cogs/audio/audio.py:3322
+msgid "Can't skip to a specific track in vote mode without the DJ role."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:3326
msgid "I removed your vote to skip."
msgstr ""
-#: redbot/cogs/audio/audio.py:2129
+#: redbot/cogs/audio/audio.py:3329
msgid "You voted to skip."
msgstr ""
-#: redbot/cogs/audio/audio.py:2142
+#: redbot/cogs/audio/audio.py:3342
msgid "Vote threshold met."
msgstr ""
-#: redbot/cogs/audio/audio.py:2145
+#: redbot/cogs/audio/audio.py:3345
msgid " Votes: {num_votes}/{num_members} ({cur_percent}% out of {required_percent}% needed)"
msgstr ""
-#: redbot/cogs/audio/audio.py:2228
+#: redbot/cogs/audio/audio.py:3425
msgid "Currently livestreaming {track}"
msgstr ""
-#: redbot/cogs/audio/audio.py:2235
+#: redbot/cogs/audio/audio.py:3432
msgid "{time} left on {track}"
msgstr ""
-#: redbot/cogs/audio/audio.py:2253
+#: redbot/cogs/audio/audio.py:3441
+msgid "Track number must be equal to or greater than 1."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:3454
+msgid "Can't skip to a track while shuffle is enabled."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:3470
msgid "Track Skipped"
msgstr ""
-#: redbot/cogs/audio/audio.py:2261
+#: redbot/cogs/audio/audio.py:3493
#, docstring
msgid "Stop playback and clear the queue."
msgstr ""
-#: redbot/cogs/audio/audio.py:2271
+#: redbot/cogs/audio/audio.py:3503
msgid "You must be in the voice channel to stop the music."
msgstr ""
-#: redbot/cogs/audio/audio.py:2282
+#: redbot/cogs/audio/audio.py:3514
msgid "You need the DJ role to stop the music."
msgstr ""
-#: redbot/cogs/audio/audio.py:2284
+#: redbot/cogs/audio/audio.py:3516
msgid "Stopping..."
msgstr ""
-#: redbot/cogs/audio/audio.py:2294
+#: redbot/cogs/audio/audio.py:3531
+#, docstring
+msgid "Summon the bot to a voice channel."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:3535
+msgid "You need the DJ role to summon the bot."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:3565
#, docstring
msgid "Set the volume, 1% - 150%."
msgstr ""
-#: redbot/cogs/audio/audio.py:2300
+#: redbot/cogs/audio/audio.py:3571
msgid "Current Volume:"
msgstr ""
-#: redbot/cogs/audio/audio.py:2312
+#: redbot/cogs/audio/audio.py:3583
msgid "You must be in the voice channel to change the volume."
msgstr ""
-#: redbot/cogs/audio/audio.py:2318
+#: redbot/cogs/audio/audio.py:3589
msgid "You need the DJ role to change the volume."
msgstr ""
-#: redbot/cogs/audio/audio.py:2331
+#: redbot/cogs/audio/audio.py:3602
msgid "Volume:"
msgstr ""
-#: redbot/cogs/audio/audio.py:2341
+#: redbot/cogs/audio/audio.py:3613
#, docstring
msgid "Lavalink server configuration options."
msgstr ""
-#: redbot/cogs/audio/audio.py:2346
+#: redbot/cogs/audio/audio.py:3618
#, docstring
msgid "Toggle using external lavalink servers."
msgstr ""
-#: redbot/cogs/audio/audio.py:2357 redbot/cogs/audio/audio.py:2366
+#: redbot/cogs/audio/audio.py:3625 redbot/cogs/audio/audio.py:3635
msgid "External lavalink server: {true_or_false}."
msgstr ""
-#: redbot/cogs/audio/audio.py:2361
-msgid "Defaults reset."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:2373
+#: redbot/cogs/audio/audio.py:3642
#, docstring
msgid "Set the lavalink server host."
msgstr ""
-#: redbot/cogs/audio/audio.py:2377 redbot/cogs/audio/audio.py:2382
+#: redbot/cogs/audio/audio.py:3646 redbot/cogs/audio/audio.py:3651
msgid "Host set to {host}."
msgstr ""
-#: redbot/cogs/audio/audio.py:2379 redbot/cogs/audio/audio.py:2395
-#: redbot/cogs/audio/audio.py:2413 redbot/cogs/audio/audio.py:2429
+#: redbot/cogs/audio/audio.py:3648 redbot/cogs/audio/audio.py:3664
+#: redbot/cogs/audio/audio.py:3682 redbot/cogs/audio/audio.py:3698
msgid "External lavalink server set to True."
msgstr ""
-#: redbot/cogs/audio/audio.py:2388
+#: redbot/cogs/audio/audio.py:3657
#, docstring
msgid "Set the lavalink server password."
msgstr ""
-#: redbot/cogs/audio/audio.py:2393 redbot/cogs/audio/audio.py:2399
+#: redbot/cogs/audio/audio.py:3662 redbot/cogs/audio/audio.py:3668
msgid "Server password set to {password}."
msgstr ""
-#: redbot/cogs/audio/audio.py:2406
+#: redbot/cogs/audio/audio.py:3675
#, docstring
msgid "Set the lavalink REST server port."
msgstr ""
-#: redbot/cogs/audio/audio.py:2411 redbot/cogs/audio/audio.py:2416
+#: redbot/cogs/audio/audio.py:3680 redbot/cogs/audio/audio.py:3685
msgid "REST port set to {port}."
msgstr ""
-#: redbot/cogs/audio/audio.py:2422
+#: redbot/cogs/audio/audio.py:3691
#, docstring
msgid "Set the lavalink websocket server port."
msgstr ""
-#: redbot/cogs/audio/audio.py:2427 redbot/cogs/audio/audio.py:2432
+#: redbot/cogs/audio/audio.py:3696 redbot/cogs/audio/audio.py:3701
msgid "Websocket port set to {port}."
msgstr ""
-#: redbot/cogs/audio/audio.py:2461
+#: redbot/cogs/audio/audio.py:3801
msgid "Not enough {currency} ({required_credits} required)."
msgstr ""
diff --git a/redbot/cogs/audio/locales/fi-FI.po b/redbot/cogs/audio/locales/fi-FI.po
index a7ed5f9db..3a8c4f9ce 100644
--- a/redbot/cogs/audio/locales/fi-FI.po
+++ b/redbot/cogs/audio/locales/fi-FI.po
@@ -1,14 +1,14 @@
msgid ""
msgstr ""
"Project-Id-Version: red-discordbot\n"
-"POT-Creation-Date: 2019-02-17 02:24+0000\n"
-"PO-Revision-Date: 2019-02-25 03:07\n"
-"Last-Translator: Kowlin \n"
+"POT-Creation-Date: 2019-07-05 22:33+0200\n"
+"PO-Revision-Date: 2019-07-14 02:15\n"
+"Last-Translator: Robert Jansen (Kowlin)\n"
"Language-Team: Finnish\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"Generated-By: redgettext 2.2\n"
+"Generated-By: redgettext 3.0\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: crowdin.com\n"
"X-Crowdin-Project: red-discordbot\n"
@@ -16,971 +16,1275 @@ msgstr ""
"X-Crowdin-File: /cogs/audio/locales/messages.pot\n"
"Language: fi_FI\n"
-#: redbot/cogs/audio/audio.py:38
+#: redbot/cogs/audio/audio.py:47
#, docstring
msgid "Play audio through voice channels."
msgstr ""
-#: redbot/cogs/audio/audio.py:173 redbot/cogs/audio/audio.py:735
-msgid "Now Playing"
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:177
-msgid "Track length: {length} | Requested by: {user}"
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:201 redbot/cogs/audio/audio.py:227
+#: redbot/cogs/audio/audio.py:260
msgid "music in {} servers"
msgstr ""
-#: redbot/cogs/audio/audio.py:211
+#: redbot/cogs/audio/audio.py:300 redbot/cogs/audio/audio.py:1317
+msgid "Now Playing"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:304
+msgid "Track length: {length} | Requested by: {user}"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:331
msgid "Queue ended."
msgstr ""
-#: redbot/cogs/audio/audio.py:240
+#: redbot/cogs/audio/audio.py:350
msgid "Track Error"
msgstr ""
-#: redbot/cogs/audio/audio.py:245
+#: redbot/cogs/audio/audio.py:355
msgid "Skipping..."
msgstr ""
-#: redbot/cogs/audio/audio.py:252
+#: redbot/cogs/audio/audio.py:363
#, docstring
msgid "Music configuration options."
msgstr ""
-#: redbot/cogs/audio/audio.py:258
+#: redbot/cogs/audio/audio.py:369
#, docstring
-msgid "Toggle DJ mode.\n\n"
-" DJ mode allows users with the DJ role to use audio commands.\n"
-" "
+msgid "Toggle the bot auto-disconnecting when done playing.\\n\\n This setting takes precedence over [p]audioset emptydisconnect.\\n "
msgstr ""
-#: redbot/cogs/audio/audio.py:265
+#: redbot/cogs/audio/audio.py:377
+msgid "Auto-disconnection at queue end: {true_or_false}."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:385
+#, docstring
+msgid "Toggle DJ mode.\\n\\n DJ mode allows users with the DJ role to use audio commands.\\n "
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:392
msgid "Please set a role to use with DJ mode. Enter the role name or ID now."
msgstr ""
-#: redbot/cogs/audio/audio.py:273
+#: redbot/cogs/audio/audio.py:400
msgid "Response timed out, try again later."
msgstr ""
-#: redbot/cogs/audio/audio.py:284
+#: redbot/cogs/audio/audio.py:405
+msgid "DJ role enabled: {true_or_false}."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:411
#, docstring
msgid "Auto-disconnection after x seconds while stopped. 0 to disable."
msgstr ""
-#: redbot/cogs/audio/audio.py:286 redbot/cogs/audio/audio.py:317
-#: redbot/cogs/audio/audio.py:405
+#: redbot/cogs/audio/audio.py:413 redbot/cogs/audio/audio.py:436
+#: redbot/cogs/audio/audio.py:543 redbot/cogs/audio/audio.py:687
msgid "Can't be less than zero."
msgstr ""
-#: redbot/cogs/audio/audio.py:291
+#: redbot/cogs/audio/audio.py:418
msgid "Empty disconnect disabled."
msgstr ""
-#: redbot/cogs/audio/audio.py:296
+#: redbot/cogs/audio/audio.py:423
msgid "Empty disconnect timer set to {num_seconds}."
msgstr ""
-#: redbot/cogs/audio/audio.py:307
-#, docstring
-msgid "Set the role to use for DJ mode."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:310
-msgid "DJ role set to: {role.name}."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:315
+#: redbot/cogs/audio/audio.py:434
#, docstring
msgid "Set a price for queueing tracks for non-mods. 0 to disable."
msgstr ""
-#: redbot/cogs/audio/audio.py:320
+#: redbot/cogs/audio/audio.py:439
msgid "Jukebox mode disabled."
msgstr ""
-#: redbot/cogs/audio/audio.py:325
+#: redbot/cogs/audio/audio.py:444
msgid "Track queueing command price set to {price} {currency}."
msgstr ""
-#: redbot/cogs/audio/audio.py:336
+#: redbot/cogs/audio/audio.py:455
+#, docstring
+msgid "Set the localtracks path if the Lavalink.jar is not run from the Audio data folder.\\n\\n Leave the path blank to reset the path to the default, the Audio data directory.\\n "
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:463
+msgid "The localtracks path location has been reset to the default location."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:466
+msgid "This setting is only for bot owners to set a localtracks folder location if the Lavalink.jar is being ran from outside of the Audio data directory.\\nIn the example below, the full path for 'ParentDirectory' must be passed to this command.\\nThe path must not contain spaces.\\n```\\nParentDirectory\\n |__ localtracks (folder)\\n | |__ Awesome Album Name (folder)\\n | |__01 Cool Song.mp3\\n | |__02 Groovy Song.mp3\\n |\\n |__ Lavalink.jar\\n |__ application.yml\\n```\\nThe folder path given to this command must contain the Lavalink.jar, the application.yml, and the localtracks folder.\\nUse this command with no path given to reset it to the default, the Audio data directory for this bot.\\nDo you want to continue to set the provided path for local tracks?"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:505
+msgid "{local_path} does not seem like a valid path."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:520
+msgid "The path that was entered does not have {filelist} file in that location. The path will still be saved, but please check the path and the file location before attempting to play local tracks or start your Lavalink.jar."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:530
+msgid "Localtracks path set to: {local_path}."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:536
+#, docstring
+msgid "Max length of a track to queue in seconds. 0 to disable.\\n\\n Accepts seconds or a value formatted like 00:00:00 (`hh:mm:ss`) or 00:00 (`mm:ss`).\\n Invalid input will turn the max length setting off."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:545
+msgid "Track max length disabled."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:549
+msgid "Track max length set to {seconds}."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:559
#, docstring
msgid "Toggle track announcement and other bot messages."
msgstr ""
-#: redbot/cogs/audio/audio.py:340
+#: redbot/cogs/audio/audio.py:563
msgid "Verbose mode on: {true_or_false}."
msgstr ""
-#: redbot/cogs/audio/audio.py:345
+#: redbot/cogs/audio/audio.py:569
+#, docstring
+msgid "Toggle the domain restriction on Audio.\\n\\n When toggled off, users will be able to play songs from non-commercial websites and links.\\n When toggled on, users are restricted to YouTube, SoundCloud, Mixer, Vimeo, Twitch, and Bandcamp links."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:576
+msgid "Commercial links only: {true_or_false}."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:582
+#, docstring
+msgid "Set the role to use for DJ mode."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:585
+msgid "DJ role set to: {role.name}."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:589
#, docstring
msgid "Show the current settings."
msgstr ""
-#: redbot/cogs/audio/audio.py:358
+#: redbot/cogs/audio/audio.py:604
msgid "Server Settings"
msgstr ""
-#: redbot/cogs/audio/audio.py:360
-msgid "Disconnect timer: [{num_seconds}]\n"
+#: redbot/cogs/audio/audio.py:606
+msgid "Auto-disconnect: [{dc}]\\n"
msgstr ""
-#: redbot/cogs/audio/audio.py:364
-msgid "DJ Role: [{role.name}]\n"
+#: redbot/cogs/audio/audio.py:609
+msgid "Disconnect timer: [{num_seconds}]\\n"
msgstr ""
-#: redbot/cogs/audio/audio.py:366
-msgid "Jukebox: [{jukebox_name}]\n"
+#: redbot/cogs/audio/audio.py:613
+msgid "DJ Role: [{role.name}]\\n"
msgstr ""
-#: redbot/cogs/audio/audio.py:367
-msgid "Command price: [{jukebox_price}]\n"
+#: redbot/cogs/audio/audio.py:615
+msgid "Jukebox: [{jukebox_name}]\\n"
msgstr ""
-#: redbot/cogs/audio/audio.py:368
-msgid "Repeat: [{repeat}]\n"
-"Shuffle: [{shuffle}]\n"
-"Song notify msgs: [{notify}]\n"
-"Songs as status: [{status}]\n"
+#: redbot/cogs/audio/audio.py:616
+msgid "Command price: [{jukebox_price}]\\n"
msgstr ""
-#: redbot/cogs/audio/audio.py:375
-msgid "Thumbnails: [{0}]\n"
+#: redbot/cogs/audio/audio.py:618
+msgid "Max track length: [{tracklength}]\\n"
msgstr ""
-#: redbot/cogs/audio/audio.py:377
-msgid "Vote skip: [{vote_enabled}]\n"
-"Skip percentage: [{vote_percent}%]\n"
+#: redbot/cogs/audio/audio.py:621
+msgid "Repeat: [{repeat}]\\nShuffle: [{shuffle}]\\nSong notify msgs: [{notify}]\\nSongs as status: [{status}]\\n"
msgstr ""
-#: redbot/cogs/audio/audio.py:380
-msgid "---Lavalink Settings---\n"
-"Cog version: [{version}]\n"
-"Jar build: [{jarbuild}]\n"
-"External server: [{use_external_lavalink}]"
+#: redbot/cogs/audio/audio.py:628
+msgid "Thumbnails: [{0}]\\n"
msgstr ""
-#: redbot/cogs/audio/audio.py:393
+#: redbot/cogs/audio/audio.py:630
+msgid "Vote skip: [{vote_enabled}]\\nSkip percentage: [{vote_percent}%]\\n"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:633
+msgid "---Lavalink Settings--- \\nCog version: [{version}]\\nJar build: [{jarbuild}]\\nExternal server: [{use_external_lavalink}]\\n"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:640
+msgid "Localtracks path: [{localpath}]\\n"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:648
#, docstring
-msgid "Toggle displaying a thumbnail on audio messages."
+msgid "Instructions to set the Spotify API tokens."
msgstr ""
-#: redbot/cogs/audio/audio.py:397
-msgid "Thumbnail display: {true_or_false}."
+#: redbot/cogs/audio/audio.py:649
+msgid "1. Go to Spotify developers and log in with your Spotify account.\\n(https://developer.spotify.com/dashboard/applications)\\n2. Click \\\"Create An App\\\".\\n3. Fill out the form provided with your app name, etc.\\n4. When asked if you're developing commercial integration select \\\"No\\\".\\n5. Accept the terms and conditions.\\n6. Copy your client ID and your client secret into:\\n`{prefix}set api spotify client_id, client_secret,`"
msgstr ""
-#: redbot/cogs/audio/audio.py:403
-#, docstring
-msgid "Percentage needed for non-mods to skip tracks. 0 to disable."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:411
-msgid "Voting disabled. All users can use queue management commands."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:416
-msgid "Vote percentage set to {percent}%."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:425
+#: redbot/cogs/audio/audio.py:665
#, docstring
msgid "Enable/disable tracks' titles as status."
msgstr ""
-#: redbot/cogs/audio/audio.py:429
+#: redbot/cogs/audio/audio.py:669
msgid "Song titles as status: {true_or_false}."
msgstr ""
-#: redbot/cogs/audio/audio.py:435
+#: redbot/cogs/audio/audio.py:675
+#, docstring
+msgid "Toggle displaying a thumbnail on audio messages."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:679
+msgid "Thumbnail display: {true_or_false}."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:685
+#, docstring
+msgid "Percentage needed for non-mods to skip tracks. 0 to disable."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:693
+msgid "Voting disabled. All users can use queue management commands."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:698
+msgid "Vote percentage set to {percent}%."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:707
+#, docstring
+msgid "Instructions to set the YouTube API key."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:726
#, docstring
msgid "Audio stats."
msgstr ""
-#: redbot/cogs/audio/audio.py:469 redbot/cogs/audio/audio.py:489
-#: redbot/cogs/audio/audio.py:698 redbot/cogs/audio/audio.py:788
-#: redbot/cogs/audio/audio.py:804 redbot/cogs/audio/audio.py:829
-#: redbot/cogs/audio/audio.py:836 redbot/cogs/audio/audio.py:1179
-#: redbot/cogs/audio/audio.py:1466 redbot/cogs/audio/audio.py:1724
-#: redbot/cogs/audio/audio.py:2026 redbot/cogs/audio/audio.py:2063
-#: redbot/cogs/audio/audio.py:2109 redbot/cogs/audio/audio.py:2265
-#: redbot/cogs/audio/audio.py:2304 redbot/cogs/audio/audio.py:2334
+#: redbot/cogs/audio/audio.py:754 redbot/cogs/audio/audio.py:782
+#: redbot/cogs/audio/audio.py:819 redbot/cogs/audio/audio.py:847
+#: redbot/cogs/audio/audio.py:914 redbot/cogs/audio/audio.py:932
+#: redbot/cogs/audio/audio.py:956 redbot/cogs/audio/audio.py:1026
+#: redbot/cogs/audio/audio.py:1280 redbot/cogs/audio/audio.py:1371
+#: redbot/cogs/audio/audio.py:1388 redbot/cogs/audio/audio.py:1411
+#: redbot/cogs/audio/audio.py:1419 redbot/cogs/audio/audio.py:2190
+#: redbot/cogs/audio/audio.py:2527 redbot/cogs/audio/audio.py:2860
+#: redbot/cogs/audio/audio.py:3201 redbot/cogs/audio/audio.py:3255
+#: redbot/cogs/audio/audio.py:3305 redbot/cogs/audio/audio.py:3497
+#: redbot/cogs/audio/audio.py:3575 redbot/cogs/audio/audio.py:3605
msgid "Nothing playing."
msgstr ""
-#: redbot/cogs/audio/audio.py:473
+#: redbot/cogs/audio/audio.py:758
msgid "Not connected anywhere."
msgstr ""
-#: redbot/cogs/audio/audio.py:478
-msgid "Connected in {num} servers:"
+#: redbot/cogs/audio/audio.py:764
+msgid "Playing in {num}/{total} servers:"
msgstr ""
-#: redbot/cogs/audio/audio.py:486
+#: redbot/cogs/audio/audio.py:779
#, docstring
msgid "Bump a track number to the top of the queue."
msgstr ""
-#: redbot/cogs/audio/audio.py:495
+#: redbot/cogs/audio/audio.py:788
msgid "You must be in the voice channel to bump a track."
msgstr ""
-#: redbot/cogs/audio/audio.py:499
+#: redbot/cogs/audio/audio.py:792
msgid "You need the DJ role to bump tracks."
msgstr ""
-#: redbot/cogs/audio/audio.py:502 redbot/cogs/audio/audio.py:1739
+#: redbot/cogs/audio/audio.py:795 redbot/cogs/audio/audio.py:2875
msgid "Song number must be greater than 1 and within the queue limit."
msgstr ""
-#: redbot/cogs/audio/audio.py:517
+#: redbot/cogs/audio/audio.py:810
msgid "Moved {track} to the top of the queue."
msgstr ""
-#: redbot/cogs/audio/audio.py:523
+#: redbot/cogs/audio/audio.py:817
#, docstring
msgid "Disconnect from the voice channel."
msgstr ""
-#: redbot/cogs/audio/audio.py:528
+#: redbot/cogs/audio/audio.py:826
msgid "You need the DJ role to disconnect."
msgstr ""
-#: redbot/cogs/audio/audio.py:532
+#: redbot/cogs/audio/audio.py:830
msgid "There are other people listening to music."
msgstr ""
-#: redbot/cogs/audio/audio.py:540
+#: redbot/cogs/audio/audio.py:845
+#, docstring
+msgid "Equalizer management."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:865
+#, docstring
+msgid "Delete a saved eq preset."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:887
+#, docstring
+msgid "List saved eq presets."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:890
+msgid "No saved equalizer presets."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:897
+msgid "{num} preset(s)"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:903
+#, docstring
+msgid "Load a saved eq preset."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:930
+#, docstring
+msgid "Reset the eq to 0 across all bands."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:946
+msgid "Equalizer values have been reset."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:954
+#, docstring
+msgid "Save the current eq settings to a preset."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:958
+msgid "Please enter a name for this equalizer preset."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:972
+msgid "No equalizer preset name entered, try the command again later."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:981 redbot/cogs/audio/audio.py:2213
+msgid "Try the command again with a shorter name."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:985
+msgid "Preset name already exists, do you want to replace it?"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:994
+msgid "Not saving preset."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1019
+#, docstring
+msgid "Set an eq band with a band number or name and value.\\n\\n Band positions are 1-15 and values have a range of -0.25 to 1.0.\\n Band names are 25, 40, 63, 100, 160, 250, 400, 630, 1k, 1.6k, 2.5k, 4k, 6.3k, 10k, and 16k Hz.\\n Setting a band value to -0.25 nullifies it while +0.25 is double.\\n "
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1063
+msgid "Valid band numbers are 1-15 or the band names listed in the help for this command."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1099
#, docstring
msgid "Local playback commands."
msgstr ""
-#: redbot/cogs/audio/audio.py:545
+#: redbot/cogs/audio/audio.py:1104
#, docstring
msgid "Play all songs in a localtracks folder."
msgstr ""
-#: redbot/cogs/audio/audio.py:552
+#: redbot/cogs/audio/audio.py:1115
+msgid "No localtracks folder named {name}."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1121
#, docstring
msgid "Play a local track."
msgstr ""
-#: redbot/cogs/audio/audio.py:557
+#: redbot/cogs/audio/audio.py:1126
msgid "No local track folders found."
msgstr ""
-#: redbot/cogs/audio/audio.py:600
+#: redbot/cogs/audio/audio.py:1169
#, docstring
msgid "Search for songs across all localtracks folders."
msgstr ""
-#: redbot/cogs/audio/audio.py:605
+#: redbot/cogs/audio/audio.py:1174
msgid "No album folders found."
msgstr ""
-#: redbot/cogs/audio/audio.py:612 redbot/cogs/audio/audio.py:1634
+#: redbot/cogs/audio/audio.py:1181 redbot/cogs/audio/audio.py:2816
msgid "No matches."
msgstr ""
-#: redbot/cogs/audio/audio.py:688
+#: redbot/cogs/audio/audio.py:1269
msgid "No localtracks folder."
msgstr ""
-#: redbot/cogs/audio/audio.py:696
+#: redbot/cogs/audio/audio.py:1278
#, docstring
msgid "Now playing."
msgstr ""
-#: redbot/cogs/audio/audio.py:716
+#: redbot/cogs/audio/audio.py:1298
msgid "Requested by: **{track.requester}**"
msgstr ""
-#: redbot/cogs/audio/audio.py:726
+#: redbot/cogs/audio/audio.py:1308
msgid "Nothing."
msgstr ""
-#: redbot/cogs/audio/audio.py:785
+#: redbot/cogs/audio/audio.py:1368
#, docstring
-msgid "Pause and resume."
+msgid "Pause or resume a playing track."
msgstr ""
-#: redbot/cogs/audio/audio.py:794
-msgid "You must be in the voice channel to pause the music."
+#: redbot/cogs/audio/audio.py:1377
+msgid "You must be in the voice channel pause or resume."
msgstr ""
-#: redbot/cogs/audio/audio.py:800
-msgid "You need the DJ role to pause tracks."
+#: redbot/cogs/audio/audio.py:1384
+msgid "You need the DJ role to pause or resume tracks."
msgstr ""
-#: redbot/cogs/audio/audio.py:814
+#: redbot/cogs/audio/audio.py:1401
msgid "Track Paused"
msgstr ""
-#: redbot/cogs/audio/audio.py:821
+#: redbot/cogs/audio/audio.py:1407
msgid "Track Resumed"
msgstr ""
-#: redbot/cogs/audio/audio.py:826
-msgid "Track is paused."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:828
-msgid "Track is playing."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:834
+#: redbot/cogs/audio/audio.py:1417
#, docstring
msgid "Queue percentage."
msgstr ""
-#: redbot/cogs/audio/audio.py:860
+#: redbot/cogs/audio/audio.py:1443
msgid "Nothing in the queue."
msgstr ""
-#: redbot/cogs/audio/audio.py:882
+#: redbot/cogs/audio/audio.py:1465
msgid "Queued and playing tracks:"
msgstr ""
-#: redbot/cogs/audio/audio.py:890
+#: redbot/cogs/audio/audio.py:1474
#, docstring
msgid "Play a URL or search for a track."
msgstr ""
-#: redbot/cogs/audio/audio.py:900 redbot/cogs/audio/audio.py:1411
-#: redbot/cogs/audio/audio.py:1795
+#: redbot/cogs/audio/audio.py:1481
+msgid "That URL is not allowed."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1484 redbot/cogs/audio/audio.py:2437
+#: redbot/cogs/audio/audio.py:2928 redbot/cogs/audio/audio.py:3047
+msgid "Connection to Lavalink has failed."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1486 redbot/cogs/audio/audio.py:2439
+#: redbot/cogs/audio/audio.py:2930 redbot/cogs/audio/audio.py:3049
+msgid "Please check your console or logs for details."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1495 redbot/cogs/audio/audio.py:2449
+#: redbot/cogs/audio/audio.py:2939 redbot/cogs/audio/audio.py:3543
msgid "I don't have permission to connect to your channel."
msgstr ""
-#: redbot/cogs/audio/audio.py:906 redbot/cogs/audio/audio.py:1422
-#: redbot/cogs/audio/audio.py:1801 redbot/cogs/audio/audio.py:1889
+#: redbot/cogs/audio/audio.py:1501 redbot/cogs/audio/audio.py:2461
+#: redbot/cogs/audio/audio.py:2945 redbot/cogs/audio/audio.py:3056
+#: redbot/cogs/audio/audio.py:3555
msgid "Connect to a voice channel first."
msgstr ""
-#: redbot/cogs/audio/audio.py:909 redbot/cogs/audio/audio.py:1418
-#: redbot/cogs/audio/audio.py:1804 redbot/cogs/audio/audio.py:1892
+#: redbot/cogs/audio/audio.py:1504 redbot/cogs/audio/audio.py:2457
+#: redbot/cogs/audio/audio.py:2948 redbot/cogs/audio/audio.py:3059
+#: redbot/cogs/audio/audio.py:3558
msgid "Connection to Lavalink has not yet been established."
msgstr ""
-#: redbot/cogs/audio/audio.py:913
+#: redbot/cogs/audio/audio.py:1508
msgid "You need the DJ role to queue tracks."
msgstr ""
-#: redbot/cogs/audio/audio.py:922
+#: redbot/cogs/audio/audio.py:1519
msgid "You must be in the voice channel to use the play command."
msgstr ""
-#: redbot/cogs/audio/audio.py:928
+#: redbot/cogs/audio/audio.py:1525
msgid "No tracks to play."
msgstr ""
-#: redbot/cogs/audio/audio.py:942 redbot/cogs/audio/audio.py:1450
-#: redbot/cogs/audio/audio.py:1828 redbot/cogs/audio/audio.py:1865
+#: redbot/cogs/audio/audio.py:1565
+msgid "The owner needs to set the Spotify client ID, Spotify client secret, and YouTube API key before Spotify URLs or codes can be used. \\nSee `{prefix}audioset youtubeapi` and `{prefix}audioset spotifyapi` for instructions."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1575 redbot/cogs/audio/audio.py:2493
+msgid "Wait until the playlist has finished loading."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1592 redbot/cogs/audio/audio.py:1657
+#: redbot/cogs/audio/audio.py:2499 redbot/cogs/audio/audio.py:2509
+#: redbot/cogs/audio/audio.py:2973 redbot/cogs/audio/audio.py:3027
msgid "Nothing found."
msgstr ""
-#: redbot/cogs/audio/audio.py:953 redbot/cogs/audio/audio.py:1295
+#: redbot/cogs/audio/audio.py:1600
+msgid "The Spotify API key or client secret has not been set properly. \\nUse `{prefix}audioset spotifyapi` for instructions."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1639 redbot/cogs/audio/audio.py:1776
+msgid "This doesn't seem to be a valid Spotify URL or code."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1688 redbot/cogs/audio/audio.py:2320
msgid "Playlist Enqueued"
msgstr ""
-#: redbot/cogs/audio/audio.py:954 redbot/cogs/audio/audio.py:1296
-msgid "Added {num} tracks to the queue."
+#: redbot/cogs/audio/audio.py:1689 redbot/cogs/audio/audio.py:2321
+msgid "Added {num} tracks to the queue.{maxlength_msg}"
msgstr ""
-#: redbot/cogs/audio/audio.py:958
+#: redbot/cogs/audio/audio.py:1695
msgid "{time} until start of playlist playback: starts at #{position} in queue"
msgstr ""
-#: redbot/cogs/audio/audio.py:980 redbot/cogs/audio/audio.py:1938
+#: redbot/cogs/audio/audio.py:1711 redbot/cogs/audio/audio.py:3125
+msgid "Track exceeds maximum length."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1717
+msgid "Nothing found. Check your Lavalink logs for details."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1732 redbot/cogs/audio/audio.py:3108
msgid "Track Enqueued"
msgstr ""
-#: redbot/cogs/audio/audio.py:984 redbot/cogs/audio/audio.py:1944
+#: redbot/cogs/audio/audio.py:1736 redbot/cogs/audio/audio.py:3114
msgid "{time} until track playback: #{position} in queue"
msgstr ""
-#: redbot/cogs/audio/audio.py:989 redbot/cogs/audio/audio.py:1949
+#: redbot/cogs/audio/audio.py:1741 redbot/cogs/audio/audio.py:3119
msgid "#{position} in queue"
msgstr ""
-#: redbot/cogs/audio/audio.py:997
+#: redbot/cogs/audio/audio.py:1761
+msgid "The Spotify API key or client secret has not been set properly. \\nUse `{prefix}audioset spotifyapi` for instructions."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1793 redbot/cogs/audio/audio.py:2384
+msgid "Please wait, adding tracks..."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1809
+msgid "The connection was reset while loading the playlist."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1826 redbot/cogs/audio/audio.py:2401
+msgid "Loading track {num}/{total}..."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1840
+msgid "Approximate time remaining: {seconds}"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1850
+msgid "Nothing found.\\nThe YouTube API key may be invalid or you may be rate limited on YouTube's search service.\\nCheck the YouTube API key again and follow the instructions at `{prefix}audioset youtubeapi`."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1871
#, docstring
msgid "Playlist configuration options."
msgstr ""
-#: redbot/cogs/audio/audio.py:1002
+#: redbot/cogs/audio/audio.py:1876
#, docstring
-msgid "Add a track URL, playlist link, or quick search to a playlist.\n\n"
-" The track(s) will be appended to the end of the playlist.\n"
-" "
+msgid "Add a track URL, playlist link, or quick search to a playlist.\\n\\n The track(s) will be appended to the end of the playlist.\\n "
msgstr ""
-#: redbot/cogs/audio/audio.py:1014 redbot/cogs/audio/audio.py:1078
-#: redbot/cogs/audio/audio.py:1228
+#: redbot/cogs/audio/audio.py:1888 redbot/cogs/audio/audio.py:2028
+#: redbot/cogs/audio/audio.py:2241
msgid "You are not the author of that playlist."
msgstr ""
-#: redbot/cogs/audio/audio.py:1024
+#: redbot/cogs/audio/audio.py:1898
msgid "{track} is already in {playlist}."
msgstr ""
-#: redbot/cogs/audio/audio.py:1033 redbot/cogs/audio/audio.py:1082
-#: redbot/cogs/audio/audio.py:1092 redbot/cogs/audio/audio.py:1231
+#: redbot/cogs/audio/audio.py:1907 redbot/cogs/audio/audio.py:2032
+#: redbot/cogs/audio/audio.py:2081 redbot/cogs/audio/audio.py:2244
msgid "No playlist with that name."
msgstr ""
-#: redbot/cogs/audio/audio.py:1040
+#: redbot/cogs/audio/audio.py:1914
msgid "{track} appended to {playlist}."
msgstr ""
-#: redbot/cogs/audio/audio.py:1046
+#: redbot/cogs/audio/audio.py:1920
msgid "{num} tracks appended to {playlist}."
msgstr ""
-#: redbot/cogs/audio/audio.py:1053
+#: redbot/cogs/audio/audio.py:1928
+#, docstring
+msgid "Copy a playlist from one server to another."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1932
+msgid "Invalid server ID for source server."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1934
+msgid "Invalid server ID for target server."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1939
+msgid "No playlist with that name in {from_guild_name}."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1950
+msgid "Playlist {name} copied from {from_guild_name} to {to_guild_name}."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1962
+msgid "A playlist with that name already exists in {to_guild_name}.\\nPlease enter a new name for this playlist."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1975
+msgid "Try the playlist copy command again with a shorter name."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1980
+msgid "Playlist name already exists in {to_guild_name}, try the playlist copy command again with a different name."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1986 redbot/cogs/audio/audio.py:2220
+msgid "No playlist name entered, try again later."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1991
+msgid "Playlist {name} copied from {from_guild_name} to {to_guild_name}.\\nNew playlist name on {to_guild_name}: {new_name}"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2003
#, docstring
msgid "Create an empty playlist."
msgstr ""
-#: redbot/cogs/audio/audio.py:1057 redbot/cogs/audio/audio.py:1172
+#: redbot/cogs/audio/audio.py:2007 redbot/cogs/audio/audio.py:2183
msgid "You need the DJ role to save playlists."
msgstr ""
-#: redbot/cogs/audio/audio.py:1061 redbot/cogs/audio/audio.py:1176
-#: redbot/cogs/audio/audio.py:1204
+#: redbot/cogs/audio/audio.py:2011 redbot/cogs/audio/audio.py:2187
+#: redbot/cogs/audio/audio.py:2217
msgid "Playlist name already exists, try again with a different name."
msgstr ""
-#: redbot/cogs/audio/audio.py:1067
+#: redbot/cogs/audio/audio.py:2017
msgid "Empty playlist {name} created."
msgstr ""
-#: redbot/cogs/audio/audio.py:1071
+#: redbot/cogs/audio/audio.py:2021
#, docstring
msgid "Delete a saved playlist."
msgstr ""
-#: redbot/cogs/audio/audio.py:1083
+#: redbot/cogs/audio/audio.py:2033
msgid "{name} playlist deleted."
msgstr ""
-#: redbot/cogs/audio/audio.py:1087
+#: redbot/cogs/audio/audio.py:2039
+#, docstring
+msgid "Download a copy of a playlist.\\n\\n These files can be used with the [p]playlist upload command.\\n Red v2-compatible playlists can be generated by passing True\\n for the v2 variable."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2061
+msgid "That playlist has no tracks."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2063 redbot/cogs/audio/audio.py:2331
+msgid "That playlist doesn't exist."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2076
#, docstring
msgid "Retrieve information from a saved playlist."
msgstr ""
-#: redbot/cogs/audio/audio.py:1100
-msgid "**Custom playlist.**"
+#: redbot/cogs/audio/audio.py:2101
+msgid "Playlist info for {playlist_name}:\\n"
msgstr ""
-#: redbot/cogs/audio/audio.py:1102
-msgid "URL: <{url}>"
+#: redbot/cogs/audio/audio.py:2105
+msgid "Playlist info for {playlist_name}:\\nURL: {url}"
msgstr ""
-#: redbot/cogs/audio/audio.py:1105
-msgid "Playlist info for {playlist_name}:"
+#: redbot/cogs/audio/audio.py:2116
+msgid "Author: {author_name} | {num} track(s)"
msgstr ""
-#: redbot/cogs/audio/audio.py:1106
-msgid "Author: **{author_name}**\n"
-"{url}"
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:1110
-msgid "{num} track(s)"
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:1115
+#: redbot/cogs/audio/audio.py:2126
#, docstring
msgid "List saved playlists."
msgstr ""
-#: redbot/cogs/audio/audio.py:1118
+#: redbot/cogs/audio/audio.py:2129
msgid "No saved playlists."
msgstr ""
-#: redbot/cogs/audio/audio.py:1130
+#: redbot/cogs/audio/audio.py:2141
msgid "Tracks: {num}"
msgstr ""
-#: redbot/cogs/audio/audio.py:1131
-msgid "Author: {name}\n"
+#: redbot/cogs/audio/audio.py:2142
+msgid "Author: {name}\\n"
msgstr ""
-#: redbot/cogs/audio/audio.py:1155
+#: redbot/cogs/audio/audio.py:2166
msgid "Playlists for {server_name}:"
msgstr ""
-#: redbot/cogs/audio/audio.py:1159
+#: redbot/cogs/audio/audio.py:2170
msgid "Page {page_num}/{total_pages} | {num} playlists"
msgstr ""
-#: redbot/cogs/audio/audio.py:1168
+#: redbot/cogs/audio/audio.py:2179
#, docstring
msgid "Save the queue to a playlist."
msgstr ""
-#: redbot/cogs/audio/audio.py:1189
+#: redbot/cogs/audio/audio.py:2193 redbot/cogs/audio/audio.py:2590
+#: redbot/cogs/audio/audio.py:2593 redbot/cogs/audio/audio.py:2613
+#: redbot/cogs/audio/audio.py:2756 redbot/cogs/audio/audio.py:2759
+#: redbot/cogs/audio/audio.py:2775 redbot/cogs/audio/audio.py:2778
+#: redbot/cogs/audio/audio.py:2810 redbot/cogs/audio/audio.py:2812
+#: redbot/cogs/audio/audio.py:3418 redbot/cogs/audio/audio.py:3422
+#: redbot/cogs/audio/audio.py:3429
+msgid "There's nothing in the queue."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2202
msgid "Please enter a name for this playlist."
msgstr ""
-#: redbot/cogs/audio/audio.py:1200
-msgid "Try the command again with a shorter name."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:1207
-msgid "No playlist name entered, try again later."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:1214
+#: redbot/cogs/audio/audio.py:2227
msgid "Playlist {name} saved from current queue: {num} tracks added."
msgstr ""
-#: redbot/cogs/audio/audio.py:1221
+#: redbot/cogs/audio/audio.py:2234
#, docstring
msgid "Remove a track from a playlist by url."
msgstr ""
-#: redbot/cogs/audio/audio.py:1235
+#: redbot/cogs/audio/audio.py:2248
msgid "URL not in playlist."
msgstr ""
-#: redbot/cogs/audio/audio.py:1239
+#: redbot/cogs/audio/audio.py:2252
msgid "No tracks left, removing playlist."
msgstr ""
-#: redbot/cogs/audio/audio.py:1246
+#: redbot/cogs/audio/audio.py:2259
msgid "{num} entries have been removed from the {playlist_name} playlist."
msgstr ""
-#: redbot/cogs/audio/audio.py:1253
+#: redbot/cogs/audio/audio.py:2266
msgid "The track has been removed from the {playlist_name} playlist."
msgstr ""
-#: redbot/cogs/audio/audio.py:1260
+#: redbot/cogs/audio/audio.py:2273
#, docstring
msgid "Save a playlist from a url."
msgstr ""
-#: redbot/cogs/audio/audio.py:1272
+#: redbot/cogs/audio/audio.py:2285
msgid "Playlist {name} saved: {num} tracks added."
msgstr ""
-#: redbot/cogs/audio/audio.py:1279
+#: redbot/cogs/audio/audio.py:2292
#, docstring
msgid "Load a playlist into the queue."
msgstr ""
-#: redbot/cogs/audio/audio.py:1304
-msgid "That playlist doesn't exist."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:1309
+#: redbot/cogs/audio/audio.py:2336
#, docstring
msgid "Convert a Red v2 playlist file to a playlist."
msgstr ""
-#: redbot/cogs/audio/audio.py:1315
+#: redbot/cogs/audio/audio.py:2342
msgid "Please upload the playlist file. Any other message will cancel this operation."
msgstr ""
-#: redbot/cogs/audio/audio.py:1323
+#: redbot/cogs/audio/audio.py:2350
msgid "No file detected, try again later."
msgstr ""
-#: redbot/cogs/audio/audio.py:1327
+#: redbot/cogs/audio/audio.py:2354
msgid "Upload cancelled."
msgstr ""
-#: redbot/cogs/audio/audio.py:1331
+#: redbot/cogs/audio/audio.py:2358
msgid "Only playlist files can be uploaded."
msgstr ""
-#: redbot/cogs/audio/audio.py:1336
+#: redbot/cogs/audio/audio.py:2363
msgid "Not a valid playlist file."
msgstr ""
-#: redbot/cogs/audio/audio.py:1352
+#: redbot/cogs/audio/audio.py:2379
msgid "A playlist already exists with this name."
msgstr ""
-#: redbot/cogs/audio/audio.py:1357
-msgid "Please wait, adding tracks..."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:1371
-msgid "Loading track {num}/{total}..."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:1377
+#: redbot/cogs/audio/audio.py:2407
msgid "No tracks found."
msgstr ""
-#: redbot/cogs/audio/audio.py:1383
+#: redbot/cogs/audio/audio.py:2413
msgid "Added {num} tracks from the {playlist_name} playlist. {num_bad} track(s) could not be loaded."
msgstr ""
-#: redbot/cogs/audio/audio.py:1388
+#: redbot/cogs/audio/audio.py:2418
msgid "Added {num} tracks from the {playlist_name} playlist."
msgstr ""
-#: redbot/cogs/audio/audio.py:1392
+#: redbot/cogs/audio/audio.py:2422
msgid "Playlist Saved"
msgstr ""
-#: redbot/cogs/audio/audio.py:1403
+#: redbot/cogs/audio/audio.py:2433
msgid "You need the DJ role to use playlists."
msgstr ""
-#: redbot/cogs/audio/audio.py:1432
+#: redbot/cogs/audio/audio.py:2471
msgid "You must be in the voice channel to use the playlist command."
msgstr ""
-#: redbot/cogs/audio/audio.py:1464
+#: redbot/cogs/audio/audio.py:2525
#, docstring
msgid "Skip to the start of the previously played track."
msgstr ""
-#: redbot/cogs/audio/audio.py:1474 redbot/cogs/audio/audio.py:2121
+#: redbot/cogs/audio/audio.py:2535 redbot/cogs/audio/audio.py:3317
msgid "You need the DJ role to skip tracks."
msgstr ""
-#: redbot/cogs/audio/audio.py:1479 redbot/cogs/audio/audio.py:2115
+#: redbot/cogs/audio/audio.py:2540 redbot/cogs/audio/audio.py:3311
msgid "You must be in the voice channel to skip the music."
msgstr ""
-#: redbot/cogs/audio/audio.py:1482
+#: redbot/cogs/audio/audio.py:2543
msgid "Turn shuffle off to use this command."
msgstr ""
-#: redbot/cogs/audio/audio.py:1484
+#: redbot/cogs/audio/audio.py:2545
msgid "No previous track."
msgstr ""
-#: redbot/cogs/audio/audio.py:1501
+#: redbot/cogs/audio/audio.py:2562
msgid "Replaying Track"
msgstr ""
-#: redbot/cogs/audio/audio.py:1509
+#: redbot/cogs/audio/audio.py:2571
#, docstring
-msgid "List the queue.\n\n"
-" Use [p]queue search to search the queue.\n"
-" "
+msgid "List the songs in the queue."
msgstr ""
-#: redbot/cogs/audio/audio.py:1514 redbot/cogs/audio/audio.py:1517
-#: redbot/cogs/audio/audio.py:1544 redbot/cogs/audio/audio.py:2221
-#: redbot/cogs/audio/audio.py:2225 redbot/cogs/audio/audio.py:2232
-msgid "There's nothing in the queue."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:1553
+#: redbot/cogs/audio/audio.py:2622
msgid "**Currently livestreaming:**"
msgstr ""
-#: redbot/cogs/audio/audio.py:1559 redbot/cogs/audio/audio.py:1569
-#: redbot/cogs/audio/audio.py:1575
+#: redbot/cogs/audio/audio.py:2628 redbot/cogs/audio/audio.py:2638
+#: redbot/cogs/audio/audio.py:2644
msgid "Playing: "
msgstr ""
-#: redbot/cogs/audio/audio.py:1562 redbot/cogs/audio/audio.py:1570
-msgid "Requested by: **{user}**\n"
+#: redbot/cogs/audio/audio.py:2631
+msgid "Requested by: **{user}**\\n"
msgstr ""
-#: redbot/cogs/audio/audio.py:1577
+#: redbot/cogs/audio/audio.py:2639
+msgid "Requested by: **{user}**\\n"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2646
msgid "Requested by: **{user}**"
msgstr ""
-#: redbot/cogs/audio/audio.py:1595 redbot/cogs/audio/audio.py:1599
-#: redbot/cogs/audio/audio.py:1604
-msgid "requested by **{user}**\n"
+#: redbot/cogs/audio/audio.py:2664
+msgid "requested by **{user}**\\n"
msgstr ""
-#: redbot/cogs/audio/audio.py:1615
+#: redbot/cogs/audio/audio.py:2668
+msgid "requested by **{user}**\\n"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2673
+msgid "requested by **{user}**\\n"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2684
msgid "Page {page_num}/{total_pages} | {num_tracks} tracks, {num_remaining} remaining"
msgstr ""
-#: redbot/cogs/audio/audio.py:1624
+#: redbot/cogs/audio/audio.py:2693
msgid "Repeat"
msgstr ""
-#: redbot/cogs/audio/audio.py:1626
+#: redbot/cogs/audio/audio.py:2695
msgid "Shuffle"
msgstr ""
-#: redbot/cogs/audio/audio.py:1683
+#: redbot/cogs/audio/audio.py:2740
msgid "Matching Tracks:"
msgstr ""
-#: redbot/cogs/audio/audio.py:1686 redbot/cogs/audio/audio.py:2010
+#: redbot/cogs/audio/audio.py:2743 redbot/cogs/audio/audio.py:3182
msgid "Page {page_num}/{total_pages}"
msgstr ""
-#: redbot/cogs/audio/audio.py:1695
+#: redbot/cogs/audio/audio.py:2752
+#, docstring
+msgid "Clears the queue."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2764
+msgid "You need the DJ role to clear the queue."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2766
+msgid "The queue has been cleared."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2771
+#, docstring
+msgid "Removes songs from the queue if the requester is not in the voice channel."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2783
+msgid "You need the DJ role to clean the queue."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2794
+msgid "Removed 0 tracks."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2798
+msgid "Removed {removed_tracks} tracks queued by members outside of the voice channel."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2806
+#, docstring
+msgid "Search the queue."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2829
#, docstring
msgid "Toggle repeat."
msgstr ""
-#: redbot/cogs/audio/audio.py:1701
+#: redbot/cogs/audio/audio.py:2835
msgid "You need the DJ role to toggle repeat."
msgstr ""
-#: redbot/cogs/audio/audio.py:1712
+#: redbot/cogs/audio/audio.py:2843
msgid "You must be in the voice channel to toggle repeat."
msgstr ""
-#: redbot/cogs/audio/audio.py:1715
+#: redbot/cogs/audio/audio.py:2849
msgid "Repeat tracks: {true_or_false}."
msgstr ""
-#: redbot/cogs/audio/audio.py:1721
+#: redbot/cogs/audio/audio.py:2857
#, docstring
msgid "Remove a specific track number from the queue."
msgstr ""
-#: redbot/cogs/audio/audio.py:1727
+#: redbot/cogs/audio/audio.py:2863
msgid "Nothing queued."
msgstr ""
-#: redbot/cogs/audio/audio.py:1730
+#: redbot/cogs/audio/audio.py:2866
msgid "You need the DJ role to remove tracks."
msgstr ""
-#: redbot/cogs/audio/audio.py:1735
+#: redbot/cogs/audio/audio.py:2871
msgid "You must be in the voice channel to manage the queue."
msgstr ""
-#: redbot/cogs/audio/audio.py:1751
+#: redbot/cogs/audio/audio.py:2887
msgid "Removed {track} from the queue."
msgstr ""
-#: redbot/cogs/audio/audio.py:1757
+#: redbot/cogs/audio/audio.py:2894
#, docstring
-msgid "Pick a track with a search.\n\n"
-" Use `[p]search list ` to queue all tracks found\n"
-" on YouTube. `[p]search sc ` will search SoundCloud\n"
-" instead of YouTube.\n"
-" "
+msgid "Pick a track with a search.\\n\\n Use `[p]search list ` to queue all tracks found\\n on YouTube. `[p]search sc ` will search SoundCloud\\n instead of YouTube.\\n "
msgstr ""
-#: redbot/cogs/audio/audio.py:1814
+#: redbot/cogs/audio/audio.py:2958
msgid "You must be in the voice channel to enqueue tracks."
msgstr ""
-#: redbot/cogs/audio/audio.py:1831
-msgid "Queued {num} track(s)."
+#: redbot/cogs/audio/audio.py:2997
+msgid "Queued {num} track(s).{maxlength_msg}"
msgstr ""
-#: redbot/cogs/audio/audio.py:1837
+#: redbot/cogs/audio/audio.py:3003
msgid "{time} until start of search playback: starts at #{position} in queue"
msgstr ""
-#: redbot/cogs/audio/audio.py:1997
+#: redbot/cogs/audio/audio.py:3169
msgid "Tracks Found:"
msgstr ""
-#: redbot/cogs/audio/audio.py:1998
+#: redbot/cogs/audio/audio.py:3170
msgid "search results"
msgstr ""
-#: redbot/cogs/audio/audio.py:2001
+#: redbot/cogs/audio/audio.py:3173
msgid "Folders Found:"
msgstr ""
-#: redbot/cogs/audio/audio.py:2002
+#: redbot/cogs/audio/audio.py:3174
msgid "local folders"
msgstr ""
-#: redbot/cogs/audio/audio.py:2004
+#: redbot/cogs/audio/audio.py:3176
msgid "Files Found:"
msgstr ""
-#: redbot/cogs/audio/audio.py:2005
+#: redbot/cogs/audio/audio.py:3177
msgid "local tracks"
msgstr ""
-#: redbot/cogs/audio/audio.py:2022
+#: redbot/cogs/audio/audio.py:3195
#, docstring
-msgid "Seek ahead or behind on a track by seconds."
+msgid "Seek ahead or behind on a track by seconds or a to a specific time.\\n\\n Accepts seconds or a value formatted like 00:00:00 (`hh:mm:ss`) or 00:00 (`mm:ss`)."
msgstr ""
-#: redbot/cogs/audio/audio.py:2031
+#: redbot/cogs/audio/audio.py:3206
msgid "You must be in the voice channel to use seek."
msgstr ""
-#: redbot/cogs/audio/audio.py:2036
+#: redbot/cogs/audio/audio.py:3211
msgid "You need the DJ role to use seek."
msgstr ""
-#: redbot/cogs/audio/audio.py:2042 redbot/cogs/audio/audio.py:2278
+#: redbot/cogs/audio/audio.py:3217 redbot/cogs/audio/audio.py:3510
msgid "There are other people listening - vote to skip instead."
msgstr ""
-#: redbot/cogs/audio/audio.py:2046
+#: redbot/cogs/audio/audio.py:3221
msgid "Can't seek on a stream."
msgstr ""
-#: redbot/cogs/audio/audio.py:2052
+#: redbot/cogs/audio/audio.py:3230
+msgid "Invalid input for the time to seek."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:3236
msgid "Moved {num_seconds}s to 00:00:00"
msgstr ""
-#: redbot/cogs/audio/audio.py:2057
+#: redbot/cogs/audio/audio.py:3241
msgid "Moved {num_seconds}s to {time}"
msgstr ""
-#: redbot/cogs/audio/audio.py:2068
+#: redbot/cogs/audio/audio.py:3249
+msgid "Moved to {time}"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:3261
#, docstring
msgid "Toggle shuffle."
msgstr ""
-#: redbot/cogs/audio/audio.py:2072
+#: redbot/cogs/audio/audio.py:3265
msgid "You need the DJ role to toggle shuffle."
msgstr ""
-#: redbot/cogs/audio/audio.py:2083
+#: redbot/cogs/audio/audio.py:3273
msgid "You must be in the voice channel to toggle shuffle."
msgstr ""
-#: redbot/cogs/audio/audio.py:2086
+#: redbot/cogs/audio/audio.py:3279
msgid "Shuffle tracks: {true_or_false}."
msgstr ""
-#: redbot/cogs/audio/audio.py:2092
+#: redbot/cogs/audio/audio.py:3287
#, docstring
-msgid "Make Red sing one of her songs"
+msgid "Make Red sing one of her songs."
msgstr ""
-#: redbot/cogs/audio/audio.py:2107
+#: redbot/cogs/audio/audio.py:3303
#, docstring
-msgid "Skip to the next track."
+msgid "Skip to the next track, or to a given track number."
msgstr ""
-#: redbot/cogs/audio/audio.py:2126
+#: redbot/cogs/audio/audio.py:3322
+msgid "Can't skip to a specific track in vote mode without the DJ role."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:3326
msgid "I removed your vote to skip."
msgstr ""
-#: redbot/cogs/audio/audio.py:2129
+#: redbot/cogs/audio/audio.py:3329
msgid "You voted to skip."
msgstr ""
-#: redbot/cogs/audio/audio.py:2142
+#: redbot/cogs/audio/audio.py:3342
msgid "Vote threshold met."
msgstr ""
-#: redbot/cogs/audio/audio.py:2145
+#: redbot/cogs/audio/audio.py:3345
msgid " Votes: {num_votes}/{num_members} ({cur_percent}% out of {required_percent}% needed)"
msgstr ""
-#: redbot/cogs/audio/audio.py:2228
+#: redbot/cogs/audio/audio.py:3425
msgid "Currently livestreaming {track}"
msgstr ""
-#: redbot/cogs/audio/audio.py:2235
+#: redbot/cogs/audio/audio.py:3432
msgid "{time} left on {track}"
msgstr ""
-#: redbot/cogs/audio/audio.py:2253
+#: redbot/cogs/audio/audio.py:3441
+msgid "Track number must be equal to or greater than 1."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:3454
+msgid "Can't skip to a track while shuffle is enabled."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:3470
msgid "Track Skipped"
msgstr ""
-#: redbot/cogs/audio/audio.py:2261
+#: redbot/cogs/audio/audio.py:3493
#, docstring
msgid "Stop playback and clear the queue."
msgstr ""
-#: redbot/cogs/audio/audio.py:2271
+#: redbot/cogs/audio/audio.py:3503
msgid "You must be in the voice channel to stop the music."
msgstr ""
-#: redbot/cogs/audio/audio.py:2282
+#: redbot/cogs/audio/audio.py:3514
msgid "You need the DJ role to stop the music."
msgstr ""
-#: redbot/cogs/audio/audio.py:2284
+#: redbot/cogs/audio/audio.py:3516
msgid "Stopping..."
msgstr ""
-#: redbot/cogs/audio/audio.py:2294
+#: redbot/cogs/audio/audio.py:3531
+#, docstring
+msgid "Summon the bot to a voice channel."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:3535
+msgid "You need the DJ role to summon the bot."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:3565
#, docstring
msgid "Set the volume, 1% - 150%."
msgstr ""
-#: redbot/cogs/audio/audio.py:2300
+#: redbot/cogs/audio/audio.py:3571
msgid "Current Volume:"
msgstr ""
-#: redbot/cogs/audio/audio.py:2312
+#: redbot/cogs/audio/audio.py:3583
msgid "You must be in the voice channel to change the volume."
msgstr ""
-#: redbot/cogs/audio/audio.py:2318
+#: redbot/cogs/audio/audio.py:3589
msgid "You need the DJ role to change the volume."
msgstr ""
-#: redbot/cogs/audio/audio.py:2331
+#: redbot/cogs/audio/audio.py:3602
msgid "Volume:"
msgstr ""
-#: redbot/cogs/audio/audio.py:2341
+#: redbot/cogs/audio/audio.py:3613
#, docstring
msgid "Lavalink server configuration options."
msgstr ""
-#: redbot/cogs/audio/audio.py:2346
+#: redbot/cogs/audio/audio.py:3618
#, docstring
msgid "Toggle using external lavalink servers."
msgstr ""
-#: redbot/cogs/audio/audio.py:2357 redbot/cogs/audio/audio.py:2366
+#: redbot/cogs/audio/audio.py:3625 redbot/cogs/audio/audio.py:3635
msgid "External lavalink server: {true_or_false}."
msgstr ""
-#: redbot/cogs/audio/audio.py:2361
-msgid "Defaults reset."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:2373
+#: redbot/cogs/audio/audio.py:3642
#, docstring
msgid "Set the lavalink server host."
msgstr ""
-#: redbot/cogs/audio/audio.py:2377 redbot/cogs/audio/audio.py:2382
+#: redbot/cogs/audio/audio.py:3646 redbot/cogs/audio/audio.py:3651
msgid "Host set to {host}."
msgstr ""
-#: redbot/cogs/audio/audio.py:2379 redbot/cogs/audio/audio.py:2395
-#: redbot/cogs/audio/audio.py:2413 redbot/cogs/audio/audio.py:2429
+#: redbot/cogs/audio/audio.py:3648 redbot/cogs/audio/audio.py:3664
+#: redbot/cogs/audio/audio.py:3682 redbot/cogs/audio/audio.py:3698
msgid "External lavalink server set to True."
msgstr ""
-#: redbot/cogs/audio/audio.py:2388
+#: redbot/cogs/audio/audio.py:3657
#, docstring
msgid "Set the lavalink server password."
msgstr ""
-#: redbot/cogs/audio/audio.py:2393 redbot/cogs/audio/audio.py:2399
+#: redbot/cogs/audio/audio.py:3662 redbot/cogs/audio/audio.py:3668
msgid "Server password set to {password}."
msgstr ""
-#: redbot/cogs/audio/audio.py:2406
+#: redbot/cogs/audio/audio.py:3675
#, docstring
msgid "Set the lavalink REST server port."
msgstr ""
-#: redbot/cogs/audio/audio.py:2411 redbot/cogs/audio/audio.py:2416
+#: redbot/cogs/audio/audio.py:3680 redbot/cogs/audio/audio.py:3685
msgid "REST port set to {port}."
msgstr ""
-#: redbot/cogs/audio/audio.py:2422
+#: redbot/cogs/audio/audio.py:3691
#, docstring
msgid "Set the lavalink websocket server port."
msgstr ""
-#: redbot/cogs/audio/audio.py:2427 redbot/cogs/audio/audio.py:2432
+#: redbot/cogs/audio/audio.py:3696 redbot/cogs/audio/audio.py:3701
msgid "Websocket port set to {port}."
msgstr ""
-#: redbot/cogs/audio/audio.py:2461
+#: redbot/cogs/audio/audio.py:3801
msgid "Not enough {currency} ({required_credits} required)."
msgstr ""
diff --git a/redbot/cogs/audio/locales/fr-FR.po b/redbot/cogs/audio/locales/fr-FR.po
index e127d0424..bf7ca681b 100644
--- a/redbot/cogs/audio/locales/fr-FR.po
+++ b/redbot/cogs/audio/locales/fr-FR.po
@@ -1,14 +1,14 @@
msgid ""
msgstr ""
"Project-Id-Version: red-discordbot\n"
-"POT-Creation-Date: 2019-02-17 02:24+0000\n"
-"PO-Revision-Date: 2019-02-25 03:06\n"
-"Last-Translator: Kowlin \n"
+"POT-Creation-Date: 2019-07-05 22:33+0200\n"
+"PO-Revision-Date: 2019-07-06 16:12\n"
+"Last-Translator: Robert Jansen (Kowlin)\n"
"Language-Team: French\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"Generated-By: redgettext 2.2\n"
+"Generated-By: redgettext 3.0\n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
"X-Generator: crowdin.com\n"
"X-Crowdin-Project: red-discordbot\n"
@@ -16,989 +16,1275 @@ msgstr ""
"X-Crowdin-File: /cogs/audio/locales/messages.pot\n"
"Language: fr_FR\n"
-#: redbot/cogs/audio/audio.py:38
+#: redbot/cogs/audio/audio.py:47
#, docstring
msgid "Play audio through voice channels."
-msgstr "Joue de l'audio au travers des salons vocaux."
+msgstr "Lire l'audio au travers des salons vocaux."
-#: redbot/cogs/audio/audio.py:173 redbot/cogs/audio/audio.py:735
+#: redbot/cogs/audio/audio.py:260
+msgid "music in {} servers"
+msgstr "musique dans {} serveurs"
+
+#: redbot/cogs/audio/audio.py:300 redbot/cogs/audio/audio.py:1317
msgid "Now Playing"
-msgstr "En cours"
+msgstr "Lecture en cours"
-#: redbot/cogs/audio/audio.py:177
+#: redbot/cogs/audio/audio.py:304
msgid "Track length: {length} | Requested by: {user}"
msgstr "Durée de la piste : {length} | Demandé par {user}"
-#: redbot/cogs/audio/audio.py:201 redbot/cogs/audio/audio.py:227
-msgid "music in {} servers"
-msgstr "de la musique sur {} serveurs"
-
-#: redbot/cogs/audio/audio.py:211
+#: redbot/cogs/audio/audio.py:331
msgid "Queue ended."
msgstr "Liste terminée."
-#: redbot/cogs/audio/audio.py:240
+#: redbot/cogs/audio/audio.py:350
msgid "Track Error"
msgstr "Erreur de la piste"
-#: redbot/cogs/audio/audio.py:245
+#: redbot/cogs/audio/audio.py:355
msgid "Skipping..."
msgstr "Changement de musique ..."
-#: redbot/cogs/audio/audio.py:252
+#: redbot/cogs/audio/audio.py:363
#, docstring
msgid "Music configuration options."
msgstr "Options de configuration pour la musique."
-#: redbot/cogs/audio/audio.py:258
+#: redbot/cogs/audio/audio.py:369
#, docstring
-msgid "Toggle DJ mode.\n\n"
-" DJ mode allows users with the DJ role to use audio commands.\n"
-" "
-msgstr "Active le mode DJ.\n\n"
-" Le mode DJ autorise les utilisateurs avec le rôle DJ d'utiliser les commandes audio.\n"
-" "
+msgid "Toggle the bot auto-disconnecting when done playing.\\n\\n This setting takes precedence over [p]audioset emptydisconnect.\\n "
+msgstr "Activer/désactiver la fonction de déconnexion automatique du bot dès lors que la lecture est terminée.\\n\\n Ce réglage prends le pas sur [p]audioset emptydisconnect.\\n "
-#: redbot/cogs/audio/audio.py:265
+#: redbot/cogs/audio/audio.py:377
+msgid "Auto-disconnection at queue end: {true_or_false}."
+msgstr "Déconnexion automatique à la fin de la file d'attente : {true_or_false}."
+
+#: redbot/cogs/audio/audio.py:385
+#, docstring
+msgid "Toggle DJ mode.\\n\\n DJ mode allows users with the DJ role to use audio commands.\\n "
+msgstr "Active le mode DJ.\\n\\n Le mode DJ autorise les utilisateurs avec le rôle DJ d'utiliser les commandes audio.\\n "
+
+#: redbot/cogs/audio/audio.py:392
msgid "Please set a role to use with DJ mode. Enter the role name or ID now."
msgstr "Définissez s'il vous plaît un rôle à utiliser avec le mode DJ. Entrez maintenant le nom du rôle ou son ID."
-#: redbot/cogs/audio/audio.py:273
+#: redbot/cogs/audio/audio.py:400
msgid "Response timed out, try again later."
-msgstr "Expiration de la réponse, réessayez plus tard."
+msgstr "Réponse expirée, réessayez plus tard."
-#: redbot/cogs/audio/audio.py:284
+#: redbot/cogs/audio/audio.py:405
+msgid "DJ role enabled: {true_or_false}."
+msgstr "Rôle DJ activé : {true_or_false}."
+
+#: redbot/cogs/audio/audio.py:411
#, docstring
msgid "Auto-disconnection after x seconds while stopped. 0 to disable."
msgstr "Déconnexion automatique après x seconds à l'arrêt. 0 pour désactiver."
-#: redbot/cogs/audio/audio.py:286 redbot/cogs/audio/audio.py:317
-#: redbot/cogs/audio/audio.py:405
+#: redbot/cogs/audio/audio.py:413 redbot/cogs/audio/audio.py:436
+#: redbot/cogs/audio/audio.py:543 redbot/cogs/audio/audio.py:687
msgid "Can't be less than zero."
-msgstr "Ne peut être inférieur à zero."
+msgstr "Ne peut être inférieur à zéro."
-#: redbot/cogs/audio/audio.py:291
+#: redbot/cogs/audio/audio.py:418
msgid "Empty disconnect disabled."
msgstr "Déconnexion si aucune lecture désactivé."
-#: redbot/cogs/audio/audio.py:296
+#: redbot/cogs/audio/audio.py:423
msgid "Empty disconnect timer set to {num_seconds}."
-msgstr "Délai de déconnexion automatique lorsque tout est vide réglé à {num_seconds}."
+msgstr "Délai de déconnexion automatique si aucune lecture réglé à {num_seconds}."
-#: redbot/cogs/audio/audio.py:307
-#, docstring
-msgid "Set the role to use for DJ mode."
-msgstr "Défini le rôle à utiliser pour le mode DJ."
-
-#: redbot/cogs/audio/audio.py:310
-msgid "DJ role set to: {role.name}."
-msgstr "Le rôle DJ à été défini sur : {role.name}."
-
-#: redbot/cogs/audio/audio.py:315
+#: redbot/cogs/audio/audio.py:434
#, docstring
msgid "Set a price for queueing tracks for non-mods. 0 to disable."
-msgstr "Définir un prix pour que les non modérateurs puissent lister des pistes. 0 pour désactiver."
+msgstr "Définir un prix pour que les non-modérateurs puissent lister des pistes. 0 pour désactiver."
-#: redbot/cogs/audio/audio.py:320
+#: redbot/cogs/audio/audio.py:439
msgid "Jukebox mode disabled."
-msgstr "Le mode jukebox à été désactiver."
+msgstr "Le mode jukebox à été désactivé."
-#: redbot/cogs/audio/audio.py:325
+#: redbot/cogs/audio/audio.py:444
msgid "Track queueing command price set to {price} {currency}."
msgstr "Le prix de la commande de liste est défini à {price}{currency}."
-#: redbot/cogs/audio/audio.py:336
+#: redbot/cogs/audio/audio.py:455
+#, docstring
+msgid "Set the localtracks path if the Lavalink.jar is not run from the Audio data folder.\\n\\n Leave the path blank to reset the path to the default, the Audio data directory.\\n "
+msgstr "Définir le chemin des musiques locales si le fichier Lavalink.jar n'est pas exécuté à partir du dossier de données audio.\\n\\n Laisser le chemin vide pour réinitialiser le chemin à l'origine qui est le répertoire des données audio.\\n "
+
+#: redbot/cogs/audio/audio.py:463
+msgid "The localtracks path location has been reset to the default location."
+msgstr "L'emplacement du chemin des musiques locales a été réinitialisé à l'emplacement par défaut."
+
+#: redbot/cogs/audio/audio.py:466
+msgid "This setting is only for bot owners to set a localtracks folder location if the Lavalink.jar is being ran from outside of the Audio data directory.\\nIn the example below, the full path for 'ParentDirectory' must be passed to this command.\\nThe path must not contain spaces.\\n```\\nParentDirectory\\n |__ localtracks (folder)\\n | |__ Awesome Album Name (folder)\\n | |__01 Cool Song.mp3\\n | |__02 Groovy Song.mp3\\n |\\n |__ Lavalink.jar\\n |__ application.yml\\n```\\nThe folder path given to this command must contain the Lavalink.jar, the application.yml, and the localtracks folder.\\nUse this command with no path given to reset it to the default, the Audio data directory for this bot.\\nDo you want to continue to set the provided path for local tracks?"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:505
+msgid "{local_path} does not seem like a valid path."
+msgstr "{local_path} ne semble pas être un chemin valide."
+
+#: redbot/cogs/audio/audio.py:520
+msgid "The path that was entered does not have {filelist} file in that location. The path will still be saved, but please check the path and the file location before attempting to play local tracks or start your Lavalink.jar."
+msgstr "Le chemin qui a été saisi n'a pas de fichier {filelist} dans cet emplacement. Le chemin sera quand même sauvegardé, mais veuillez vérifier le chemin et l'emplacement du fichier avant de tenter de jouer des pistes locales ou de démarrer votre fichier Lavalink.jar."
+
+#: redbot/cogs/audio/audio.py:530
+msgid "Localtracks path set to: {local_path}."
+msgstr "Chemin de localisation défini à : {local_path}."
+
+#: redbot/cogs/audio/audio.py:536
+#, docstring
+msgid "Max length of a track to queue in seconds. 0 to disable.\\n\\n Accepts seconds or a value formatted like 00:00:00 (`hh:mm:ss`) or 00:00 (`mm:ss`).\\n Invalid input will turn the max length setting off."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:545
+msgid "Track max length disabled."
+msgstr "Longueur max de piste désactivée."
+
+#: redbot/cogs/audio/audio.py:549
+msgid "Track max length set to {seconds}."
+msgstr "Longueur max de piste définie sur {seconds}."
+
+#: redbot/cogs/audio/audio.py:559
#, docstring
msgid "Toggle track announcement and other bot messages."
msgstr "Activer/désactiver l’annonce du changement de piste et d’autres messages de bot."
-#: redbot/cogs/audio/audio.py:340
+#: redbot/cogs/audio/audio.py:563
msgid "Verbose mode on: {true_or_false}."
-msgstr "Mode détaillé sur: {true_or_false}."
+msgstr "Mode détaillé sur : {true_or_false}."
-#: redbot/cogs/audio/audio.py:345
+#: redbot/cogs/audio/audio.py:569
+#, docstring
+msgid "Toggle the domain restriction on Audio.\\n\\n When toggled off, users will be able to play songs from non-commercial websites and links.\\n When toggled on, users are restricted to YouTube, SoundCloud, Mixer, Vimeo, Twitch, and Bandcamp links."
+msgstr "Active la restriction de domaine dans l'Audio.\\n\\n Lorsque activé, les utilisateurs pourront jouer des musiques à partir de sites Web et de liens non commerciaux.\\n Lors qu’actif, les utilisateurs sont limités à YouTube, SoundCloud, Mixer, Vimeo, Twitch et Bandcamp."
+
+#: redbot/cogs/audio/audio.py:576
+msgid "Commercial links only: {true_or_false}."
+msgstr "Liens commerciaux seulement : {true_or_false}."
+
+#: redbot/cogs/audio/audio.py:582
+#, docstring
+msgid "Set the role to use for DJ mode."
+msgstr "Défini le rôle à utiliser pour le mode DJ."
+
+#: redbot/cogs/audio/audio.py:585
+msgid "DJ role set to: {role.name}."
+msgstr "Le rôle DJ à été défini sur : {role.name}."
+
+#: redbot/cogs/audio/audio.py:589
#, docstring
msgid "Show the current settings."
msgstr "Afficher les paramètres actuels."
-#: redbot/cogs/audio/audio.py:358
+#: redbot/cogs/audio/audio.py:604
msgid "Server Settings"
msgstr "Paramètres du serveur"
-#: redbot/cogs/audio/audio.py:360
-msgid "Disconnect timer: [{num_seconds}]\n"
-msgstr "Temps de déconnexion : [{num_seconds}]\n"
+#: redbot/cogs/audio/audio.py:606
+msgid "Auto-disconnect: [{dc}]\\n"
+msgstr "Déconnexion automatique : [{dc}]\\n"
-#: redbot/cogs/audio/audio.py:364
-msgid "DJ Role: [{role.name}]\n"
-msgstr "Rôle DJ : [{role.name}]\n"
+#: redbot/cogs/audio/audio.py:609
+msgid "Disconnect timer: [{num_seconds}]\\n"
+msgstr "Temps de déconnexion : [{num_seconds}]\\n"
-#: redbot/cogs/audio/audio.py:366
-msgid "Jukebox: [{jukebox_name}]\n"
-msgstr "Jukebox : [{jukebox_name}]\n"
+#: redbot/cogs/audio/audio.py:613
+msgid "DJ Role: [{role.name}]\\n"
+msgstr "Rôle DJ : [{role.name}]\\n"
-#: redbot/cogs/audio/audio.py:367
-msgid "Command price: [{jukebox_price}]\n"
-msgstr "Prix de la commande : [{jukebox_price}]\n"
+#: redbot/cogs/audio/audio.py:615
+msgid "Jukebox: [{jukebox_name}]\\n"
+msgstr "Jukebox : [{jukebox_name}]\\n"
-#: redbot/cogs/audio/audio.py:368
-msgid "Repeat: [{repeat}]\n"
-"Shuffle: [{shuffle}]\n"
-"Song notify msgs: [{notify}]\n"
-"Songs as status: [{status}]\n"
-msgstr "Répétition : [{repeat}]\n"
-"Aléatoire : [{shuffle}]\n"
-"Notif musiques : [{notify}]\n"
-"Musiques en statut : [{status}]\n"
+#: redbot/cogs/audio/audio.py:616
+msgid "Command price: [{jukebox_price}]\\n"
+msgstr "Prix de la commande : [{jukebox_price}]\\n"
-#: redbot/cogs/audio/audio.py:375
-msgid "Thumbnails: [{0}]\n"
-msgstr "Vignettes : [{0}]\n"
+#: redbot/cogs/audio/audio.py:618
+msgid "Max track length: [{tracklength}]\\n"
+msgstr "Longueur maximale de la piste : [{tracklength}]\\n"
-#: redbot/cogs/audio/audio.py:377
-msgid "Vote skip: [{vote_enabled}]\n"
-"Skip percentage: [{vote_percent}%]\n"
-msgstr "Votes pour changement : [{vote_enabled}]\n"
-"Pourcentage de changement : [{vote_percent}%]\n"
+#: redbot/cogs/audio/audio.py:621
+msgid "Repeat: [{repeat}]\\nShuffle: [{shuffle}]\\nSong notify msgs: [{notify}]\\nSongs as status: [{status}]\\n"
+msgstr "Répétition : [{repeat}]\\nAléatoire : [{shuffle}]\\nNotif musiques : [{notify}]\\nMusiques en statut : [{status}]\\n"
-#: redbot/cogs/audio/audio.py:380
-msgid "---Lavalink Settings---\n"
-"Cog version: [{version}]\n"
-"Jar build: [{jarbuild}]\n"
-"External server: [{use_external_lavalink}]"
-msgstr "---Paramètres de Lavalink---\n"
-"Version du Cog : [{version}]\n"
-"Version Jar : [{jarbuild}]\n"
-"Serveur externe : [{use_external_lavalink}]"
+#: redbot/cogs/audio/audio.py:628
+msgid "Thumbnails: [{0}]\\n"
+msgstr "Vignettes : [{0}]\\n"
-#: redbot/cogs/audio/audio.py:393
+#: redbot/cogs/audio/audio.py:630
+msgid "Vote skip: [{vote_enabled}]\\nSkip percentage: [{vote_percent}%]\\n"
+msgstr "Votes pour changement : [{vote_enabled}]\\nPourcentage de changement : [{vote_percent}%]\\n"
+
+#: redbot/cogs/audio/audio.py:633
+msgid "---Lavalink Settings--- \\nCog version: [{version}]\\nJar build: [{jarbuild}]\\nExternal server: [{use_external_lavalink}]\\n"
+msgstr "---Paramètres de Lavalink--- \\nVersion du Cog : [{version}]\\nVersion du fichier Jar : [{jarbuild}]\\nServeur externe : [{use_external_lavalink}]\\n"
+
+#: redbot/cogs/audio/audio.py:640
+msgid "Localtracks path: [{localpath}]\\n"
+msgstr "Chemin de localisation des musiques locales : [{localpath}]\\n"
+
+#: redbot/cogs/audio/audio.py:648
#, docstring
-msgid "Toggle displaying a thumbnail on audio messages."
-msgstr "Activer/désactiver l’affichage d’une vignette sur les messages de l'audio."
+msgid "Instructions to set the Spotify API tokens."
+msgstr "Instructions pour définir les tokens de l'API Spotify."
-#: redbot/cogs/audio/audio.py:397
-msgid "Thumbnail display: {true_or_false}."
-msgstr "Affichage des vignettes : {true_or_false}."
+#: redbot/cogs/audio/audio.py:649
+msgid "1. Go to Spotify developers and log in with your Spotify account.\\n(https://developer.spotify.com/dashboard/applications)\\n2. Click \\\"Create An App\\\".\\n3. Fill out the form provided with your app name, etc.\\n4. When asked if you're developing commercial integration select \\\"No\\\".\\n5. Accept the terms and conditions.\\n6. Copy your client ID and your client secret into:\\n`{prefix}set api spotify client_id, client_secret,`"
+msgstr ""
-#: redbot/cogs/audio/audio.py:403
-#, docstring
-msgid "Percentage needed for non-mods to skip tracks. 0 to disable."
-msgstr "Pourcentage nécessaire pour que les non modérateurs puissent changer de piste. 0 pour désactiver."
-
-#: redbot/cogs/audio/audio.py:411
-msgid "Voting disabled. All users can use queue management commands."
-msgstr "Votes désactivés. Tout les utilisateurs peuvent maintenant utiliser les commandes de gestion de la file."
-
-#: redbot/cogs/audio/audio.py:416
-msgid "Vote percentage set to {percent}%."
-msgstr "Pourcentage de vote défini à {percent} %."
-
-#: redbot/cogs/audio/audio.py:425
+#: redbot/cogs/audio/audio.py:665
#, docstring
msgid "Enable/disable tracks' titles as status."
msgstr "Activer/désactiver titres des pistes comme statut."
-#: redbot/cogs/audio/audio.py:429
+#: redbot/cogs/audio/audio.py:669
msgid "Song titles as status: {true_or_false}."
msgstr "Titres de musiques comme statut : {true_or_false}."
-#: redbot/cogs/audio/audio.py:435
+#: redbot/cogs/audio/audio.py:675
+#, docstring
+msgid "Toggle displaying a thumbnail on audio messages."
+msgstr "Activer/désactiver l’affichage d’une vignette sur les messages de l'audio."
+
+#: redbot/cogs/audio/audio.py:679
+msgid "Thumbnail display: {true_or_false}."
+msgstr "Affichage des vignettes : {true_or_false}."
+
+#: redbot/cogs/audio/audio.py:685
+#, docstring
+msgid "Percentage needed for non-mods to skip tracks. 0 to disable."
+msgstr "Pourcentage nécessaire pour que les non-modérateurs puissent changer de piste. 0 pour désactiver."
+
+#: redbot/cogs/audio/audio.py:693
+msgid "Voting disabled. All users can use queue management commands."
+msgstr "Votes désactivés. Tout les utilisateurs peuvent maintenant utiliser les commandes de gestion de la file."
+
+#: redbot/cogs/audio/audio.py:698
+msgid "Vote percentage set to {percent}%."
+msgstr "Pourcentage de vote défini à {percent} %."
+
+#: redbot/cogs/audio/audio.py:707
+#, docstring
+msgid "Instructions to set the YouTube API key."
+msgstr "Instructions pour définir la clé de l'API YouTube."
+
+#: redbot/cogs/audio/audio.py:726
#, docstring
msgid "Audio stats."
msgstr "Stats de l’audio."
-#: redbot/cogs/audio/audio.py:469 redbot/cogs/audio/audio.py:489
-#: redbot/cogs/audio/audio.py:698 redbot/cogs/audio/audio.py:788
-#: redbot/cogs/audio/audio.py:804 redbot/cogs/audio/audio.py:829
-#: redbot/cogs/audio/audio.py:836 redbot/cogs/audio/audio.py:1179
-#: redbot/cogs/audio/audio.py:1466 redbot/cogs/audio/audio.py:1724
-#: redbot/cogs/audio/audio.py:2026 redbot/cogs/audio/audio.py:2063
-#: redbot/cogs/audio/audio.py:2109 redbot/cogs/audio/audio.py:2265
-#: redbot/cogs/audio/audio.py:2304 redbot/cogs/audio/audio.py:2334
+#: redbot/cogs/audio/audio.py:754 redbot/cogs/audio/audio.py:782
+#: redbot/cogs/audio/audio.py:819 redbot/cogs/audio/audio.py:847
+#: redbot/cogs/audio/audio.py:914 redbot/cogs/audio/audio.py:932
+#: redbot/cogs/audio/audio.py:956 redbot/cogs/audio/audio.py:1026
+#: redbot/cogs/audio/audio.py:1280 redbot/cogs/audio/audio.py:1371
+#: redbot/cogs/audio/audio.py:1388 redbot/cogs/audio/audio.py:1411
+#: redbot/cogs/audio/audio.py:1419 redbot/cogs/audio/audio.py:2190
+#: redbot/cogs/audio/audio.py:2527 redbot/cogs/audio/audio.py:2860
+#: redbot/cogs/audio/audio.py:3201 redbot/cogs/audio/audio.py:3255
+#: redbot/cogs/audio/audio.py:3305 redbot/cogs/audio/audio.py:3497
+#: redbot/cogs/audio/audio.py:3575 redbot/cogs/audio/audio.py:3605
msgid "Nothing playing."
msgstr "Aucune lecture en cours."
-#: redbot/cogs/audio/audio.py:473
+#: redbot/cogs/audio/audio.py:758
msgid "Not connected anywhere."
msgstr "Connecté nul part."
-#: redbot/cogs/audio/audio.py:478
-msgid "Connected in {num} servers:"
-msgstr "Connecté sur {num} serveurs :"
+#: redbot/cogs/audio/audio.py:764
+msgid "Playing in {num}/{total} servers:"
+msgstr "Lecture dans {num}/{total} serveurs :"
-#: redbot/cogs/audio/audio.py:486
+#: redbot/cogs/audio/audio.py:779
#, docstring
msgid "Bump a track number to the top of the queue."
msgstr "Remonte un numéro de piste vers le haut de la liste."
-#: redbot/cogs/audio/audio.py:495
+#: redbot/cogs/audio/audio.py:788
msgid "You must be in the voice channel to bump a track."
msgstr "Vous devez être dans un salon vocal pour remonter une piste."
-#: redbot/cogs/audio/audio.py:499
+#: redbot/cogs/audio/audio.py:792
msgid "You need the DJ role to bump tracks."
msgstr "Vous devez avoir le rôle DJ pour remonter des pistes."
-#: redbot/cogs/audio/audio.py:502 redbot/cogs/audio/audio.py:1739
+#: redbot/cogs/audio/audio.py:795 redbot/cogs/audio/audio.py:2875
msgid "Song number must be greater than 1 and within the queue limit."
msgstr "Le numéro d'une musique doit être supérieur à 1 et dans la limite de la file."
-#: redbot/cogs/audio/audio.py:517
+#: redbot/cogs/audio/audio.py:810
msgid "Moved {track} to the top of the queue."
msgstr "{track} a été déplacé en haut de la liste."
-#: redbot/cogs/audio/audio.py:523
+#: redbot/cogs/audio/audio.py:817
#, docstring
msgid "Disconnect from the voice channel."
msgstr "Déconnexion du salon vocal."
-#: redbot/cogs/audio/audio.py:528
+#: redbot/cogs/audio/audio.py:826
msgid "You need the DJ role to disconnect."
msgstr "Vous devez avoir le rôle DJ pour pouvoir déconnecter."
-#: redbot/cogs/audio/audio.py:532
+#: redbot/cogs/audio/audio.py:830
msgid "There are other people listening to music."
msgstr "Il y a d’autres personnes écoutant de la musique."
-#: redbot/cogs/audio/audio.py:540
+#: redbot/cogs/audio/audio.py:845
+#, docstring
+msgid "Equalizer management."
+msgstr "Gestion de l'égaliseur."
+
+#: redbot/cogs/audio/audio.py:865
+#, docstring
+msgid "Delete a saved eq preset."
+msgstr "Supprimer un préréglage eq enregistré."
+
+#: redbot/cogs/audio/audio.py:887
+#, docstring
+msgid "List saved eq presets."
+msgstr "Liste des préréglages eq enregistrés."
+
+#: redbot/cogs/audio/audio.py:890
+msgid "No saved equalizer presets."
+msgstr "Aucun préréglage de l'égaliseur enregistré."
+
+#: redbot/cogs/audio/audio.py:897
+msgid "{num} preset(s)"
+msgstr "{num} préréglage(s)"
+
+#: redbot/cogs/audio/audio.py:903
+#, docstring
+msgid "Load a saved eq preset."
+msgstr "Charger un preset eq enregistré."
+
+#: redbot/cogs/audio/audio.py:930
+#, docstring
+msgid "Reset the eq to 0 across all bands."
+msgstr "Réinitialiser l'eq à 0 sur toutes les bandes."
+
+#: redbot/cogs/audio/audio.py:946
+msgid "Equalizer values have been reset."
+msgstr "Les valeurs de l'égaliseur ont été réinitialisées."
+
+#: redbot/cogs/audio/audio.py:954
+#, docstring
+msgid "Save the current eq settings to a preset."
+msgstr "Enregistrer les paramètres eq actuels dans un préréglage."
+
+#: redbot/cogs/audio/audio.py:958
+msgid "Please enter a name for this equalizer preset."
+msgstr "Veuillez saisir un nom pour ce préréglage d'égaliseur."
+
+#: redbot/cogs/audio/audio.py:972
+msgid "No equalizer preset name entered, try the command again later."
+msgstr "Aucun nom de préréglage d'égaliseur saisi, essayez à nouveau la commande plus tard."
+
+#: redbot/cogs/audio/audio.py:981 redbot/cogs/audio/audio.py:2213
+msgid "Try the command again with a shorter name."
+msgstr "Réessayez la commande avec un nom plus court."
+
+#: redbot/cogs/audio/audio.py:985
+msgid "Preset name already exists, do you want to replace it?"
+msgstr "Le nom du préréglage existe déjà, voulez-vous le remplacer ?"
+
+#: redbot/cogs/audio/audio.py:994
+msgid "Not saving preset."
+msgstr "Pas d'enregistrement du préréglage."
+
+#: redbot/cogs/audio/audio.py:1019
+#, docstring
+msgid "Set an eq band with a band number or name and value.\\n\\n Band positions are 1-15 and values have a range of -0.25 to 1.0.\\n Band names are 25, 40, 63, 100, 160, 250, 400, 630, 1k, 1.6k, 2.5k, 4k, 6.3k, 10k, and 16k Hz.\\n Setting a band value to -0.25 nullifies it while +0.25 is double.\\n "
+msgstr "Réglez une bande d'égalisation avec un numéro de bande ou un nom et une valeur. \\n\\n\\n Les positions de bande sont 1-15 et les valeurs ont une plage de -0,25 à 1,0. \\n Les noms de bande sont 25, 40, 63, 100, 160, 250, 400, 630, 1k, 1,6k, 2,5k, 4k, 6,3k, 10k et 16k Hz.\\n Une valeur de bande à -0,25 la rend nulle alors que +0,25 est double.\\n "
+
+#: redbot/cogs/audio/audio.py:1063
+msgid "Valid band numbers are 1-15 or the band names listed in the help for this command."
+msgstr "Les numéros de bande valides sont de 1 à 15 ou les noms de bande listés dans l'aide de cette commande."
+
+#: redbot/cogs/audio/audio.py:1099
#, docstring
msgid "Local playback commands."
msgstr "Commandes de lecture locale."
-#: redbot/cogs/audio/audio.py:545
+#: redbot/cogs/audio/audio.py:1104
#, docstring
msgid "Play all songs in a localtracks folder."
msgstr "Lire toutes les chansons dans un dossier localtracks."
-#: redbot/cogs/audio/audio.py:552
+#: redbot/cogs/audio/audio.py:1115
+msgid "No localtracks folder named {name}."
+msgstr "Aucun dossier de musiques locales nommé {name}."
+
+#: redbot/cogs/audio/audio.py:1121
#, docstring
msgid "Play a local track."
msgstr "Lire une piste locale."
-#: redbot/cogs/audio/audio.py:557
+#: redbot/cogs/audio/audio.py:1126
msgid "No local track folders found."
msgstr "Aucun dossier de pistes locales trouvé."
-#: redbot/cogs/audio/audio.py:600
+#: redbot/cogs/audio/audio.py:1169
#, docstring
msgid "Search for songs across all localtracks folders."
msgstr "Rechercher des musiques dans tout les dossiers de localtracks."
-#: redbot/cogs/audio/audio.py:605
+#: redbot/cogs/audio/audio.py:1174
msgid "No album folders found."
msgstr "Aucun dossier d'album trouvé."
-#: redbot/cogs/audio/audio.py:612 redbot/cogs/audio/audio.py:1634
+#: redbot/cogs/audio/audio.py:1181 redbot/cogs/audio/audio.py:2816
msgid "No matches."
msgstr "Aucune correspondance."
-#: redbot/cogs/audio/audio.py:688
+#: redbot/cogs/audio/audio.py:1269
msgid "No localtracks folder."
msgstr "Aucun dossier de localtracks."
-#: redbot/cogs/audio/audio.py:696
+#: redbot/cogs/audio/audio.py:1278
#, docstring
msgid "Now playing."
msgstr "Lecture en cours."
-#: redbot/cogs/audio/audio.py:716
+#: redbot/cogs/audio/audio.py:1298
msgid "Requested by: **{track.requester}**"
msgstr "Demandé par : **{track.requester} **"
-#: redbot/cogs/audio/audio.py:726
+#: redbot/cogs/audio/audio.py:1308
msgid "Nothing."
msgstr "Rien."
-#: redbot/cogs/audio/audio.py:785
+#: redbot/cogs/audio/audio.py:1368
#, docstring
-msgid "Pause and resume."
-msgstr "Interrompre et reprendre."
+msgid "Pause or resume a playing track."
+msgstr "Pause ou reprise de la lecture d'une piste."
-#: redbot/cogs/audio/audio.py:794
-msgid "You must be in the voice channel to pause the music."
-msgstr "Vous devez être dans un salon vocal pour mettre en pause la musique."
+#: redbot/cogs/audio/audio.py:1377
+msgid "You must be in the voice channel pause or resume."
+msgstr "Vous devez être dans un salon vocal pour mettre en pause ou reprendre la lecture."
-#: redbot/cogs/audio/audio.py:800
-msgid "You need the DJ role to pause tracks."
-msgstr "Vous devez avoir le rôle DJ pour mettre en pause des pistes."
+#: redbot/cogs/audio/audio.py:1384
+msgid "You need the DJ role to pause or resume tracks."
+msgstr "Vous devez avoir le rôle DJ pour mettre en pause ou reprendre la lecture."
-#: redbot/cogs/audio/audio.py:814
+#: redbot/cogs/audio/audio.py:1401
msgid "Track Paused"
msgstr "La piste à été mise en pause"
-#: redbot/cogs/audio/audio.py:821
+#: redbot/cogs/audio/audio.py:1407
msgid "Track Resumed"
msgstr "La piste à repris"
-#: redbot/cogs/audio/audio.py:826
-msgid "Track is paused."
-msgstr "Piste en pause."
-
-#: redbot/cogs/audio/audio.py:828
-msgid "Track is playing."
-msgstr "La piste est en cours de lecture."
-
-#: redbot/cogs/audio/audio.py:834
+#: redbot/cogs/audio/audio.py:1417
#, docstring
msgid "Queue percentage."
msgstr "Pourcentage de la liste."
-#: redbot/cogs/audio/audio.py:860
+#: redbot/cogs/audio/audio.py:1443
msgid "Nothing in the queue."
msgstr "Rien dans la liste."
-#: redbot/cogs/audio/audio.py:882
+#: redbot/cogs/audio/audio.py:1465
msgid "Queued and playing tracks:"
msgstr "Dans la liste et en cours de lecture :"
-#: redbot/cogs/audio/audio.py:890
+#: redbot/cogs/audio/audio.py:1474
#, docstring
msgid "Play a URL or search for a track."
msgstr "Joue une URL ou cherche une piste."
-#: redbot/cogs/audio/audio.py:900 redbot/cogs/audio/audio.py:1411
-#: redbot/cogs/audio/audio.py:1795
+#: redbot/cogs/audio/audio.py:1481
+msgid "That URL is not allowed."
+msgstr "Cette URL n'est pas autorisée."
+
+#: redbot/cogs/audio/audio.py:1484 redbot/cogs/audio/audio.py:2437
+#: redbot/cogs/audio/audio.py:2928 redbot/cogs/audio/audio.py:3047
+msgid "Connection to Lavalink has failed."
+msgstr "La connexion à Lavalink a échoué."
+
+#: redbot/cogs/audio/audio.py:1486 redbot/cogs/audio/audio.py:2439
+#: redbot/cogs/audio/audio.py:2930 redbot/cogs/audio/audio.py:3049
+msgid "Please check your console or logs for details."
+msgstr "Veuillez vérifier votre console ou les logs pour plus de détails."
+
+#: redbot/cogs/audio/audio.py:1495 redbot/cogs/audio/audio.py:2449
+#: redbot/cogs/audio/audio.py:2939 redbot/cogs/audio/audio.py:3543
msgid "I don't have permission to connect to your channel."
msgstr "Je n'ai pas la permission de me connecter à votre salon."
-#: redbot/cogs/audio/audio.py:906 redbot/cogs/audio/audio.py:1422
-#: redbot/cogs/audio/audio.py:1801 redbot/cogs/audio/audio.py:1889
+#: redbot/cogs/audio/audio.py:1501 redbot/cogs/audio/audio.py:2461
+#: redbot/cogs/audio/audio.py:2945 redbot/cogs/audio/audio.py:3056
+#: redbot/cogs/audio/audio.py:3555
msgid "Connect to a voice channel first."
msgstr "Rejoignez un salon vocal d'abord."
-#: redbot/cogs/audio/audio.py:909 redbot/cogs/audio/audio.py:1418
-#: redbot/cogs/audio/audio.py:1804 redbot/cogs/audio/audio.py:1892
+#: redbot/cogs/audio/audio.py:1504 redbot/cogs/audio/audio.py:2457
+#: redbot/cogs/audio/audio.py:2948 redbot/cogs/audio/audio.py:3059
+#: redbot/cogs/audio/audio.py:3558
msgid "Connection to Lavalink has not yet been established."
-msgstr ""
+msgstr "La connexion à Lavalink n'a pas encore été établie."
-#: redbot/cogs/audio/audio.py:913
+#: redbot/cogs/audio/audio.py:1508
msgid "You need the DJ role to queue tracks."
msgstr "Vous devez avoir le rôle DJ pour ajouter des pistes à la liste."
-#: redbot/cogs/audio/audio.py:922
+#: redbot/cogs/audio/audio.py:1519
msgid "You must be in the voice channel to use the play command."
msgstr "Vous devez être dans un salon vocal pour utiliser la commande play."
-#: redbot/cogs/audio/audio.py:928
+#: redbot/cogs/audio/audio.py:1525
msgid "No tracks to play."
msgstr "Aucune piste à jouer."
-#: redbot/cogs/audio/audio.py:942 redbot/cogs/audio/audio.py:1450
-#: redbot/cogs/audio/audio.py:1828 redbot/cogs/audio/audio.py:1865
+#: redbot/cogs/audio/audio.py:1565
+msgid "The owner needs to set the Spotify client ID, Spotify client secret, and YouTube API key before Spotify URLs or codes can be used. \\nSee `{prefix}audioset youtubeapi` and `{prefix}audioset spotifyapi` for instructions."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1575 redbot/cogs/audio/audio.py:2493
+msgid "Wait until the playlist has finished loading."
+msgstr "Attendre jusqu'à ce que la playlist finisse de charger."
+
+#: redbot/cogs/audio/audio.py:1592 redbot/cogs/audio/audio.py:1657
+#: redbot/cogs/audio/audio.py:2499 redbot/cogs/audio/audio.py:2509
+#: redbot/cogs/audio/audio.py:2973 redbot/cogs/audio/audio.py:3027
msgid "Nothing found."
msgstr "Aucun résultat."
-#: redbot/cogs/audio/audio.py:953 redbot/cogs/audio/audio.py:1295
+#: redbot/cogs/audio/audio.py:1600
+msgid "The Spotify API key or client secret has not been set properly. \\nUse `{prefix}audioset spotifyapi` for instructions."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1639 redbot/cogs/audio/audio.py:1776
+msgid "This doesn't seem to be a valid Spotify URL or code."
+msgstr "Cela ne semble pas être une URL ou un code Spotify valide."
+
+#: redbot/cogs/audio/audio.py:1688 redbot/cogs/audio/audio.py:2320
msgid "Playlist Enqueued"
msgstr "Playlist en file d’attente"
-#: redbot/cogs/audio/audio.py:954 redbot/cogs/audio/audio.py:1296
-msgid "Added {num} tracks to the queue."
-msgstr "{num} titres ajoutés à la liste."
+#: redbot/cogs/audio/audio.py:1689 redbot/cogs/audio/audio.py:2321
+msgid "Added {num} tracks to the queue.{maxlength_msg}"
+msgstr "Ajout de {num} pistes à la file d'attente.{maxlength_msg}"
-#: redbot/cogs/audio/audio.py:958
+#: redbot/cogs/audio/audio.py:1695
msgid "{time} until start of playlist playback: starts at #{position} in queue"
msgstr "{time} avant le début de la lecture de la playlist : commence à #{position} dans la liste"
-#: redbot/cogs/audio/audio.py:980 redbot/cogs/audio/audio.py:1938
+#: redbot/cogs/audio/audio.py:1711 redbot/cogs/audio/audio.py:3125
+msgid "Track exceeds maximum length."
+msgstr "Cette piste dépasse la limite maximale."
+
+#: redbot/cogs/audio/audio.py:1717
+msgid "Nothing found. Check your Lavalink logs for details."
+msgstr "Rien n'a été trouvé. Vérifiez vos logs Lavalink pour plus de détails."
+
+#: redbot/cogs/audio/audio.py:1732 redbot/cogs/audio/audio.py:3108
msgid "Track Enqueued"
msgstr "Piste ajoutée"
-#: redbot/cogs/audio/audio.py:984 redbot/cogs/audio/audio.py:1944
+#: redbot/cogs/audio/audio.py:1736 redbot/cogs/audio/audio.py:3114
msgid "{time} until track playback: #{position} in queue"
msgstr "{time} avant la lecture de la piste : #{position} dans la file d’attente"
-#: redbot/cogs/audio/audio.py:989 redbot/cogs/audio/audio.py:1949
+#: redbot/cogs/audio/audio.py:1741 redbot/cogs/audio/audio.py:3119
msgid "#{position} in queue"
msgstr "#{position} dans la liste"
-#: redbot/cogs/audio/audio.py:997
+#: redbot/cogs/audio/audio.py:1761
+msgid "The Spotify API key or client secret has not been set properly. \\nUse `{prefix}audioset spotifyapi` for instructions."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1793 redbot/cogs/audio/audio.py:2384
+msgid "Please wait, adding tracks..."
+msgstr "Veuillez patienter, ajout de pistes ..."
+
+#: redbot/cogs/audio/audio.py:1809
+msgid "The connection was reset while loading the playlist."
+msgstr "La connexion a été réinitialisée lors du chargement de la playlist."
+
+#: redbot/cogs/audio/audio.py:1826 redbot/cogs/audio/audio.py:2401
+msgid "Loading track {num}/{total}..."
+msgstr "Chargement de piste {num}/{total} ..."
+
+#: redbot/cogs/audio/audio.py:1840
+msgid "Approximate time remaining: {seconds}"
+msgstr "Temps approximatif restant: {seconds}"
+
+#: redbot/cogs/audio/audio.py:1850
+msgid "Nothing found.\\nThe YouTube API key may be invalid or you may be rate limited on YouTube's search service.\\nCheck the YouTube API key again and follow the instructions at `{prefix}audioset youtubeapi`."
+msgstr "Rien n'a été trouvé.\\nLa clé de l'API YouTube peut être invalide ou vous pouvez être limité sur le service de recherche de YouTube.\\nVérifiez à nouveau la clé de l'API YouTube et suivez les instructions à `{prefix}audioset youtubeapi`."
+
+#: redbot/cogs/audio/audio.py:1871
#, docstring
msgid "Playlist configuration options."
msgstr "Options de configuration des playlists."
-#: redbot/cogs/audio/audio.py:1002
+#: redbot/cogs/audio/audio.py:1876
#, docstring
-msgid "Add a track URL, playlist link, or quick search to a playlist.\n\n"
-" The track(s) will be appended to the end of the playlist.\n"
-" "
-msgstr "Ajouter l'URL d'une ou plusieurs musiques musiques, d'une playlist ou une recherche rapide vers une playlist.\n\n"
-" Le(s) musique(s) seront ajoutées à la fin de la playlist.\n"
-" "
+msgid "Add a track URL, playlist link, or quick search to a playlist.\\n\\n The track(s) will be appended to the end of the playlist.\\n "
+msgstr "Ajouter l'URL d'une ou plusieurs musiques musiques, d'une playlist ou une recherche rapide vers une playlist.\\n\\n La(les) musique(s) seront ajoutées à la fin de la playlist.\\n "
-#: redbot/cogs/audio/audio.py:1014 redbot/cogs/audio/audio.py:1078
-#: redbot/cogs/audio/audio.py:1228
+#: redbot/cogs/audio/audio.py:1888 redbot/cogs/audio/audio.py:2028
+#: redbot/cogs/audio/audio.py:2241
msgid "You are not the author of that playlist."
msgstr "Vous n’êtes pas l’auteur de cette playlist."
-#: redbot/cogs/audio/audio.py:1024
+#: redbot/cogs/audio/audio.py:1898
msgid "{track} is already in {playlist}."
msgstr "{track} est déjà dans {playlist}."
-#: redbot/cogs/audio/audio.py:1033 redbot/cogs/audio/audio.py:1082
-#: redbot/cogs/audio/audio.py:1092 redbot/cogs/audio/audio.py:1231
+#: redbot/cogs/audio/audio.py:1907 redbot/cogs/audio/audio.py:2032
+#: redbot/cogs/audio/audio.py:2081 redbot/cogs/audio/audio.py:2244
msgid "No playlist with that name."
msgstr "Aucune playlist portant ce nom."
-#: redbot/cogs/audio/audio.py:1040
+#: redbot/cogs/audio/audio.py:1914
msgid "{track} appended to {playlist}."
msgstr "{track} ajouté à {playlist}."
-#: redbot/cogs/audio/audio.py:1046
+#: redbot/cogs/audio/audio.py:1920
msgid "{num} tracks appended to {playlist}."
msgstr "{num} pistes ajoutées à {playlist}."
-#: redbot/cogs/audio/audio.py:1053
+#: redbot/cogs/audio/audio.py:1928
+#, docstring
+msgid "Copy a playlist from one server to another."
+msgstr "Copiez une playlist d'un serveur à un autre."
+
+#: redbot/cogs/audio/audio.py:1932
+msgid "Invalid server ID for source server."
+msgstr "ID de serveur invalide pour le serveur source."
+
+#: redbot/cogs/audio/audio.py:1934
+msgid "Invalid server ID for target server."
+msgstr "ID de serveur invalide pour le serveur cible."
+
+#: redbot/cogs/audio/audio.py:1939
+msgid "No playlist with that name in {from_guild_name}."
+msgstr "Aucune playlist avec ce nom dans {from_guild_name}."
+
+#: redbot/cogs/audio/audio.py:1950
+msgid "Playlist {name} copied from {from_guild_name} to {to_guild_name}."
+msgstr "Playlist {name} copiée de {from_guild_name} à {to_guild_name}."
+
+#: redbot/cogs/audio/audio.py:1962
+msgid "A playlist with that name already exists in {to_guild_name}.\\nPlease enter a new name for this playlist."
+msgstr "Une playlist avec ce nom existe déjà dans {to_guild_name}.\\nVeuillez entrer un nouveau nom pour cette playlist."
+
+#: redbot/cogs/audio/audio.py:1975
+msgid "Try the playlist copy command again with a shorter name."
+msgstr "Essayez à nouveau la commande de copie de la playlist avec un nom plus court."
+
+#: redbot/cogs/audio/audio.py:1980
+msgid "Playlist name already exists in {to_guild_name}, try the playlist copy command again with a different name."
+msgstr "Ce nom de playlist existe déjà dans {to_guild_name}, essayez à nouveau la commande de copie de la playlist avec un nom différent."
+
+#: redbot/cogs/audio/audio.py:1986 redbot/cogs/audio/audio.py:2220
+msgid "No playlist name entered, try again later."
+msgstr "Aucun nom de playlist entré, réessayez plus tard."
+
+#: redbot/cogs/audio/audio.py:1991
+msgid "Playlist {name} copied from {from_guild_name} to {to_guild_name}.\\nNew playlist name on {to_guild_name}: {new_name}"
+msgstr "Playlist {name} copiée de {from_guild_name} à {to_guild_name}.\\nNouveau nom de playlist sur {to_guild_name}: {new_name}"
+
+#: redbot/cogs/audio/audio.py:2003
#, docstring
msgid "Create an empty playlist."
msgstr "Créer une playlist vide."
-#: redbot/cogs/audio/audio.py:1057 redbot/cogs/audio/audio.py:1172
+#: redbot/cogs/audio/audio.py:2007 redbot/cogs/audio/audio.py:2183
msgid "You need the DJ role to save playlists."
msgstr "Vous devez avoir le rôle DJ pour sauvegarder les playlists."
-#: redbot/cogs/audio/audio.py:1061 redbot/cogs/audio/audio.py:1176
-#: redbot/cogs/audio/audio.py:1204
+#: redbot/cogs/audio/audio.py:2011 redbot/cogs/audio/audio.py:2187
+#: redbot/cogs/audio/audio.py:2217
msgid "Playlist name already exists, try again with a different name."
msgstr "Ce nom de playlist existe déjà, essayez à nouveau avec un nom différent."
-#: redbot/cogs/audio/audio.py:1067
+#: redbot/cogs/audio/audio.py:2017
msgid "Empty playlist {name} created."
msgstr "Playlist vide nommée {name} créé."
-#: redbot/cogs/audio/audio.py:1071
+#: redbot/cogs/audio/audio.py:2021
#, docstring
msgid "Delete a saved playlist."
msgstr "Supprimer une playlist enregistrée."
-#: redbot/cogs/audio/audio.py:1083
+#: redbot/cogs/audio/audio.py:2033
msgid "{name} playlist deleted."
msgstr "La playlist {name} à été supprimée."
-#: redbot/cogs/audio/audio.py:1087
+#: redbot/cogs/audio/audio.py:2039
+#, docstring
+msgid "Download a copy of a playlist.\\n\\n These files can be used with the [p]playlist upload command.\\n Red v2-compatible playlists can be generated by passing True\\n for the v2 variable."
+msgstr "Téléchargez une copie d'une playlist.\\n\\n Ces fichiers peuvent être utilisés avec la commande de téléchargement des playlists `[p]playlist upload`.\\n Les listes de lecture compatibles avec la v2 de Red peuvent être générées en passant par True\\n pour la variable v2."
+
+#: redbot/cogs/audio/audio.py:2061
+msgid "That playlist has no tracks."
+msgstr "Cette playlist ne contient aucune piste."
+
+#: redbot/cogs/audio/audio.py:2063 redbot/cogs/audio/audio.py:2331
+msgid "That playlist doesn't exist."
+msgstr "Cette playlist n'existe pas."
+
+#: redbot/cogs/audio/audio.py:2076
#, docstring
msgid "Retrieve information from a saved playlist."
msgstr "Récupérer les informations d’une playlist enregistrée."
-#: redbot/cogs/audio/audio.py:1100
-msgid "**Custom playlist.**"
-msgstr "**Playlist personnalisée.**"
+#: redbot/cogs/audio/audio.py:2101
+msgid "Playlist info for {playlist_name}:\\n"
+msgstr "Infos de la playlist pour {playlist_name} :\\n"
-#: redbot/cogs/audio/audio.py:1102
-msgid "URL: <{url}>"
-msgstr "URL : <{url}>"
+#: redbot/cogs/audio/audio.py:2105
+msgid "Playlist info for {playlist_name}:\\nURL: {url}"
+msgstr "Infos de la playlist pour {playlist_name} :\\nURL: {url}"
-#: redbot/cogs/audio/audio.py:1105
-msgid "Playlist info for {playlist_name}:"
-msgstr "Infos de la playlist pour {playlist_name} :"
+#: redbot/cogs/audio/audio.py:2116
+msgid "Author: {author_name} | {num} track(s)"
+msgstr "Auteur : {author_name} | {num} piste(s)"
-#: redbot/cogs/audio/audio.py:1106
-msgid "Author: **{author_name}**\n"
-"{url}"
-msgstr "Auteur : **{author_name}**\n"
-"{url}"
-
-#: redbot/cogs/audio/audio.py:1110
-msgid "{num} track(s)"
-msgstr "{num} piste(s)"
-
-#: redbot/cogs/audio/audio.py:1115
+#: redbot/cogs/audio/audio.py:2126
#, docstring
msgid "List saved playlists."
msgstr "Liste les playlists enregistrées."
-#: redbot/cogs/audio/audio.py:1118
+#: redbot/cogs/audio/audio.py:2129
msgid "No saved playlists."
msgstr "Aucunes playlists enregistrées."
-#: redbot/cogs/audio/audio.py:1130
+#: redbot/cogs/audio/audio.py:2141
msgid "Tracks: {num}"
msgstr "Pistes : {num}"
-#: redbot/cogs/audio/audio.py:1131
-msgid "Author: {name}\n"
-msgstr "Auteur : {name}\n"
+#: redbot/cogs/audio/audio.py:2142
+msgid "Author: {name}\\n"
+msgstr "Auteur : {name}\\n"
-#: redbot/cogs/audio/audio.py:1155
+#: redbot/cogs/audio/audio.py:2166
msgid "Playlists for {server_name}:"
msgstr "Playlists de {server_name} :"
-#: redbot/cogs/audio/audio.py:1159
+#: redbot/cogs/audio/audio.py:2170
msgid "Page {page_num}/{total_pages} | {num} playlists"
msgstr "Page {page_num}/{total_pages} | {num} playlists"
-#: redbot/cogs/audio/audio.py:1168
+#: redbot/cogs/audio/audio.py:2179
#, docstring
msgid "Save the queue to a playlist."
msgstr "Enregistrer la file dans une playlist."
-#: redbot/cogs/audio/audio.py:1189
+#: redbot/cogs/audio/audio.py:2193 redbot/cogs/audio/audio.py:2590
+#: redbot/cogs/audio/audio.py:2593 redbot/cogs/audio/audio.py:2613
+#: redbot/cogs/audio/audio.py:2756 redbot/cogs/audio/audio.py:2759
+#: redbot/cogs/audio/audio.py:2775 redbot/cogs/audio/audio.py:2778
+#: redbot/cogs/audio/audio.py:2810 redbot/cogs/audio/audio.py:2812
+#: redbot/cogs/audio/audio.py:3418 redbot/cogs/audio/audio.py:3422
+#: redbot/cogs/audio/audio.py:3429
+msgid "There's nothing in the queue."
+msgstr "Il n'y a rien dans la liste."
+
+#: redbot/cogs/audio/audio.py:2202
msgid "Please enter a name for this playlist."
msgstr "Veuillez entrer un nom pour cette playlist."
-#: redbot/cogs/audio/audio.py:1200
-msgid "Try the command again with a shorter name."
-msgstr "Réessayez la commande avec un nom plus court."
-
-#: redbot/cogs/audio/audio.py:1207
-msgid "No playlist name entered, try again later."
-msgstr "Aucun nom de playlist entré, réessayez plus tard."
-
-#: redbot/cogs/audio/audio.py:1214
+#: redbot/cogs/audio/audio.py:2227
msgid "Playlist {name} saved from current queue: {num} tracks added."
msgstr "Playlist {name} venant de la file actuelle : {num} titres ajoutés."
-#: redbot/cogs/audio/audio.py:1221
+#: redbot/cogs/audio/audio.py:2234
#, docstring
msgid "Remove a track from a playlist by url."
-msgstr "Enlève une piste d'une playlist avec une Url."
+msgstr "Supprimer une piste d'une playlist par url."
-#: redbot/cogs/audio/audio.py:1235
+#: redbot/cogs/audio/audio.py:2248
msgid "URL not in playlist."
msgstr "L'url n'est pas dans la playlist."
-#: redbot/cogs/audio/audio.py:1239
+#: redbot/cogs/audio/audio.py:2252
msgid "No tracks left, removing playlist."
-msgstr "Il ne reste plus aucune pistes, retrait de la playlist."
+msgstr "Aucune piste restante, suppression de la playlist."
-#: redbot/cogs/audio/audio.py:1246
+#: redbot/cogs/audio/audio.py:2259
msgid "{num} entries have been removed from the {playlist_name} playlist."
msgstr "{num} musiques ont été retirées de la playlist {playlist_name}."
-#: redbot/cogs/audio/audio.py:1253
+#: redbot/cogs/audio/audio.py:2266
msgid "The track has been removed from the {playlist_name} playlist."
msgstr "La piste a été retirée de la playlist {playlist_name}."
-#: redbot/cogs/audio/audio.py:1260
+#: redbot/cogs/audio/audio.py:2273
#, docstring
msgid "Save a playlist from a url."
-msgstr "Enregistrer une playlist depuis une url."
+msgstr "Enregistrer une playlist à partir d'une url."
-#: redbot/cogs/audio/audio.py:1272
+#: redbot/cogs/audio/audio.py:2285
msgid "Playlist {name} saved: {num} tracks added."
msgstr "Playlist {name} enregistrée : {num} titres ajoutés."
-#: redbot/cogs/audio/audio.py:1279
+#: redbot/cogs/audio/audio.py:2292
#, docstring
msgid "Load a playlist into the queue."
msgstr "Charger une playlist dans la file."
-#: redbot/cogs/audio/audio.py:1304
-msgid "That playlist doesn't exist."
-msgstr "Cette playlist n'existe pas."
-
-#: redbot/cogs/audio/audio.py:1309
+#: redbot/cogs/audio/audio.py:2336
#, docstring
msgid "Convert a Red v2 playlist file to a playlist."
msgstr "Convertir un fichier de playlist venant de la v2 de Red vers une playlist."
-#: redbot/cogs/audio/audio.py:1315
+#: redbot/cogs/audio/audio.py:2342
msgid "Please upload the playlist file. Any other message will cancel this operation."
msgstr "Envoyez s'il vous plaît le fichier de playlist. Tout autre message annulera cette opération."
-#: redbot/cogs/audio/audio.py:1323
+#: redbot/cogs/audio/audio.py:2350
msgid "No file detected, try again later."
msgstr "Aucun fichier détecté, réessayez plus tard."
-#: redbot/cogs/audio/audio.py:1327
+#: redbot/cogs/audio/audio.py:2354
msgid "Upload cancelled."
msgstr "Transfert annulé."
-#: redbot/cogs/audio/audio.py:1331
+#: redbot/cogs/audio/audio.py:2358
msgid "Only playlist files can be uploaded."
msgstr "Seuls les fichiers de playlist peuvent être transférés."
-#: redbot/cogs/audio/audio.py:1336
+#: redbot/cogs/audio/audio.py:2363
msgid "Not a valid playlist file."
-msgstr "Fichier de playlist non valide."
+msgstr "Fichier de playlist invalide."
-#: redbot/cogs/audio/audio.py:1352
+#: redbot/cogs/audio/audio.py:2379
msgid "A playlist already exists with this name."
msgstr "Une playlist existe déjà avec ce nom."
-#: redbot/cogs/audio/audio.py:1357
-msgid "Please wait, adding tracks..."
-msgstr "Veuillez patienter, ajout de pistes ..."
-
-#: redbot/cogs/audio/audio.py:1371
-msgid "Loading track {num}/{total}..."
-msgstr "Chargement de piste {num}/{total} ..."
-
-#: redbot/cogs/audio/audio.py:1377
+#: redbot/cogs/audio/audio.py:2407
msgid "No tracks found."
msgstr "Aucune piste trouvée."
-#: redbot/cogs/audio/audio.py:1383
+#: redbot/cogs/audio/audio.py:2413
msgid "Added {num} tracks from the {playlist_name} playlist. {num_bad} track(s) could not be loaded."
msgstr "{num} pistes de la playlist {playlist_name} ont été ajoutés. {num_bad} piste(s) n’ont pu être chargé."
-#: redbot/cogs/audio/audio.py:1388
+#: redbot/cogs/audio/audio.py:2418
msgid "Added {num} tracks from the {playlist_name} playlist."
msgstr "{num} pistes de la playlist {playlist_name} ont été ajoutés."
-#: redbot/cogs/audio/audio.py:1392
+#: redbot/cogs/audio/audio.py:2422
msgid "Playlist Saved"
msgstr "Playlist enregistrée"
-#: redbot/cogs/audio/audio.py:1403
+#: redbot/cogs/audio/audio.py:2433
msgid "You need the DJ role to use playlists."
msgstr "Vous devez avoir le rôle DJ pour utiliser les playlists."
-#: redbot/cogs/audio/audio.py:1432
+#: redbot/cogs/audio/audio.py:2471
msgid "You must be in the voice channel to use the playlist command."
msgstr "Vous devez être dans le salon vocal pour utiliser la commande de playlist."
-#: redbot/cogs/audio/audio.py:1464
+#: redbot/cogs/audio/audio.py:2525
#, docstring
msgid "Skip to the start of the previously played track."
msgstr "Revient à la piste précédente."
-#: redbot/cogs/audio/audio.py:1474 redbot/cogs/audio/audio.py:2121
+#: redbot/cogs/audio/audio.py:2535 redbot/cogs/audio/audio.py:3317
msgid "You need the DJ role to skip tracks."
msgstr "Vous devez avoir le rôle DJ pour passer des pistes."
-#: redbot/cogs/audio/audio.py:1479 redbot/cogs/audio/audio.py:2115
+#: redbot/cogs/audio/audio.py:2540 redbot/cogs/audio/audio.py:3311
msgid "You must be in the voice channel to skip the music."
msgstr "Vous devez être dans un salon vocal pour passer une musique."
-#: redbot/cogs/audio/audio.py:1482
+#: redbot/cogs/audio/audio.py:2543
msgid "Turn shuffle off to use this command."
msgstr "Enlevez l'aléatoire pour utiliser cette commande."
-#: redbot/cogs/audio/audio.py:1484
+#: redbot/cogs/audio/audio.py:2545
msgid "No previous track."
msgstr "Il n'y a pas de piste précédente."
-#: redbot/cogs/audio/audio.py:1501
+#: redbot/cogs/audio/audio.py:2562
msgid "Replaying Track"
msgstr "Répétition de piste"
-#: redbot/cogs/audio/audio.py:1509
+#: redbot/cogs/audio/audio.py:2571
#, docstring
-msgid "List the queue.\n\n"
-" Use [p]queue search to search the queue.\n"
-" "
-msgstr "Affiche la file d'attente.\n\n"
-" Utilisez [p]queue search pour rechercher dans la file d'attente.\n"
-" "
+msgid "List the songs in the queue."
+msgstr "Lister les musiques dans la file d'attente."
-#: redbot/cogs/audio/audio.py:1514 redbot/cogs/audio/audio.py:1517
-#: redbot/cogs/audio/audio.py:1544 redbot/cogs/audio/audio.py:2221
-#: redbot/cogs/audio/audio.py:2225 redbot/cogs/audio/audio.py:2232
-msgid "There's nothing in the queue."
-msgstr "Il n'y a rien dans la liste."
-
-#: redbot/cogs/audio/audio.py:1553
+#: redbot/cogs/audio/audio.py:2622
msgid "**Currently livestreaming:**"
msgstr "**Actuellement en streaming :**"
-#: redbot/cogs/audio/audio.py:1559 redbot/cogs/audio/audio.py:1569
-#: redbot/cogs/audio/audio.py:1575
+#: redbot/cogs/audio/audio.py:2628 redbot/cogs/audio/audio.py:2638
+#: redbot/cogs/audio/audio.py:2644
msgid "Playing: "
msgstr "Lecture en cours : "
-#: redbot/cogs/audio/audio.py:1562 redbot/cogs/audio/audio.py:1570
-msgid "Requested by: **{user}**\n"
-msgstr "Demandé par : **{user} **\n"
+#: redbot/cogs/audio/audio.py:2631
+msgid "Requested by: **{user}**\\n"
+msgstr "Demandé par : **{user} **\\n"
-#: redbot/cogs/audio/audio.py:1577
+#: redbot/cogs/audio/audio.py:2639
+msgid "Requested by: **{user}**\\n"
+msgstr "Demandé par : **{user} **\\n"
+
+#: redbot/cogs/audio/audio.py:2646
msgid "Requested by: **{user}**"
msgstr "Demandé par : **{user} **"
-#: redbot/cogs/audio/audio.py:1595 redbot/cogs/audio/audio.py:1599
-#: redbot/cogs/audio/audio.py:1604
-msgid "requested by **{user}**\n"
-msgstr "demandé par : **{user} **\n"
+#: redbot/cogs/audio/audio.py:2664
+msgid "requested by **{user}**\\n"
+msgstr "demandé par : **{user} **\\n"
-#: redbot/cogs/audio/audio.py:1615
+#: redbot/cogs/audio/audio.py:2668
+msgid "requested by **{user}**\\n"
+msgstr "demandé par **{user} **\\n"
+
+#: redbot/cogs/audio/audio.py:2673
+msgid "requested by **{user}**\\n"
+msgstr "demandé par **{user}**\\n"
+
+#: redbot/cogs/audio/audio.py:2684
msgid "Page {page_num}/{total_pages} | {num_tracks} tracks, {num_remaining} remaining"
msgstr "Page {page_num}/{total_pages} | {num_tracks} pistes, {num_remaining} restant"
-#: redbot/cogs/audio/audio.py:1624
+#: redbot/cogs/audio/audio.py:2693
msgid "Repeat"
msgstr "Répétition"
-#: redbot/cogs/audio/audio.py:1626
+#: redbot/cogs/audio/audio.py:2695
msgid "Shuffle"
msgstr "Aléatoire"
-#: redbot/cogs/audio/audio.py:1683
+#: redbot/cogs/audio/audio.py:2740
msgid "Matching Tracks:"
msgstr "Pistes correspondantes :"
-#: redbot/cogs/audio/audio.py:1686 redbot/cogs/audio/audio.py:2010
+#: redbot/cogs/audio/audio.py:2743 redbot/cogs/audio/audio.py:3182
msgid "Page {page_num}/{total_pages}"
msgstr "Page {page_num}/{total_pages}"
-#: redbot/cogs/audio/audio.py:1695
+#: redbot/cogs/audio/audio.py:2752
+#, docstring
+msgid "Clears the queue."
+msgstr "Vide la file d'attente."
+
+#: redbot/cogs/audio/audio.py:2764
+msgid "You need the DJ role to clear the queue."
+msgstr "Vous devez avoir le rôle DJ pour effacer la file d'attente."
+
+#: redbot/cogs/audio/audio.py:2766
+msgid "The queue has been cleared."
+msgstr "La file d'attente a été effacée."
+
+#: redbot/cogs/audio/audio.py:2771
+#, docstring
+msgid "Removes songs from the queue if the requester is not in the voice channel."
+msgstr "Supprime les musiques de la file d'attente si la personne qui l'a choisi n'est pas dans le salon vocal."
+
+#: redbot/cogs/audio/audio.py:2783
+msgid "You need the DJ role to clean the queue."
+msgstr "Vous devez avoir le rôle DJ pour effacer la file d'attente."
+
+#: redbot/cogs/audio/audio.py:2794
+msgid "Removed 0 tracks."
+msgstr "0 pistes supprimées."
+
+#: redbot/cogs/audio/audio.py:2798
+msgid "Removed {removed_tracks} tracks queued by members outside of the voice channel."
+msgstr "{removed_tracks} pistes supprimées qui avaient été ajoutées par des membres hors du salon vocal."
+
+#: redbot/cogs/audio/audio.py:2806
+#, docstring
+msgid "Search the queue."
+msgstr "Rechercher dans la file d'attente."
+
+#: redbot/cogs/audio/audio.py:2829
#, docstring
msgid "Toggle repeat."
msgstr "Activer la répétition."
-#: redbot/cogs/audio/audio.py:1701
+#: redbot/cogs/audio/audio.py:2835
msgid "You need the DJ role to toggle repeat."
msgstr "Vous devez avoir le rôle DJ pour activer la répétition."
-#: redbot/cogs/audio/audio.py:1712
+#: redbot/cogs/audio/audio.py:2843
msgid "You must be in the voice channel to toggle repeat."
msgstr "Vous devez être dans un salon vocal pour activer la répétition."
-#: redbot/cogs/audio/audio.py:1715
+#: redbot/cogs/audio/audio.py:2849
msgid "Repeat tracks: {true_or_false}."
msgstr "Répétition des pistes : {true_or_false}."
-#: redbot/cogs/audio/audio.py:1721
+#: redbot/cogs/audio/audio.py:2857
#, docstring
msgid "Remove a specific track number from the queue."
msgstr "Supprime un numéro de piste spécifique de la liste."
-#: redbot/cogs/audio/audio.py:1727
+#: redbot/cogs/audio/audio.py:2863
msgid "Nothing queued."
msgstr "Rien dans la liste."
-#: redbot/cogs/audio/audio.py:1730
+#: redbot/cogs/audio/audio.py:2866
msgid "You need the DJ role to remove tracks."
msgstr "Vous devez avoir le rôle DJ pour enlever des pistes."
-#: redbot/cogs/audio/audio.py:1735
+#: redbot/cogs/audio/audio.py:2871
msgid "You must be in the voice channel to manage the queue."
msgstr "Vous devez être dans un salon vocal pour enlever des pistes."
-#: redbot/cogs/audio/audio.py:1751
+#: redbot/cogs/audio/audio.py:2887
msgid "Removed {track} from the queue."
msgstr "{track} a été retirer de la liste."
-#: redbot/cogs/audio/audio.py:1757
+#: redbot/cogs/audio/audio.py:2894
#, docstring
-msgid "Pick a track with a search.\n\n"
-" Use `[p]search list ` to queue all tracks found\n"
-" on YouTube. `[p]search sc ` will search SoundCloud\n"
-" instead of YouTube.\n"
-" "
-msgstr "Choisissez une piste avec une recherche.\n\n"
-" Utilisez `[p]search list ` pour mettre dans la liste\n"
-" toutes les pistes trouvées sur YouTube. `[p]search sc `\n"
-" permet de rechercher sur SoundCloud au lieu de YouTube.\n"
-" "
+msgid "Pick a track with a search.\\n\\n Use `[p]search list ` to queue all tracks found\\n on YouTube. `[p]search sc ` will search SoundCloud\\n instead of YouTube.\\n "
+msgstr ""
-#: redbot/cogs/audio/audio.py:1814
+#: redbot/cogs/audio/audio.py:2958
msgid "You must be in the voice channel to enqueue tracks."
msgstr "Vous devez être dans un salon vocal pour ajouter des pistes."
-#: redbot/cogs/audio/audio.py:1831
-msgid "Queued {num} track(s)."
-msgstr "{num} piste(s) ajoutée(s)."
+#: redbot/cogs/audio/audio.py:2997
+msgid "Queued {num} track(s).{maxlength_msg}"
+msgstr "{num} piste(s) ajoutée(s).{maxlength_msg}"
-#: redbot/cogs/audio/audio.py:1837
+#: redbot/cogs/audio/audio.py:3003
msgid "{time} until start of search playback: starts at #{position} in queue"
msgstr "{time} avant le début de la lecture de la recherche : commence à #{position} dans la liste"
-#: redbot/cogs/audio/audio.py:1997
+#: redbot/cogs/audio/audio.py:3169
msgid "Tracks Found:"
msgstr "Pistes trouvées :"
-#: redbot/cogs/audio/audio.py:1998
+#: redbot/cogs/audio/audio.py:3170
msgid "search results"
msgstr "résultats de la recherche"
-#: redbot/cogs/audio/audio.py:2001
+#: redbot/cogs/audio/audio.py:3173
msgid "Folders Found:"
msgstr "Dossiers trouvés :"
-#: redbot/cogs/audio/audio.py:2002
+#: redbot/cogs/audio/audio.py:3174
msgid "local folders"
msgstr "dossiers locaux"
-#: redbot/cogs/audio/audio.py:2004
+#: redbot/cogs/audio/audio.py:3176
msgid "Files Found:"
msgstr "Fichiers trouvés :"
-#: redbot/cogs/audio/audio.py:2005
+#: redbot/cogs/audio/audio.py:3177
msgid "local tracks"
msgstr "titres locaux"
-#: redbot/cogs/audio/audio.py:2022
+#: redbot/cogs/audio/audio.py:3195
#, docstring
-msgid "Seek ahead or behind on a track by seconds."
-msgstr "Revenir en arrière ou avancer une piste en secondes."
+msgid "Seek ahead or behind on a track by seconds or a to a specific time.\\n\\n Accepts seconds or a value formatted like 00:00:00 (`hh:mm:ss`) or 00:00 (`mm:ss`)."
+msgstr ""
-#: redbot/cogs/audio/audio.py:2031
+#: redbot/cogs/audio/audio.py:3206
msgid "You must be in the voice channel to use seek."
msgstr "Vous devez être dans un salon vocal pour utiliser la commande seek."
-#: redbot/cogs/audio/audio.py:2036
+#: redbot/cogs/audio/audio.py:3211
msgid "You need the DJ role to use seek."
msgstr "Vous devez avoir le rôle DJ pour utiliser la commande seek."
-#: redbot/cogs/audio/audio.py:2042 redbot/cogs/audio/audio.py:2278
+#: redbot/cogs/audio/audio.py:3217 redbot/cogs/audio/audio.py:3510
msgid "There are other people listening - vote to skip instead."
msgstr "Il existe d’autres personnes en train d'écouter - vote pour passer à la place."
-#: redbot/cogs/audio/audio.py:2046
+#: redbot/cogs/audio/audio.py:3221
msgid "Can't seek on a stream."
msgstr "Ne peut avancer ou reculer sur un stream."
-#: redbot/cogs/audio/audio.py:2052
+#: redbot/cogs/audio/audio.py:3230
+msgid "Invalid input for the time to seek."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:3236
msgid "Moved {num_seconds}s to 00:00:00"
msgstr "Déplacé de {num_seconds}s à 00:00:00"
-#: redbot/cogs/audio/audio.py:2057
+#: redbot/cogs/audio/audio.py:3241
msgid "Moved {num_seconds}s to {time}"
msgstr "Déplacé de {num_seconds}s à {time}"
-#: redbot/cogs/audio/audio.py:2068
+#: redbot/cogs/audio/audio.py:3249
+msgid "Moved to {time}"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:3261
#, docstring
msgid "Toggle shuffle."
msgstr "Activer/désactiver l'aléatoire."
-#: redbot/cogs/audio/audio.py:2072
+#: redbot/cogs/audio/audio.py:3265
msgid "You need the DJ role to toggle shuffle."
msgstr "Vous devez avoir le rôle DJ pour activer l'aléatoire."
-#: redbot/cogs/audio/audio.py:2083
+#: redbot/cogs/audio/audio.py:3273
msgid "You must be in the voice channel to toggle shuffle."
msgstr "Vous devez être dans un salon vocal pour activer l'aléatoire."
-#: redbot/cogs/audio/audio.py:2086
+#: redbot/cogs/audio/audio.py:3279
msgid "Shuffle tracks: {true_or_false}."
msgstr "Mélanger les pistes : {true_or_false}."
-#: redbot/cogs/audio/audio.py:2092
+#: redbot/cogs/audio/audio.py:3287
#, docstring
-msgid "Make Red sing one of her songs"
-msgstr "Fait chanter une des chansons de Red"
+msgid "Make Red sing one of her songs."
+msgstr "Fait chanter une des musiques de Red."
-#: redbot/cogs/audio/audio.py:2107
+#: redbot/cogs/audio/audio.py:3303
#, docstring
-msgid "Skip to the next track."
-msgstr "Passer à la piste suivante."
+msgid "Skip to the next track, or to a given track number."
+msgstr "Passez à la piste suivante, ou à un numéro de piste donné."
-#: redbot/cogs/audio/audio.py:2126
+#: redbot/cogs/audio/audio.py:3322
+msgid "Can't skip to a specific track in vote mode without the DJ role."
+msgstr "Impossible de passer à une piste spécifique en mode vote sans le rôle DJ."
+
+#: redbot/cogs/audio/audio.py:3326
msgid "I removed your vote to skip."
msgstr "J’ai enlevé votre vote pour passer."
-#: redbot/cogs/audio/audio.py:2129
+#: redbot/cogs/audio/audio.py:3329
msgid "You voted to skip."
msgstr "Vous avez voté pour passer."
-#: redbot/cogs/audio/audio.py:2142
+#: redbot/cogs/audio/audio.py:3342
msgid "Vote threshold met."
msgstr "Seuil de vote atteint."
-#: redbot/cogs/audio/audio.py:2145
+#: redbot/cogs/audio/audio.py:3345
msgid " Votes: {num_votes}/{num_members} ({cur_percent}% out of {required_percent}% needed)"
msgstr " Votes : {num_votes}/{num_members} ({cur_percent}%, {required_percent}% requis)"
-#: redbot/cogs/audio/audio.py:2228
+#: redbot/cogs/audio/audio.py:3425
msgid "Currently livestreaming {track}"
msgstr "Actuellement en streaming {track}"
-#: redbot/cogs/audio/audio.py:2235
+#: redbot/cogs/audio/audio.py:3432
msgid "{time} left on {track}"
msgstr "{time} restant sur {track}"
-#: redbot/cogs/audio/audio.py:2253
+#: redbot/cogs/audio/audio.py:3441
+msgid "Track number must be equal to or greater than 1."
+msgstr "Le numéro de piste doit être égal ou supérieur à 1."
+
+#: redbot/cogs/audio/audio.py:3454
+msgid "Can't skip to a track while shuffle is enabled."
+msgstr "Impossible de passer à une piste pendant que l'aléatoire est activé."
+
+#: redbot/cogs/audio/audio.py:3470
msgid "Track Skipped"
msgstr "Piste passée"
-#: redbot/cogs/audio/audio.py:2261
+#: redbot/cogs/audio/audio.py:3493
#, docstring
msgid "Stop playback and clear the queue."
msgstr "La lecture a été stoppée et la liste vidée."
-#: redbot/cogs/audio/audio.py:2271
+#: redbot/cogs/audio/audio.py:3503
msgid "You must be in the voice channel to stop the music."
msgstr "Vous devez être dans un salon vocal pour arrêter la musique."
-#: redbot/cogs/audio/audio.py:2282
+#: redbot/cogs/audio/audio.py:3514
msgid "You need the DJ role to stop the music."
msgstr "Vous devez avoir le rôle DJ pour arrêter la musique."
-#: redbot/cogs/audio/audio.py:2284
+#: redbot/cogs/audio/audio.py:3516
msgid "Stopping..."
msgstr "Arrêt ..."
-#: redbot/cogs/audio/audio.py:2294
+#: redbot/cogs/audio/audio.py:3531
+#, docstring
+msgid "Summon the bot to a voice channel."
+msgstr "Invoquez le bot dans un salon vocal."
+
+#: redbot/cogs/audio/audio.py:3535
+msgid "You need the DJ role to summon the bot."
+msgstr "Vous avez besoin du rôle DJ pour invoquer le bot."
+
+#: redbot/cogs/audio/audio.py:3565
#, docstring
msgid "Set the volume, 1% - 150%."
msgstr "Réglage du volume, 1 % à 150 %."
-#: redbot/cogs/audio/audio.py:2300
+#: redbot/cogs/audio/audio.py:3571
msgid "Current Volume:"
msgstr "Volume actuel :"
-#: redbot/cogs/audio/audio.py:2312
+#: redbot/cogs/audio/audio.py:3583
msgid "You must be in the voice channel to change the volume."
msgstr "Vous devez être dans un salon vocal pour changer le volume."
-#: redbot/cogs/audio/audio.py:2318
+#: redbot/cogs/audio/audio.py:3589
msgid "You need the DJ role to change the volume."
msgstr "Vous devez avoir le rôle DJ pour changer le volume."
-#: redbot/cogs/audio/audio.py:2331
+#: redbot/cogs/audio/audio.py:3602
msgid "Volume:"
msgstr "Volume :"
-#: redbot/cogs/audio/audio.py:2341
+#: redbot/cogs/audio/audio.py:3613
#, docstring
msgid "Lavalink server configuration options."
msgstr "Options de configuration du serveur Lavalink."
-#: redbot/cogs/audio/audio.py:2346
+#: redbot/cogs/audio/audio.py:3618
#, docstring
msgid "Toggle using external lavalink servers."
msgstr "Activer/désactiver l'usage de serveurs externes Lavalink."
-#: redbot/cogs/audio/audio.py:2357 redbot/cogs/audio/audio.py:2366
+#: redbot/cogs/audio/audio.py:3625 redbot/cogs/audio/audio.py:3635
msgid "External lavalink server: {true_or_false}."
msgstr "Serveur externe Lavalink : {true_or_false}."
-#: redbot/cogs/audio/audio.py:2361
-msgid "Defaults reset."
-msgstr "Réinitialisation des paramètres par défaut."
-
-#: redbot/cogs/audio/audio.py:2373
+#: redbot/cogs/audio/audio.py:3642
#, docstring
msgid "Set the lavalink server host."
msgstr "Définir l’hôte du serveur lavalink."
-#: redbot/cogs/audio/audio.py:2377 redbot/cogs/audio/audio.py:2382
+#: redbot/cogs/audio/audio.py:3646 redbot/cogs/audio/audio.py:3651
msgid "Host set to {host}."
msgstr "Hôte défini à {host}."
-#: redbot/cogs/audio/audio.py:2379 redbot/cogs/audio/audio.py:2395
-#: redbot/cogs/audio/audio.py:2413 redbot/cogs/audio/audio.py:2429
+#: redbot/cogs/audio/audio.py:3648 redbot/cogs/audio/audio.py:3664
+#: redbot/cogs/audio/audio.py:3682 redbot/cogs/audio/audio.py:3698
msgid "External lavalink server set to True."
msgstr "Serveur externe lavalink défini sur True."
-#: redbot/cogs/audio/audio.py:2388
+#: redbot/cogs/audio/audio.py:3657
#, docstring
msgid "Set the lavalink server password."
msgstr "Définir le mot de passe du serveur lavalink."
-#: redbot/cogs/audio/audio.py:2393 redbot/cogs/audio/audio.py:2399
+#: redbot/cogs/audio/audio.py:3662 redbot/cogs/audio/audio.py:3668
msgid "Server password set to {password}."
msgstr "Mot de passe serveur défini à {password}."
-#: redbot/cogs/audio/audio.py:2406
+#: redbot/cogs/audio/audio.py:3675
#, docstring
msgid "Set the lavalink REST server port."
msgstr "Définir le port REST du serveur lavalink."
-#: redbot/cogs/audio/audio.py:2411 redbot/cogs/audio/audio.py:2416
+#: redbot/cogs/audio/audio.py:3680 redbot/cogs/audio/audio.py:3685
msgid "REST port set to {port}."
msgstr "Port REST défini sur {port}."
-#: redbot/cogs/audio/audio.py:2422
+#: redbot/cogs/audio/audio.py:3691
#, docstring
msgid "Set the lavalink websocket server port."
msgstr "Définir le port du websocket du serveur lavalink."
-#: redbot/cogs/audio/audio.py:2427 redbot/cogs/audio/audio.py:2432
+#: redbot/cogs/audio/audio.py:3696 redbot/cogs/audio/audio.py:3701
msgid "Websocket port set to {port}."
msgstr "Port websocket défini sur {port}."
-#: redbot/cogs/audio/audio.py:2461
+#: redbot/cogs/audio/audio.py:3801
msgid "Not enough {currency} ({required_credits} required)."
msgstr "Pas assez de {currency} ({required_credits} voulu)."
diff --git a/redbot/cogs/audio/locales/hu-HU.po b/redbot/cogs/audio/locales/hu-HU.po
index 9c2a50f8f..868fbfe29 100644
--- a/redbot/cogs/audio/locales/hu-HU.po
+++ b/redbot/cogs/audio/locales/hu-HU.po
@@ -1,14 +1,14 @@
msgid ""
msgstr ""
"Project-Id-Version: red-discordbot\n"
-"POT-Creation-Date: 2019-02-17 02:24+0000\n"
-"PO-Revision-Date: 2019-02-25 03:07\n"
-"Last-Translator: Kowlin \n"
+"POT-Creation-Date: 2019-07-05 22:33+0200\n"
+"PO-Revision-Date: 2019-07-06 16:13\n"
+"Last-Translator: Robert Jansen (Kowlin)\n"
"Language-Team: Hungarian\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"Generated-By: redgettext 2.2\n"
+"Generated-By: redgettext 3.0\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: crowdin.com\n"
"X-Crowdin-Project: red-discordbot\n"
@@ -16,971 +16,1275 @@ msgstr ""
"X-Crowdin-File: /cogs/audio/locales/messages.pot\n"
"Language: hu_HU\n"
-#: redbot/cogs/audio/audio.py:38
+#: redbot/cogs/audio/audio.py:47
#, docstring
msgid "Play audio through voice channels."
msgstr ""
-#: redbot/cogs/audio/audio.py:173 redbot/cogs/audio/audio.py:735
-msgid "Now Playing"
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:177
-msgid "Track length: {length} | Requested by: {user}"
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:201 redbot/cogs/audio/audio.py:227
+#: redbot/cogs/audio/audio.py:260
msgid "music in {} servers"
msgstr ""
-#: redbot/cogs/audio/audio.py:211
+#: redbot/cogs/audio/audio.py:300 redbot/cogs/audio/audio.py:1317
+msgid "Now Playing"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:304
+msgid "Track length: {length} | Requested by: {user}"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:331
msgid "Queue ended."
msgstr ""
-#: redbot/cogs/audio/audio.py:240
+#: redbot/cogs/audio/audio.py:350
msgid "Track Error"
msgstr ""
-#: redbot/cogs/audio/audio.py:245
+#: redbot/cogs/audio/audio.py:355
msgid "Skipping..."
msgstr ""
-#: redbot/cogs/audio/audio.py:252
+#: redbot/cogs/audio/audio.py:363
#, docstring
msgid "Music configuration options."
msgstr ""
-#: redbot/cogs/audio/audio.py:258
+#: redbot/cogs/audio/audio.py:369
#, docstring
-msgid "Toggle DJ mode.\n\n"
-" DJ mode allows users with the DJ role to use audio commands.\n"
-" "
+msgid "Toggle the bot auto-disconnecting when done playing.\\n\\n This setting takes precedence over [p]audioset emptydisconnect.\\n "
msgstr ""
-#: redbot/cogs/audio/audio.py:265
+#: redbot/cogs/audio/audio.py:377
+msgid "Auto-disconnection at queue end: {true_or_false}."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:385
+#, docstring
+msgid "Toggle DJ mode.\\n\\n DJ mode allows users with the DJ role to use audio commands.\\n "
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:392
msgid "Please set a role to use with DJ mode. Enter the role name or ID now."
msgstr ""
-#: redbot/cogs/audio/audio.py:273
+#: redbot/cogs/audio/audio.py:400
msgid "Response timed out, try again later."
msgstr ""
-#: redbot/cogs/audio/audio.py:284
+#: redbot/cogs/audio/audio.py:405
+msgid "DJ role enabled: {true_or_false}."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:411
#, docstring
msgid "Auto-disconnection after x seconds while stopped. 0 to disable."
msgstr ""
-#: redbot/cogs/audio/audio.py:286 redbot/cogs/audio/audio.py:317
-#: redbot/cogs/audio/audio.py:405
+#: redbot/cogs/audio/audio.py:413 redbot/cogs/audio/audio.py:436
+#: redbot/cogs/audio/audio.py:543 redbot/cogs/audio/audio.py:687
msgid "Can't be less than zero."
msgstr ""
-#: redbot/cogs/audio/audio.py:291
+#: redbot/cogs/audio/audio.py:418
msgid "Empty disconnect disabled."
msgstr ""
-#: redbot/cogs/audio/audio.py:296
+#: redbot/cogs/audio/audio.py:423
msgid "Empty disconnect timer set to {num_seconds}."
msgstr ""
-#: redbot/cogs/audio/audio.py:307
-#, docstring
-msgid "Set the role to use for DJ mode."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:310
-msgid "DJ role set to: {role.name}."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:315
+#: redbot/cogs/audio/audio.py:434
#, docstring
msgid "Set a price for queueing tracks for non-mods. 0 to disable."
msgstr ""
-#: redbot/cogs/audio/audio.py:320
+#: redbot/cogs/audio/audio.py:439
msgid "Jukebox mode disabled."
msgstr ""
-#: redbot/cogs/audio/audio.py:325
+#: redbot/cogs/audio/audio.py:444
msgid "Track queueing command price set to {price} {currency}."
msgstr ""
-#: redbot/cogs/audio/audio.py:336
+#: redbot/cogs/audio/audio.py:455
+#, docstring
+msgid "Set the localtracks path if the Lavalink.jar is not run from the Audio data folder.\\n\\n Leave the path blank to reset the path to the default, the Audio data directory.\\n "
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:463
+msgid "The localtracks path location has been reset to the default location."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:466
+msgid "This setting is only for bot owners to set a localtracks folder location if the Lavalink.jar is being ran from outside of the Audio data directory.\\nIn the example below, the full path for 'ParentDirectory' must be passed to this command.\\nThe path must not contain spaces.\\n```\\nParentDirectory\\n |__ localtracks (folder)\\n | |__ Awesome Album Name (folder)\\n | |__01 Cool Song.mp3\\n | |__02 Groovy Song.mp3\\n |\\n |__ Lavalink.jar\\n |__ application.yml\\n```\\nThe folder path given to this command must contain the Lavalink.jar, the application.yml, and the localtracks folder.\\nUse this command with no path given to reset it to the default, the Audio data directory for this bot.\\nDo you want to continue to set the provided path for local tracks?"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:505
+msgid "{local_path} does not seem like a valid path."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:520
+msgid "The path that was entered does not have {filelist} file in that location. The path will still be saved, but please check the path and the file location before attempting to play local tracks or start your Lavalink.jar."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:530
+msgid "Localtracks path set to: {local_path}."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:536
+#, docstring
+msgid "Max length of a track to queue in seconds. 0 to disable.\\n\\n Accepts seconds or a value formatted like 00:00:00 (`hh:mm:ss`) or 00:00 (`mm:ss`).\\n Invalid input will turn the max length setting off."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:545
+msgid "Track max length disabled."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:549
+msgid "Track max length set to {seconds}."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:559
#, docstring
msgid "Toggle track announcement and other bot messages."
msgstr ""
-#: redbot/cogs/audio/audio.py:340
+#: redbot/cogs/audio/audio.py:563
msgid "Verbose mode on: {true_or_false}."
msgstr ""
-#: redbot/cogs/audio/audio.py:345
+#: redbot/cogs/audio/audio.py:569
+#, docstring
+msgid "Toggle the domain restriction on Audio.\\n\\n When toggled off, users will be able to play songs from non-commercial websites and links.\\n When toggled on, users are restricted to YouTube, SoundCloud, Mixer, Vimeo, Twitch, and Bandcamp links."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:576
+msgid "Commercial links only: {true_or_false}."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:582
+#, docstring
+msgid "Set the role to use for DJ mode."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:585
+msgid "DJ role set to: {role.name}."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:589
#, docstring
msgid "Show the current settings."
msgstr ""
-#: redbot/cogs/audio/audio.py:358
+#: redbot/cogs/audio/audio.py:604
msgid "Server Settings"
msgstr ""
-#: redbot/cogs/audio/audio.py:360
-msgid "Disconnect timer: [{num_seconds}]\n"
+#: redbot/cogs/audio/audio.py:606
+msgid "Auto-disconnect: [{dc}]\\n"
msgstr ""
-#: redbot/cogs/audio/audio.py:364
-msgid "DJ Role: [{role.name}]\n"
+#: redbot/cogs/audio/audio.py:609
+msgid "Disconnect timer: [{num_seconds}]\\n"
msgstr ""
-#: redbot/cogs/audio/audio.py:366
-msgid "Jukebox: [{jukebox_name}]\n"
+#: redbot/cogs/audio/audio.py:613
+msgid "DJ Role: [{role.name}]\\n"
msgstr ""
-#: redbot/cogs/audio/audio.py:367
-msgid "Command price: [{jukebox_price}]\n"
+#: redbot/cogs/audio/audio.py:615
+msgid "Jukebox: [{jukebox_name}]\\n"
msgstr ""
-#: redbot/cogs/audio/audio.py:368
-msgid "Repeat: [{repeat}]\n"
-"Shuffle: [{shuffle}]\n"
-"Song notify msgs: [{notify}]\n"
-"Songs as status: [{status}]\n"
+#: redbot/cogs/audio/audio.py:616
+msgid "Command price: [{jukebox_price}]\\n"
msgstr ""
-#: redbot/cogs/audio/audio.py:375
-msgid "Thumbnails: [{0}]\n"
+#: redbot/cogs/audio/audio.py:618
+msgid "Max track length: [{tracklength}]\\n"
msgstr ""
-#: redbot/cogs/audio/audio.py:377
-msgid "Vote skip: [{vote_enabled}]\n"
-"Skip percentage: [{vote_percent}%]\n"
+#: redbot/cogs/audio/audio.py:621
+msgid "Repeat: [{repeat}]\\nShuffle: [{shuffle}]\\nSong notify msgs: [{notify}]\\nSongs as status: [{status}]\\n"
msgstr ""
-#: redbot/cogs/audio/audio.py:380
-msgid "---Lavalink Settings---\n"
-"Cog version: [{version}]\n"
-"Jar build: [{jarbuild}]\n"
-"External server: [{use_external_lavalink}]"
+#: redbot/cogs/audio/audio.py:628
+msgid "Thumbnails: [{0}]\\n"
msgstr ""
-#: redbot/cogs/audio/audio.py:393
+#: redbot/cogs/audio/audio.py:630
+msgid "Vote skip: [{vote_enabled}]\\nSkip percentage: [{vote_percent}%]\\n"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:633
+msgid "---Lavalink Settings--- \\nCog version: [{version}]\\nJar build: [{jarbuild}]\\nExternal server: [{use_external_lavalink}]\\n"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:640
+msgid "Localtracks path: [{localpath}]\\n"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:648
#, docstring
-msgid "Toggle displaying a thumbnail on audio messages."
+msgid "Instructions to set the Spotify API tokens."
msgstr ""
-#: redbot/cogs/audio/audio.py:397
-msgid "Thumbnail display: {true_or_false}."
+#: redbot/cogs/audio/audio.py:649
+msgid "1. Go to Spotify developers and log in with your Spotify account.\\n(https://developer.spotify.com/dashboard/applications)\\n2. Click \\\"Create An App\\\".\\n3. Fill out the form provided with your app name, etc.\\n4. When asked if you're developing commercial integration select \\\"No\\\".\\n5. Accept the terms and conditions.\\n6. Copy your client ID and your client secret into:\\n`{prefix}set api spotify client_id, client_secret,`"
msgstr ""
-#: redbot/cogs/audio/audio.py:403
-#, docstring
-msgid "Percentage needed for non-mods to skip tracks. 0 to disable."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:411
-msgid "Voting disabled. All users can use queue management commands."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:416
-msgid "Vote percentage set to {percent}%."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:425
+#: redbot/cogs/audio/audio.py:665
#, docstring
msgid "Enable/disable tracks' titles as status."
msgstr ""
-#: redbot/cogs/audio/audio.py:429
+#: redbot/cogs/audio/audio.py:669
msgid "Song titles as status: {true_or_false}."
msgstr ""
-#: redbot/cogs/audio/audio.py:435
+#: redbot/cogs/audio/audio.py:675
+#, docstring
+msgid "Toggle displaying a thumbnail on audio messages."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:679
+msgid "Thumbnail display: {true_or_false}."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:685
+#, docstring
+msgid "Percentage needed for non-mods to skip tracks. 0 to disable."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:693
+msgid "Voting disabled. All users can use queue management commands."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:698
+msgid "Vote percentage set to {percent}%."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:707
+#, docstring
+msgid "Instructions to set the YouTube API key."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:726
#, docstring
msgid "Audio stats."
msgstr ""
-#: redbot/cogs/audio/audio.py:469 redbot/cogs/audio/audio.py:489
-#: redbot/cogs/audio/audio.py:698 redbot/cogs/audio/audio.py:788
-#: redbot/cogs/audio/audio.py:804 redbot/cogs/audio/audio.py:829
-#: redbot/cogs/audio/audio.py:836 redbot/cogs/audio/audio.py:1179
-#: redbot/cogs/audio/audio.py:1466 redbot/cogs/audio/audio.py:1724
-#: redbot/cogs/audio/audio.py:2026 redbot/cogs/audio/audio.py:2063
-#: redbot/cogs/audio/audio.py:2109 redbot/cogs/audio/audio.py:2265
-#: redbot/cogs/audio/audio.py:2304 redbot/cogs/audio/audio.py:2334
+#: redbot/cogs/audio/audio.py:754 redbot/cogs/audio/audio.py:782
+#: redbot/cogs/audio/audio.py:819 redbot/cogs/audio/audio.py:847
+#: redbot/cogs/audio/audio.py:914 redbot/cogs/audio/audio.py:932
+#: redbot/cogs/audio/audio.py:956 redbot/cogs/audio/audio.py:1026
+#: redbot/cogs/audio/audio.py:1280 redbot/cogs/audio/audio.py:1371
+#: redbot/cogs/audio/audio.py:1388 redbot/cogs/audio/audio.py:1411
+#: redbot/cogs/audio/audio.py:1419 redbot/cogs/audio/audio.py:2190
+#: redbot/cogs/audio/audio.py:2527 redbot/cogs/audio/audio.py:2860
+#: redbot/cogs/audio/audio.py:3201 redbot/cogs/audio/audio.py:3255
+#: redbot/cogs/audio/audio.py:3305 redbot/cogs/audio/audio.py:3497
+#: redbot/cogs/audio/audio.py:3575 redbot/cogs/audio/audio.py:3605
msgid "Nothing playing."
msgstr ""
-#: redbot/cogs/audio/audio.py:473
+#: redbot/cogs/audio/audio.py:758
msgid "Not connected anywhere."
msgstr ""
-#: redbot/cogs/audio/audio.py:478
-msgid "Connected in {num} servers:"
+#: redbot/cogs/audio/audio.py:764
+msgid "Playing in {num}/{total} servers:"
msgstr ""
-#: redbot/cogs/audio/audio.py:486
+#: redbot/cogs/audio/audio.py:779
#, docstring
msgid "Bump a track number to the top of the queue."
msgstr ""
-#: redbot/cogs/audio/audio.py:495
+#: redbot/cogs/audio/audio.py:788
msgid "You must be in the voice channel to bump a track."
msgstr ""
-#: redbot/cogs/audio/audio.py:499
+#: redbot/cogs/audio/audio.py:792
msgid "You need the DJ role to bump tracks."
msgstr ""
-#: redbot/cogs/audio/audio.py:502 redbot/cogs/audio/audio.py:1739
+#: redbot/cogs/audio/audio.py:795 redbot/cogs/audio/audio.py:2875
msgid "Song number must be greater than 1 and within the queue limit."
msgstr ""
-#: redbot/cogs/audio/audio.py:517
+#: redbot/cogs/audio/audio.py:810
msgid "Moved {track} to the top of the queue."
msgstr ""
-#: redbot/cogs/audio/audio.py:523
+#: redbot/cogs/audio/audio.py:817
#, docstring
msgid "Disconnect from the voice channel."
msgstr ""
-#: redbot/cogs/audio/audio.py:528
+#: redbot/cogs/audio/audio.py:826
msgid "You need the DJ role to disconnect."
msgstr ""
-#: redbot/cogs/audio/audio.py:532
+#: redbot/cogs/audio/audio.py:830
msgid "There are other people listening to music."
msgstr ""
-#: redbot/cogs/audio/audio.py:540
+#: redbot/cogs/audio/audio.py:845
+#, docstring
+msgid "Equalizer management."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:865
+#, docstring
+msgid "Delete a saved eq preset."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:887
+#, docstring
+msgid "List saved eq presets."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:890
+msgid "No saved equalizer presets."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:897
+msgid "{num} preset(s)"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:903
+#, docstring
+msgid "Load a saved eq preset."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:930
+#, docstring
+msgid "Reset the eq to 0 across all bands."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:946
+msgid "Equalizer values have been reset."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:954
+#, docstring
+msgid "Save the current eq settings to a preset."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:958
+msgid "Please enter a name for this equalizer preset."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:972
+msgid "No equalizer preset name entered, try the command again later."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:981 redbot/cogs/audio/audio.py:2213
+msgid "Try the command again with a shorter name."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:985
+msgid "Preset name already exists, do you want to replace it?"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:994
+msgid "Not saving preset."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1019
+#, docstring
+msgid "Set an eq band with a band number or name and value.\\n\\n Band positions are 1-15 and values have a range of -0.25 to 1.0.\\n Band names are 25, 40, 63, 100, 160, 250, 400, 630, 1k, 1.6k, 2.5k, 4k, 6.3k, 10k, and 16k Hz.\\n Setting a band value to -0.25 nullifies it while +0.25 is double.\\n "
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1063
+msgid "Valid band numbers are 1-15 or the band names listed in the help for this command."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1099
#, docstring
msgid "Local playback commands."
msgstr ""
-#: redbot/cogs/audio/audio.py:545
+#: redbot/cogs/audio/audio.py:1104
#, docstring
msgid "Play all songs in a localtracks folder."
msgstr ""
-#: redbot/cogs/audio/audio.py:552
+#: redbot/cogs/audio/audio.py:1115
+msgid "No localtracks folder named {name}."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1121
#, docstring
msgid "Play a local track."
msgstr ""
-#: redbot/cogs/audio/audio.py:557
+#: redbot/cogs/audio/audio.py:1126
msgid "No local track folders found."
msgstr ""
-#: redbot/cogs/audio/audio.py:600
+#: redbot/cogs/audio/audio.py:1169
#, docstring
msgid "Search for songs across all localtracks folders."
msgstr ""
-#: redbot/cogs/audio/audio.py:605
+#: redbot/cogs/audio/audio.py:1174
msgid "No album folders found."
msgstr ""
-#: redbot/cogs/audio/audio.py:612 redbot/cogs/audio/audio.py:1634
+#: redbot/cogs/audio/audio.py:1181 redbot/cogs/audio/audio.py:2816
msgid "No matches."
msgstr ""
-#: redbot/cogs/audio/audio.py:688
+#: redbot/cogs/audio/audio.py:1269
msgid "No localtracks folder."
msgstr ""
-#: redbot/cogs/audio/audio.py:696
+#: redbot/cogs/audio/audio.py:1278
#, docstring
msgid "Now playing."
msgstr ""
-#: redbot/cogs/audio/audio.py:716
+#: redbot/cogs/audio/audio.py:1298
msgid "Requested by: **{track.requester}**"
msgstr ""
-#: redbot/cogs/audio/audio.py:726
+#: redbot/cogs/audio/audio.py:1308
msgid "Nothing."
msgstr ""
-#: redbot/cogs/audio/audio.py:785
+#: redbot/cogs/audio/audio.py:1368
#, docstring
-msgid "Pause and resume."
+msgid "Pause or resume a playing track."
msgstr ""
-#: redbot/cogs/audio/audio.py:794
-msgid "You must be in the voice channel to pause the music."
+#: redbot/cogs/audio/audio.py:1377
+msgid "You must be in the voice channel pause or resume."
msgstr ""
-#: redbot/cogs/audio/audio.py:800
-msgid "You need the DJ role to pause tracks."
+#: redbot/cogs/audio/audio.py:1384
+msgid "You need the DJ role to pause or resume tracks."
msgstr ""
-#: redbot/cogs/audio/audio.py:814
+#: redbot/cogs/audio/audio.py:1401
msgid "Track Paused"
msgstr ""
-#: redbot/cogs/audio/audio.py:821
+#: redbot/cogs/audio/audio.py:1407
msgid "Track Resumed"
msgstr ""
-#: redbot/cogs/audio/audio.py:826
-msgid "Track is paused."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:828
-msgid "Track is playing."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:834
+#: redbot/cogs/audio/audio.py:1417
#, docstring
msgid "Queue percentage."
msgstr ""
-#: redbot/cogs/audio/audio.py:860
+#: redbot/cogs/audio/audio.py:1443
msgid "Nothing in the queue."
msgstr ""
-#: redbot/cogs/audio/audio.py:882
+#: redbot/cogs/audio/audio.py:1465
msgid "Queued and playing tracks:"
msgstr ""
-#: redbot/cogs/audio/audio.py:890
+#: redbot/cogs/audio/audio.py:1474
#, docstring
msgid "Play a URL or search for a track."
msgstr ""
-#: redbot/cogs/audio/audio.py:900 redbot/cogs/audio/audio.py:1411
-#: redbot/cogs/audio/audio.py:1795
+#: redbot/cogs/audio/audio.py:1481
+msgid "That URL is not allowed."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1484 redbot/cogs/audio/audio.py:2437
+#: redbot/cogs/audio/audio.py:2928 redbot/cogs/audio/audio.py:3047
+msgid "Connection to Lavalink has failed."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1486 redbot/cogs/audio/audio.py:2439
+#: redbot/cogs/audio/audio.py:2930 redbot/cogs/audio/audio.py:3049
+msgid "Please check your console or logs for details."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1495 redbot/cogs/audio/audio.py:2449
+#: redbot/cogs/audio/audio.py:2939 redbot/cogs/audio/audio.py:3543
msgid "I don't have permission to connect to your channel."
msgstr ""
-#: redbot/cogs/audio/audio.py:906 redbot/cogs/audio/audio.py:1422
-#: redbot/cogs/audio/audio.py:1801 redbot/cogs/audio/audio.py:1889
+#: redbot/cogs/audio/audio.py:1501 redbot/cogs/audio/audio.py:2461
+#: redbot/cogs/audio/audio.py:2945 redbot/cogs/audio/audio.py:3056
+#: redbot/cogs/audio/audio.py:3555
msgid "Connect to a voice channel first."
msgstr ""
-#: redbot/cogs/audio/audio.py:909 redbot/cogs/audio/audio.py:1418
-#: redbot/cogs/audio/audio.py:1804 redbot/cogs/audio/audio.py:1892
+#: redbot/cogs/audio/audio.py:1504 redbot/cogs/audio/audio.py:2457
+#: redbot/cogs/audio/audio.py:2948 redbot/cogs/audio/audio.py:3059
+#: redbot/cogs/audio/audio.py:3558
msgid "Connection to Lavalink has not yet been established."
msgstr ""
-#: redbot/cogs/audio/audio.py:913
+#: redbot/cogs/audio/audio.py:1508
msgid "You need the DJ role to queue tracks."
msgstr ""
-#: redbot/cogs/audio/audio.py:922
+#: redbot/cogs/audio/audio.py:1519
msgid "You must be in the voice channel to use the play command."
msgstr ""
-#: redbot/cogs/audio/audio.py:928
+#: redbot/cogs/audio/audio.py:1525
msgid "No tracks to play."
msgstr ""
-#: redbot/cogs/audio/audio.py:942 redbot/cogs/audio/audio.py:1450
-#: redbot/cogs/audio/audio.py:1828 redbot/cogs/audio/audio.py:1865
+#: redbot/cogs/audio/audio.py:1565
+msgid "The owner needs to set the Spotify client ID, Spotify client secret, and YouTube API key before Spotify URLs or codes can be used. \\nSee `{prefix}audioset youtubeapi` and `{prefix}audioset spotifyapi` for instructions."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1575 redbot/cogs/audio/audio.py:2493
+msgid "Wait until the playlist has finished loading."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1592 redbot/cogs/audio/audio.py:1657
+#: redbot/cogs/audio/audio.py:2499 redbot/cogs/audio/audio.py:2509
+#: redbot/cogs/audio/audio.py:2973 redbot/cogs/audio/audio.py:3027
msgid "Nothing found."
msgstr ""
-#: redbot/cogs/audio/audio.py:953 redbot/cogs/audio/audio.py:1295
+#: redbot/cogs/audio/audio.py:1600
+msgid "The Spotify API key or client secret has not been set properly. \\nUse `{prefix}audioset spotifyapi` for instructions."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1639 redbot/cogs/audio/audio.py:1776
+msgid "This doesn't seem to be a valid Spotify URL or code."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1688 redbot/cogs/audio/audio.py:2320
msgid "Playlist Enqueued"
msgstr ""
-#: redbot/cogs/audio/audio.py:954 redbot/cogs/audio/audio.py:1296
-msgid "Added {num} tracks to the queue."
+#: redbot/cogs/audio/audio.py:1689 redbot/cogs/audio/audio.py:2321
+msgid "Added {num} tracks to the queue.{maxlength_msg}"
msgstr ""
-#: redbot/cogs/audio/audio.py:958
+#: redbot/cogs/audio/audio.py:1695
msgid "{time} until start of playlist playback: starts at #{position} in queue"
msgstr ""
-#: redbot/cogs/audio/audio.py:980 redbot/cogs/audio/audio.py:1938
+#: redbot/cogs/audio/audio.py:1711 redbot/cogs/audio/audio.py:3125
+msgid "Track exceeds maximum length."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1717
+msgid "Nothing found. Check your Lavalink logs for details."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1732 redbot/cogs/audio/audio.py:3108
msgid "Track Enqueued"
msgstr ""
-#: redbot/cogs/audio/audio.py:984 redbot/cogs/audio/audio.py:1944
+#: redbot/cogs/audio/audio.py:1736 redbot/cogs/audio/audio.py:3114
msgid "{time} until track playback: #{position} in queue"
msgstr ""
-#: redbot/cogs/audio/audio.py:989 redbot/cogs/audio/audio.py:1949
+#: redbot/cogs/audio/audio.py:1741 redbot/cogs/audio/audio.py:3119
msgid "#{position} in queue"
msgstr ""
-#: redbot/cogs/audio/audio.py:997
+#: redbot/cogs/audio/audio.py:1761
+msgid "The Spotify API key or client secret has not been set properly. \\nUse `{prefix}audioset spotifyapi` for instructions."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1793 redbot/cogs/audio/audio.py:2384
+msgid "Please wait, adding tracks..."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1809
+msgid "The connection was reset while loading the playlist."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1826 redbot/cogs/audio/audio.py:2401
+msgid "Loading track {num}/{total}..."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1840
+msgid "Approximate time remaining: {seconds}"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1850
+msgid "Nothing found.\\nThe YouTube API key may be invalid or you may be rate limited on YouTube's search service.\\nCheck the YouTube API key again and follow the instructions at `{prefix}audioset youtubeapi`."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1871
#, docstring
msgid "Playlist configuration options."
msgstr ""
-#: redbot/cogs/audio/audio.py:1002
+#: redbot/cogs/audio/audio.py:1876
#, docstring
-msgid "Add a track URL, playlist link, or quick search to a playlist.\n\n"
-" The track(s) will be appended to the end of the playlist.\n"
-" "
+msgid "Add a track URL, playlist link, or quick search to a playlist.\\n\\n The track(s) will be appended to the end of the playlist.\\n "
msgstr ""
-#: redbot/cogs/audio/audio.py:1014 redbot/cogs/audio/audio.py:1078
-#: redbot/cogs/audio/audio.py:1228
+#: redbot/cogs/audio/audio.py:1888 redbot/cogs/audio/audio.py:2028
+#: redbot/cogs/audio/audio.py:2241
msgid "You are not the author of that playlist."
msgstr ""
-#: redbot/cogs/audio/audio.py:1024
+#: redbot/cogs/audio/audio.py:1898
msgid "{track} is already in {playlist}."
msgstr ""
-#: redbot/cogs/audio/audio.py:1033 redbot/cogs/audio/audio.py:1082
-#: redbot/cogs/audio/audio.py:1092 redbot/cogs/audio/audio.py:1231
+#: redbot/cogs/audio/audio.py:1907 redbot/cogs/audio/audio.py:2032
+#: redbot/cogs/audio/audio.py:2081 redbot/cogs/audio/audio.py:2244
msgid "No playlist with that name."
msgstr ""
-#: redbot/cogs/audio/audio.py:1040
+#: redbot/cogs/audio/audio.py:1914
msgid "{track} appended to {playlist}."
msgstr ""
-#: redbot/cogs/audio/audio.py:1046
+#: redbot/cogs/audio/audio.py:1920
msgid "{num} tracks appended to {playlist}."
msgstr ""
-#: redbot/cogs/audio/audio.py:1053
+#: redbot/cogs/audio/audio.py:1928
+#, docstring
+msgid "Copy a playlist from one server to another."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1932
+msgid "Invalid server ID for source server."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1934
+msgid "Invalid server ID for target server."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1939
+msgid "No playlist with that name in {from_guild_name}."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1950
+msgid "Playlist {name} copied from {from_guild_name} to {to_guild_name}."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1962
+msgid "A playlist with that name already exists in {to_guild_name}.\\nPlease enter a new name for this playlist."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1975
+msgid "Try the playlist copy command again with a shorter name."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1980
+msgid "Playlist name already exists in {to_guild_name}, try the playlist copy command again with a different name."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1986 redbot/cogs/audio/audio.py:2220
+msgid "No playlist name entered, try again later."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1991
+msgid "Playlist {name} copied from {from_guild_name} to {to_guild_name}.\\nNew playlist name on {to_guild_name}: {new_name}"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2003
#, docstring
msgid "Create an empty playlist."
msgstr ""
-#: redbot/cogs/audio/audio.py:1057 redbot/cogs/audio/audio.py:1172
+#: redbot/cogs/audio/audio.py:2007 redbot/cogs/audio/audio.py:2183
msgid "You need the DJ role to save playlists."
msgstr ""
-#: redbot/cogs/audio/audio.py:1061 redbot/cogs/audio/audio.py:1176
-#: redbot/cogs/audio/audio.py:1204
+#: redbot/cogs/audio/audio.py:2011 redbot/cogs/audio/audio.py:2187
+#: redbot/cogs/audio/audio.py:2217
msgid "Playlist name already exists, try again with a different name."
msgstr ""
-#: redbot/cogs/audio/audio.py:1067
+#: redbot/cogs/audio/audio.py:2017
msgid "Empty playlist {name} created."
msgstr ""
-#: redbot/cogs/audio/audio.py:1071
+#: redbot/cogs/audio/audio.py:2021
#, docstring
msgid "Delete a saved playlist."
msgstr ""
-#: redbot/cogs/audio/audio.py:1083
+#: redbot/cogs/audio/audio.py:2033
msgid "{name} playlist deleted."
msgstr ""
-#: redbot/cogs/audio/audio.py:1087
+#: redbot/cogs/audio/audio.py:2039
+#, docstring
+msgid "Download a copy of a playlist.\\n\\n These files can be used with the [p]playlist upload command.\\n Red v2-compatible playlists can be generated by passing True\\n for the v2 variable."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2061
+msgid "That playlist has no tracks."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2063 redbot/cogs/audio/audio.py:2331
+msgid "That playlist doesn't exist."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2076
#, docstring
msgid "Retrieve information from a saved playlist."
msgstr ""
-#: redbot/cogs/audio/audio.py:1100
-msgid "**Custom playlist.**"
+#: redbot/cogs/audio/audio.py:2101
+msgid "Playlist info for {playlist_name}:\\n"
msgstr ""
-#: redbot/cogs/audio/audio.py:1102
-msgid "URL: <{url}>"
+#: redbot/cogs/audio/audio.py:2105
+msgid "Playlist info for {playlist_name}:\\nURL: {url}"
msgstr ""
-#: redbot/cogs/audio/audio.py:1105
-msgid "Playlist info for {playlist_name}:"
+#: redbot/cogs/audio/audio.py:2116
+msgid "Author: {author_name} | {num} track(s)"
msgstr ""
-#: redbot/cogs/audio/audio.py:1106
-msgid "Author: **{author_name}**\n"
-"{url}"
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:1110
-msgid "{num} track(s)"
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:1115
+#: redbot/cogs/audio/audio.py:2126
#, docstring
msgid "List saved playlists."
msgstr ""
-#: redbot/cogs/audio/audio.py:1118
+#: redbot/cogs/audio/audio.py:2129
msgid "No saved playlists."
msgstr ""
-#: redbot/cogs/audio/audio.py:1130
+#: redbot/cogs/audio/audio.py:2141
msgid "Tracks: {num}"
msgstr ""
-#: redbot/cogs/audio/audio.py:1131
-msgid "Author: {name}\n"
+#: redbot/cogs/audio/audio.py:2142
+msgid "Author: {name}\\n"
msgstr ""
-#: redbot/cogs/audio/audio.py:1155
+#: redbot/cogs/audio/audio.py:2166
msgid "Playlists for {server_name}:"
msgstr ""
-#: redbot/cogs/audio/audio.py:1159
+#: redbot/cogs/audio/audio.py:2170
msgid "Page {page_num}/{total_pages} | {num} playlists"
msgstr ""
-#: redbot/cogs/audio/audio.py:1168
+#: redbot/cogs/audio/audio.py:2179
#, docstring
msgid "Save the queue to a playlist."
msgstr ""
-#: redbot/cogs/audio/audio.py:1189
+#: redbot/cogs/audio/audio.py:2193 redbot/cogs/audio/audio.py:2590
+#: redbot/cogs/audio/audio.py:2593 redbot/cogs/audio/audio.py:2613
+#: redbot/cogs/audio/audio.py:2756 redbot/cogs/audio/audio.py:2759
+#: redbot/cogs/audio/audio.py:2775 redbot/cogs/audio/audio.py:2778
+#: redbot/cogs/audio/audio.py:2810 redbot/cogs/audio/audio.py:2812
+#: redbot/cogs/audio/audio.py:3418 redbot/cogs/audio/audio.py:3422
+#: redbot/cogs/audio/audio.py:3429
+msgid "There's nothing in the queue."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2202
msgid "Please enter a name for this playlist."
msgstr ""
-#: redbot/cogs/audio/audio.py:1200
-msgid "Try the command again with a shorter name."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:1207
-msgid "No playlist name entered, try again later."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:1214
+#: redbot/cogs/audio/audio.py:2227
msgid "Playlist {name} saved from current queue: {num} tracks added."
msgstr ""
-#: redbot/cogs/audio/audio.py:1221
+#: redbot/cogs/audio/audio.py:2234
#, docstring
msgid "Remove a track from a playlist by url."
msgstr ""
-#: redbot/cogs/audio/audio.py:1235
+#: redbot/cogs/audio/audio.py:2248
msgid "URL not in playlist."
msgstr ""
-#: redbot/cogs/audio/audio.py:1239
+#: redbot/cogs/audio/audio.py:2252
msgid "No tracks left, removing playlist."
msgstr ""
-#: redbot/cogs/audio/audio.py:1246
+#: redbot/cogs/audio/audio.py:2259
msgid "{num} entries have been removed from the {playlist_name} playlist."
msgstr ""
-#: redbot/cogs/audio/audio.py:1253
+#: redbot/cogs/audio/audio.py:2266
msgid "The track has been removed from the {playlist_name} playlist."
msgstr ""
-#: redbot/cogs/audio/audio.py:1260
+#: redbot/cogs/audio/audio.py:2273
#, docstring
msgid "Save a playlist from a url."
msgstr ""
-#: redbot/cogs/audio/audio.py:1272
+#: redbot/cogs/audio/audio.py:2285
msgid "Playlist {name} saved: {num} tracks added."
msgstr ""
-#: redbot/cogs/audio/audio.py:1279
+#: redbot/cogs/audio/audio.py:2292
#, docstring
msgid "Load a playlist into the queue."
msgstr ""
-#: redbot/cogs/audio/audio.py:1304
-msgid "That playlist doesn't exist."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:1309
+#: redbot/cogs/audio/audio.py:2336
#, docstring
msgid "Convert a Red v2 playlist file to a playlist."
msgstr ""
-#: redbot/cogs/audio/audio.py:1315
+#: redbot/cogs/audio/audio.py:2342
msgid "Please upload the playlist file. Any other message will cancel this operation."
msgstr ""
-#: redbot/cogs/audio/audio.py:1323
+#: redbot/cogs/audio/audio.py:2350
msgid "No file detected, try again later."
msgstr ""
-#: redbot/cogs/audio/audio.py:1327
+#: redbot/cogs/audio/audio.py:2354
msgid "Upload cancelled."
msgstr ""
-#: redbot/cogs/audio/audio.py:1331
+#: redbot/cogs/audio/audio.py:2358
msgid "Only playlist files can be uploaded."
msgstr ""
-#: redbot/cogs/audio/audio.py:1336
+#: redbot/cogs/audio/audio.py:2363
msgid "Not a valid playlist file."
msgstr ""
-#: redbot/cogs/audio/audio.py:1352
+#: redbot/cogs/audio/audio.py:2379
msgid "A playlist already exists with this name."
msgstr ""
-#: redbot/cogs/audio/audio.py:1357
-msgid "Please wait, adding tracks..."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:1371
-msgid "Loading track {num}/{total}..."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:1377
+#: redbot/cogs/audio/audio.py:2407
msgid "No tracks found."
msgstr ""
-#: redbot/cogs/audio/audio.py:1383
+#: redbot/cogs/audio/audio.py:2413
msgid "Added {num} tracks from the {playlist_name} playlist. {num_bad} track(s) could not be loaded."
msgstr ""
-#: redbot/cogs/audio/audio.py:1388
+#: redbot/cogs/audio/audio.py:2418
msgid "Added {num} tracks from the {playlist_name} playlist."
msgstr ""
-#: redbot/cogs/audio/audio.py:1392
+#: redbot/cogs/audio/audio.py:2422
msgid "Playlist Saved"
msgstr ""
-#: redbot/cogs/audio/audio.py:1403
+#: redbot/cogs/audio/audio.py:2433
msgid "You need the DJ role to use playlists."
msgstr ""
-#: redbot/cogs/audio/audio.py:1432
+#: redbot/cogs/audio/audio.py:2471
msgid "You must be in the voice channel to use the playlist command."
msgstr ""
-#: redbot/cogs/audio/audio.py:1464
+#: redbot/cogs/audio/audio.py:2525
#, docstring
msgid "Skip to the start of the previously played track."
msgstr ""
-#: redbot/cogs/audio/audio.py:1474 redbot/cogs/audio/audio.py:2121
+#: redbot/cogs/audio/audio.py:2535 redbot/cogs/audio/audio.py:3317
msgid "You need the DJ role to skip tracks."
msgstr ""
-#: redbot/cogs/audio/audio.py:1479 redbot/cogs/audio/audio.py:2115
+#: redbot/cogs/audio/audio.py:2540 redbot/cogs/audio/audio.py:3311
msgid "You must be in the voice channel to skip the music."
msgstr ""
-#: redbot/cogs/audio/audio.py:1482
+#: redbot/cogs/audio/audio.py:2543
msgid "Turn shuffle off to use this command."
msgstr ""
-#: redbot/cogs/audio/audio.py:1484
+#: redbot/cogs/audio/audio.py:2545
msgid "No previous track."
msgstr ""
-#: redbot/cogs/audio/audio.py:1501
+#: redbot/cogs/audio/audio.py:2562
msgid "Replaying Track"
msgstr ""
-#: redbot/cogs/audio/audio.py:1509
+#: redbot/cogs/audio/audio.py:2571
#, docstring
-msgid "List the queue.\n\n"
-" Use [p]queue search to search the queue.\n"
-" "
+msgid "List the songs in the queue."
msgstr ""
-#: redbot/cogs/audio/audio.py:1514 redbot/cogs/audio/audio.py:1517
-#: redbot/cogs/audio/audio.py:1544 redbot/cogs/audio/audio.py:2221
-#: redbot/cogs/audio/audio.py:2225 redbot/cogs/audio/audio.py:2232
-msgid "There's nothing in the queue."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:1553
+#: redbot/cogs/audio/audio.py:2622
msgid "**Currently livestreaming:**"
msgstr ""
-#: redbot/cogs/audio/audio.py:1559 redbot/cogs/audio/audio.py:1569
-#: redbot/cogs/audio/audio.py:1575
+#: redbot/cogs/audio/audio.py:2628 redbot/cogs/audio/audio.py:2638
+#: redbot/cogs/audio/audio.py:2644
msgid "Playing: "
msgstr ""
-#: redbot/cogs/audio/audio.py:1562 redbot/cogs/audio/audio.py:1570
-msgid "Requested by: **{user}**\n"
+#: redbot/cogs/audio/audio.py:2631
+msgid "Requested by: **{user}**\\n"
msgstr ""
-#: redbot/cogs/audio/audio.py:1577
+#: redbot/cogs/audio/audio.py:2639
+msgid "Requested by: **{user}**\\n"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2646
msgid "Requested by: **{user}**"
msgstr ""
-#: redbot/cogs/audio/audio.py:1595 redbot/cogs/audio/audio.py:1599
-#: redbot/cogs/audio/audio.py:1604
-msgid "requested by **{user}**\n"
+#: redbot/cogs/audio/audio.py:2664
+msgid "requested by **{user}**\\n"
msgstr ""
-#: redbot/cogs/audio/audio.py:1615
+#: redbot/cogs/audio/audio.py:2668
+msgid "requested by **{user}**\\n"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2673
+msgid "requested by **{user}**\\n"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2684
msgid "Page {page_num}/{total_pages} | {num_tracks} tracks, {num_remaining} remaining"
msgstr ""
-#: redbot/cogs/audio/audio.py:1624
+#: redbot/cogs/audio/audio.py:2693
msgid "Repeat"
msgstr ""
-#: redbot/cogs/audio/audio.py:1626
+#: redbot/cogs/audio/audio.py:2695
msgid "Shuffle"
msgstr ""
-#: redbot/cogs/audio/audio.py:1683
+#: redbot/cogs/audio/audio.py:2740
msgid "Matching Tracks:"
msgstr ""
-#: redbot/cogs/audio/audio.py:1686 redbot/cogs/audio/audio.py:2010
+#: redbot/cogs/audio/audio.py:2743 redbot/cogs/audio/audio.py:3182
msgid "Page {page_num}/{total_pages}"
msgstr ""
-#: redbot/cogs/audio/audio.py:1695
+#: redbot/cogs/audio/audio.py:2752
+#, docstring
+msgid "Clears the queue."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2764
+msgid "You need the DJ role to clear the queue."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2766
+msgid "The queue has been cleared."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2771
+#, docstring
+msgid "Removes songs from the queue if the requester is not in the voice channel."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2783
+msgid "You need the DJ role to clean the queue."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2794
+msgid "Removed 0 tracks."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2798
+msgid "Removed {removed_tracks} tracks queued by members outside of the voice channel."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2806
+#, docstring
+msgid "Search the queue."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2829
#, docstring
msgid "Toggle repeat."
msgstr ""
-#: redbot/cogs/audio/audio.py:1701
+#: redbot/cogs/audio/audio.py:2835
msgid "You need the DJ role to toggle repeat."
msgstr ""
-#: redbot/cogs/audio/audio.py:1712
+#: redbot/cogs/audio/audio.py:2843
msgid "You must be in the voice channel to toggle repeat."
msgstr ""
-#: redbot/cogs/audio/audio.py:1715
+#: redbot/cogs/audio/audio.py:2849
msgid "Repeat tracks: {true_or_false}."
msgstr ""
-#: redbot/cogs/audio/audio.py:1721
+#: redbot/cogs/audio/audio.py:2857
#, docstring
msgid "Remove a specific track number from the queue."
msgstr ""
-#: redbot/cogs/audio/audio.py:1727
+#: redbot/cogs/audio/audio.py:2863
msgid "Nothing queued."
msgstr ""
-#: redbot/cogs/audio/audio.py:1730
+#: redbot/cogs/audio/audio.py:2866
msgid "You need the DJ role to remove tracks."
msgstr ""
-#: redbot/cogs/audio/audio.py:1735
+#: redbot/cogs/audio/audio.py:2871
msgid "You must be in the voice channel to manage the queue."
msgstr ""
-#: redbot/cogs/audio/audio.py:1751
+#: redbot/cogs/audio/audio.py:2887
msgid "Removed {track} from the queue."
msgstr ""
-#: redbot/cogs/audio/audio.py:1757
+#: redbot/cogs/audio/audio.py:2894
#, docstring
-msgid "Pick a track with a search.\n\n"
-" Use `[p]search list ` to queue all tracks found\n"
-" on YouTube. `[p]search sc ` will search SoundCloud\n"
-" instead of YouTube.\n"
-" "
+msgid "Pick a track with a search.\\n\\n Use `[p]search list ` to queue all tracks found\\n on YouTube. `[p]search sc ` will search SoundCloud\\n instead of YouTube.\\n "
msgstr ""
-#: redbot/cogs/audio/audio.py:1814
+#: redbot/cogs/audio/audio.py:2958
msgid "You must be in the voice channel to enqueue tracks."
msgstr ""
-#: redbot/cogs/audio/audio.py:1831
-msgid "Queued {num} track(s)."
+#: redbot/cogs/audio/audio.py:2997
+msgid "Queued {num} track(s).{maxlength_msg}"
msgstr ""
-#: redbot/cogs/audio/audio.py:1837
+#: redbot/cogs/audio/audio.py:3003
msgid "{time} until start of search playback: starts at #{position} in queue"
msgstr ""
-#: redbot/cogs/audio/audio.py:1997
+#: redbot/cogs/audio/audio.py:3169
msgid "Tracks Found:"
msgstr ""
-#: redbot/cogs/audio/audio.py:1998
+#: redbot/cogs/audio/audio.py:3170
msgid "search results"
msgstr ""
-#: redbot/cogs/audio/audio.py:2001
+#: redbot/cogs/audio/audio.py:3173
msgid "Folders Found:"
msgstr ""
-#: redbot/cogs/audio/audio.py:2002
+#: redbot/cogs/audio/audio.py:3174
msgid "local folders"
msgstr ""
-#: redbot/cogs/audio/audio.py:2004
+#: redbot/cogs/audio/audio.py:3176
msgid "Files Found:"
msgstr ""
-#: redbot/cogs/audio/audio.py:2005
+#: redbot/cogs/audio/audio.py:3177
msgid "local tracks"
msgstr ""
-#: redbot/cogs/audio/audio.py:2022
+#: redbot/cogs/audio/audio.py:3195
#, docstring
-msgid "Seek ahead or behind on a track by seconds."
+msgid "Seek ahead or behind on a track by seconds or a to a specific time.\\n\\n Accepts seconds or a value formatted like 00:00:00 (`hh:mm:ss`) or 00:00 (`mm:ss`)."
msgstr ""
-#: redbot/cogs/audio/audio.py:2031
+#: redbot/cogs/audio/audio.py:3206
msgid "You must be in the voice channel to use seek."
msgstr ""
-#: redbot/cogs/audio/audio.py:2036
+#: redbot/cogs/audio/audio.py:3211
msgid "You need the DJ role to use seek."
msgstr ""
-#: redbot/cogs/audio/audio.py:2042 redbot/cogs/audio/audio.py:2278
+#: redbot/cogs/audio/audio.py:3217 redbot/cogs/audio/audio.py:3510
msgid "There are other people listening - vote to skip instead."
msgstr ""
-#: redbot/cogs/audio/audio.py:2046
+#: redbot/cogs/audio/audio.py:3221
msgid "Can't seek on a stream."
msgstr ""
-#: redbot/cogs/audio/audio.py:2052
+#: redbot/cogs/audio/audio.py:3230
+msgid "Invalid input for the time to seek."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:3236
msgid "Moved {num_seconds}s to 00:00:00"
msgstr ""
-#: redbot/cogs/audio/audio.py:2057
+#: redbot/cogs/audio/audio.py:3241
msgid "Moved {num_seconds}s to {time}"
msgstr ""
-#: redbot/cogs/audio/audio.py:2068
+#: redbot/cogs/audio/audio.py:3249
+msgid "Moved to {time}"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:3261
#, docstring
msgid "Toggle shuffle."
msgstr ""
-#: redbot/cogs/audio/audio.py:2072
+#: redbot/cogs/audio/audio.py:3265
msgid "You need the DJ role to toggle shuffle."
msgstr ""
-#: redbot/cogs/audio/audio.py:2083
+#: redbot/cogs/audio/audio.py:3273
msgid "You must be in the voice channel to toggle shuffle."
msgstr ""
-#: redbot/cogs/audio/audio.py:2086
+#: redbot/cogs/audio/audio.py:3279
msgid "Shuffle tracks: {true_or_false}."
msgstr ""
-#: redbot/cogs/audio/audio.py:2092
+#: redbot/cogs/audio/audio.py:3287
#, docstring
-msgid "Make Red sing one of her songs"
+msgid "Make Red sing one of her songs."
msgstr ""
-#: redbot/cogs/audio/audio.py:2107
+#: redbot/cogs/audio/audio.py:3303
#, docstring
-msgid "Skip to the next track."
+msgid "Skip to the next track, or to a given track number."
msgstr ""
-#: redbot/cogs/audio/audio.py:2126
+#: redbot/cogs/audio/audio.py:3322
+msgid "Can't skip to a specific track in vote mode without the DJ role."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:3326
msgid "I removed your vote to skip."
msgstr ""
-#: redbot/cogs/audio/audio.py:2129
+#: redbot/cogs/audio/audio.py:3329
msgid "You voted to skip."
msgstr ""
-#: redbot/cogs/audio/audio.py:2142
+#: redbot/cogs/audio/audio.py:3342
msgid "Vote threshold met."
msgstr ""
-#: redbot/cogs/audio/audio.py:2145
+#: redbot/cogs/audio/audio.py:3345
msgid " Votes: {num_votes}/{num_members} ({cur_percent}% out of {required_percent}% needed)"
msgstr ""
-#: redbot/cogs/audio/audio.py:2228
+#: redbot/cogs/audio/audio.py:3425
msgid "Currently livestreaming {track}"
msgstr ""
-#: redbot/cogs/audio/audio.py:2235
+#: redbot/cogs/audio/audio.py:3432
msgid "{time} left on {track}"
msgstr ""
-#: redbot/cogs/audio/audio.py:2253
+#: redbot/cogs/audio/audio.py:3441
+msgid "Track number must be equal to or greater than 1."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:3454
+msgid "Can't skip to a track while shuffle is enabled."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:3470
msgid "Track Skipped"
msgstr ""
-#: redbot/cogs/audio/audio.py:2261
+#: redbot/cogs/audio/audio.py:3493
#, docstring
msgid "Stop playback and clear the queue."
msgstr ""
-#: redbot/cogs/audio/audio.py:2271
+#: redbot/cogs/audio/audio.py:3503
msgid "You must be in the voice channel to stop the music."
msgstr ""
-#: redbot/cogs/audio/audio.py:2282
+#: redbot/cogs/audio/audio.py:3514
msgid "You need the DJ role to stop the music."
msgstr ""
-#: redbot/cogs/audio/audio.py:2284
+#: redbot/cogs/audio/audio.py:3516
msgid "Stopping..."
msgstr ""
-#: redbot/cogs/audio/audio.py:2294
+#: redbot/cogs/audio/audio.py:3531
+#, docstring
+msgid "Summon the bot to a voice channel."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:3535
+msgid "You need the DJ role to summon the bot."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:3565
#, docstring
msgid "Set the volume, 1% - 150%."
msgstr ""
-#: redbot/cogs/audio/audio.py:2300
+#: redbot/cogs/audio/audio.py:3571
msgid "Current Volume:"
msgstr ""
-#: redbot/cogs/audio/audio.py:2312
+#: redbot/cogs/audio/audio.py:3583
msgid "You must be in the voice channel to change the volume."
msgstr ""
-#: redbot/cogs/audio/audio.py:2318
+#: redbot/cogs/audio/audio.py:3589
msgid "You need the DJ role to change the volume."
msgstr ""
-#: redbot/cogs/audio/audio.py:2331
+#: redbot/cogs/audio/audio.py:3602
msgid "Volume:"
msgstr ""
-#: redbot/cogs/audio/audio.py:2341
+#: redbot/cogs/audio/audio.py:3613
#, docstring
msgid "Lavalink server configuration options."
msgstr ""
-#: redbot/cogs/audio/audio.py:2346
+#: redbot/cogs/audio/audio.py:3618
#, docstring
msgid "Toggle using external lavalink servers."
msgstr ""
-#: redbot/cogs/audio/audio.py:2357 redbot/cogs/audio/audio.py:2366
+#: redbot/cogs/audio/audio.py:3625 redbot/cogs/audio/audio.py:3635
msgid "External lavalink server: {true_or_false}."
msgstr ""
-#: redbot/cogs/audio/audio.py:2361
-msgid "Defaults reset."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:2373
+#: redbot/cogs/audio/audio.py:3642
#, docstring
msgid "Set the lavalink server host."
msgstr ""
-#: redbot/cogs/audio/audio.py:2377 redbot/cogs/audio/audio.py:2382
+#: redbot/cogs/audio/audio.py:3646 redbot/cogs/audio/audio.py:3651
msgid "Host set to {host}."
msgstr ""
-#: redbot/cogs/audio/audio.py:2379 redbot/cogs/audio/audio.py:2395
-#: redbot/cogs/audio/audio.py:2413 redbot/cogs/audio/audio.py:2429
+#: redbot/cogs/audio/audio.py:3648 redbot/cogs/audio/audio.py:3664
+#: redbot/cogs/audio/audio.py:3682 redbot/cogs/audio/audio.py:3698
msgid "External lavalink server set to True."
msgstr ""
-#: redbot/cogs/audio/audio.py:2388
+#: redbot/cogs/audio/audio.py:3657
#, docstring
msgid "Set the lavalink server password."
msgstr ""
-#: redbot/cogs/audio/audio.py:2393 redbot/cogs/audio/audio.py:2399
+#: redbot/cogs/audio/audio.py:3662 redbot/cogs/audio/audio.py:3668
msgid "Server password set to {password}."
msgstr ""
-#: redbot/cogs/audio/audio.py:2406
+#: redbot/cogs/audio/audio.py:3675
#, docstring
msgid "Set the lavalink REST server port."
msgstr ""
-#: redbot/cogs/audio/audio.py:2411 redbot/cogs/audio/audio.py:2416
+#: redbot/cogs/audio/audio.py:3680 redbot/cogs/audio/audio.py:3685
msgid "REST port set to {port}."
msgstr ""
-#: redbot/cogs/audio/audio.py:2422
+#: redbot/cogs/audio/audio.py:3691
#, docstring
msgid "Set the lavalink websocket server port."
msgstr ""
-#: redbot/cogs/audio/audio.py:2427 redbot/cogs/audio/audio.py:2432
+#: redbot/cogs/audio/audio.py:3696 redbot/cogs/audio/audio.py:3701
msgid "Websocket port set to {port}."
msgstr ""
-#: redbot/cogs/audio/audio.py:2461
+#: redbot/cogs/audio/audio.py:3801
msgid "Not enough {currency} ({required_credits} required)."
msgstr ""
diff --git a/redbot/cogs/audio/locales/id-ID.po b/redbot/cogs/audio/locales/id-ID.po
index bfe212e4b..d9320b5e1 100644
--- a/redbot/cogs/audio/locales/id-ID.po
+++ b/redbot/cogs/audio/locales/id-ID.po
@@ -1,14 +1,14 @@
msgid ""
msgstr ""
"Project-Id-Version: red-discordbot\n"
-"POT-Creation-Date: 2019-02-17 02:24+0000\n"
-"PO-Revision-Date: 2019-02-25 03:08\n"
-"Last-Translator: Kowlin \n"
+"POT-Creation-Date: 2019-07-05 22:33+0200\n"
+"PO-Revision-Date: 2019-07-06 16:14\n"
+"Last-Translator: Robert Jansen (Kowlin)\n"
"Language-Team: Indonesian\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"Generated-By: redgettext 2.2\n"
+"Generated-By: redgettext 3.0\n"
"Plural-Forms: nplurals=1; plural=0;\n"
"X-Generator: crowdin.com\n"
"X-Crowdin-Project: red-discordbot\n"
@@ -16,971 +16,1275 @@ msgstr ""
"X-Crowdin-File: /cogs/audio/locales/messages.pot\n"
"Language: id_ID\n"
-#: redbot/cogs/audio/audio.py:38
+#: redbot/cogs/audio/audio.py:47
#, docstring
msgid "Play audio through voice channels."
msgstr ""
-#: redbot/cogs/audio/audio.py:173 redbot/cogs/audio/audio.py:735
-msgid "Now Playing"
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:177
-msgid "Track length: {length} | Requested by: {user}"
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:201 redbot/cogs/audio/audio.py:227
+#: redbot/cogs/audio/audio.py:260
msgid "music in {} servers"
msgstr ""
-#: redbot/cogs/audio/audio.py:211
+#: redbot/cogs/audio/audio.py:300 redbot/cogs/audio/audio.py:1317
+msgid "Now Playing"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:304
+msgid "Track length: {length} | Requested by: {user}"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:331
msgid "Queue ended."
msgstr ""
-#: redbot/cogs/audio/audio.py:240
+#: redbot/cogs/audio/audio.py:350
msgid "Track Error"
msgstr ""
-#: redbot/cogs/audio/audio.py:245
+#: redbot/cogs/audio/audio.py:355
msgid "Skipping..."
msgstr ""
-#: redbot/cogs/audio/audio.py:252
+#: redbot/cogs/audio/audio.py:363
#, docstring
msgid "Music configuration options."
msgstr ""
-#: redbot/cogs/audio/audio.py:258
+#: redbot/cogs/audio/audio.py:369
#, docstring
-msgid "Toggle DJ mode.\n\n"
-" DJ mode allows users with the DJ role to use audio commands.\n"
-" "
+msgid "Toggle the bot auto-disconnecting when done playing.\\n\\n This setting takes precedence over [p]audioset emptydisconnect.\\n "
msgstr ""
-#: redbot/cogs/audio/audio.py:265
+#: redbot/cogs/audio/audio.py:377
+msgid "Auto-disconnection at queue end: {true_or_false}."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:385
+#, docstring
+msgid "Toggle DJ mode.\\n\\n DJ mode allows users with the DJ role to use audio commands.\\n "
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:392
msgid "Please set a role to use with DJ mode. Enter the role name or ID now."
msgstr ""
-#: redbot/cogs/audio/audio.py:273
+#: redbot/cogs/audio/audio.py:400
msgid "Response timed out, try again later."
msgstr ""
-#: redbot/cogs/audio/audio.py:284
+#: redbot/cogs/audio/audio.py:405
+msgid "DJ role enabled: {true_or_false}."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:411
#, docstring
msgid "Auto-disconnection after x seconds while stopped. 0 to disable."
msgstr ""
-#: redbot/cogs/audio/audio.py:286 redbot/cogs/audio/audio.py:317
-#: redbot/cogs/audio/audio.py:405
+#: redbot/cogs/audio/audio.py:413 redbot/cogs/audio/audio.py:436
+#: redbot/cogs/audio/audio.py:543 redbot/cogs/audio/audio.py:687
msgid "Can't be less than zero."
msgstr ""
-#: redbot/cogs/audio/audio.py:291
+#: redbot/cogs/audio/audio.py:418
msgid "Empty disconnect disabled."
msgstr ""
-#: redbot/cogs/audio/audio.py:296
+#: redbot/cogs/audio/audio.py:423
msgid "Empty disconnect timer set to {num_seconds}."
msgstr ""
-#: redbot/cogs/audio/audio.py:307
-#, docstring
-msgid "Set the role to use for DJ mode."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:310
-msgid "DJ role set to: {role.name}."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:315
+#: redbot/cogs/audio/audio.py:434
#, docstring
msgid "Set a price for queueing tracks for non-mods. 0 to disable."
msgstr ""
-#: redbot/cogs/audio/audio.py:320
+#: redbot/cogs/audio/audio.py:439
msgid "Jukebox mode disabled."
msgstr ""
-#: redbot/cogs/audio/audio.py:325
+#: redbot/cogs/audio/audio.py:444
msgid "Track queueing command price set to {price} {currency}."
msgstr ""
-#: redbot/cogs/audio/audio.py:336
+#: redbot/cogs/audio/audio.py:455
+#, docstring
+msgid "Set the localtracks path if the Lavalink.jar is not run from the Audio data folder.\\n\\n Leave the path blank to reset the path to the default, the Audio data directory.\\n "
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:463
+msgid "The localtracks path location has been reset to the default location."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:466
+msgid "This setting is only for bot owners to set a localtracks folder location if the Lavalink.jar is being ran from outside of the Audio data directory.\\nIn the example below, the full path for 'ParentDirectory' must be passed to this command.\\nThe path must not contain spaces.\\n```\\nParentDirectory\\n |__ localtracks (folder)\\n | |__ Awesome Album Name (folder)\\n | |__01 Cool Song.mp3\\n | |__02 Groovy Song.mp3\\n |\\n |__ Lavalink.jar\\n |__ application.yml\\n```\\nThe folder path given to this command must contain the Lavalink.jar, the application.yml, and the localtracks folder.\\nUse this command with no path given to reset it to the default, the Audio data directory for this bot.\\nDo you want to continue to set the provided path for local tracks?"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:505
+msgid "{local_path} does not seem like a valid path."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:520
+msgid "The path that was entered does not have {filelist} file in that location. The path will still be saved, but please check the path and the file location before attempting to play local tracks or start your Lavalink.jar."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:530
+msgid "Localtracks path set to: {local_path}."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:536
+#, docstring
+msgid "Max length of a track to queue in seconds. 0 to disable.\\n\\n Accepts seconds or a value formatted like 00:00:00 (`hh:mm:ss`) or 00:00 (`mm:ss`).\\n Invalid input will turn the max length setting off."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:545
+msgid "Track max length disabled."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:549
+msgid "Track max length set to {seconds}."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:559
#, docstring
msgid "Toggle track announcement and other bot messages."
msgstr ""
-#: redbot/cogs/audio/audio.py:340
+#: redbot/cogs/audio/audio.py:563
msgid "Verbose mode on: {true_or_false}."
msgstr ""
-#: redbot/cogs/audio/audio.py:345
+#: redbot/cogs/audio/audio.py:569
+#, docstring
+msgid "Toggle the domain restriction on Audio.\\n\\n When toggled off, users will be able to play songs from non-commercial websites and links.\\n When toggled on, users are restricted to YouTube, SoundCloud, Mixer, Vimeo, Twitch, and Bandcamp links."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:576
+msgid "Commercial links only: {true_or_false}."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:582
+#, docstring
+msgid "Set the role to use for DJ mode."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:585
+msgid "DJ role set to: {role.name}."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:589
#, docstring
msgid "Show the current settings."
msgstr ""
-#: redbot/cogs/audio/audio.py:358
+#: redbot/cogs/audio/audio.py:604
msgid "Server Settings"
msgstr ""
-#: redbot/cogs/audio/audio.py:360
-msgid "Disconnect timer: [{num_seconds}]\n"
+#: redbot/cogs/audio/audio.py:606
+msgid "Auto-disconnect: [{dc}]\\n"
msgstr ""
-#: redbot/cogs/audio/audio.py:364
-msgid "DJ Role: [{role.name}]\n"
+#: redbot/cogs/audio/audio.py:609
+msgid "Disconnect timer: [{num_seconds}]\\n"
msgstr ""
-#: redbot/cogs/audio/audio.py:366
-msgid "Jukebox: [{jukebox_name}]\n"
+#: redbot/cogs/audio/audio.py:613
+msgid "DJ Role: [{role.name}]\\n"
msgstr ""
-#: redbot/cogs/audio/audio.py:367
-msgid "Command price: [{jukebox_price}]\n"
+#: redbot/cogs/audio/audio.py:615
+msgid "Jukebox: [{jukebox_name}]\\n"
msgstr ""
-#: redbot/cogs/audio/audio.py:368
-msgid "Repeat: [{repeat}]\n"
-"Shuffle: [{shuffle}]\n"
-"Song notify msgs: [{notify}]\n"
-"Songs as status: [{status}]\n"
+#: redbot/cogs/audio/audio.py:616
+msgid "Command price: [{jukebox_price}]\\n"
msgstr ""
-#: redbot/cogs/audio/audio.py:375
-msgid "Thumbnails: [{0}]\n"
+#: redbot/cogs/audio/audio.py:618
+msgid "Max track length: [{tracklength}]\\n"
msgstr ""
-#: redbot/cogs/audio/audio.py:377
-msgid "Vote skip: [{vote_enabled}]\n"
-"Skip percentage: [{vote_percent}%]\n"
+#: redbot/cogs/audio/audio.py:621
+msgid "Repeat: [{repeat}]\\nShuffle: [{shuffle}]\\nSong notify msgs: [{notify}]\\nSongs as status: [{status}]\\n"
msgstr ""
-#: redbot/cogs/audio/audio.py:380
-msgid "---Lavalink Settings---\n"
-"Cog version: [{version}]\n"
-"Jar build: [{jarbuild}]\n"
-"External server: [{use_external_lavalink}]"
+#: redbot/cogs/audio/audio.py:628
+msgid "Thumbnails: [{0}]\\n"
msgstr ""
-#: redbot/cogs/audio/audio.py:393
+#: redbot/cogs/audio/audio.py:630
+msgid "Vote skip: [{vote_enabled}]\\nSkip percentage: [{vote_percent}%]\\n"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:633
+msgid "---Lavalink Settings--- \\nCog version: [{version}]\\nJar build: [{jarbuild}]\\nExternal server: [{use_external_lavalink}]\\n"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:640
+msgid "Localtracks path: [{localpath}]\\n"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:648
#, docstring
-msgid "Toggle displaying a thumbnail on audio messages."
+msgid "Instructions to set the Spotify API tokens."
msgstr ""
-#: redbot/cogs/audio/audio.py:397
-msgid "Thumbnail display: {true_or_false}."
+#: redbot/cogs/audio/audio.py:649
+msgid "1. Go to Spotify developers and log in with your Spotify account.\\n(https://developer.spotify.com/dashboard/applications)\\n2. Click \\\"Create An App\\\".\\n3. Fill out the form provided with your app name, etc.\\n4. When asked if you're developing commercial integration select \\\"No\\\".\\n5. Accept the terms and conditions.\\n6. Copy your client ID and your client secret into:\\n`{prefix}set api spotify client_id, client_secret,`"
msgstr ""
-#: redbot/cogs/audio/audio.py:403
-#, docstring
-msgid "Percentage needed for non-mods to skip tracks. 0 to disable."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:411
-msgid "Voting disabled. All users can use queue management commands."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:416
-msgid "Vote percentage set to {percent}%."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:425
+#: redbot/cogs/audio/audio.py:665
#, docstring
msgid "Enable/disable tracks' titles as status."
msgstr ""
-#: redbot/cogs/audio/audio.py:429
+#: redbot/cogs/audio/audio.py:669
msgid "Song titles as status: {true_or_false}."
msgstr ""
-#: redbot/cogs/audio/audio.py:435
+#: redbot/cogs/audio/audio.py:675
+#, docstring
+msgid "Toggle displaying a thumbnail on audio messages."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:679
+msgid "Thumbnail display: {true_or_false}."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:685
+#, docstring
+msgid "Percentage needed for non-mods to skip tracks. 0 to disable."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:693
+msgid "Voting disabled. All users can use queue management commands."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:698
+msgid "Vote percentage set to {percent}%."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:707
+#, docstring
+msgid "Instructions to set the YouTube API key."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:726
#, docstring
msgid "Audio stats."
msgstr ""
-#: redbot/cogs/audio/audio.py:469 redbot/cogs/audio/audio.py:489
-#: redbot/cogs/audio/audio.py:698 redbot/cogs/audio/audio.py:788
-#: redbot/cogs/audio/audio.py:804 redbot/cogs/audio/audio.py:829
-#: redbot/cogs/audio/audio.py:836 redbot/cogs/audio/audio.py:1179
-#: redbot/cogs/audio/audio.py:1466 redbot/cogs/audio/audio.py:1724
-#: redbot/cogs/audio/audio.py:2026 redbot/cogs/audio/audio.py:2063
-#: redbot/cogs/audio/audio.py:2109 redbot/cogs/audio/audio.py:2265
-#: redbot/cogs/audio/audio.py:2304 redbot/cogs/audio/audio.py:2334
+#: redbot/cogs/audio/audio.py:754 redbot/cogs/audio/audio.py:782
+#: redbot/cogs/audio/audio.py:819 redbot/cogs/audio/audio.py:847
+#: redbot/cogs/audio/audio.py:914 redbot/cogs/audio/audio.py:932
+#: redbot/cogs/audio/audio.py:956 redbot/cogs/audio/audio.py:1026
+#: redbot/cogs/audio/audio.py:1280 redbot/cogs/audio/audio.py:1371
+#: redbot/cogs/audio/audio.py:1388 redbot/cogs/audio/audio.py:1411
+#: redbot/cogs/audio/audio.py:1419 redbot/cogs/audio/audio.py:2190
+#: redbot/cogs/audio/audio.py:2527 redbot/cogs/audio/audio.py:2860
+#: redbot/cogs/audio/audio.py:3201 redbot/cogs/audio/audio.py:3255
+#: redbot/cogs/audio/audio.py:3305 redbot/cogs/audio/audio.py:3497
+#: redbot/cogs/audio/audio.py:3575 redbot/cogs/audio/audio.py:3605
msgid "Nothing playing."
msgstr ""
-#: redbot/cogs/audio/audio.py:473
+#: redbot/cogs/audio/audio.py:758
msgid "Not connected anywhere."
msgstr ""
-#: redbot/cogs/audio/audio.py:478
-msgid "Connected in {num} servers:"
+#: redbot/cogs/audio/audio.py:764
+msgid "Playing in {num}/{total} servers:"
msgstr ""
-#: redbot/cogs/audio/audio.py:486
+#: redbot/cogs/audio/audio.py:779
#, docstring
msgid "Bump a track number to the top of the queue."
msgstr ""
-#: redbot/cogs/audio/audio.py:495
+#: redbot/cogs/audio/audio.py:788
msgid "You must be in the voice channel to bump a track."
msgstr ""
-#: redbot/cogs/audio/audio.py:499
+#: redbot/cogs/audio/audio.py:792
msgid "You need the DJ role to bump tracks."
msgstr ""
-#: redbot/cogs/audio/audio.py:502 redbot/cogs/audio/audio.py:1739
+#: redbot/cogs/audio/audio.py:795 redbot/cogs/audio/audio.py:2875
msgid "Song number must be greater than 1 and within the queue limit."
msgstr ""
-#: redbot/cogs/audio/audio.py:517
+#: redbot/cogs/audio/audio.py:810
msgid "Moved {track} to the top of the queue."
msgstr ""
-#: redbot/cogs/audio/audio.py:523
+#: redbot/cogs/audio/audio.py:817
#, docstring
msgid "Disconnect from the voice channel."
msgstr ""
-#: redbot/cogs/audio/audio.py:528
+#: redbot/cogs/audio/audio.py:826
msgid "You need the DJ role to disconnect."
msgstr ""
-#: redbot/cogs/audio/audio.py:532
+#: redbot/cogs/audio/audio.py:830
msgid "There are other people listening to music."
msgstr ""
-#: redbot/cogs/audio/audio.py:540
+#: redbot/cogs/audio/audio.py:845
+#, docstring
+msgid "Equalizer management."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:865
+#, docstring
+msgid "Delete a saved eq preset."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:887
+#, docstring
+msgid "List saved eq presets."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:890
+msgid "No saved equalizer presets."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:897
+msgid "{num} preset(s)"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:903
+#, docstring
+msgid "Load a saved eq preset."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:930
+#, docstring
+msgid "Reset the eq to 0 across all bands."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:946
+msgid "Equalizer values have been reset."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:954
+#, docstring
+msgid "Save the current eq settings to a preset."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:958
+msgid "Please enter a name for this equalizer preset."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:972
+msgid "No equalizer preset name entered, try the command again later."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:981 redbot/cogs/audio/audio.py:2213
+msgid "Try the command again with a shorter name."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:985
+msgid "Preset name already exists, do you want to replace it?"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:994
+msgid "Not saving preset."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1019
+#, docstring
+msgid "Set an eq band with a band number or name and value.\\n\\n Band positions are 1-15 and values have a range of -0.25 to 1.0.\\n Band names are 25, 40, 63, 100, 160, 250, 400, 630, 1k, 1.6k, 2.5k, 4k, 6.3k, 10k, and 16k Hz.\\n Setting a band value to -0.25 nullifies it while +0.25 is double.\\n "
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1063
+msgid "Valid band numbers are 1-15 or the band names listed in the help for this command."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1099
#, docstring
msgid "Local playback commands."
msgstr ""
-#: redbot/cogs/audio/audio.py:545
+#: redbot/cogs/audio/audio.py:1104
#, docstring
msgid "Play all songs in a localtracks folder."
msgstr ""
-#: redbot/cogs/audio/audio.py:552
+#: redbot/cogs/audio/audio.py:1115
+msgid "No localtracks folder named {name}."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1121
#, docstring
msgid "Play a local track."
msgstr ""
-#: redbot/cogs/audio/audio.py:557
+#: redbot/cogs/audio/audio.py:1126
msgid "No local track folders found."
msgstr ""
-#: redbot/cogs/audio/audio.py:600
+#: redbot/cogs/audio/audio.py:1169
#, docstring
msgid "Search for songs across all localtracks folders."
msgstr ""
-#: redbot/cogs/audio/audio.py:605
+#: redbot/cogs/audio/audio.py:1174
msgid "No album folders found."
msgstr ""
-#: redbot/cogs/audio/audio.py:612 redbot/cogs/audio/audio.py:1634
+#: redbot/cogs/audio/audio.py:1181 redbot/cogs/audio/audio.py:2816
msgid "No matches."
msgstr ""
-#: redbot/cogs/audio/audio.py:688
+#: redbot/cogs/audio/audio.py:1269
msgid "No localtracks folder."
msgstr ""
-#: redbot/cogs/audio/audio.py:696
+#: redbot/cogs/audio/audio.py:1278
#, docstring
msgid "Now playing."
msgstr ""
-#: redbot/cogs/audio/audio.py:716
+#: redbot/cogs/audio/audio.py:1298
msgid "Requested by: **{track.requester}**"
msgstr ""
-#: redbot/cogs/audio/audio.py:726
+#: redbot/cogs/audio/audio.py:1308
msgid "Nothing."
msgstr ""
-#: redbot/cogs/audio/audio.py:785
+#: redbot/cogs/audio/audio.py:1368
#, docstring
-msgid "Pause and resume."
+msgid "Pause or resume a playing track."
msgstr ""
-#: redbot/cogs/audio/audio.py:794
-msgid "You must be in the voice channel to pause the music."
+#: redbot/cogs/audio/audio.py:1377
+msgid "You must be in the voice channel pause or resume."
msgstr ""
-#: redbot/cogs/audio/audio.py:800
-msgid "You need the DJ role to pause tracks."
+#: redbot/cogs/audio/audio.py:1384
+msgid "You need the DJ role to pause or resume tracks."
msgstr ""
-#: redbot/cogs/audio/audio.py:814
+#: redbot/cogs/audio/audio.py:1401
msgid "Track Paused"
msgstr ""
-#: redbot/cogs/audio/audio.py:821
+#: redbot/cogs/audio/audio.py:1407
msgid "Track Resumed"
msgstr ""
-#: redbot/cogs/audio/audio.py:826
-msgid "Track is paused."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:828
-msgid "Track is playing."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:834
+#: redbot/cogs/audio/audio.py:1417
#, docstring
msgid "Queue percentage."
msgstr ""
-#: redbot/cogs/audio/audio.py:860
+#: redbot/cogs/audio/audio.py:1443
msgid "Nothing in the queue."
msgstr ""
-#: redbot/cogs/audio/audio.py:882
+#: redbot/cogs/audio/audio.py:1465
msgid "Queued and playing tracks:"
msgstr ""
-#: redbot/cogs/audio/audio.py:890
+#: redbot/cogs/audio/audio.py:1474
#, docstring
msgid "Play a URL or search for a track."
msgstr ""
-#: redbot/cogs/audio/audio.py:900 redbot/cogs/audio/audio.py:1411
-#: redbot/cogs/audio/audio.py:1795
+#: redbot/cogs/audio/audio.py:1481
+msgid "That URL is not allowed."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1484 redbot/cogs/audio/audio.py:2437
+#: redbot/cogs/audio/audio.py:2928 redbot/cogs/audio/audio.py:3047
+msgid "Connection to Lavalink has failed."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1486 redbot/cogs/audio/audio.py:2439
+#: redbot/cogs/audio/audio.py:2930 redbot/cogs/audio/audio.py:3049
+msgid "Please check your console or logs for details."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1495 redbot/cogs/audio/audio.py:2449
+#: redbot/cogs/audio/audio.py:2939 redbot/cogs/audio/audio.py:3543
msgid "I don't have permission to connect to your channel."
msgstr ""
-#: redbot/cogs/audio/audio.py:906 redbot/cogs/audio/audio.py:1422
-#: redbot/cogs/audio/audio.py:1801 redbot/cogs/audio/audio.py:1889
+#: redbot/cogs/audio/audio.py:1501 redbot/cogs/audio/audio.py:2461
+#: redbot/cogs/audio/audio.py:2945 redbot/cogs/audio/audio.py:3056
+#: redbot/cogs/audio/audio.py:3555
msgid "Connect to a voice channel first."
msgstr ""
-#: redbot/cogs/audio/audio.py:909 redbot/cogs/audio/audio.py:1418
-#: redbot/cogs/audio/audio.py:1804 redbot/cogs/audio/audio.py:1892
+#: redbot/cogs/audio/audio.py:1504 redbot/cogs/audio/audio.py:2457
+#: redbot/cogs/audio/audio.py:2948 redbot/cogs/audio/audio.py:3059
+#: redbot/cogs/audio/audio.py:3558
msgid "Connection to Lavalink has not yet been established."
msgstr ""
-#: redbot/cogs/audio/audio.py:913
+#: redbot/cogs/audio/audio.py:1508
msgid "You need the DJ role to queue tracks."
msgstr ""
-#: redbot/cogs/audio/audio.py:922
+#: redbot/cogs/audio/audio.py:1519
msgid "You must be in the voice channel to use the play command."
msgstr ""
-#: redbot/cogs/audio/audio.py:928
+#: redbot/cogs/audio/audio.py:1525
msgid "No tracks to play."
msgstr ""
-#: redbot/cogs/audio/audio.py:942 redbot/cogs/audio/audio.py:1450
-#: redbot/cogs/audio/audio.py:1828 redbot/cogs/audio/audio.py:1865
+#: redbot/cogs/audio/audio.py:1565
+msgid "The owner needs to set the Spotify client ID, Spotify client secret, and YouTube API key before Spotify URLs or codes can be used. \\nSee `{prefix}audioset youtubeapi` and `{prefix}audioset spotifyapi` for instructions."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1575 redbot/cogs/audio/audio.py:2493
+msgid "Wait until the playlist has finished loading."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1592 redbot/cogs/audio/audio.py:1657
+#: redbot/cogs/audio/audio.py:2499 redbot/cogs/audio/audio.py:2509
+#: redbot/cogs/audio/audio.py:2973 redbot/cogs/audio/audio.py:3027
msgid "Nothing found."
msgstr ""
-#: redbot/cogs/audio/audio.py:953 redbot/cogs/audio/audio.py:1295
+#: redbot/cogs/audio/audio.py:1600
+msgid "The Spotify API key or client secret has not been set properly. \\nUse `{prefix}audioset spotifyapi` for instructions."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1639 redbot/cogs/audio/audio.py:1776
+msgid "This doesn't seem to be a valid Spotify URL or code."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1688 redbot/cogs/audio/audio.py:2320
msgid "Playlist Enqueued"
msgstr ""
-#: redbot/cogs/audio/audio.py:954 redbot/cogs/audio/audio.py:1296
-msgid "Added {num} tracks to the queue."
+#: redbot/cogs/audio/audio.py:1689 redbot/cogs/audio/audio.py:2321
+msgid "Added {num} tracks to the queue.{maxlength_msg}"
msgstr ""
-#: redbot/cogs/audio/audio.py:958
+#: redbot/cogs/audio/audio.py:1695
msgid "{time} until start of playlist playback: starts at #{position} in queue"
msgstr ""
-#: redbot/cogs/audio/audio.py:980 redbot/cogs/audio/audio.py:1938
+#: redbot/cogs/audio/audio.py:1711 redbot/cogs/audio/audio.py:3125
+msgid "Track exceeds maximum length."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1717
+msgid "Nothing found. Check your Lavalink logs for details."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1732 redbot/cogs/audio/audio.py:3108
msgid "Track Enqueued"
msgstr ""
-#: redbot/cogs/audio/audio.py:984 redbot/cogs/audio/audio.py:1944
+#: redbot/cogs/audio/audio.py:1736 redbot/cogs/audio/audio.py:3114
msgid "{time} until track playback: #{position} in queue"
msgstr ""
-#: redbot/cogs/audio/audio.py:989 redbot/cogs/audio/audio.py:1949
+#: redbot/cogs/audio/audio.py:1741 redbot/cogs/audio/audio.py:3119
msgid "#{position} in queue"
msgstr ""
-#: redbot/cogs/audio/audio.py:997
+#: redbot/cogs/audio/audio.py:1761
+msgid "The Spotify API key or client secret has not been set properly. \\nUse `{prefix}audioset spotifyapi` for instructions."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1793 redbot/cogs/audio/audio.py:2384
+msgid "Please wait, adding tracks..."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1809
+msgid "The connection was reset while loading the playlist."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1826 redbot/cogs/audio/audio.py:2401
+msgid "Loading track {num}/{total}..."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1840
+msgid "Approximate time remaining: {seconds}"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1850
+msgid "Nothing found.\\nThe YouTube API key may be invalid or you may be rate limited on YouTube's search service.\\nCheck the YouTube API key again and follow the instructions at `{prefix}audioset youtubeapi`."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1871
#, docstring
msgid "Playlist configuration options."
msgstr ""
-#: redbot/cogs/audio/audio.py:1002
+#: redbot/cogs/audio/audio.py:1876
#, docstring
-msgid "Add a track URL, playlist link, or quick search to a playlist.\n\n"
-" The track(s) will be appended to the end of the playlist.\n"
-" "
+msgid "Add a track URL, playlist link, or quick search to a playlist.\\n\\n The track(s) will be appended to the end of the playlist.\\n "
msgstr ""
-#: redbot/cogs/audio/audio.py:1014 redbot/cogs/audio/audio.py:1078
-#: redbot/cogs/audio/audio.py:1228
+#: redbot/cogs/audio/audio.py:1888 redbot/cogs/audio/audio.py:2028
+#: redbot/cogs/audio/audio.py:2241
msgid "You are not the author of that playlist."
msgstr ""
-#: redbot/cogs/audio/audio.py:1024
+#: redbot/cogs/audio/audio.py:1898
msgid "{track} is already in {playlist}."
msgstr ""
-#: redbot/cogs/audio/audio.py:1033 redbot/cogs/audio/audio.py:1082
-#: redbot/cogs/audio/audio.py:1092 redbot/cogs/audio/audio.py:1231
+#: redbot/cogs/audio/audio.py:1907 redbot/cogs/audio/audio.py:2032
+#: redbot/cogs/audio/audio.py:2081 redbot/cogs/audio/audio.py:2244
msgid "No playlist with that name."
msgstr ""
-#: redbot/cogs/audio/audio.py:1040
+#: redbot/cogs/audio/audio.py:1914
msgid "{track} appended to {playlist}."
msgstr ""
-#: redbot/cogs/audio/audio.py:1046
+#: redbot/cogs/audio/audio.py:1920
msgid "{num} tracks appended to {playlist}."
msgstr ""
-#: redbot/cogs/audio/audio.py:1053
+#: redbot/cogs/audio/audio.py:1928
+#, docstring
+msgid "Copy a playlist from one server to another."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1932
+msgid "Invalid server ID for source server."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1934
+msgid "Invalid server ID for target server."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1939
+msgid "No playlist with that name in {from_guild_name}."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1950
+msgid "Playlist {name} copied from {from_guild_name} to {to_guild_name}."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1962
+msgid "A playlist with that name already exists in {to_guild_name}.\\nPlease enter a new name for this playlist."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1975
+msgid "Try the playlist copy command again with a shorter name."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1980
+msgid "Playlist name already exists in {to_guild_name}, try the playlist copy command again with a different name."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1986 redbot/cogs/audio/audio.py:2220
+msgid "No playlist name entered, try again later."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1991
+msgid "Playlist {name} copied from {from_guild_name} to {to_guild_name}.\\nNew playlist name on {to_guild_name}: {new_name}"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2003
#, docstring
msgid "Create an empty playlist."
msgstr ""
-#: redbot/cogs/audio/audio.py:1057 redbot/cogs/audio/audio.py:1172
+#: redbot/cogs/audio/audio.py:2007 redbot/cogs/audio/audio.py:2183
msgid "You need the DJ role to save playlists."
msgstr ""
-#: redbot/cogs/audio/audio.py:1061 redbot/cogs/audio/audio.py:1176
-#: redbot/cogs/audio/audio.py:1204
+#: redbot/cogs/audio/audio.py:2011 redbot/cogs/audio/audio.py:2187
+#: redbot/cogs/audio/audio.py:2217
msgid "Playlist name already exists, try again with a different name."
msgstr ""
-#: redbot/cogs/audio/audio.py:1067
+#: redbot/cogs/audio/audio.py:2017
msgid "Empty playlist {name} created."
msgstr ""
-#: redbot/cogs/audio/audio.py:1071
+#: redbot/cogs/audio/audio.py:2021
#, docstring
msgid "Delete a saved playlist."
msgstr ""
-#: redbot/cogs/audio/audio.py:1083
+#: redbot/cogs/audio/audio.py:2033
msgid "{name} playlist deleted."
msgstr ""
-#: redbot/cogs/audio/audio.py:1087
+#: redbot/cogs/audio/audio.py:2039
+#, docstring
+msgid "Download a copy of a playlist.\\n\\n These files can be used with the [p]playlist upload command.\\n Red v2-compatible playlists can be generated by passing True\\n for the v2 variable."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2061
+msgid "That playlist has no tracks."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2063 redbot/cogs/audio/audio.py:2331
+msgid "That playlist doesn't exist."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2076
#, docstring
msgid "Retrieve information from a saved playlist."
msgstr ""
-#: redbot/cogs/audio/audio.py:1100
-msgid "**Custom playlist.**"
+#: redbot/cogs/audio/audio.py:2101
+msgid "Playlist info for {playlist_name}:\\n"
msgstr ""
-#: redbot/cogs/audio/audio.py:1102
-msgid "URL: <{url}>"
+#: redbot/cogs/audio/audio.py:2105
+msgid "Playlist info for {playlist_name}:\\nURL: {url}"
msgstr ""
-#: redbot/cogs/audio/audio.py:1105
-msgid "Playlist info for {playlist_name}:"
+#: redbot/cogs/audio/audio.py:2116
+msgid "Author: {author_name} | {num} track(s)"
msgstr ""
-#: redbot/cogs/audio/audio.py:1106
-msgid "Author: **{author_name}**\n"
-"{url}"
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:1110
-msgid "{num} track(s)"
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:1115
+#: redbot/cogs/audio/audio.py:2126
#, docstring
msgid "List saved playlists."
msgstr ""
-#: redbot/cogs/audio/audio.py:1118
+#: redbot/cogs/audio/audio.py:2129
msgid "No saved playlists."
msgstr ""
-#: redbot/cogs/audio/audio.py:1130
+#: redbot/cogs/audio/audio.py:2141
msgid "Tracks: {num}"
msgstr ""
-#: redbot/cogs/audio/audio.py:1131
-msgid "Author: {name}\n"
+#: redbot/cogs/audio/audio.py:2142
+msgid "Author: {name}\\n"
msgstr ""
-#: redbot/cogs/audio/audio.py:1155
+#: redbot/cogs/audio/audio.py:2166
msgid "Playlists for {server_name}:"
msgstr ""
-#: redbot/cogs/audio/audio.py:1159
+#: redbot/cogs/audio/audio.py:2170
msgid "Page {page_num}/{total_pages} | {num} playlists"
msgstr ""
-#: redbot/cogs/audio/audio.py:1168
+#: redbot/cogs/audio/audio.py:2179
#, docstring
msgid "Save the queue to a playlist."
msgstr ""
-#: redbot/cogs/audio/audio.py:1189
+#: redbot/cogs/audio/audio.py:2193 redbot/cogs/audio/audio.py:2590
+#: redbot/cogs/audio/audio.py:2593 redbot/cogs/audio/audio.py:2613
+#: redbot/cogs/audio/audio.py:2756 redbot/cogs/audio/audio.py:2759
+#: redbot/cogs/audio/audio.py:2775 redbot/cogs/audio/audio.py:2778
+#: redbot/cogs/audio/audio.py:2810 redbot/cogs/audio/audio.py:2812
+#: redbot/cogs/audio/audio.py:3418 redbot/cogs/audio/audio.py:3422
+#: redbot/cogs/audio/audio.py:3429
+msgid "There's nothing in the queue."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2202
msgid "Please enter a name for this playlist."
msgstr ""
-#: redbot/cogs/audio/audio.py:1200
-msgid "Try the command again with a shorter name."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:1207
-msgid "No playlist name entered, try again later."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:1214
+#: redbot/cogs/audio/audio.py:2227
msgid "Playlist {name} saved from current queue: {num} tracks added."
msgstr ""
-#: redbot/cogs/audio/audio.py:1221
+#: redbot/cogs/audio/audio.py:2234
#, docstring
msgid "Remove a track from a playlist by url."
msgstr ""
-#: redbot/cogs/audio/audio.py:1235
+#: redbot/cogs/audio/audio.py:2248
msgid "URL not in playlist."
msgstr ""
-#: redbot/cogs/audio/audio.py:1239
+#: redbot/cogs/audio/audio.py:2252
msgid "No tracks left, removing playlist."
msgstr ""
-#: redbot/cogs/audio/audio.py:1246
+#: redbot/cogs/audio/audio.py:2259
msgid "{num} entries have been removed from the {playlist_name} playlist."
msgstr ""
-#: redbot/cogs/audio/audio.py:1253
+#: redbot/cogs/audio/audio.py:2266
msgid "The track has been removed from the {playlist_name} playlist."
msgstr ""
-#: redbot/cogs/audio/audio.py:1260
+#: redbot/cogs/audio/audio.py:2273
#, docstring
msgid "Save a playlist from a url."
msgstr ""
-#: redbot/cogs/audio/audio.py:1272
+#: redbot/cogs/audio/audio.py:2285
msgid "Playlist {name} saved: {num} tracks added."
msgstr ""
-#: redbot/cogs/audio/audio.py:1279
+#: redbot/cogs/audio/audio.py:2292
#, docstring
msgid "Load a playlist into the queue."
msgstr ""
-#: redbot/cogs/audio/audio.py:1304
-msgid "That playlist doesn't exist."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:1309
+#: redbot/cogs/audio/audio.py:2336
#, docstring
msgid "Convert a Red v2 playlist file to a playlist."
msgstr ""
-#: redbot/cogs/audio/audio.py:1315
+#: redbot/cogs/audio/audio.py:2342
msgid "Please upload the playlist file. Any other message will cancel this operation."
msgstr ""
-#: redbot/cogs/audio/audio.py:1323
+#: redbot/cogs/audio/audio.py:2350
msgid "No file detected, try again later."
msgstr ""
-#: redbot/cogs/audio/audio.py:1327
+#: redbot/cogs/audio/audio.py:2354
msgid "Upload cancelled."
msgstr ""
-#: redbot/cogs/audio/audio.py:1331
+#: redbot/cogs/audio/audio.py:2358
msgid "Only playlist files can be uploaded."
msgstr ""
-#: redbot/cogs/audio/audio.py:1336
+#: redbot/cogs/audio/audio.py:2363
msgid "Not a valid playlist file."
msgstr ""
-#: redbot/cogs/audio/audio.py:1352
+#: redbot/cogs/audio/audio.py:2379
msgid "A playlist already exists with this name."
msgstr ""
-#: redbot/cogs/audio/audio.py:1357
-msgid "Please wait, adding tracks..."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:1371
-msgid "Loading track {num}/{total}..."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:1377
+#: redbot/cogs/audio/audio.py:2407
msgid "No tracks found."
msgstr ""
-#: redbot/cogs/audio/audio.py:1383
+#: redbot/cogs/audio/audio.py:2413
msgid "Added {num} tracks from the {playlist_name} playlist. {num_bad} track(s) could not be loaded."
msgstr ""
-#: redbot/cogs/audio/audio.py:1388
+#: redbot/cogs/audio/audio.py:2418
msgid "Added {num} tracks from the {playlist_name} playlist."
msgstr ""
-#: redbot/cogs/audio/audio.py:1392
+#: redbot/cogs/audio/audio.py:2422
msgid "Playlist Saved"
msgstr ""
-#: redbot/cogs/audio/audio.py:1403
+#: redbot/cogs/audio/audio.py:2433
msgid "You need the DJ role to use playlists."
msgstr ""
-#: redbot/cogs/audio/audio.py:1432
+#: redbot/cogs/audio/audio.py:2471
msgid "You must be in the voice channel to use the playlist command."
msgstr ""
-#: redbot/cogs/audio/audio.py:1464
+#: redbot/cogs/audio/audio.py:2525
#, docstring
msgid "Skip to the start of the previously played track."
msgstr ""
-#: redbot/cogs/audio/audio.py:1474 redbot/cogs/audio/audio.py:2121
+#: redbot/cogs/audio/audio.py:2535 redbot/cogs/audio/audio.py:3317
msgid "You need the DJ role to skip tracks."
msgstr ""
-#: redbot/cogs/audio/audio.py:1479 redbot/cogs/audio/audio.py:2115
+#: redbot/cogs/audio/audio.py:2540 redbot/cogs/audio/audio.py:3311
msgid "You must be in the voice channel to skip the music."
msgstr ""
-#: redbot/cogs/audio/audio.py:1482
+#: redbot/cogs/audio/audio.py:2543
msgid "Turn shuffle off to use this command."
msgstr ""
-#: redbot/cogs/audio/audio.py:1484
+#: redbot/cogs/audio/audio.py:2545
msgid "No previous track."
msgstr ""
-#: redbot/cogs/audio/audio.py:1501
+#: redbot/cogs/audio/audio.py:2562
msgid "Replaying Track"
msgstr ""
-#: redbot/cogs/audio/audio.py:1509
+#: redbot/cogs/audio/audio.py:2571
#, docstring
-msgid "List the queue.\n\n"
-" Use [p]queue search to search the queue.\n"
-" "
+msgid "List the songs in the queue."
msgstr ""
-#: redbot/cogs/audio/audio.py:1514 redbot/cogs/audio/audio.py:1517
-#: redbot/cogs/audio/audio.py:1544 redbot/cogs/audio/audio.py:2221
-#: redbot/cogs/audio/audio.py:2225 redbot/cogs/audio/audio.py:2232
-msgid "There's nothing in the queue."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:1553
+#: redbot/cogs/audio/audio.py:2622
msgid "**Currently livestreaming:**"
msgstr ""
-#: redbot/cogs/audio/audio.py:1559 redbot/cogs/audio/audio.py:1569
-#: redbot/cogs/audio/audio.py:1575
+#: redbot/cogs/audio/audio.py:2628 redbot/cogs/audio/audio.py:2638
+#: redbot/cogs/audio/audio.py:2644
msgid "Playing: "
msgstr ""
-#: redbot/cogs/audio/audio.py:1562 redbot/cogs/audio/audio.py:1570
-msgid "Requested by: **{user}**\n"
+#: redbot/cogs/audio/audio.py:2631
+msgid "Requested by: **{user}**\\n"
msgstr ""
-#: redbot/cogs/audio/audio.py:1577
+#: redbot/cogs/audio/audio.py:2639
+msgid "Requested by: **{user}**\\n"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2646
msgid "Requested by: **{user}**"
msgstr ""
-#: redbot/cogs/audio/audio.py:1595 redbot/cogs/audio/audio.py:1599
-#: redbot/cogs/audio/audio.py:1604
-msgid "requested by **{user}**\n"
+#: redbot/cogs/audio/audio.py:2664
+msgid "requested by **{user}**\\n"
msgstr ""
-#: redbot/cogs/audio/audio.py:1615
+#: redbot/cogs/audio/audio.py:2668
+msgid "requested by **{user}**\\n"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2673
+msgid "requested by **{user}**\\n"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2684
msgid "Page {page_num}/{total_pages} | {num_tracks} tracks, {num_remaining} remaining"
msgstr ""
-#: redbot/cogs/audio/audio.py:1624
+#: redbot/cogs/audio/audio.py:2693
msgid "Repeat"
msgstr ""
-#: redbot/cogs/audio/audio.py:1626
+#: redbot/cogs/audio/audio.py:2695
msgid "Shuffle"
msgstr ""
-#: redbot/cogs/audio/audio.py:1683
+#: redbot/cogs/audio/audio.py:2740
msgid "Matching Tracks:"
msgstr ""
-#: redbot/cogs/audio/audio.py:1686 redbot/cogs/audio/audio.py:2010
+#: redbot/cogs/audio/audio.py:2743 redbot/cogs/audio/audio.py:3182
msgid "Page {page_num}/{total_pages}"
msgstr ""
-#: redbot/cogs/audio/audio.py:1695
+#: redbot/cogs/audio/audio.py:2752
+#, docstring
+msgid "Clears the queue."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2764
+msgid "You need the DJ role to clear the queue."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2766
+msgid "The queue has been cleared."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2771
+#, docstring
+msgid "Removes songs from the queue if the requester is not in the voice channel."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2783
+msgid "You need the DJ role to clean the queue."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2794
+msgid "Removed 0 tracks."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2798
+msgid "Removed {removed_tracks} tracks queued by members outside of the voice channel."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2806
+#, docstring
+msgid "Search the queue."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2829
#, docstring
msgid "Toggle repeat."
msgstr ""
-#: redbot/cogs/audio/audio.py:1701
+#: redbot/cogs/audio/audio.py:2835
msgid "You need the DJ role to toggle repeat."
msgstr ""
-#: redbot/cogs/audio/audio.py:1712
+#: redbot/cogs/audio/audio.py:2843
msgid "You must be in the voice channel to toggle repeat."
msgstr ""
-#: redbot/cogs/audio/audio.py:1715
+#: redbot/cogs/audio/audio.py:2849
msgid "Repeat tracks: {true_or_false}."
msgstr ""
-#: redbot/cogs/audio/audio.py:1721
+#: redbot/cogs/audio/audio.py:2857
#, docstring
msgid "Remove a specific track number from the queue."
msgstr ""
-#: redbot/cogs/audio/audio.py:1727
+#: redbot/cogs/audio/audio.py:2863
msgid "Nothing queued."
msgstr ""
-#: redbot/cogs/audio/audio.py:1730
+#: redbot/cogs/audio/audio.py:2866
msgid "You need the DJ role to remove tracks."
msgstr ""
-#: redbot/cogs/audio/audio.py:1735
+#: redbot/cogs/audio/audio.py:2871
msgid "You must be in the voice channel to manage the queue."
msgstr ""
-#: redbot/cogs/audio/audio.py:1751
+#: redbot/cogs/audio/audio.py:2887
msgid "Removed {track} from the queue."
msgstr ""
-#: redbot/cogs/audio/audio.py:1757
+#: redbot/cogs/audio/audio.py:2894
#, docstring
-msgid "Pick a track with a search.\n\n"
-" Use `[p]search list ` to queue all tracks found\n"
-" on YouTube. `[p]search sc ` will search SoundCloud\n"
-" instead of YouTube.\n"
-" "
+msgid "Pick a track with a search.\\n\\n Use `[p]search list ` to queue all tracks found\\n on YouTube. `[p]search sc ` will search SoundCloud\\n instead of YouTube.\\n "
msgstr ""
-#: redbot/cogs/audio/audio.py:1814
+#: redbot/cogs/audio/audio.py:2958
msgid "You must be in the voice channel to enqueue tracks."
msgstr ""
-#: redbot/cogs/audio/audio.py:1831
-msgid "Queued {num} track(s)."
+#: redbot/cogs/audio/audio.py:2997
+msgid "Queued {num} track(s).{maxlength_msg}"
msgstr ""
-#: redbot/cogs/audio/audio.py:1837
+#: redbot/cogs/audio/audio.py:3003
msgid "{time} until start of search playback: starts at #{position} in queue"
msgstr ""
-#: redbot/cogs/audio/audio.py:1997
+#: redbot/cogs/audio/audio.py:3169
msgid "Tracks Found:"
msgstr ""
-#: redbot/cogs/audio/audio.py:1998
+#: redbot/cogs/audio/audio.py:3170
msgid "search results"
msgstr ""
-#: redbot/cogs/audio/audio.py:2001
+#: redbot/cogs/audio/audio.py:3173
msgid "Folders Found:"
msgstr ""
-#: redbot/cogs/audio/audio.py:2002
+#: redbot/cogs/audio/audio.py:3174
msgid "local folders"
msgstr ""
-#: redbot/cogs/audio/audio.py:2004
+#: redbot/cogs/audio/audio.py:3176
msgid "Files Found:"
msgstr ""
-#: redbot/cogs/audio/audio.py:2005
+#: redbot/cogs/audio/audio.py:3177
msgid "local tracks"
msgstr ""
-#: redbot/cogs/audio/audio.py:2022
+#: redbot/cogs/audio/audio.py:3195
#, docstring
-msgid "Seek ahead or behind on a track by seconds."
+msgid "Seek ahead or behind on a track by seconds or a to a specific time.\\n\\n Accepts seconds or a value formatted like 00:00:00 (`hh:mm:ss`) or 00:00 (`mm:ss`)."
msgstr ""
-#: redbot/cogs/audio/audio.py:2031
+#: redbot/cogs/audio/audio.py:3206
msgid "You must be in the voice channel to use seek."
msgstr ""
-#: redbot/cogs/audio/audio.py:2036
+#: redbot/cogs/audio/audio.py:3211
msgid "You need the DJ role to use seek."
msgstr ""
-#: redbot/cogs/audio/audio.py:2042 redbot/cogs/audio/audio.py:2278
+#: redbot/cogs/audio/audio.py:3217 redbot/cogs/audio/audio.py:3510
msgid "There are other people listening - vote to skip instead."
msgstr ""
-#: redbot/cogs/audio/audio.py:2046
+#: redbot/cogs/audio/audio.py:3221
msgid "Can't seek on a stream."
msgstr ""
-#: redbot/cogs/audio/audio.py:2052
+#: redbot/cogs/audio/audio.py:3230
+msgid "Invalid input for the time to seek."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:3236
msgid "Moved {num_seconds}s to 00:00:00"
msgstr ""
-#: redbot/cogs/audio/audio.py:2057
+#: redbot/cogs/audio/audio.py:3241
msgid "Moved {num_seconds}s to {time}"
msgstr ""
-#: redbot/cogs/audio/audio.py:2068
+#: redbot/cogs/audio/audio.py:3249
+msgid "Moved to {time}"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:3261
#, docstring
msgid "Toggle shuffle."
msgstr ""
-#: redbot/cogs/audio/audio.py:2072
+#: redbot/cogs/audio/audio.py:3265
msgid "You need the DJ role to toggle shuffle."
msgstr ""
-#: redbot/cogs/audio/audio.py:2083
+#: redbot/cogs/audio/audio.py:3273
msgid "You must be in the voice channel to toggle shuffle."
msgstr ""
-#: redbot/cogs/audio/audio.py:2086
+#: redbot/cogs/audio/audio.py:3279
msgid "Shuffle tracks: {true_or_false}."
msgstr ""
-#: redbot/cogs/audio/audio.py:2092
+#: redbot/cogs/audio/audio.py:3287
#, docstring
-msgid "Make Red sing one of her songs"
+msgid "Make Red sing one of her songs."
msgstr ""
-#: redbot/cogs/audio/audio.py:2107
+#: redbot/cogs/audio/audio.py:3303
#, docstring
-msgid "Skip to the next track."
+msgid "Skip to the next track, or to a given track number."
msgstr ""
-#: redbot/cogs/audio/audio.py:2126
+#: redbot/cogs/audio/audio.py:3322
+msgid "Can't skip to a specific track in vote mode without the DJ role."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:3326
msgid "I removed your vote to skip."
msgstr ""
-#: redbot/cogs/audio/audio.py:2129
+#: redbot/cogs/audio/audio.py:3329
msgid "You voted to skip."
msgstr ""
-#: redbot/cogs/audio/audio.py:2142
+#: redbot/cogs/audio/audio.py:3342
msgid "Vote threshold met."
msgstr ""
-#: redbot/cogs/audio/audio.py:2145
+#: redbot/cogs/audio/audio.py:3345
msgid " Votes: {num_votes}/{num_members} ({cur_percent}% out of {required_percent}% needed)"
msgstr ""
-#: redbot/cogs/audio/audio.py:2228
+#: redbot/cogs/audio/audio.py:3425
msgid "Currently livestreaming {track}"
msgstr ""
-#: redbot/cogs/audio/audio.py:2235
+#: redbot/cogs/audio/audio.py:3432
msgid "{time} left on {track}"
msgstr ""
-#: redbot/cogs/audio/audio.py:2253
+#: redbot/cogs/audio/audio.py:3441
+msgid "Track number must be equal to or greater than 1."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:3454
+msgid "Can't skip to a track while shuffle is enabled."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:3470
msgid "Track Skipped"
msgstr ""
-#: redbot/cogs/audio/audio.py:2261
+#: redbot/cogs/audio/audio.py:3493
#, docstring
msgid "Stop playback and clear the queue."
msgstr ""
-#: redbot/cogs/audio/audio.py:2271
+#: redbot/cogs/audio/audio.py:3503
msgid "You must be in the voice channel to stop the music."
msgstr ""
-#: redbot/cogs/audio/audio.py:2282
+#: redbot/cogs/audio/audio.py:3514
msgid "You need the DJ role to stop the music."
msgstr ""
-#: redbot/cogs/audio/audio.py:2284
+#: redbot/cogs/audio/audio.py:3516
msgid "Stopping..."
msgstr ""
-#: redbot/cogs/audio/audio.py:2294
+#: redbot/cogs/audio/audio.py:3531
+#, docstring
+msgid "Summon the bot to a voice channel."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:3535
+msgid "You need the DJ role to summon the bot."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:3565
#, docstring
msgid "Set the volume, 1% - 150%."
msgstr ""
-#: redbot/cogs/audio/audio.py:2300
+#: redbot/cogs/audio/audio.py:3571
msgid "Current Volume:"
msgstr ""
-#: redbot/cogs/audio/audio.py:2312
+#: redbot/cogs/audio/audio.py:3583
msgid "You must be in the voice channel to change the volume."
msgstr ""
-#: redbot/cogs/audio/audio.py:2318
+#: redbot/cogs/audio/audio.py:3589
msgid "You need the DJ role to change the volume."
msgstr ""
-#: redbot/cogs/audio/audio.py:2331
+#: redbot/cogs/audio/audio.py:3602
msgid "Volume:"
msgstr ""
-#: redbot/cogs/audio/audio.py:2341
+#: redbot/cogs/audio/audio.py:3613
#, docstring
msgid "Lavalink server configuration options."
msgstr ""
-#: redbot/cogs/audio/audio.py:2346
+#: redbot/cogs/audio/audio.py:3618
#, docstring
msgid "Toggle using external lavalink servers."
msgstr ""
-#: redbot/cogs/audio/audio.py:2357 redbot/cogs/audio/audio.py:2366
+#: redbot/cogs/audio/audio.py:3625 redbot/cogs/audio/audio.py:3635
msgid "External lavalink server: {true_or_false}."
msgstr ""
-#: redbot/cogs/audio/audio.py:2361
-msgid "Defaults reset."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:2373
+#: redbot/cogs/audio/audio.py:3642
#, docstring
msgid "Set the lavalink server host."
msgstr ""
-#: redbot/cogs/audio/audio.py:2377 redbot/cogs/audio/audio.py:2382
+#: redbot/cogs/audio/audio.py:3646 redbot/cogs/audio/audio.py:3651
msgid "Host set to {host}."
msgstr ""
-#: redbot/cogs/audio/audio.py:2379 redbot/cogs/audio/audio.py:2395
-#: redbot/cogs/audio/audio.py:2413 redbot/cogs/audio/audio.py:2429
+#: redbot/cogs/audio/audio.py:3648 redbot/cogs/audio/audio.py:3664
+#: redbot/cogs/audio/audio.py:3682 redbot/cogs/audio/audio.py:3698
msgid "External lavalink server set to True."
msgstr ""
-#: redbot/cogs/audio/audio.py:2388
+#: redbot/cogs/audio/audio.py:3657
#, docstring
msgid "Set the lavalink server password."
msgstr ""
-#: redbot/cogs/audio/audio.py:2393 redbot/cogs/audio/audio.py:2399
+#: redbot/cogs/audio/audio.py:3662 redbot/cogs/audio/audio.py:3668
msgid "Server password set to {password}."
msgstr ""
-#: redbot/cogs/audio/audio.py:2406
+#: redbot/cogs/audio/audio.py:3675
#, docstring
msgid "Set the lavalink REST server port."
msgstr ""
-#: redbot/cogs/audio/audio.py:2411 redbot/cogs/audio/audio.py:2416
+#: redbot/cogs/audio/audio.py:3680 redbot/cogs/audio/audio.py:3685
msgid "REST port set to {port}."
msgstr ""
-#: redbot/cogs/audio/audio.py:2422
+#: redbot/cogs/audio/audio.py:3691
#, docstring
msgid "Set the lavalink websocket server port."
msgstr ""
-#: redbot/cogs/audio/audio.py:2427 redbot/cogs/audio/audio.py:2432
+#: redbot/cogs/audio/audio.py:3696 redbot/cogs/audio/audio.py:3701
msgid "Websocket port set to {port}."
msgstr ""
-#: redbot/cogs/audio/audio.py:2461
+#: redbot/cogs/audio/audio.py:3801
msgid "Not enough {currency} ({required_credits} required)."
msgstr ""
diff --git a/redbot/cogs/audio/locales/it-IT.po b/redbot/cogs/audio/locales/it-IT.po
index 6a1ec2563..f07a453cd 100644
--- a/redbot/cogs/audio/locales/it-IT.po
+++ b/redbot/cogs/audio/locales/it-IT.po
@@ -1,14 +1,14 @@
msgid ""
msgstr ""
"Project-Id-Version: red-discordbot\n"
-"POT-Creation-Date: 2019-02-17 02:24+0000\n"
-"PO-Revision-Date: 2019-02-25 03:07\n"
-"Last-Translator: Kowlin \n"
+"POT-Creation-Date: 2019-07-05 22:33+0200\n"
+"PO-Revision-Date: 2019-07-06 16:13\n"
+"Last-Translator: Robert Jansen (Kowlin)\n"
"Language-Team: Italian\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"Generated-By: redgettext 2.2\n"
+"Generated-By: redgettext 3.0\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: crowdin.com\n"
"X-Crowdin-Project: red-discordbot\n"
@@ -16,971 +16,1275 @@ msgstr ""
"X-Crowdin-File: /cogs/audio/locales/messages.pot\n"
"Language: it_IT\n"
-#: redbot/cogs/audio/audio.py:38
+#: redbot/cogs/audio/audio.py:47
#, docstring
msgid "Play audio through voice channels."
msgstr ""
-#: redbot/cogs/audio/audio.py:173 redbot/cogs/audio/audio.py:735
-msgid "Now Playing"
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:177
-msgid "Track length: {length} | Requested by: {user}"
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:201 redbot/cogs/audio/audio.py:227
+#: redbot/cogs/audio/audio.py:260
msgid "music in {} servers"
msgstr ""
-#: redbot/cogs/audio/audio.py:211
+#: redbot/cogs/audio/audio.py:300 redbot/cogs/audio/audio.py:1317
+msgid "Now Playing"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:304
+msgid "Track length: {length} | Requested by: {user}"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:331
msgid "Queue ended."
msgstr ""
-#: redbot/cogs/audio/audio.py:240
+#: redbot/cogs/audio/audio.py:350
msgid "Track Error"
msgstr ""
-#: redbot/cogs/audio/audio.py:245
+#: redbot/cogs/audio/audio.py:355
msgid "Skipping..."
msgstr ""
-#: redbot/cogs/audio/audio.py:252
+#: redbot/cogs/audio/audio.py:363
#, docstring
msgid "Music configuration options."
msgstr ""
-#: redbot/cogs/audio/audio.py:258
+#: redbot/cogs/audio/audio.py:369
#, docstring
-msgid "Toggle DJ mode.\n\n"
-" DJ mode allows users with the DJ role to use audio commands.\n"
-" "
+msgid "Toggle the bot auto-disconnecting when done playing.\\n\\n This setting takes precedence over [p]audioset emptydisconnect.\\n "
msgstr ""
-#: redbot/cogs/audio/audio.py:265
+#: redbot/cogs/audio/audio.py:377
+msgid "Auto-disconnection at queue end: {true_or_false}."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:385
+#, docstring
+msgid "Toggle DJ mode.\\n\\n DJ mode allows users with the DJ role to use audio commands.\\n "
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:392
msgid "Please set a role to use with DJ mode. Enter the role name or ID now."
msgstr ""
-#: redbot/cogs/audio/audio.py:273
+#: redbot/cogs/audio/audio.py:400
msgid "Response timed out, try again later."
msgstr ""
-#: redbot/cogs/audio/audio.py:284
+#: redbot/cogs/audio/audio.py:405
+msgid "DJ role enabled: {true_or_false}."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:411
#, docstring
msgid "Auto-disconnection after x seconds while stopped. 0 to disable."
msgstr ""
-#: redbot/cogs/audio/audio.py:286 redbot/cogs/audio/audio.py:317
-#: redbot/cogs/audio/audio.py:405
+#: redbot/cogs/audio/audio.py:413 redbot/cogs/audio/audio.py:436
+#: redbot/cogs/audio/audio.py:543 redbot/cogs/audio/audio.py:687
msgid "Can't be less than zero."
msgstr ""
-#: redbot/cogs/audio/audio.py:291
+#: redbot/cogs/audio/audio.py:418
msgid "Empty disconnect disabled."
msgstr ""
-#: redbot/cogs/audio/audio.py:296
+#: redbot/cogs/audio/audio.py:423
msgid "Empty disconnect timer set to {num_seconds}."
msgstr ""
-#: redbot/cogs/audio/audio.py:307
-#, docstring
-msgid "Set the role to use for DJ mode."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:310
-msgid "DJ role set to: {role.name}."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:315
+#: redbot/cogs/audio/audio.py:434
#, docstring
msgid "Set a price for queueing tracks for non-mods. 0 to disable."
msgstr ""
-#: redbot/cogs/audio/audio.py:320
+#: redbot/cogs/audio/audio.py:439
msgid "Jukebox mode disabled."
msgstr ""
-#: redbot/cogs/audio/audio.py:325
+#: redbot/cogs/audio/audio.py:444
msgid "Track queueing command price set to {price} {currency}."
msgstr ""
-#: redbot/cogs/audio/audio.py:336
+#: redbot/cogs/audio/audio.py:455
+#, docstring
+msgid "Set the localtracks path if the Lavalink.jar is not run from the Audio data folder.\\n\\n Leave the path blank to reset the path to the default, the Audio data directory.\\n "
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:463
+msgid "The localtracks path location has been reset to the default location."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:466
+msgid "This setting is only for bot owners to set a localtracks folder location if the Lavalink.jar is being ran from outside of the Audio data directory.\\nIn the example below, the full path for 'ParentDirectory' must be passed to this command.\\nThe path must not contain spaces.\\n```\\nParentDirectory\\n |__ localtracks (folder)\\n | |__ Awesome Album Name (folder)\\n | |__01 Cool Song.mp3\\n | |__02 Groovy Song.mp3\\n |\\n |__ Lavalink.jar\\n |__ application.yml\\n```\\nThe folder path given to this command must contain the Lavalink.jar, the application.yml, and the localtracks folder.\\nUse this command with no path given to reset it to the default, the Audio data directory for this bot.\\nDo you want to continue to set the provided path for local tracks?"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:505
+msgid "{local_path} does not seem like a valid path."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:520
+msgid "The path that was entered does not have {filelist} file in that location. The path will still be saved, but please check the path and the file location before attempting to play local tracks or start your Lavalink.jar."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:530
+msgid "Localtracks path set to: {local_path}."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:536
+#, docstring
+msgid "Max length of a track to queue in seconds. 0 to disable.\\n\\n Accepts seconds or a value formatted like 00:00:00 (`hh:mm:ss`) or 00:00 (`mm:ss`).\\n Invalid input will turn the max length setting off."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:545
+msgid "Track max length disabled."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:549
+msgid "Track max length set to {seconds}."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:559
#, docstring
msgid "Toggle track announcement and other bot messages."
msgstr ""
-#: redbot/cogs/audio/audio.py:340
+#: redbot/cogs/audio/audio.py:563
msgid "Verbose mode on: {true_or_false}."
msgstr ""
-#: redbot/cogs/audio/audio.py:345
+#: redbot/cogs/audio/audio.py:569
+#, docstring
+msgid "Toggle the domain restriction on Audio.\\n\\n When toggled off, users will be able to play songs from non-commercial websites and links.\\n When toggled on, users are restricted to YouTube, SoundCloud, Mixer, Vimeo, Twitch, and Bandcamp links."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:576
+msgid "Commercial links only: {true_or_false}."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:582
+#, docstring
+msgid "Set the role to use for DJ mode."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:585
+msgid "DJ role set to: {role.name}."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:589
#, docstring
msgid "Show the current settings."
msgstr ""
-#: redbot/cogs/audio/audio.py:358
+#: redbot/cogs/audio/audio.py:604
msgid "Server Settings"
msgstr ""
-#: redbot/cogs/audio/audio.py:360
-msgid "Disconnect timer: [{num_seconds}]\n"
+#: redbot/cogs/audio/audio.py:606
+msgid "Auto-disconnect: [{dc}]\\n"
msgstr ""
-#: redbot/cogs/audio/audio.py:364
-msgid "DJ Role: [{role.name}]\n"
+#: redbot/cogs/audio/audio.py:609
+msgid "Disconnect timer: [{num_seconds}]\\n"
msgstr ""
-#: redbot/cogs/audio/audio.py:366
-msgid "Jukebox: [{jukebox_name}]\n"
+#: redbot/cogs/audio/audio.py:613
+msgid "DJ Role: [{role.name}]\\n"
msgstr ""
-#: redbot/cogs/audio/audio.py:367
-msgid "Command price: [{jukebox_price}]\n"
+#: redbot/cogs/audio/audio.py:615
+msgid "Jukebox: [{jukebox_name}]\\n"
msgstr ""
-#: redbot/cogs/audio/audio.py:368
-msgid "Repeat: [{repeat}]\n"
-"Shuffle: [{shuffle}]\n"
-"Song notify msgs: [{notify}]\n"
-"Songs as status: [{status}]\n"
+#: redbot/cogs/audio/audio.py:616
+msgid "Command price: [{jukebox_price}]\\n"
msgstr ""
-#: redbot/cogs/audio/audio.py:375
-msgid "Thumbnails: [{0}]\n"
+#: redbot/cogs/audio/audio.py:618
+msgid "Max track length: [{tracklength}]\\n"
msgstr ""
-#: redbot/cogs/audio/audio.py:377
-msgid "Vote skip: [{vote_enabled}]\n"
-"Skip percentage: [{vote_percent}%]\n"
+#: redbot/cogs/audio/audio.py:621
+msgid "Repeat: [{repeat}]\\nShuffle: [{shuffle}]\\nSong notify msgs: [{notify}]\\nSongs as status: [{status}]\\n"
msgstr ""
-#: redbot/cogs/audio/audio.py:380
-msgid "---Lavalink Settings---\n"
-"Cog version: [{version}]\n"
-"Jar build: [{jarbuild}]\n"
-"External server: [{use_external_lavalink}]"
+#: redbot/cogs/audio/audio.py:628
+msgid "Thumbnails: [{0}]\\n"
msgstr ""
-#: redbot/cogs/audio/audio.py:393
+#: redbot/cogs/audio/audio.py:630
+msgid "Vote skip: [{vote_enabled}]\\nSkip percentage: [{vote_percent}%]\\n"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:633
+msgid "---Lavalink Settings--- \\nCog version: [{version}]\\nJar build: [{jarbuild}]\\nExternal server: [{use_external_lavalink}]\\n"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:640
+msgid "Localtracks path: [{localpath}]\\n"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:648
#, docstring
-msgid "Toggle displaying a thumbnail on audio messages."
+msgid "Instructions to set the Spotify API tokens."
msgstr ""
-#: redbot/cogs/audio/audio.py:397
-msgid "Thumbnail display: {true_or_false}."
+#: redbot/cogs/audio/audio.py:649
+msgid "1. Go to Spotify developers and log in with your Spotify account.\\n(https://developer.spotify.com/dashboard/applications)\\n2. Click \\\"Create An App\\\".\\n3. Fill out the form provided with your app name, etc.\\n4. When asked if you're developing commercial integration select \\\"No\\\".\\n5. Accept the terms and conditions.\\n6. Copy your client ID and your client secret into:\\n`{prefix}set api spotify client_id, client_secret,`"
msgstr ""
-#: redbot/cogs/audio/audio.py:403
-#, docstring
-msgid "Percentage needed for non-mods to skip tracks. 0 to disable."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:411
-msgid "Voting disabled. All users can use queue management commands."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:416
-msgid "Vote percentage set to {percent}%."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:425
+#: redbot/cogs/audio/audio.py:665
#, docstring
msgid "Enable/disable tracks' titles as status."
msgstr ""
-#: redbot/cogs/audio/audio.py:429
+#: redbot/cogs/audio/audio.py:669
msgid "Song titles as status: {true_or_false}."
msgstr ""
-#: redbot/cogs/audio/audio.py:435
+#: redbot/cogs/audio/audio.py:675
+#, docstring
+msgid "Toggle displaying a thumbnail on audio messages."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:679
+msgid "Thumbnail display: {true_or_false}."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:685
+#, docstring
+msgid "Percentage needed for non-mods to skip tracks. 0 to disable."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:693
+msgid "Voting disabled. All users can use queue management commands."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:698
+msgid "Vote percentage set to {percent}%."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:707
+#, docstring
+msgid "Instructions to set the YouTube API key."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:726
#, docstring
msgid "Audio stats."
msgstr ""
-#: redbot/cogs/audio/audio.py:469 redbot/cogs/audio/audio.py:489
-#: redbot/cogs/audio/audio.py:698 redbot/cogs/audio/audio.py:788
-#: redbot/cogs/audio/audio.py:804 redbot/cogs/audio/audio.py:829
-#: redbot/cogs/audio/audio.py:836 redbot/cogs/audio/audio.py:1179
-#: redbot/cogs/audio/audio.py:1466 redbot/cogs/audio/audio.py:1724
-#: redbot/cogs/audio/audio.py:2026 redbot/cogs/audio/audio.py:2063
-#: redbot/cogs/audio/audio.py:2109 redbot/cogs/audio/audio.py:2265
-#: redbot/cogs/audio/audio.py:2304 redbot/cogs/audio/audio.py:2334
+#: redbot/cogs/audio/audio.py:754 redbot/cogs/audio/audio.py:782
+#: redbot/cogs/audio/audio.py:819 redbot/cogs/audio/audio.py:847
+#: redbot/cogs/audio/audio.py:914 redbot/cogs/audio/audio.py:932
+#: redbot/cogs/audio/audio.py:956 redbot/cogs/audio/audio.py:1026
+#: redbot/cogs/audio/audio.py:1280 redbot/cogs/audio/audio.py:1371
+#: redbot/cogs/audio/audio.py:1388 redbot/cogs/audio/audio.py:1411
+#: redbot/cogs/audio/audio.py:1419 redbot/cogs/audio/audio.py:2190
+#: redbot/cogs/audio/audio.py:2527 redbot/cogs/audio/audio.py:2860
+#: redbot/cogs/audio/audio.py:3201 redbot/cogs/audio/audio.py:3255
+#: redbot/cogs/audio/audio.py:3305 redbot/cogs/audio/audio.py:3497
+#: redbot/cogs/audio/audio.py:3575 redbot/cogs/audio/audio.py:3605
msgid "Nothing playing."
msgstr ""
-#: redbot/cogs/audio/audio.py:473
+#: redbot/cogs/audio/audio.py:758
msgid "Not connected anywhere."
msgstr ""
-#: redbot/cogs/audio/audio.py:478
-msgid "Connected in {num} servers:"
+#: redbot/cogs/audio/audio.py:764
+msgid "Playing in {num}/{total} servers:"
msgstr ""
-#: redbot/cogs/audio/audio.py:486
+#: redbot/cogs/audio/audio.py:779
#, docstring
msgid "Bump a track number to the top of the queue."
msgstr ""
-#: redbot/cogs/audio/audio.py:495
+#: redbot/cogs/audio/audio.py:788
msgid "You must be in the voice channel to bump a track."
msgstr ""
-#: redbot/cogs/audio/audio.py:499
+#: redbot/cogs/audio/audio.py:792
msgid "You need the DJ role to bump tracks."
msgstr ""
-#: redbot/cogs/audio/audio.py:502 redbot/cogs/audio/audio.py:1739
+#: redbot/cogs/audio/audio.py:795 redbot/cogs/audio/audio.py:2875
msgid "Song number must be greater than 1 and within the queue limit."
msgstr ""
-#: redbot/cogs/audio/audio.py:517
+#: redbot/cogs/audio/audio.py:810
msgid "Moved {track} to the top of the queue."
msgstr ""
-#: redbot/cogs/audio/audio.py:523
+#: redbot/cogs/audio/audio.py:817
#, docstring
msgid "Disconnect from the voice channel."
msgstr ""
-#: redbot/cogs/audio/audio.py:528
+#: redbot/cogs/audio/audio.py:826
msgid "You need the DJ role to disconnect."
msgstr ""
-#: redbot/cogs/audio/audio.py:532
+#: redbot/cogs/audio/audio.py:830
msgid "There are other people listening to music."
msgstr ""
-#: redbot/cogs/audio/audio.py:540
+#: redbot/cogs/audio/audio.py:845
+#, docstring
+msgid "Equalizer management."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:865
+#, docstring
+msgid "Delete a saved eq preset."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:887
+#, docstring
+msgid "List saved eq presets."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:890
+msgid "No saved equalizer presets."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:897
+msgid "{num} preset(s)"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:903
+#, docstring
+msgid "Load a saved eq preset."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:930
+#, docstring
+msgid "Reset the eq to 0 across all bands."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:946
+msgid "Equalizer values have been reset."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:954
+#, docstring
+msgid "Save the current eq settings to a preset."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:958
+msgid "Please enter a name for this equalizer preset."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:972
+msgid "No equalizer preset name entered, try the command again later."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:981 redbot/cogs/audio/audio.py:2213
+msgid "Try the command again with a shorter name."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:985
+msgid "Preset name already exists, do you want to replace it?"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:994
+msgid "Not saving preset."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1019
+#, docstring
+msgid "Set an eq band with a band number or name and value.\\n\\n Band positions are 1-15 and values have a range of -0.25 to 1.0.\\n Band names are 25, 40, 63, 100, 160, 250, 400, 630, 1k, 1.6k, 2.5k, 4k, 6.3k, 10k, and 16k Hz.\\n Setting a band value to -0.25 nullifies it while +0.25 is double.\\n "
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1063
+msgid "Valid band numbers are 1-15 or the band names listed in the help for this command."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1099
#, docstring
msgid "Local playback commands."
msgstr ""
-#: redbot/cogs/audio/audio.py:545
+#: redbot/cogs/audio/audio.py:1104
#, docstring
msgid "Play all songs in a localtracks folder."
msgstr ""
-#: redbot/cogs/audio/audio.py:552
+#: redbot/cogs/audio/audio.py:1115
+msgid "No localtracks folder named {name}."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1121
#, docstring
msgid "Play a local track."
msgstr ""
-#: redbot/cogs/audio/audio.py:557
+#: redbot/cogs/audio/audio.py:1126
msgid "No local track folders found."
msgstr ""
-#: redbot/cogs/audio/audio.py:600
+#: redbot/cogs/audio/audio.py:1169
#, docstring
msgid "Search for songs across all localtracks folders."
msgstr ""
-#: redbot/cogs/audio/audio.py:605
+#: redbot/cogs/audio/audio.py:1174
msgid "No album folders found."
msgstr ""
-#: redbot/cogs/audio/audio.py:612 redbot/cogs/audio/audio.py:1634
+#: redbot/cogs/audio/audio.py:1181 redbot/cogs/audio/audio.py:2816
msgid "No matches."
msgstr ""
-#: redbot/cogs/audio/audio.py:688
+#: redbot/cogs/audio/audio.py:1269
msgid "No localtracks folder."
msgstr ""
-#: redbot/cogs/audio/audio.py:696
+#: redbot/cogs/audio/audio.py:1278
#, docstring
msgid "Now playing."
msgstr ""
-#: redbot/cogs/audio/audio.py:716
+#: redbot/cogs/audio/audio.py:1298
msgid "Requested by: **{track.requester}**"
msgstr ""
-#: redbot/cogs/audio/audio.py:726
+#: redbot/cogs/audio/audio.py:1308
msgid "Nothing."
msgstr ""
-#: redbot/cogs/audio/audio.py:785
+#: redbot/cogs/audio/audio.py:1368
#, docstring
-msgid "Pause and resume."
+msgid "Pause or resume a playing track."
msgstr ""
-#: redbot/cogs/audio/audio.py:794
-msgid "You must be in the voice channel to pause the music."
+#: redbot/cogs/audio/audio.py:1377
+msgid "You must be in the voice channel pause or resume."
msgstr ""
-#: redbot/cogs/audio/audio.py:800
-msgid "You need the DJ role to pause tracks."
+#: redbot/cogs/audio/audio.py:1384
+msgid "You need the DJ role to pause or resume tracks."
msgstr ""
-#: redbot/cogs/audio/audio.py:814
+#: redbot/cogs/audio/audio.py:1401
msgid "Track Paused"
msgstr ""
-#: redbot/cogs/audio/audio.py:821
+#: redbot/cogs/audio/audio.py:1407
msgid "Track Resumed"
msgstr ""
-#: redbot/cogs/audio/audio.py:826
-msgid "Track is paused."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:828
-msgid "Track is playing."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:834
+#: redbot/cogs/audio/audio.py:1417
#, docstring
msgid "Queue percentage."
msgstr ""
-#: redbot/cogs/audio/audio.py:860
+#: redbot/cogs/audio/audio.py:1443
msgid "Nothing in the queue."
msgstr ""
-#: redbot/cogs/audio/audio.py:882
+#: redbot/cogs/audio/audio.py:1465
msgid "Queued and playing tracks:"
msgstr ""
-#: redbot/cogs/audio/audio.py:890
+#: redbot/cogs/audio/audio.py:1474
#, docstring
msgid "Play a URL or search for a track."
msgstr ""
-#: redbot/cogs/audio/audio.py:900 redbot/cogs/audio/audio.py:1411
-#: redbot/cogs/audio/audio.py:1795
+#: redbot/cogs/audio/audio.py:1481
+msgid "That URL is not allowed."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1484 redbot/cogs/audio/audio.py:2437
+#: redbot/cogs/audio/audio.py:2928 redbot/cogs/audio/audio.py:3047
+msgid "Connection to Lavalink has failed."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1486 redbot/cogs/audio/audio.py:2439
+#: redbot/cogs/audio/audio.py:2930 redbot/cogs/audio/audio.py:3049
+msgid "Please check your console or logs for details."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1495 redbot/cogs/audio/audio.py:2449
+#: redbot/cogs/audio/audio.py:2939 redbot/cogs/audio/audio.py:3543
msgid "I don't have permission to connect to your channel."
msgstr ""
-#: redbot/cogs/audio/audio.py:906 redbot/cogs/audio/audio.py:1422
-#: redbot/cogs/audio/audio.py:1801 redbot/cogs/audio/audio.py:1889
+#: redbot/cogs/audio/audio.py:1501 redbot/cogs/audio/audio.py:2461
+#: redbot/cogs/audio/audio.py:2945 redbot/cogs/audio/audio.py:3056
+#: redbot/cogs/audio/audio.py:3555
msgid "Connect to a voice channel first."
msgstr ""
-#: redbot/cogs/audio/audio.py:909 redbot/cogs/audio/audio.py:1418
-#: redbot/cogs/audio/audio.py:1804 redbot/cogs/audio/audio.py:1892
+#: redbot/cogs/audio/audio.py:1504 redbot/cogs/audio/audio.py:2457
+#: redbot/cogs/audio/audio.py:2948 redbot/cogs/audio/audio.py:3059
+#: redbot/cogs/audio/audio.py:3558
msgid "Connection to Lavalink has not yet been established."
msgstr ""
-#: redbot/cogs/audio/audio.py:913
+#: redbot/cogs/audio/audio.py:1508
msgid "You need the DJ role to queue tracks."
msgstr ""
-#: redbot/cogs/audio/audio.py:922
+#: redbot/cogs/audio/audio.py:1519
msgid "You must be in the voice channel to use the play command."
msgstr ""
-#: redbot/cogs/audio/audio.py:928
+#: redbot/cogs/audio/audio.py:1525
msgid "No tracks to play."
msgstr ""
-#: redbot/cogs/audio/audio.py:942 redbot/cogs/audio/audio.py:1450
-#: redbot/cogs/audio/audio.py:1828 redbot/cogs/audio/audio.py:1865
+#: redbot/cogs/audio/audio.py:1565
+msgid "The owner needs to set the Spotify client ID, Spotify client secret, and YouTube API key before Spotify URLs or codes can be used. \\nSee `{prefix}audioset youtubeapi` and `{prefix}audioset spotifyapi` for instructions."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1575 redbot/cogs/audio/audio.py:2493
+msgid "Wait until the playlist has finished loading."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1592 redbot/cogs/audio/audio.py:1657
+#: redbot/cogs/audio/audio.py:2499 redbot/cogs/audio/audio.py:2509
+#: redbot/cogs/audio/audio.py:2973 redbot/cogs/audio/audio.py:3027
msgid "Nothing found."
msgstr ""
-#: redbot/cogs/audio/audio.py:953 redbot/cogs/audio/audio.py:1295
+#: redbot/cogs/audio/audio.py:1600
+msgid "The Spotify API key or client secret has not been set properly. \\nUse `{prefix}audioset spotifyapi` for instructions."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1639 redbot/cogs/audio/audio.py:1776
+msgid "This doesn't seem to be a valid Spotify URL or code."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1688 redbot/cogs/audio/audio.py:2320
msgid "Playlist Enqueued"
msgstr ""
-#: redbot/cogs/audio/audio.py:954 redbot/cogs/audio/audio.py:1296
-msgid "Added {num} tracks to the queue."
+#: redbot/cogs/audio/audio.py:1689 redbot/cogs/audio/audio.py:2321
+msgid "Added {num} tracks to the queue.{maxlength_msg}"
msgstr ""
-#: redbot/cogs/audio/audio.py:958
+#: redbot/cogs/audio/audio.py:1695
msgid "{time} until start of playlist playback: starts at #{position} in queue"
msgstr ""
-#: redbot/cogs/audio/audio.py:980 redbot/cogs/audio/audio.py:1938
+#: redbot/cogs/audio/audio.py:1711 redbot/cogs/audio/audio.py:3125
+msgid "Track exceeds maximum length."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1717
+msgid "Nothing found. Check your Lavalink logs for details."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1732 redbot/cogs/audio/audio.py:3108
msgid "Track Enqueued"
msgstr ""
-#: redbot/cogs/audio/audio.py:984 redbot/cogs/audio/audio.py:1944
+#: redbot/cogs/audio/audio.py:1736 redbot/cogs/audio/audio.py:3114
msgid "{time} until track playback: #{position} in queue"
msgstr ""
-#: redbot/cogs/audio/audio.py:989 redbot/cogs/audio/audio.py:1949
+#: redbot/cogs/audio/audio.py:1741 redbot/cogs/audio/audio.py:3119
msgid "#{position} in queue"
msgstr ""
-#: redbot/cogs/audio/audio.py:997
+#: redbot/cogs/audio/audio.py:1761
+msgid "The Spotify API key or client secret has not been set properly. \\nUse `{prefix}audioset spotifyapi` for instructions."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1793 redbot/cogs/audio/audio.py:2384
+msgid "Please wait, adding tracks..."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1809
+msgid "The connection was reset while loading the playlist."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1826 redbot/cogs/audio/audio.py:2401
+msgid "Loading track {num}/{total}..."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1840
+msgid "Approximate time remaining: {seconds}"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1850
+msgid "Nothing found.\\nThe YouTube API key may be invalid or you may be rate limited on YouTube's search service.\\nCheck the YouTube API key again and follow the instructions at `{prefix}audioset youtubeapi`."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1871
#, docstring
msgid "Playlist configuration options."
msgstr ""
-#: redbot/cogs/audio/audio.py:1002
+#: redbot/cogs/audio/audio.py:1876
#, docstring
-msgid "Add a track URL, playlist link, or quick search to a playlist.\n\n"
-" The track(s) will be appended to the end of the playlist.\n"
-" "
+msgid "Add a track URL, playlist link, or quick search to a playlist.\\n\\n The track(s) will be appended to the end of the playlist.\\n "
msgstr ""
-#: redbot/cogs/audio/audio.py:1014 redbot/cogs/audio/audio.py:1078
-#: redbot/cogs/audio/audio.py:1228
+#: redbot/cogs/audio/audio.py:1888 redbot/cogs/audio/audio.py:2028
+#: redbot/cogs/audio/audio.py:2241
msgid "You are not the author of that playlist."
msgstr ""
-#: redbot/cogs/audio/audio.py:1024
+#: redbot/cogs/audio/audio.py:1898
msgid "{track} is already in {playlist}."
msgstr ""
-#: redbot/cogs/audio/audio.py:1033 redbot/cogs/audio/audio.py:1082
-#: redbot/cogs/audio/audio.py:1092 redbot/cogs/audio/audio.py:1231
+#: redbot/cogs/audio/audio.py:1907 redbot/cogs/audio/audio.py:2032
+#: redbot/cogs/audio/audio.py:2081 redbot/cogs/audio/audio.py:2244
msgid "No playlist with that name."
msgstr ""
-#: redbot/cogs/audio/audio.py:1040
+#: redbot/cogs/audio/audio.py:1914
msgid "{track} appended to {playlist}."
msgstr ""
-#: redbot/cogs/audio/audio.py:1046
+#: redbot/cogs/audio/audio.py:1920
msgid "{num} tracks appended to {playlist}."
msgstr ""
-#: redbot/cogs/audio/audio.py:1053
+#: redbot/cogs/audio/audio.py:1928
+#, docstring
+msgid "Copy a playlist from one server to another."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1932
+msgid "Invalid server ID for source server."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1934
+msgid "Invalid server ID for target server."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1939
+msgid "No playlist with that name in {from_guild_name}."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1950
+msgid "Playlist {name} copied from {from_guild_name} to {to_guild_name}."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1962
+msgid "A playlist with that name already exists in {to_guild_name}.\\nPlease enter a new name for this playlist."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1975
+msgid "Try the playlist copy command again with a shorter name."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1980
+msgid "Playlist name already exists in {to_guild_name}, try the playlist copy command again with a different name."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1986 redbot/cogs/audio/audio.py:2220
+msgid "No playlist name entered, try again later."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1991
+msgid "Playlist {name} copied from {from_guild_name} to {to_guild_name}.\\nNew playlist name on {to_guild_name}: {new_name}"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2003
#, docstring
msgid "Create an empty playlist."
msgstr ""
-#: redbot/cogs/audio/audio.py:1057 redbot/cogs/audio/audio.py:1172
+#: redbot/cogs/audio/audio.py:2007 redbot/cogs/audio/audio.py:2183
msgid "You need the DJ role to save playlists."
msgstr ""
-#: redbot/cogs/audio/audio.py:1061 redbot/cogs/audio/audio.py:1176
-#: redbot/cogs/audio/audio.py:1204
+#: redbot/cogs/audio/audio.py:2011 redbot/cogs/audio/audio.py:2187
+#: redbot/cogs/audio/audio.py:2217
msgid "Playlist name already exists, try again with a different name."
msgstr ""
-#: redbot/cogs/audio/audio.py:1067
+#: redbot/cogs/audio/audio.py:2017
msgid "Empty playlist {name} created."
msgstr ""
-#: redbot/cogs/audio/audio.py:1071
+#: redbot/cogs/audio/audio.py:2021
#, docstring
msgid "Delete a saved playlist."
msgstr ""
-#: redbot/cogs/audio/audio.py:1083
+#: redbot/cogs/audio/audio.py:2033
msgid "{name} playlist deleted."
msgstr ""
-#: redbot/cogs/audio/audio.py:1087
+#: redbot/cogs/audio/audio.py:2039
+#, docstring
+msgid "Download a copy of a playlist.\\n\\n These files can be used with the [p]playlist upload command.\\n Red v2-compatible playlists can be generated by passing True\\n for the v2 variable."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2061
+msgid "That playlist has no tracks."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2063 redbot/cogs/audio/audio.py:2331
+msgid "That playlist doesn't exist."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2076
#, docstring
msgid "Retrieve information from a saved playlist."
msgstr ""
-#: redbot/cogs/audio/audio.py:1100
-msgid "**Custom playlist.**"
+#: redbot/cogs/audio/audio.py:2101
+msgid "Playlist info for {playlist_name}:\\n"
msgstr ""
-#: redbot/cogs/audio/audio.py:1102
-msgid "URL: <{url}>"
+#: redbot/cogs/audio/audio.py:2105
+msgid "Playlist info for {playlist_name}:\\nURL: {url}"
msgstr ""
-#: redbot/cogs/audio/audio.py:1105
-msgid "Playlist info for {playlist_name}:"
+#: redbot/cogs/audio/audio.py:2116
+msgid "Author: {author_name} | {num} track(s)"
msgstr ""
-#: redbot/cogs/audio/audio.py:1106
-msgid "Author: **{author_name}**\n"
-"{url}"
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:1110
-msgid "{num} track(s)"
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:1115
+#: redbot/cogs/audio/audio.py:2126
#, docstring
msgid "List saved playlists."
msgstr ""
-#: redbot/cogs/audio/audio.py:1118
+#: redbot/cogs/audio/audio.py:2129
msgid "No saved playlists."
msgstr ""
-#: redbot/cogs/audio/audio.py:1130
+#: redbot/cogs/audio/audio.py:2141
msgid "Tracks: {num}"
msgstr ""
-#: redbot/cogs/audio/audio.py:1131
-msgid "Author: {name}\n"
+#: redbot/cogs/audio/audio.py:2142
+msgid "Author: {name}\\n"
msgstr ""
-#: redbot/cogs/audio/audio.py:1155
+#: redbot/cogs/audio/audio.py:2166
msgid "Playlists for {server_name}:"
msgstr ""
-#: redbot/cogs/audio/audio.py:1159
+#: redbot/cogs/audio/audio.py:2170
msgid "Page {page_num}/{total_pages} | {num} playlists"
msgstr ""
-#: redbot/cogs/audio/audio.py:1168
+#: redbot/cogs/audio/audio.py:2179
#, docstring
msgid "Save the queue to a playlist."
msgstr ""
-#: redbot/cogs/audio/audio.py:1189
+#: redbot/cogs/audio/audio.py:2193 redbot/cogs/audio/audio.py:2590
+#: redbot/cogs/audio/audio.py:2593 redbot/cogs/audio/audio.py:2613
+#: redbot/cogs/audio/audio.py:2756 redbot/cogs/audio/audio.py:2759
+#: redbot/cogs/audio/audio.py:2775 redbot/cogs/audio/audio.py:2778
+#: redbot/cogs/audio/audio.py:2810 redbot/cogs/audio/audio.py:2812
+#: redbot/cogs/audio/audio.py:3418 redbot/cogs/audio/audio.py:3422
+#: redbot/cogs/audio/audio.py:3429
+msgid "There's nothing in the queue."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2202
msgid "Please enter a name for this playlist."
msgstr ""
-#: redbot/cogs/audio/audio.py:1200
-msgid "Try the command again with a shorter name."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:1207
-msgid "No playlist name entered, try again later."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:1214
+#: redbot/cogs/audio/audio.py:2227
msgid "Playlist {name} saved from current queue: {num} tracks added."
msgstr ""
-#: redbot/cogs/audio/audio.py:1221
+#: redbot/cogs/audio/audio.py:2234
#, docstring
msgid "Remove a track from a playlist by url."
msgstr ""
-#: redbot/cogs/audio/audio.py:1235
+#: redbot/cogs/audio/audio.py:2248
msgid "URL not in playlist."
msgstr ""
-#: redbot/cogs/audio/audio.py:1239
+#: redbot/cogs/audio/audio.py:2252
msgid "No tracks left, removing playlist."
msgstr ""
-#: redbot/cogs/audio/audio.py:1246
+#: redbot/cogs/audio/audio.py:2259
msgid "{num} entries have been removed from the {playlist_name} playlist."
msgstr ""
-#: redbot/cogs/audio/audio.py:1253
+#: redbot/cogs/audio/audio.py:2266
msgid "The track has been removed from the {playlist_name} playlist."
msgstr ""
-#: redbot/cogs/audio/audio.py:1260
+#: redbot/cogs/audio/audio.py:2273
#, docstring
msgid "Save a playlist from a url."
msgstr ""
-#: redbot/cogs/audio/audio.py:1272
+#: redbot/cogs/audio/audio.py:2285
msgid "Playlist {name} saved: {num} tracks added."
msgstr ""
-#: redbot/cogs/audio/audio.py:1279
+#: redbot/cogs/audio/audio.py:2292
#, docstring
msgid "Load a playlist into the queue."
msgstr ""
-#: redbot/cogs/audio/audio.py:1304
-msgid "That playlist doesn't exist."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:1309
+#: redbot/cogs/audio/audio.py:2336
#, docstring
msgid "Convert a Red v2 playlist file to a playlist."
msgstr ""
-#: redbot/cogs/audio/audio.py:1315
+#: redbot/cogs/audio/audio.py:2342
msgid "Please upload the playlist file. Any other message will cancel this operation."
msgstr ""
-#: redbot/cogs/audio/audio.py:1323
+#: redbot/cogs/audio/audio.py:2350
msgid "No file detected, try again later."
msgstr ""
-#: redbot/cogs/audio/audio.py:1327
+#: redbot/cogs/audio/audio.py:2354
msgid "Upload cancelled."
msgstr ""
-#: redbot/cogs/audio/audio.py:1331
+#: redbot/cogs/audio/audio.py:2358
msgid "Only playlist files can be uploaded."
msgstr ""
-#: redbot/cogs/audio/audio.py:1336
+#: redbot/cogs/audio/audio.py:2363
msgid "Not a valid playlist file."
msgstr ""
-#: redbot/cogs/audio/audio.py:1352
+#: redbot/cogs/audio/audio.py:2379
msgid "A playlist already exists with this name."
msgstr ""
-#: redbot/cogs/audio/audio.py:1357
-msgid "Please wait, adding tracks..."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:1371
-msgid "Loading track {num}/{total}..."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:1377
+#: redbot/cogs/audio/audio.py:2407
msgid "No tracks found."
msgstr ""
-#: redbot/cogs/audio/audio.py:1383
+#: redbot/cogs/audio/audio.py:2413
msgid "Added {num} tracks from the {playlist_name} playlist. {num_bad} track(s) could not be loaded."
msgstr ""
-#: redbot/cogs/audio/audio.py:1388
+#: redbot/cogs/audio/audio.py:2418
msgid "Added {num} tracks from the {playlist_name} playlist."
msgstr ""
-#: redbot/cogs/audio/audio.py:1392
+#: redbot/cogs/audio/audio.py:2422
msgid "Playlist Saved"
msgstr ""
-#: redbot/cogs/audio/audio.py:1403
+#: redbot/cogs/audio/audio.py:2433
msgid "You need the DJ role to use playlists."
msgstr ""
-#: redbot/cogs/audio/audio.py:1432
+#: redbot/cogs/audio/audio.py:2471
msgid "You must be in the voice channel to use the playlist command."
msgstr ""
-#: redbot/cogs/audio/audio.py:1464
+#: redbot/cogs/audio/audio.py:2525
#, docstring
msgid "Skip to the start of the previously played track."
msgstr ""
-#: redbot/cogs/audio/audio.py:1474 redbot/cogs/audio/audio.py:2121
+#: redbot/cogs/audio/audio.py:2535 redbot/cogs/audio/audio.py:3317
msgid "You need the DJ role to skip tracks."
msgstr ""
-#: redbot/cogs/audio/audio.py:1479 redbot/cogs/audio/audio.py:2115
+#: redbot/cogs/audio/audio.py:2540 redbot/cogs/audio/audio.py:3311
msgid "You must be in the voice channel to skip the music."
msgstr ""
-#: redbot/cogs/audio/audio.py:1482
+#: redbot/cogs/audio/audio.py:2543
msgid "Turn shuffle off to use this command."
msgstr ""
-#: redbot/cogs/audio/audio.py:1484
+#: redbot/cogs/audio/audio.py:2545
msgid "No previous track."
msgstr ""
-#: redbot/cogs/audio/audio.py:1501
+#: redbot/cogs/audio/audio.py:2562
msgid "Replaying Track"
msgstr ""
-#: redbot/cogs/audio/audio.py:1509
+#: redbot/cogs/audio/audio.py:2571
#, docstring
-msgid "List the queue.\n\n"
-" Use [p]queue search to search the queue.\n"
-" "
+msgid "List the songs in the queue."
msgstr ""
-#: redbot/cogs/audio/audio.py:1514 redbot/cogs/audio/audio.py:1517
-#: redbot/cogs/audio/audio.py:1544 redbot/cogs/audio/audio.py:2221
-#: redbot/cogs/audio/audio.py:2225 redbot/cogs/audio/audio.py:2232
-msgid "There's nothing in the queue."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:1553
+#: redbot/cogs/audio/audio.py:2622
msgid "**Currently livestreaming:**"
msgstr ""
-#: redbot/cogs/audio/audio.py:1559 redbot/cogs/audio/audio.py:1569
-#: redbot/cogs/audio/audio.py:1575
+#: redbot/cogs/audio/audio.py:2628 redbot/cogs/audio/audio.py:2638
+#: redbot/cogs/audio/audio.py:2644
msgid "Playing: "
msgstr ""
-#: redbot/cogs/audio/audio.py:1562 redbot/cogs/audio/audio.py:1570
-msgid "Requested by: **{user}**\n"
+#: redbot/cogs/audio/audio.py:2631
+msgid "Requested by: **{user}**\\n"
msgstr ""
-#: redbot/cogs/audio/audio.py:1577
+#: redbot/cogs/audio/audio.py:2639
+msgid "Requested by: **{user}**\\n"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2646
msgid "Requested by: **{user}**"
msgstr ""
-#: redbot/cogs/audio/audio.py:1595 redbot/cogs/audio/audio.py:1599
-#: redbot/cogs/audio/audio.py:1604
-msgid "requested by **{user}**\n"
+#: redbot/cogs/audio/audio.py:2664
+msgid "requested by **{user}**\\n"
msgstr ""
-#: redbot/cogs/audio/audio.py:1615
+#: redbot/cogs/audio/audio.py:2668
+msgid "requested by **{user}**\\n"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2673
+msgid "requested by **{user}**\\n"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2684
msgid "Page {page_num}/{total_pages} | {num_tracks} tracks, {num_remaining} remaining"
msgstr ""
-#: redbot/cogs/audio/audio.py:1624
+#: redbot/cogs/audio/audio.py:2693
msgid "Repeat"
msgstr ""
-#: redbot/cogs/audio/audio.py:1626
+#: redbot/cogs/audio/audio.py:2695
msgid "Shuffle"
msgstr ""
-#: redbot/cogs/audio/audio.py:1683
+#: redbot/cogs/audio/audio.py:2740
msgid "Matching Tracks:"
msgstr ""
-#: redbot/cogs/audio/audio.py:1686 redbot/cogs/audio/audio.py:2010
+#: redbot/cogs/audio/audio.py:2743 redbot/cogs/audio/audio.py:3182
msgid "Page {page_num}/{total_pages}"
msgstr ""
-#: redbot/cogs/audio/audio.py:1695
+#: redbot/cogs/audio/audio.py:2752
+#, docstring
+msgid "Clears the queue."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2764
+msgid "You need the DJ role to clear the queue."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2766
+msgid "The queue has been cleared."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2771
+#, docstring
+msgid "Removes songs from the queue if the requester is not in the voice channel."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2783
+msgid "You need the DJ role to clean the queue."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2794
+msgid "Removed 0 tracks."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2798
+msgid "Removed {removed_tracks} tracks queued by members outside of the voice channel."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2806
+#, docstring
+msgid "Search the queue."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2829
#, docstring
msgid "Toggle repeat."
msgstr ""
-#: redbot/cogs/audio/audio.py:1701
+#: redbot/cogs/audio/audio.py:2835
msgid "You need the DJ role to toggle repeat."
msgstr ""
-#: redbot/cogs/audio/audio.py:1712
+#: redbot/cogs/audio/audio.py:2843
msgid "You must be in the voice channel to toggle repeat."
msgstr ""
-#: redbot/cogs/audio/audio.py:1715
+#: redbot/cogs/audio/audio.py:2849
msgid "Repeat tracks: {true_or_false}."
msgstr ""
-#: redbot/cogs/audio/audio.py:1721
+#: redbot/cogs/audio/audio.py:2857
#, docstring
msgid "Remove a specific track number from the queue."
msgstr ""
-#: redbot/cogs/audio/audio.py:1727
+#: redbot/cogs/audio/audio.py:2863
msgid "Nothing queued."
msgstr ""
-#: redbot/cogs/audio/audio.py:1730
+#: redbot/cogs/audio/audio.py:2866
msgid "You need the DJ role to remove tracks."
msgstr ""
-#: redbot/cogs/audio/audio.py:1735
+#: redbot/cogs/audio/audio.py:2871
msgid "You must be in the voice channel to manage the queue."
msgstr ""
-#: redbot/cogs/audio/audio.py:1751
+#: redbot/cogs/audio/audio.py:2887
msgid "Removed {track} from the queue."
msgstr ""
-#: redbot/cogs/audio/audio.py:1757
+#: redbot/cogs/audio/audio.py:2894
#, docstring
-msgid "Pick a track with a search.\n\n"
-" Use `[p]search list ` to queue all tracks found\n"
-" on YouTube. `[p]search sc ` will search SoundCloud\n"
-" instead of YouTube.\n"
-" "
+msgid "Pick a track with a search.\\n\\n Use `[p]search list ` to queue all tracks found\\n on YouTube. `[p]search sc ` will search SoundCloud\\n instead of YouTube.\\n "
msgstr ""
-#: redbot/cogs/audio/audio.py:1814
+#: redbot/cogs/audio/audio.py:2958
msgid "You must be in the voice channel to enqueue tracks."
msgstr ""
-#: redbot/cogs/audio/audio.py:1831
-msgid "Queued {num} track(s)."
+#: redbot/cogs/audio/audio.py:2997
+msgid "Queued {num} track(s).{maxlength_msg}"
msgstr ""
-#: redbot/cogs/audio/audio.py:1837
+#: redbot/cogs/audio/audio.py:3003
msgid "{time} until start of search playback: starts at #{position} in queue"
msgstr ""
-#: redbot/cogs/audio/audio.py:1997
+#: redbot/cogs/audio/audio.py:3169
msgid "Tracks Found:"
msgstr ""
-#: redbot/cogs/audio/audio.py:1998
+#: redbot/cogs/audio/audio.py:3170
msgid "search results"
msgstr ""
-#: redbot/cogs/audio/audio.py:2001
+#: redbot/cogs/audio/audio.py:3173
msgid "Folders Found:"
msgstr ""
-#: redbot/cogs/audio/audio.py:2002
+#: redbot/cogs/audio/audio.py:3174
msgid "local folders"
msgstr ""
-#: redbot/cogs/audio/audio.py:2004
+#: redbot/cogs/audio/audio.py:3176
msgid "Files Found:"
msgstr ""
-#: redbot/cogs/audio/audio.py:2005
+#: redbot/cogs/audio/audio.py:3177
msgid "local tracks"
msgstr ""
-#: redbot/cogs/audio/audio.py:2022
+#: redbot/cogs/audio/audio.py:3195
#, docstring
-msgid "Seek ahead or behind on a track by seconds."
+msgid "Seek ahead or behind on a track by seconds or a to a specific time.\\n\\n Accepts seconds or a value formatted like 00:00:00 (`hh:mm:ss`) or 00:00 (`mm:ss`)."
msgstr ""
-#: redbot/cogs/audio/audio.py:2031
+#: redbot/cogs/audio/audio.py:3206
msgid "You must be in the voice channel to use seek."
msgstr ""
-#: redbot/cogs/audio/audio.py:2036
+#: redbot/cogs/audio/audio.py:3211
msgid "You need the DJ role to use seek."
msgstr ""
-#: redbot/cogs/audio/audio.py:2042 redbot/cogs/audio/audio.py:2278
+#: redbot/cogs/audio/audio.py:3217 redbot/cogs/audio/audio.py:3510
msgid "There are other people listening - vote to skip instead."
msgstr ""
-#: redbot/cogs/audio/audio.py:2046
+#: redbot/cogs/audio/audio.py:3221
msgid "Can't seek on a stream."
msgstr ""
-#: redbot/cogs/audio/audio.py:2052
+#: redbot/cogs/audio/audio.py:3230
+msgid "Invalid input for the time to seek."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:3236
msgid "Moved {num_seconds}s to 00:00:00"
msgstr ""
-#: redbot/cogs/audio/audio.py:2057
+#: redbot/cogs/audio/audio.py:3241
msgid "Moved {num_seconds}s to {time}"
msgstr ""
-#: redbot/cogs/audio/audio.py:2068
+#: redbot/cogs/audio/audio.py:3249
+msgid "Moved to {time}"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:3261
#, docstring
msgid "Toggle shuffle."
msgstr ""
-#: redbot/cogs/audio/audio.py:2072
+#: redbot/cogs/audio/audio.py:3265
msgid "You need the DJ role to toggle shuffle."
msgstr ""
-#: redbot/cogs/audio/audio.py:2083
+#: redbot/cogs/audio/audio.py:3273
msgid "You must be in the voice channel to toggle shuffle."
msgstr ""
-#: redbot/cogs/audio/audio.py:2086
+#: redbot/cogs/audio/audio.py:3279
msgid "Shuffle tracks: {true_or_false}."
msgstr ""
-#: redbot/cogs/audio/audio.py:2092
+#: redbot/cogs/audio/audio.py:3287
#, docstring
-msgid "Make Red sing one of her songs"
+msgid "Make Red sing one of her songs."
msgstr ""
-#: redbot/cogs/audio/audio.py:2107
+#: redbot/cogs/audio/audio.py:3303
#, docstring
-msgid "Skip to the next track."
+msgid "Skip to the next track, or to a given track number."
msgstr ""
-#: redbot/cogs/audio/audio.py:2126
+#: redbot/cogs/audio/audio.py:3322
+msgid "Can't skip to a specific track in vote mode without the DJ role."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:3326
msgid "I removed your vote to skip."
msgstr ""
-#: redbot/cogs/audio/audio.py:2129
+#: redbot/cogs/audio/audio.py:3329
msgid "You voted to skip."
msgstr ""
-#: redbot/cogs/audio/audio.py:2142
+#: redbot/cogs/audio/audio.py:3342
msgid "Vote threshold met."
msgstr ""
-#: redbot/cogs/audio/audio.py:2145
+#: redbot/cogs/audio/audio.py:3345
msgid " Votes: {num_votes}/{num_members} ({cur_percent}% out of {required_percent}% needed)"
msgstr ""
-#: redbot/cogs/audio/audio.py:2228
+#: redbot/cogs/audio/audio.py:3425
msgid "Currently livestreaming {track}"
msgstr ""
-#: redbot/cogs/audio/audio.py:2235
+#: redbot/cogs/audio/audio.py:3432
msgid "{time} left on {track}"
msgstr ""
-#: redbot/cogs/audio/audio.py:2253
+#: redbot/cogs/audio/audio.py:3441
+msgid "Track number must be equal to or greater than 1."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:3454
+msgid "Can't skip to a track while shuffle is enabled."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:3470
msgid "Track Skipped"
msgstr ""
-#: redbot/cogs/audio/audio.py:2261
+#: redbot/cogs/audio/audio.py:3493
#, docstring
msgid "Stop playback and clear the queue."
msgstr ""
-#: redbot/cogs/audio/audio.py:2271
+#: redbot/cogs/audio/audio.py:3503
msgid "You must be in the voice channel to stop the music."
msgstr ""
-#: redbot/cogs/audio/audio.py:2282
+#: redbot/cogs/audio/audio.py:3514
msgid "You need the DJ role to stop the music."
msgstr ""
-#: redbot/cogs/audio/audio.py:2284
+#: redbot/cogs/audio/audio.py:3516
msgid "Stopping..."
msgstr ""
-#: redbot/cogs/audio/audio.py:2294
+#: redbot/cogs/audio/audio.py:3531
+#, docstring
+msgid "Summon the bot to a voice channel."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:3535
+msgid "You need the DJ role to summon the bot."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:3565
#, docstring
msgid "Set the volume, 1% - 150%."
msgstr ""
-#: redbot/cogs/audio/audio.py:2300
+#: redbot/cogs/audio/audio.py:3571
msgid "Current Volume:"
msgstr ""
-#: redbot/cogs/audio/audio.py:2312
+#: redbot/cogs/audio/audio.py:3583
msgid "You must be in the voice channel to change the volume."
msgstr ""
-#: redbot/cogs/audio/audio.py:2318
+#: redbot/cogs/audio/audio.py:3589
msgid "You need the DJ role to change the volume."
msgstr ""
-#: redbot/cogs/audio/audio.py:2331
+#: redbot/cogs/audio/audio.py:3602
msgid "Volume:"
msgstr ""
-#: redbot/cogs/audio/audio.py:2341
+#: redbot/cogs/audio/audio.py:3613
#, docstring
msgid "Lavalink server configuration options."
msgstr ""
-#: redbot/cogs/audio/audio.py:2346
+#: redbot/cogs/audio/audio.py:3618
#, docstring
msgid "Toggle using external lavalink servers."
msgstr ""
-#: redbot/cogs/audio/audio.py:2357 redbot/cogs/audio/audio.py:2366
+#: redbot/cogs/audio/audio.py:3625 redbot/cogs/audio/audio.py:3635
msgid "External lavalink server: {true_or_false}."
msgstr ""
-#: redbot/cogs/audio/audio.py:2361
-msgid "Defaults reset."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:2373
+#: redbot/cogs/audio/audio.py:3642
#, docstring
msgid "Set the lavalink server host."
msgstr ""
-#: redbot/cogs/audio/audio.py:2377 redbot/cogs/audio/audio.py:2382
+#: redbot/cogs/audio/audio.py:3646 redbot/cogs/audio/audio.py:3651
msgid "Host set to {host}."
msgstr ""
-#: redbot/cogs/audio/audio.py:2379 redbot/cogs/audio/audio.py:2395
-#: redbot/cogs/audio/audio.py:2413 redbot/cogs/audio/audio.py:2429
+#: redbot/cogs/audio/audio.py:3648 redbot/cogs/audio/audio.py:3664
+#: redbot/cogs/audio/audio.py:3682 redbot/cogs/audio/audio.py:3698
msgid "External lavalink server set to True."
msgstr ""
-#: redbot/cogs/audio/audio.py:2388
+#: redbot/cogs/audio/audio.py:3657
#, docstring
msgid "Set the lavalink server password."
msgstr ""
-#: redbot/cogs/audio/audio.py:2393 redbot/cogs/audio/audio.py:2399
+#: redbot/cogs/audio/audio.py:3662 redbot/cogs/audio/audio.py:3668
msgid "Server password set to {password}."
msgstr ""
-#: redbot/cogs/audio/audio.py:2406
+#: redbot/cogs/audio/audio.py:3675
#, docstring
msgid "Set the lavalink REST server port."
msgstr ""
-#: redbot/cogs/audio/audio.py:2411 redbot/cogs/audio/audio.py:2416
+#: redbot/cogs/audio/audio.py:3680 redbot/cogs/audio/audio.py:3685
msgid "REST port set to {port}."
msgstr ""
-#: redbot/cogs/audio/audio.py:2422
+#: redbot/cogs/audio/audio.py:3691
#, docstring
msgid "Set the lavalink websocket server port."
msgstr ""
-#: redbot/cogs/audio/audio.py:2427 redbot/cogs/audio/audio.py:2432
+#: redbot/cogs/audio/audio.py:3696 redbot/cogs/audio/audio.py:3701
msgid "Websocket port set to {port}."
msgstr ""
-#: redbot/cogs/audio/audio.py:2461
+#: redbot/cogs/audio/audio.py:3801
msgid "Not enough {currency} ({required_credits} required)."
msgstr ""
diff --git a/redbot/cogs/audio/locales/ja-JP.po b/redbot/cogs/audio/locales/ja-JP.po
index 7c3e07393..8403ae072 100644
--- a/redbot/cogs/audio/locales/ja-JP.po
+++ b/redbot/cogs/audio/locales/ja-JP.po
@@ -1,14 +1,14 @@
msgid ""
msgstr ""
"Project-Id-Version: red-discordbot\n"
-"POT-Creation-Date: 2019-02-17 02:24+0000\n"
-"PO-Revision-Date: 2019-02-25 03:07\n"
-"Last-Translator: Kowlin \n"
+"POT-Creation-Date: 2019-07-05 22:33+0200\n"
+"PO-Revision-Date: 2019-07-06 16:13\n"
+"Last-Translator: Robert Jansen (Kowlin)\n"
"Language-Team: Japanese\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"Generated-By: redgettext 2.2\n"
+"Generated-By: redgettext 3.0\n"
"Plural-Forms: nplurals=1; plural=0;\n"
"X-Generator: crowdin.com\n"
"X-Crowdin-Project: red-discordbot\n"
@@ -16,978 +16,1275 @@ msgstr ""
"X-Crowdin-File: /cogs/audio/locales/messages.pot\n"
"Language: ja_JP\n"
-#: redbot/cogs/audio/audio.py:38
+#: redbot/cogs/audio/audio.py:47
#, docstring
msgid "Play audio through voice channels."
msgstr "音声チャンネルを介して音楽を再生します。"
-#: redbot/cogs/audio/audio.py:173 redbot/cogs/audio/audio.py:735
-msgid "Now Playing"
-msgstr "再生中:"
-
-#: redbot/cogs/audio/audio.py:177
-msgid "Track length: {length} | Requested by: {user}"
-msgstr "長さ: {length} | {user} によって追加"
-
-#: redbot/cogs/audio/audio.py:201 redbot/cogs/audio/audio.py:227
+#: redbot/cogs/audio/audio.py:260
msgid "music in {} servers"
msgstr "{} つのサーバーで再生中"
-#: redbot/cogs/audio/audio.py:211
+#: redbot/cogs/audio/audio.py:300 redbot/cogs/audio/audio.py:1317
+msgid "Now Playing"
+msgstr "再生中:"
+
+#: redbot/cogs/audio/audio.py:304
+msgid "Track length: {length} | Requested by: {user}"
+msgstr "長さ: {length} | {user} によって追加"
+
+#: redbot/cogs/audio/audio.py:331
msgid "Queue ended."
msgstr "キューを再生しきりました。"
-#: redbot/cogs/audio/audio.py:240
+#: redbot/cogs/audio/audio.py:350
msgid "Track Error"
msgstr "音声ファイルのエラー"
-#: redbot/cogs/audio/audio.py:245
+#: redbot/cogs/audio/audio.py:355
msgid "Skipping..."
msgstr "スキップします..."
-#: redbot/cogs/audio/audio.py:252
+#: redbot/cogs/audio/audio.py:363
#, docstring
msgid "Music configuration options."
msgstr "音楽の再生に関する設定。"
-#: redbot/cogs/audio/audio.py:258
+#: redbot/cogs/audio/audio.py:369
#, docstring
-msgid "Toggle DJ mode.\n\n"
-" DJ mode allows users with the DJ role to use audio commands.\n"
-" "
-msgstr "DJ モードを切り替え"
+msgid "Toggle the bot auto-disconnecting when done playing.\\n\\n This setting takes precedence over [p]audioset emptydisconnect.\\n "
+msgstr ""
-#: redbot/cogs/audio/audio.py:265
+#: redbot/cogs/audio/audio.py:377
+msgid "Auto-disconnection at queue end: {true_or_false}."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:385
+#, docstring
+msgid "Toggle DJ mode.\\n\\n DJ mode allows users with the DJ role to use audio commands.\\n "
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:392
msgid "Please set a role to use with DJ mode. Enter the role name or ID now."
msgstr "DJ モードに使用する役職を選択してください。名前またはIDが使用できます。"
-#: redbot/cogs/audio/audio.py:273
+#: redbot/cogs/audio/audio.py:400
msgid "Response timed out, try again later."
msgstr "タイムアウトしました。もう一度試してみてください。"
-#: redbot/cogs/audio/audio.py:284
+#: redbot/cogs/audio/audio.py:405
+msgid "DJ role enabled: {true_or_false}."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:411
#, docstring
msgid "Auto-disconnection after x seconds while stopped. 0 to disable."
msgstr "再生が終わった x 秒後に音声チャンネルから切断します。無効化するには 0 を指定してください。"
-#: redbot/cogs/audio/audio.py:286 redbot/cogs/audio/audio.py:317
-#: redbot/cogs/audio/audio.py:405
+#: redbot/cogs/audio/audio.py:413 redbot/cogs/audio/audio.py:436
+#: redbot/cogs/audio/audio.py:543 redbot/cogs/audio/audio.py:687
msgid "Can't be less than zero."
msgstr "0 以下を指定することはできません。"
-#: redbot/cogs/audio/audio.py:291
+#: redbot/cogs/audio/audio.py:418
msgid "Empty disconnect disabled."
msgstr "音声チャンネルに誰もいなくなっても、切断しないようになりました。"
-#: redbot/cogs/audio/audio.py:296
+#: redbot/cogs/audio/audio.py:423
msgid "Empty disconnect timer set to {num_seconds}."
msgstr "音声チャンネルから誰もいなくなった {num_seconds} 秒後に切断します。"
-#: redbot/cogs/audio/audio.py:307
-#, docstring
-msgid "Set the role to use for DJ mode."
-msgstr "DJ モードのために使用する役職を設定します。"
-
-#: redbot/cogs/audio/audio.py:310
-msgid "DJ role set to: {role.name}."
-msgstr "DJ モードの役職として設定済み: {role.name}"
-
-#: redbot/cogs/audio/audio.py:315
+#: redbot/cogs/audio/audio.py:434
#, docstring
msgid "Set a price for queueing tracks for non-mods. 0 to disable."
msgstr "役職を持っていないユーザーがキューに追加するためにかかるコストを設定できます。0 を指定すると無効化されます。"
-#: redbot/cogs/audio/audio.py:320
+#: redbot/cogs/audio/audio.py:439
msgid "Jukebox mode disabled."
msgstr "ジュークボックスモードを無効化します。"
-#: redbot/cogs/audio/audio.py:325
+#: redbot/cogs/audio/audio.py:444
msgid "Track queueing command price set to {price} {currency}."
msgstr "キューへ追加するコストを {price} {currency} に設定しました。"
-#: redbot/cogs/audio/audio.py:336
+#: redbot/cogs/audio/audio.py:455
+#, docstring
+msgid "Set the localtracks path if the Lavalink.jar is not run from the Audio data folder.\\n\\n Leave the path blank to reset the path to the default, the Audio data directory.\\n "
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:463
+msgid "The localtracks path location has been reset to the default location."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:466
+msgid "This setting is only for bot owners to set a localtracks folder location if the Lavalink.jar is being ran from outside of the Audio data directory.\\nIn the example below, the full path for 'ParentDirectory' must be passed to this command.\\nThe path must not contain spaces.\\n```\\nParentDirectory\\n |__ localtracks (folder)\\n | |__ Awesome Album Name (folder)\\n | |__01 Cool Song.mp3\\n | |__02 Groovy Song.mp3\\n |\\n |__ Lavalink.jar\\n |__ application.yml\\n```\\nThe folder path given to this command must contain the Lavalink.jar, the application.yml, and the localtracks folder.\\nUse this command with no path given to reset it to the default, the Audio data directory for this bot.\\nDo you want to continue to set the provided path for local tracks?"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:505
+msgid "{local_path} does not seem like a valid path."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:520
+msgid "The path that was entered does not have {filelist} file in that location. The path will still be saved, but please check the path and the file location before attempting to play local tracks or start your Lavalink.jar."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:530
+msgid "Localtracks path set to: {local_path}."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:536
+#, docstring
+msgid "Max length of a track to queue in seconds. 0 to disable.\\n\\n Accepts seconds or a value formatted like 00:00:00 (`hh:mm:ss`) or 00:00 (`mm:ss`).\\n Invalid input will turn the max length setting off."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:545
+msgid "Track max length disabled."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:549
+msgid "Track max length set to {seconds}."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:559
#, docstring
msgid "Toggle track announcement and other bot messages."
msgstr "曲の通知やその他のメッセージを送信するかどうかを切り替えます。"
-#: redbot/cogs/audio/audio.py:340
+#: redbot/cogs/audio/audio.py:563
msgid "Verbose mode on: {true_or_false}."
msgstr "通知モード: {true_or_false}"
-#: redbot/cogs/audio/audio.py:345
+#: redbot/cogs/audio/audio.py:569
+#, docstring
+msgid "Toggle the domain restriction on Audio.\\n\\n When toggled off, users will be able to play songs from non-commercial websites and links.\\n When toggled on, users are restricted to YouTube, SoundCloud, Mixer, Vimeo, Twitch, and Bandcamp links."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:576
+msgid "Commercial links only: {true_or_false}."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:582
+#, docstring
+msgid "Set the role to use for DJ mode."
+msgstr "DJ モードのために使用する役職を設定します。"
+
+#: redbot/cogs/audio/audio.py:585
+msgid "DJ role set to: {role.name}."
+msgstr "DJ モードの役職として設定済み: {role.name}"
+
+#: redbot/cogs/audio/audio.py:589
#, docstring
msgid "Show the current settings."
msgstr "現在の設定を表示します。"
-#: redbot/cogs/audio/audio.py:358
+#: redbot/cogs/audio/audio.py:604
msgid "Server Settings"
msgstr "サーバー設定"
-#: redbot/cogs/audio/audio.py:360
-msgid "Disconnect timer: [{num_seconds}]\n"
-msgstr "切断タイマー: {num_seconds} 秒\n"
+#: redbot/cogs/audio/audio.py:606
+msgid "Auto-disconnect: [{dc}]\\n"
+msgstr ""
-#: redbot/cogs/audio/audio.py:364
-msgid "DJ Role: [{role.name}]\n"
-msgstr "DJ の役職: {role.name}\n"
+#: redbot/cogs/audio/audio.py:609
+msgid "Disconnect timer: [{num_seconds}]\\n"
+msgstr ""
-#: redbot/cogs/audio/audio.py:366
-msgid "Jukebox: [{jukebox_name}]\n"
-msgstr "ジュークボックス: {jukebox_name}\n"
+#: redbot/cogs/audio/audio.py:613
+msgid "DJ Role: [{role.name}]\\n"
+msgstr ""
-#: redbot/cogs/audio/audio.py:367
-msgid "Command price: [{jukebox_price}]\n"
-msgstr "コマンドのコスト: {jukebox_price}\n"
+#: redbot/cogs/audio/audio.py:615
+msgid "Jukebox: [{jukebox_name}]\\n"
+msgstr ""
-#: redbot/cogs/audio/audio.py:368
-msgid "Repeat: [{repeat}]\n"
-"Shuffle: [{shuffle}]\n"
-"Song notify msgs: [{notify}]\n"
-"Songs as status: [{status}]\n"
-msgstr "リピート: {repeat}\n"
-"シャッフル再生: {shuffle}\n"
-"曲の通知: {notify}\n"
-"再生中の項目をステータスへ表示: {status}\n"
+#: redbot/cogs/audio/audio.py:616
+msgid "Command price: [{jukebox_price}]\\n"
+msgstr ""
-#: redbot/cogs/audio/audio.py:375
-msgid "Thumbnails: [{0}]\n"
-msgstr "サムネイル: {0}\n"
+#: redbot/cogs/audio/audio.py:618
+msgid "Max track length: [{tracklength}]\\n"
+msgstr ""
-#: redbot/cogs/audio/audio.py:377
-msgid "Vote skip: [{vote_enabled}]\n"
-"Skip percentage: [{vote_percent}%]\n"
-msgstr "投票によるスキップ: {vote_enabled}\n"
-"スキップが承認される割合: {vote_percent}%\n"
+#: redbot/cogs/audio/audio.py:621
+msgid "Repeat: [{repeat}]\\nShuffle: [{shuffle}]\\nSong notify msgs: [{notify}]\\nSongs as status: [{status}]\\n"
+msgstr ""
-#: redbot/cogs/audio/audio.py:380
-msgid "---Lavalink Settings---\n"
-"Cog version: [{version}]\n"
-"Jar build: [{jarbuild}]\n"
-"External server: [{use_external_lavalink}]"
-msgstr "--- Lavalink の設定 ---\n"
-"Cog のバージョン: {version}\n"
-"Jar のビルド: {jarbuild}\n"
-"外部のサーバー: {use_external_lavalink}"
+#: redbot/cogs/audio/audio.py:628
+msgid "Thumbnails: [{0}]\\n"
+msgstr ""
-#: redbot/cogs/audio/audio.py:393
+#: redbot/cogs/audio/audio.py:630
+msgid "Vote skip: [{vote_enabled}]\\nSkip percentage: [{vote_percent}%]\\n"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:633
+msgid "---Lavalink Settings--- \\nCog version: [{version}]\\nJar build: [{jarbuild}]\\nExternal server: [{use_external_lavalink}]\\n"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:640
+msgid "Localtracks path: [{localpath}]\\n"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:648
#, docstring
-msgid "Toggle displaying a thumbnail on audio messages."
-msgstr "サムネイルを表示するかどうかを切り替えます。"
-
-#: redbot/cogs/audio/audio.py:397
-msgid "Thumbnail display: {true_or_false}."
-msgstr "サムネイルを表示: {true_or_false}"
-
-#: redbot/cogs/audio/audio.py:403
-#, docstring
-msgid "Percentage needed for non-mods to skip tracks. 0 to disable."
+msgid "Instructions to set the Spotify API tokens."
msgstr ""
-#: redbot/cogs/audio/audio.py:411
-msgid "Voting disabled. All users can use queue management commands."
+#: redbot/cogs/audio/audio.py:649
+msgid "1. Go to Spotify developers and log in with your Spotify account.\\n(https://developer.spotify.com/dashboard/applications)\\n2. Click \\\"Create An App\\\".\\n3. Fill out the form provided with your app name, etc.\\n4. When asked if you're developing commercial integration select \\\"No\\\".\\n5. Accept the terms and conditions.\\n6. Copy your client ID and your client secret into:\\n`{prefix}set api spotify client_id, client_secret,`"
msgstr ""
-#: redbot/cogs/audio/audio.py:416
-msgid "Vote percentage set to {percent}%."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:425
+#: redbot/cogs/audio/audio.py:665
#, docstring
msgid "Enable/disable tracks' titles as status."
msgstr ""
-#: redbot/cogs/audio/audio.py:429
+#: redbot/cogs/audio/audio.py:669
msgid "Song titles as status: {true_or_false}."
msgstr ""
-#: redbot/cogs/audio/audio.py:435
+#: redbot/cogs/audio/audio.py:675
+#, docstring
+msgid "Toggle displaying a thumbnail on audio messages."
+msgstr "サムネイルを表示するかどうかを切り替えます。"
+
+#: redbot/cogs/audio/audio.py:679
+msgid "Thumbnail display: {true_or_false}."
+msgstr "サムネイルを表示: {true_or_false}"
+
+#: redbot/cogs/audio/audio.py:685
+#, docstring
+msgid "Percentage needed for non-mods to skip tracks. 0 to disable."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:693
+msgid "Voting disabled. All users can use queue management commands."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:698
+msgid "Vote percentage set to {percent}%."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:707
+#, docstring
+msgid "Instructions to set the YouTube API key."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:726
#, docstring
msgid "Audio stats."
msgstr ""
-#: redbot/cogs/audio/audio.py:469 redbot/cogs/audio/audio.py:489
-#: redbot/cogs/audio/audio.py:698 redbot/cogs/audio/audio.py:788
-#: redbot/cogs/audio/audio.py:804 redbot/cogs/audio/audio.py:829
-#: redbot/cogs/audio/audio.py:836 redbot/cogs/audio/audio.py:1179
-#: redbot/cogs/audio/audio.py:1466 redbot/cogs/audio/audio.py:1724
-#: redbot/cogs/audio/audio.py:2026 redbot/cogs/audio/audio.py:2063
-#: redbot/cogs/audio/audio.py:2109 redbot/cogs/audio/audio.py:2265
-#: redbot/cogs/audio/audio.py:2304 redbot/cogs/audio/audio.py:2334
+#: redbot/cogs/audio/audio.py:754 redbot/cogs/audio/audio.py:782
+#: redbot/cogs/audio/audio.py:819 redbot/cogs/audio/audio.py:847
+#: redbot/cogs/audio/audio.py:914 redbot/cogs/audio/audio.py:932
+#: redbot/cogs/audio/audio.py:956 redbot/cogs/audio/audio.py:1026
+#: redbot/cogs/audio/audio.py:1280 redbot/cogs/audio/audio.py:1371
+#: redbot/cogs/audio/audio.py:1388 redbot/cogs/audio/audio.py:1411
+#: redbot/cogs/audio/audio.py:1419 redbot/cogs/audio/audio.py:2190
+#: redbot/cogs/audio/audio.py:2527 redbot/cogs/audio/audio.py:2860
+#: redbot/cogs/audio/audio.py:3201 redbot/cogs/audio/audio.py:3255
+#: redbot/cogs/audio/audio.py:3305 redbot/cogs/audio/audio.py:3497
+#: redbot/cogs/audio/audio.py:3575 redbot/cogs/audio/audio.py:3605
msgid "Nothing playing."
msgstr ""
-#: redbot/cogs/audio/audio.py:473
+#: redbot/cogs/audio/audio.py:758
msgid "Not connected anywhere."
msgstr ""
-#: redbot/cogs/audio/audio.py:478
-msgid "Connected in {num} servers:"
+#: redbot/cogs/audio/audio.py:764
+msgid "Playing in {num}/{total} servers:"
msgstr ""
-#: redbot/cogs/audio/audio.py:486
+#: redbot/cogs/audio/audio.py:779
#, docstring
msgid "Bump a track number to the top of the queue."
msgstr ""
-#: redbot/cogs/audio/audio.py:495
+#: redbot/cogs/audio/audio.py:788
msgid "You must be in the voice channel to bump a track."
msgstr ""
-#: redbot/cogs/audio/audio.py:499
+#: redbot/cogs/audio/audio.py:792
msgid "You need the DJ role to bump tracks."
msgstr ""
-#: redbot/cogs/audio/audio.py:502 redbot/cogs/audio/audio.py:1739
+#: redbot/cogs/audio/audio.py:795 redbot/cogs/audio/audio.py:2875
msgid "Song number must be greater than 1 and within the queue limit."
msgstr ""
-#: redbot/cogs/audio/audio.py:517
+#: redbot/cogs/audio/audio.py:810
msgid "Moved {track} to the top of the queue."
msgstr ""
-#: redbot/cogs/audio/audio.py:523
+#: redbot/cogs/audio/audio.py:817
#, docstring
msgid "Disconnect from the voice channel."
msgstr ""
-#: redbot/cogs/audio/audio.py:528
+#: redbot/cogs/audio/audio.py:826
msgid "You need the DJ role to disconnect."
msgstr ""
-#: redbot/cogs/audio/audio.py:532
+#: redbot/cogs/audio/audio.py:830
msgid "There are other people listening to music."
msgstr ""
-#: redbot/cogs/audio/audio.py:540
+#: redbot/cogs/audio/audio.py:845
+#, docstring
+msgid "Equalizer management."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:865
+#, docstring
+msgid "Delete a saved eq preset."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:887
+#, docstring
+msgid "List saved eq presets."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:890
+msgid "No saved equalizer presets."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:897
+msgid "{num} preset(s)"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:903
+#, docstring
+msgid "Load a saved eq preset."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:930
+#, docstring
+msgid "Reset the eq to 0 across all bands."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:946
+msgid "Equalizer values have been reset."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:954
+#, docstring
+msgid "Save the current eq settings to a preset."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:958
+msgid "Please enter a name for this equalizer preset."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:972
+msgid "No equalizer preset name entered, try the command again later."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:981 redbot/cogs/audio/audio.py:2213
+msgid "Try the command again with a shorter name."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:985
+msgid "Preset name already exists, do you want to replace it?"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:994
+msgid "Not saving preset."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1019
+#, docstring
+msgid "Set an eq band with a band number or name and value.\\n\\n Band positions are 1-15 and values have a range of -0.25 to 1.0.\\n Band names are 25, 40, 63, 100, 160, 250, 400, 630, 1k, 1.6k, 2.5k, 4k, 6.3k, 10k, and 16k Hz.\\n Setting a band value to -0.25 nullifies it while +0.25 is double.\\n "
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1063
+msgid "Valid band numbers are 1-15 or the band names listed in the help for this command."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1099
#, docstring
msgid "Local playback commands."
msgstr ""
-#: redbot/cogs/audio/audio.py:545
+#: redbot/cogs/audio/audio.py:1104
#, docstring
msgid "Play all songs in a localtracks folder."
msgstr ""
-#: redbot/cogs/audio/audio.py:552
+#: redbot/cogs/audio/audio.py:1115
+msgid "No localtracks folder named {name}."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1121
#, docstring
msgid "Play a local track."
msgstr ""
-#: redbot/cogs/audio/audio.py:557
+#: redbot/cogs/audio/audio.py:1126
msgid "No local track folders found."
msgstr ""
-#: redbot/cogs/audio/audio.py:600
+#: redbot/cogs/audio/audio.py:1169
#, docstring
msgid "Search for songs across all localtracks folders."
msgstr ""
-#: redbot/cogs/audio/audio.py:605
+#: redbot/cogs/audio/audio.py:1174
msgid "No album folders found."
msgstr ""
-#: redbot/cogs/audio/audio.py:612 redbot/cogs/audio/audio.py:1634
+#: redbot/cogs/audio/audio.py:1181 redbot/cogs/audio/audio.py:2816
msgid "No matches."
msgstr ""
-#: redbot/cogs/audio/audio.py:688
+#: redbot/cogs/audio/audio.py:1269
msgid "No localtracks folder."
msgstr ""
-#: redbot/cogs/audio/audio.py:696
+#: redbot/cogs/audio/audio.py:1278
#, docstring
msgid "Now playing."
msgstr ""
-#: redbot/cogs/audio/audio.py:716
+#: redbot/cogs/audio/audio.py:1298
msgid "Requested by: **{track.requester}**"
msgstr ""
-#: redbot/cogs/audio/audio.py:726
+#: redbot/cogs/audio/audio.py:1308
msgid "Nothing."
msgstr ""
-#: redbot/cogs/audio/audio.py:785
+#: redbot/cogs/audio/audio.py:1368
#, docstring
-msgid "Pause and resume."
+msgid "Pause or resume a playing track."
msgstr ""
-#: redbot/cogs/audio/audio.py:794
-msgid "You must be in the voice channel to pause the music."
+#: redbot/cogs/audio/audio.py:1377
+msgid "You must be in the voice channel pause or resume."
msgstr ""
-#: redbot/cogs/audio/audio.py:800
-msgid "You need the DJ role to pause tracks."
+#: redbot/cogs/audio/audio.py:1384
+msgid "You need the DJ role to pause or resume tracks."
msgstr ""
-#: redbot/cogs/audio/audio.py:814
+#: redbot/cogs/audio/audio.py:1401
msgid "Track Paused"
msgstr ""
-#: redbot/cogs/audio/audio.py:821
+#: redbot/cogs/audio/audio.py:1407
msgid "Track Resumed"
msgstr ""
-#: redbot/cogs/audio/audio.py:826
-msgid "Track is paused."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:828
-msgid "Track is playing."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:834
+#: redbot/cogs/audio/audio.py:1417
#, docstring
msgid "Queue percentage."
msgstr ""
-#: redbot/cogs/audio/audio.py:860
+#: redbot/cogs/audio/audio.py:1443
msgid "Nothing in the queue."
msgstr ""
-#: redbot/cogs/audio/audio.py:882
+#: redbot/cogs/audio/audio.py:1465
msgid "Queued and playing tracks:"
msgstr ""
-#: redbot/cogs/audio/audio.py:890
+#: redbot/cogs/audio/audio.py:1474
#, docstring
msgid "Play a URL or search for a track."
msgstr ""
-#: redbot/cogs/audio/audio.py:900 redbot/cogs/audio/audio.py:1411
-#: redbot/cogs/audio/audio.py:1795
+#: redbot/cogs/audio/audio.py:1481
+msgid "That URL is not allowed."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1484 redbot/cogs/audio/audio.py:2437
+#: redbot/cogs/audio/audio.py:2928 redbot/cogs/audio/audio.py:3047
+msgid "Connection to Lavalink has failed."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1486 redbot/cogs/audio/audio.py:2439
+#: redbot/cogs/audio/audio.py:2930 redbot/cogs/audio/audio.py:3049
+msgid "Please check your console or logs for details."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1495 redbot/cogs/audio/audio.py:2449
+#: redbot/cogs/audio/audio.py:2939 redbot/cogs/audio/audio.py:3543
msgid "I don't have permission to connect to your channel."
msgstr ""
-#: redbot/cogs/audio/audio.py:906 redbot/cogs/audio/audio.py:1422
-#: redbot/cogs/audio/audio.py:1801 redbot/cogs/audio/audio.py:1889
+#: redbot/cogs/audio/audio.py:1501 redbot/cogs/audio/audio.py:2461
+#: redbot/cogs/audio/audio.py:2945 redbot/cogs/audio/audio.py:3056
+#: redbot/cogs/audio/audio.py:3555
msgid "Connect to a voice channel first."
msgstr ""
-#: redbot/cogs/audio/audio.py:909 redbot/cogs/audio/audio.py:1418
-#: redbot/cogs/audio/audio.py:1804 redbot/cogs/audio/audio.py:1892
+#: redbot/cogs/audio/audio.py:1504 redbot/cogs/audio/audio.py:2457
+#: redbot/cogs/audio/audio.py:2948 redbot/cogs/audio/audio.py:3059
+#: redbot/cogs/audio/audio.py:3558
msgid "Connection to Lavalink has not yet been established."
msgstr ""
-#: redbot/cogs/audio/audio.py:913
+#: redbot/cogs/audio/audio.py:1508
msgid "You need the DJ role to queue tracks."
msgstr ""
-#: redbot/cogs/audio/audio.py:922
+#: redbot/cogs/audio/audio.py:1519
msgid "You must be in the voice channel to use the play command."
msgstr ""
-#: redbot/cogs/audio/audio.py:928
+#: redbot/cogs/audio/audio.py:1525
msgid "No tracks to play."
msgstr ""
-#: redbot/cogs/audio/audio.py:942 redbot/cogs/audio/audio.py:1450
-#: redbot/cogs/audio/audio.py:1828 redbot/cogs/audio/audio.py:1865
+#: redbot/cogs/audio/audio.py:1565
+msgid "The owner needs to set the Spotify client ID, Spotify client secret, and YouTube API key before Spotify URLs or codes can be used. \\nSee `{prefix}audioset youtubeapi` and `{prefix}audioset spotifyapi` for instructions."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1575 redbot/cogs/audio/audio.py:2493
+msgid "Wait until the playlist has finished loading."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1592 redbot/cogs/audio/audio.py:1657
+#: redbot/cogs/audio/audio.py:2499 redbot/cogs/audio/audio.py:2509
+#: redbot/cogs/audio/audio.py:2973 redbot/cogs/audio/audio.py:3027
msgid "Nothing found."
msgstr ""
-#: redbot/cogs/audio/audio.py:953 redbot/cogs/audio/audio.py:1295
+#: redbot/cogs/audio/audio.py:1600
+msgid "The Spotify API key or client secret has not been set properly. \\nUse `{prefix}audioset spotifyapi` for instructions."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1639 redbot/cogs/audio/audio.py:1776
+msgid "This doesn't seem to be a valid Spotify URL or code."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1688 redbot/cogs/audio/audio.py:2320
msgid "Playlist Enqueued"
msgstr ""
-#: redbot/cogs/audio/audio.py:954 redbot/cogs/audio/audio.py:1296
-msgid "Added {num} tracks to the queue."
+#: redbot/cogs/audio/audio.py:1689 redbot/cogs/audio/audio.py:2321
+msgid "Added {num} tracks to the queue.{maxlength_msg}"
msgstr ""
-#: redbot/cogs/audio/audio.py:958
+#: redbot/cogs/audio/audio.py:1695
msgid "{time} until start of playlist playback: starts at #{position} in queue"
msgstr ""
-#: redbot/cogs/audio/audio.py:980 redbot/cogs/audio/audio.py:1938
+#: redbot/cogs/audio/audio.py:1711 redbot/cogs/audio/audio.py:3125
+msgid "Track exceeds maximum length."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1717
+msgid "Nothing found. Check your Lavalink logs for details."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1732 redbot/cogs/audio/audio.py:3108
msgid "Track Enqueued"
msgstr ""
-#: redbot/cogs/audio/audio.py:984 redbot/cogs/audio/audio.py:1944
+#: redbot/cogs/audio/audio.py:1736 redbot/cogs/audio/audio.py:3114
msgid "{time} until track playback: #{position} in queue"
msgstr ""
-#: redbot/cogs/audio/audio.py:989 redbot/cogs/audio/audio.py:1949
+#: redbot/cogs/audio/audio.py:1741 redbot/cogs/audio/audio.py:3119
msgid "#{position} in queue"
msgstr ""
-#: redbot/cogs/audio/audio.py:997
+#: redbot/cogs/audio/audio.py:1761
+msgid "The Spotify API key or client secret has not been set properly. \\nUse `{prefix}audioset spotifyapi` for instructions."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1793 redbot/cogs/audio/audio.py:2384
+msgid "Please wait, adding tracks..."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1809
+msgid "The connection was reset while loading the playlist."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1826 redbot/cogs/audio/audio.py:2401
+msgid "Loading track {num}/{total}..."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1840
+msgid "Approximate time remaining: {seconds}"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1850
+msgid "Nothing found.\\nThe YouTube API key may be invalid or you may be rate limited on YouTube's search service.\\nCheck the YouTube API key again and follow the instructions at `{prefix}audioset youtubeapi`."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1871
#, docstring
msgid "Playlist configuration options."
msgstr ""
-#: redbot/cogs/audio/audio.py:1002
+#: redbot/cogs/audio/audio.py:1876
#, docstring
-msgid "Add a track URL, playlist link, or quick search to a playlist.\n\n"
-" The track(s) will be appended to the end of the playlist.\n"
-" "
+msgid "Add a track URL, playlist link, or quick search to a playlist.\\n\\n The track(s) will be appended to the end of the playlist.\\n "
msgstr ""
-#: redbot/cogs/audio/audio.py:1014 redbot/cogs/audio/audio.py:1078
-#: redbot/cogs/audio/audio.py:1228
+#: redbot/cogs/audio/audio.py:1888 redbot/cogs/audio/audio.py:2028
+#: redbot/cogs/audio/audio.py:2241
msgid "You are not the author of that playlist."
msgstr ""
-#: redbot/cogs/audio/audio.py:1024
+#: redbot/cogs/audio/audio.py:1898
msgid "{track} is already in {playlist}."
msgstr ""
-#: redbot/cogs/audio/audio.py:1033 redbot/cogs/audio/audio.py:1082
-#: redbot/cogs/audio/audio.py:1092 redbot/cogs/audio/audio.py:1231
+#: redbot/cogs/audio/audio.py:1907 redbot/cogs/audio/audio.py:2032
+#: redbot/cogs/audio/audio.py:2081 redbot/cogs/audio/audio.py:2244
msgid "No playlist with that name."
msgstr ""
-#: redbot/cogs/audio/audio.py:1040
+#: redbot/cogs/audio/audio.py:1914
msgid "{track} appended to {playlist}."
msgstr ""
-#: redbot/cogs/audio/audio.py:1046
+#: redbot/cogs/audio/audio.py:1920
msgid "{num} tracks appended to {playlist}."
msgstr ""
-#: redbot/cogs/audio/audio.py:1053
+#: redbot/cogs/audio/audio.py:1928
+#, docstring
+msgid "Copy a playlist from one server to another."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1932
+msgid "Invalid server ID for source server."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1934
+msgid "Invalid server ID for target server."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1939
+msgid "No playlist with that name in {from_guild_name}."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1950
+msgid "Playlist {name} copied from {from_guild_name} to {to_guild_name}."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1962
+msgid "A playlist with that name already exists in {to_guild_name}.\\nPlease enter a new name for this playlist."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1975
+msgid "Try the playlist copy command again with a shorter name."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1980
+msgid "Playlist name already exists in {to_guild_name}, try the playlist copy command again with a different name."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1986 redbot/cogs/audio/audio.py:2220
+msgid "No playlist name entered, try again later."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1991
+msgid "Playlist {name} copied from {from_guild_name} to {to_guild_name}.\\nNew playlist name on {to_guild_name}: {new_name}"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2003
#, docstring
msgid "Create an empty playlist."
msgstr ""
-#: redbot/cogs/audio/audio.py:1057 redbot/cogs/audio/audio.py:1172
+#: redbot/cogs/audio/audio.py:2007 redbot/cogs/audio/audio.py:2183
msgid "You need the DJ role to save playlists."
msgstr ""
-#: redbot/cogs/audio/audio.py:1061 redbot/cogs/audio/audio.py:1176
-#: redbot/cogs/audio/audio.py:1204
+#: redbot/cogs/audio/audio.py:2011 redbot/cogs/audio/audio.py:2187
+#: redbot/cogs/audio/audio.py:2217
msgid "Playlist name already exists, try again with a different name."
msgstr ""
-#: redbot/cogs/audio/audio.py:1067
+#: redbot/cogs/audio/audio.py:2017
msgid "Empty playlist {name} created."
msgstr ""
-#: redbot/cogs/audio/audio.py:1071
+#: redbot/cogs/audio/audio.py:2021
#, docstring
msgid "Delete a saved playlist."
msgstr ""
-#: redbot/cogs/audio/audio.py:1083
+#: redbot/cogs/audio/audio.py:2033
msgid "{name} playlist deleted."
msgstr ""
-#: redbot/cogs/audio/audio.py:1087
+#: redbot/cogs/audio/audio.py:2039
+#, docstring
+msgid "Download a copy of a playlist.\\n\\n These files can be used with the [p]playlist upload command.\\n Red v2-compatible playlists can be generated by passing True\\n for the v2 variable."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2061
+msgid "That playlist has no tracks."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2063 redbot/cogs/audio/audio.py:2331
+msgid "That playlist doesn't exist."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2076
#, docstring
msgid "Retrieve information from a saved playlist."
msgstr ""
-#: redbot/cogs/audio/audio.py:1100
-msgid "**Custom playlist.**"
+#: redbot/cogs/audio/audio.py:2101
+msgid "Playlist info for {playlist_name}:\\n"
msgstr ""
-#: redbot/cogs/audio/audio.py:1102
-msgid "URL: <{url}>"
+#: redbot/cogs/audio/audio.py:2105
+msgid "Playlist info for {playlist_name}:\\nURL: {url}"
msgstr ""
-#: redbot/cogs/audio/audio.py:1105
-msgid "Playlist info for {playlist_name}:"
+#: redbot/cogs/audio/audio.py:2116
+msgid "Author: {author_name} | {num} track(s)"
msgstr ""
-#: redbot/cogs/audio/audio.py:1106
-msgid "Author: **{author_name}**\n"
-"{url}"
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:1110
-msgid "{num} track(s)"
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:1115
+#: redbot/cogs/audio/audio.py:2126
#, docstring
msgid "List saved playlists."
msgstr ""
-#: redbot/cogs/audio/audio.py:1118
+#: redbot/cogs/audio/audio.py:2129
msgid "No saved playlists."
msgstr ""
-#: redbot/cogs/audio/audio.py:1130
+#: redbot/cogs/audio/audio.py:2141
msgid "Tracks: {num}"
msgstr ""
-#: redbot/cogs/audio/audio.py:1131
-msgid "Author: {name}\n"
+#: redbot/cogs/audio/audio.py:2142
+msgid "Author: {name}\\n"
msgstr ""
-#: redbot/cogs/audio/audio.py:1155
+#: redbot/cogs/audio/audio.py:2166
msgid "Playlists for {server_name}:"
msgstr ""
-#: redbot/cogs/audio/audio.py:1159
+#: redbot/cogs/audio/audio.py:2170
msgid "Page {page_num}/{total_pages} | {num} playlists"
msgstr ""
-#: redbot/cogs/audio/audio.py:1168
+#: redbot/cogs/audio/audio.py:2179
#, docstring
msgid "Save the queue to a playlist."
msgstr ""
-#: redbot/cogs/audio/audio.py:1189
+#: redbot/cogs/audio/audio.py:2193 redbot/cogs/audio/audio.py:2590
+#: redbot/cogs/audio/audio.py:2593 redbot/cogs/audio/audio.py:2613
+#: redbot/cogs/audio/audio.py:2756 redbot/cogs/audio/audio.py:2759
+#: redbot/cogs/audio/audio.py:2775 redbot/cogs/audio/audio.py:2778
+#: redbot/cogs/audio/audio.py:2810 redbot/cogs/audio/audio.py:2812
+#: redbot/cogs/audio/audio.py:3418 redbot/cogs/audio/audio.py:3422
+#: redbot/cogs/audio/audio.py:3429
+msgid "There's nothing in the queue."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2202
msgid "Please enter a name for this playlist."
msgstr ""
-#: redbot/cogs/audio/audio.py:1200
-msgid "Try the command again with a shorter name."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:1207
-msgid "No playlist name entered, try again later."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:1214
+#: redbot/cogs/audio/audio.py:2227
msgid "Playlist {name} saved from current queue: {num} tracks added."
msgstr ""
-#: redbot/cogs/audio/audio.py:1221
+#: redbot/cogs/audio/audio.py:2234
#, docstring
msgid "Remove a track from a playlist by url."
msgstr ""
-#: redbot/cogs/audio/audio.py:1235
+#: redbot/cogs/audio/audio.py:2248
msgid "URL not in playlist."
msgstr ""
-#: redbot/cogs/audio/audio.py:1239
+#: redbot/cogs/audio/audio.py:2252
msgid "No tracks left, removing playlist."
msgstr ""
-#: redbot/cogs/audio/audio.py:1246
+#: redbot/cogs/audio/audio.py:2259
msgid "{num} entries have been removed from the {playlist_name} playlist."
msgstr ""
-#: redbot/cogs/audio/audio.py:1253
+#: redbot/cogs/audio/audio.py:2266
msgid "The track has been removed from the {playlist_name} playlist."
msgstr ""
-#: redbot/cogs/audio/audio.py:1260
+#: redbot/cogs/audio/audio.py:2273
#, docstring
msgid "Save a playlist from a url."
msgstr ""
-#: redbot/cogs/audio/audio.py:1272
+#: redbot/cogs/audio/audio.py:2285
msgid "Playlist {name} saved: {num} tracks added."
msgstr ""
-#: redbot/cogs/audio/audio.py:1279
+#: redbot/cogs/audio/audio.py:2292
#, docstring
msgid "Load a playlist into the queue."
msgstr ""
-#: redbot/cogs/audio/audio.py:1304
-msgid "That playlist doesn't exist."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:1309
+#: redbot/cogs/audio/audio.py:2336
#, docstring
msgid "Convert a Red v2 playlist file to a playlist."
msgstr ""
-#: redbot/cogs/audio/audio.py:1315
+#: redbot/cogs/audio/audio.py:2342
msgid "Please upload the playlist file. Any other message will cancel this operation."
msgstr ""
-#: redbot/cogs/audio/audio.py:1323
+#: redbot/cogs/audio/audio.py:2350
msgid "No file detected, try again later."
msgstr ""
-#: redbot/cogs/audio/audio.py:1327
+#: redbot/cogs/audio/audio.py:2354
msgid "Upload cancelled."
msgstr ""
-#: redbot/cogs/audio/audio.py:1331
+#: redbot/cogs/audio/audio.py:2358
msgid "Only playlist files can be uploaded."
msgstr ""
-#: redbot/cogs/audio/audio.py:1336
+#: redbot/cogs/audio/audio.py:2363
msgid "Not a valid playlist file."
msgstr ""
-#: redbot/cogs/audio/audio.py:1352
+#: redbot/cogs/audio/audio.py:2379
msgid "A playlist already exists with this name."
msgstr ""
-#: redbot/cogs/audio/audio.py:1357
-msgid "Please wait, adding tracks..."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:1371
-msgid "Loading track {num}/{total}..."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:1377
+#: redbot/cogs/audio/audio.py:2407
msgid "No tracks found."
msgstr ""
-#: redbot/cogs/audio/audio.py:1383
+#: redbot/cogs/audio/audio.py:2413
msgid "Added {num} tracks from the {playlist_name} playlist. {num_bad} track(s) could not be loaded."
msgstr ""
-#: redbot/cogs/audio/audio.py:1388
+#: redbot/cogs/audio/audio.py:2418
msgid "Added {num} tracks from the {playlist_name} playlist."
msgstr ""
-#: redbot/cogs/audio/audio.py:1392
+#: redbot/cogs/audio/audio.py:2422
msgid "Playlist Saved"
msgstr ""
-#: redbot/cogs/audio/audio.py:1403
+#: redbot/cogs/audio/audio.py:2433
msgid "You need the DJ role to use playlists."
msgstr ""
-#: redbot/cogs/audio/audio.py:1432
+#: redbot/cogs/audio/audio.py:2471
msgid "You must be in the voice channel to use the playlist command."
msgstr ""
-#: redbot/cogs/audio/audio.py:1464
+#: redbot/cogs/audio/audio.py:2525
#, docstring
msgid "Skip to the start of the previously played track."
msgstr ""
-#: redbot/cogs/audio/audio.py:1474 redbot/cogs/audio/audio.py:2121
+#: redbot/cogs/audio/audio.py:2535 redbot/cogs/audio/audio.py:3317
msgid "You need the DJ role to skip tracks."
msgstr ""
-#: redbot/cogs/audio/audio.py:1479 redbot/cogs/audio/audio.py:2115
+#: redbot/cogs/audio/audio.py:2540 redbot/cogs/audio/audio.py:3311
msgid "You must be in the voice channel to skip the music."
msgstr ""
-#: redbot/cogs/audio/audio.py:1482
+#: redbot/cogs/audio/audio.py:2543
msgid "Turn shuffle off to use this command."
msgstr ""
-#: redbot/cogs/audio/audio.py:1484
+#: redbot/cogs/audio/audio.py:2545
msgid "No previous track."
msgstr ""
-#: redbot/cogs/audio/audio.py:1501
+#: redbot/cogs/audio/audio.py:2562
msgid "Replaying Track"
msgstr ""
-#: redbot/cogs/audio/audio.py:1509
+#: redbot/cogs/audio/audio.py:2571
#, docstring
-msgid "List the queue.\n\n"
-" Use [p]queue search to search the queue.\n"
-" "
+msgid "List the songs in the queue."
msgstr ""
-#: redbot/cogs/audio/audio.py:1514 redbot/cogs/audio/audio.py:1517
-#: redbot/cogs/audio/audio.py:1544 redbot/cogs/audio/audio.py:2221
-#: redbot/cogs/audio/audio.py:2225 redbot/cogs/audio/audio.py:2232
-msgid "There's nothing in the queue."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:1553
+#: redbot/cogs/audio/audio.py:2622
msgid "**Currently livestreaming:**"
msgstr ""
-#: redbot/cogs/audio/audio.py:1559 redbot/cogs/audio/audio.py:1569
-#: redbot/cogs/audio/audio.py:1575
+#: redbot/cogs/audio/audio.py:2628 redbot/cogs/audio/audio.py:2638
+#: redbot/cogs/audio/audio.py:2644
msgid "Playing: "
msgstr ""
-#: redbot/cogs/audio/audio.py:1562 redbot/cogs/audio/audio.py:1570
-msgid "Requested by: **{user}**\n"
+#: redbot/cogs/audio/audio.py:2631
+msgid "Requested by: **{user}**\\n"
msgstr ""
-#: redbot/cogs/audio/audio.py:1577
+#: redbot/cogs/audio/audio.py:2639
+msgid "Requested by: **{user}**\\n"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2646
msgid "Requested by: **{user}**"
msgstr ""
-#: redbot/cogs/audio/audio.py:1595 redbot/cogs/audio/audio.py:1599
-#: redbot/cogs/audio/audio.py:1604
-msgid "requested by **{user}**\n"
+#: redbot/cogs/audio/audio.py:2664
+msgid "requested by **{user}**\\n"
msgstr ""
-#: redbot/cogs/audio/audio.py:1615
+#: redbot/cogs/audio/audio.py:2668
+msgid "requested by **{user}**\\n"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2673
+msgid "requested by **{user}**\\n"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2684
msgid "Page {page_num}/{total_pages} | {num_tracks} tracks, {num_remaining} remaining"
msgstr ""
-#: redbot/cogs/audio/audio.py:1624
+#: redbot/cogs/audio/audio.py:2693
msgid "Repeat"
msgstr ""
-#: redbot/cogs/audio/audio.py:1626
+#: redbot/cogs/audio/audio.py:2695
msgid "Shuffle"
msgstr ""
-#: redbot/cogs/audio/audio.py:1683
+#: redbot/cogs/audio/audio.py:2740
msgid "Matching Tracks:"
msgstr ""
-#: redbot/cogs/audio/audio.py:1686 redbot/cogs/audio/audio.py:2010
+#: redbot/cogs/audio/audio.py:2743 redbot/cogs/audio/audio.py:3182
msgid "Page {page_num}/{total_pages}"
msgstr ""
-#: redbot/cogs/audio/audio.py:1695
+#: redbot/cogs/audio/audio.py:2752
+#, docstring
+msgid "Clears the queue."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2764
+msgid "You need the DJ role to clear the queue."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2766
+msgid "The queue has been cleared."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2771
+#, docstring
+msgid "Removes songs from the queue if the requester is not in the voice channel."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2783
+msgid "You need the DJ role to clean the queue."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2794
+msgid "Removed 0 tracks."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2798
+msgid "Removed {removed_tracks} tracks queued by members outside of the voice channel."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2806
+#, docstring
+msgid "Search the queue."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2829
#, docstring
msgid "Toggle repeat."
msgstr ""
-#: redbot/cogs/audio/audio.py:1701
+#: redbot/cogs/audio/audio.py:2835
msgid "You need the DJ role to toggle repeat."
msgstr ""
-#: redbot/cogs/audio/audio.py:1712
+#: redbot/cogs/audio/audio.py:2843
msgid "You must be in the voice channel to toggle repeat."
msgstr ""
-#: redbot/cogs/audio/audio.py:1715
+#: redbot/cogs/audio/audio.py:2849
msgid "Repeat tracks: {true_or_false}."
msgstr ""
-#: redbot/cogs/audio/audio.py:1721
+#: redbot/cogs/audio/audio.py:2857
#, docstring
msgid "Remove a specific track number from the queue."
msgstr ""
-#: redbot/cogs/audio/audio.py:1727
+#: redbot/cogs/audio/audio.py:2863
msgid "Nothing queued."
msgstr ""
-#: redbot/cogs/audio/audio.py:1730
+#: redbot/cogs/audio/audio.py:2866
msgid "You need the DJ role to remove tracks."
msgstr ""
-#: redbot/cogs/audio/audio.py:1735
+#: redbot/cogs/audio/audio.py:2871
msgid "You must be in the voice channel to manage the queue."
msgstr ""
-#: redbot/cogs/audio/audio.py:1751
+#: redbot/cogs/audio/audio.py:2887
msgid "Removed {track} from the queue."
msgstr ""
-#: redbot/cogs/audio/audio.py:1757
+#: redbot/cogs/audio/audio.py:2894
#, docstring
-msgid "Pick a track with a search.\n\n"
-" Use `[p]search list ` to queue all tracks found\n"
-" on YouTube. `[p]search sc ` will search SoundCloud\n"
-" instead of YouTube.\n"
-" "
+msgid "Pick a track with a search.\\n\\n Use `[p]search list ` to queue all tracks found\\n on YouTube. `[p]search sc ` will search SoundCloud\\n instead of YouTube.\\n "
msgstr ""
-#: redbot/cogs/audio/audio.py:1814
+#: redbot/cogs/audio/audio.py:2958
msgid "You must be in the voice channel to enqueue tracks."
msgstr ""
-#: redbot/cogs/audio/audio.py:1831
-msgid "Queued {num} track(s)."
+#: redbot/cogs/audio/audio.py:2997
+msgid "Queued {num} track(s).{maxlength_msg}"
msgstr ""
-#: redbot/cogs/audio/audio.py:1837
+#: redbot/cogs/audio/audio.py:3003
msgid "{time} until start of search playback: starts at #{position} in queue"
msgstr ""
-#: redbot/cogs/audio/audio.py:1997
+#: redbot/cogs/audio/audio.py:3169
msgid "Tracks Found:"
msgstr ""
-#: redbot/cogs/audio/audio.py:1998
+#: redbot/cogs/audio/audio.py:3170
msgid "search results"
msgstr ""
-#: redbot/cogs/audio/audio.py:2001
+#: redbot/cogs/audio/audio.py:3173
msgid "Folders Found:"
msgstr ""
-#: redbot/cogs/audio/audio.py:2002
+#: redbot/cogs/audio/audio.py:3174
msgid "local folders"
msgstr ""
-#: redbot/cogs/audio/audio.py:2004
+#: redbot/cogs/audio/audio.py:3176
msgid "Files Found:"
msgstr ""
-#: redbot/cogs/audio/audio.py:2005
+#: redbot/cogs/audio/audio.py:3177
msgid "local tracks"
msgstr ""
-#: redbot/cogs/audio/audio.py:2022
+#: redbot/cogs/audio/audio.py:3195
#, docstring
-msgid "Seek ahead or behind on a track by seconds."
+msgid "Seek ahead or behind on a track by seconds or a to a specific time.\\n\\n Accepts seconds or a value formatted like 00:00:00 (`hh:mm:ss`) or 00:00 (`mm:ss`)."
msgstr ""
-#: redbot/cogs/audio/audio.py:2031
+#: redbot/cogs/audio/audio.py:3206
msgid "You must be in the voice channel to use seek."
msgstr ""
-#: redbot/cogs/audio/audio.py:2036
+#: redbot/cogs/audio/audio.py:3211
msgid "You need the DJ role to use seek."
msgstr ""
-#: redbot/cogs/audio/audio.py:2042 redbot/cogs/audio/audio.py:2278
+#: redbot/cogs/audio/audio.py:3217 redbot/cogs/audio/audio.py:3510
msgid "There are other people listening - vote to skip instead."
msgstr ""
-#: redbot/cogs/audio/audio.py:2046
+#: redbot/cogs/audio/audio.py:3221
msgid "Can't seek on a stream."
msgstr ""
-#: redbot/cogs/audio/audio.py:2052
+#: redbot/cogs/audio/audio.py:3230
+msgid "Invalid input for the time to seek."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:3236
msgid "Moved {num_seconds}s to 00:00:00"
msgstr ""
-#: redbot/cogs/audio/audio.py:2057
+#: redbot/cogs/audio/audio.py:3241
msgid "Moved {num_seconds}s to {time}"
msgstr ""
-#: redbot/cogs/audio/audio.py:2068
+#: redbot/cogs/audio/audio.py:3249
+msgid "Moved to {time}"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:3261
#, docstring
msgid "Toggle shuffle."
msgstr ""
-#: redbot/cogs/audio/audio.py:2072
+#: redbot/cogs/audio/audio.py:3265
msgid "You need the DJ role to toggle shuffle."
msgstr ""
-#: redbot/cogs/audio/audio.py:2083
+#: redbot/cogs/audio/audio.py:3273
msgid "You must be in the voice channel to toggle shuffle."
msgstr ""
-#: redbot/cogs/audio/audio.py:2086
+#: redbot/cogs/audio/audio.py:3279
msgid "Shuffle tracks: {true_or_false}."
msgstr ""
-#: redbot/cogs/audio/audio.py:2092
+#: redbot/cogs/audio/audio.py:3287
#, docstring
-msgid "Make Red sing one of her songs"
+msgid "Make Red sing one of her songs."
msgstr ""
-#: redbot/cogs/audio/audio.py:2107
+#: redbot/cogs/audio/audio.py:3303
#, docstring
-msgid "Skip to the next track."
+msgid "Skip to the next track, or to a given track number."
msgstr ""
-#: redbot/cogs/audio/audio.py:2126
+#: redbot/cogs/audio/audio.py:3322
+msgid "Can't skip to a specific track in vote mode without the DJ role."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:3326
msgid "I removed your vote to skip."
msgstr ""
-#: redbot/cogs/audio/audio.py:2129
+#: redbot/cogs/audio/audio.py:3329
msgid "You voted to skip."
msgstr ""
-#: redbot/cogs/audio/audio.py:2142
+#: redbot/cogs/audio/audio.py:3342
msgid "Vote threshold met."
msgstr ""
-#: redbot/cogs/audio/audio.py:2145
+#: redbot/cogs/audio/audio.py:3345
msgid " Votes: {num_votes}/{num_members} ({cur_percent}% out of {required_percent}% needed)"
msgstr ""
-#: redbot/cogs/audio/audio.py:2228
+#: redbot/cogs/audio/audio.py:3425
msgid "Currently livestreaming {track}"
msgstr ""
-#: redbot/cogs/audio/audio.py:2235
+#: redbot/cogs/audio/audio.py:3432
msgid "{time} left on {track}"
msgstr ""
-#: redbot/cogs/audio/audio.py:2253
+#: redbot/cogs/audio/audio.py:3441
+msgid "Track number must be equal to or greater than 1."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:3454
+msgid "Can't skip to a track while shuffle is enabled."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:3470
msgid "Track Skipped"
msgstr ""
-#: redbot/cogs/audio/audio.py:2261
+#: redbot/cogs/audio/audio.py:3493
#, docstring
msgid "Stop playback and clear the queue."
msgstr ""
-#: redbot/cogs/audio/audio.py:2271
+#: redbot/cogs/audio/audio.py:3503
msgid "You must be in the voice channel to stop the music."
msgstr ""
-#: redbot/cogs/audio/audio.py:2282
+#: redbot/cogs/audio/audio.py:3514
msgid "You need the DJ role to stop the music."
msgstr ""
-#: redbot/cogs/audio/audio.py:2284
+#: redbot/cogs/audio/audio.py:3516
msgid "Stopping..."
msgstr ""
-#: redbot/cogs/audio/audio.py:2294
+#: redbot/cogs/audio/audio.py:3531
+#, docstring
+msgid "Summon the bot to a voice channel."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:3535
+msgid "You need the DJ role to summon the bot."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:3565
#, docstring
msgid "Set the volume, 1% - 150%."
msgstr ""
-#: redbot/cogs/audio/audio.py:2300
+#: redbot/cogs/audio/audio.py:3571
msgid "Current Volume:"
msgstr ""
-#: redbot/cogs/audio/audio.py:2312
+#: redbot/cogs/audio/audio.py:3583
msgid "You must be in the voice channel to change the volume."
msgstr ""
-#: redbot/cogs/audio/audio.py:2318
+#: redbot/cogs/audio/audio.py:3589
msgid "You need the DJ role to change the volume."
msgstr ""
-#: redbot/cogs/audio/audio.py:2331
+#: redbot/cogs/audio/audio.py:3602
msgid "Volume:"
msgstr ""
-#: redbot/cogs/audio/audio.py:2341
+#: redbot/cogs/audio/audio.py:3613
#, docstring
msgid "Lavalink server configuration options."
msgstr ""
-#: redbot/cogs/audio/audio.py:2346
+#: redbot/cogs/audio/audio.py:3618
#, docstring
msgid "Toggle using external lavalink servers."
msgstr ""
-#: redbot/cogs/audio/audio.py:2357 redbot/cogs/audio/audio.py:2366
+#: redbot/cogs/audio/audio.py:3625 redbot/cogs/audio/audio.py:3635
msgid "External lavalink server: {true_or_false}."
msgstr ""
-#: redbot/cogs/audio/audio.py:2361
-msgid "Defaults reset."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:2373
+#: redbot/cogs/audio/audio.py:3642
#, docstring
msgid "Set the lavalink server host."
msgstr ""
-#: redbot/cogs/audio/audio.py:2377 redbot/cogs/audio/audio.py:2382
+#: redbot/cogs/audio/audio.py:3646 redbot/cogs/audio/audio.py:3651
msgid "Host set to {host}."
msgstr ""
-#: redbot/cogs/audio/audio.py:2379 redbot/cogs/audio/audio.py:2395
-#: redbot/cogs/audio/audio.py:2413 redbot/cogs/audio/audio.py:2429
+#: redbot/cogs/audio/audio.py:3648 redbot/cogs/audio/audio.py:3664
+#: redbot/cogs/audio/audio.py:3682 redbot/cogs/audio/audio.py:3698
msgid "External lavalink server set to True."
msgstr ""
-#: redbot/cogs/audio/audio.py:2388
+#: redbot/cogs/audio/audio.py:3657
#, docstring
msgid "Set the lavalink server password."
msgstr ""
-#: redbot/cogs/audio/audio.py:2393 redbot/cogs/audio/audio.py:2399
+#: redbot/cogs/audio/audio.py:3662 redbot/cogs/audio/audio.py:3668
msgid "Server password set to {password}."
msgstr ""
-#: redbot/cogs/audio/audio.py:2406
+#: redbot/cogs/audio/audio.py:3675
#, docstring
msgid "Set the lavalink REST server port."
msgstr ""
-#: redbot/cogs/audio/audio.py:2411 redbot/cogs/audio/audio.py:2416
+#: redbot/cogs/audio/audio.py:3680 redbot/cogs/audio/audio.py:3685
msgid "REST port set to {port}."
msgstr ""
-#: redbot/cogs/audio/audio.py:2422
+#: redbot/cogs/audio/audio.py:3691
#, docstring
msgid "Set the lavalink websocket server port."
msgstr ""
-#: redbot/cogs/audio/audio.py:2427 redbot/cogs/audio/audio.py:2432
+#: redbot/cogs/audio/audio.py:3696 redbot/cogs/audio/audio.py:3701
msgid "Websocket port set to {port}."
msgstr ""
-#: redbot/cogs/audio/audio.py:2461
+#: redbot/cogs/audio/audio.py:3801
msgid "Not enough {currency} ({required_credits} required)."
msgstr ""
diff --git a/redbot/cogs/audio/locales/ko-KR.po b/redbot/cogs/audio/locales/ko-KR.po
index 89be8ca55..b6589a965 100644
--- a/redbot/cogs/audio/locales/ko-KR.po
+++ b/redbot/cogs/audio/locales/ko-KR.po
@@ -1,14 +1,14 @@
msgid ""
msgstr ""
"Project-Id-Version: red-discordbot\n"
-"POT-Creation-Date: 2019-02-17 02:24+0000\n"
-"PO-Revision-Date: 2019-02-25 03:07\n"
-"Last-Translator: Kowlin \n"
+"POT-Creation-Date: 2019-07-05 22:33+0200\n"
+"PO-Revision-Date: 2019-07-06 16:13\n"
+"Last-Translator: Robert Jansen (Kowlin)\n"
"Language-Team: Korean\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"Generated-By: redgettext 2.2\n"
+"Generated-By: redgettext 3.0\n"
"Plural-Forms: nplurals=1; plural=0;\n"
"X-Generator: crowdin.com\n"
"X-Crowdin-Project: red-discordbot\n"
@@ -16,971 +16,1275 @@ msgstr ""
"X-Crowdin-File: /cogs/audio/locales/messages.pot\n"
"Language: ko_KR\n"
-#: redbot/cogs/audio/audio.py:38
+#: redbot/cogs/audio/audio.py:47
#, docstring
msgid "Play audio through voice channels."
msgstr ""
-#: redbot/cogs/audio/audio.py:173 redbot/cogs/audio/audio.py:735
-msgid "Now Playing"
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:177
-msgid "Track length: {length} | Requested by: {user}"
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:201 redbot/cogs/audio/audio.py:227
+#: redbot/cogs/audio/audio.py:260
msgid "music in {} servers"
msgstr ""
-#: redbot/cogs/audio/audio.py:211
+#: redbot/cogs/audio/audio.py:300 redbot/cogs/audio/audio.py:1317
+msgid "Now Playing"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:304
+msgid "Track length: {length} | Requested by: {user}"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:331
msgid "Queue ended."
msgstr ""
-#: redbot/cogs/audio/audio.py:240
+#: redbot/cogs/audio/audio.py:350
msgid "Track Error"
msgstr ""
-#: redbot/cogs/audio/audio.py:245
+#: redbot/cogs/audio/audio.py:355
msgid "Skipping..."
msgstr ""
-#: redbot/cogs/audio/audio.py:252
+#: redbot/cogs/audio/audio.py:363
#, docstring
msgid "Music configuration options."
msgstr "음악 구성 옵션들이에요."
-#: redbot/cogs/audio/audio.py:258
+#: redbot/cogs/audio/audio.py:369
#, docstring
-msgid "Toggle DJ mode.\n\n"
-" DJ mode allows users with the DJ role to use audio commands.\n"
-" "
+msgid "Toggle the bot auto-disconnecting when done playing.\\n\\n This setting takes precedence over [p]audioset emptydisconnect.\\n "
msgstr ""
-#: redbot/cogs/audio/audio.py:265
+#: redbot/cogs/audio/audio.py:377
+msgid "Auto-disconnection at queue end: {true_or_false}."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:385
+#, docstring
+msgid "Toggle DJ mode.\\n\\n DJ mode allows users with the DJ role to use audio commands.\\n "
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:392
msgid "Please set a role to use with DJ mode. Enter the role name or ID now."
msgstr ""
-#: redbot/cogs/audio/audio.py:273
+#: redbot/cogs/audio/audio.py:400
msgid "Response timed out, try again later."
msgstr ""
-#: redbot/cogs/audio/audio.py:284
+#: redbot/cogs/audio/audio.py:405
+msgid "DJ role enabled: {true_or_false}."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:411
#, docstring
msgid "Auto-disconnection after x seconds while stopped. 0 to disable."
msgstr "자동으로 연결을 끊기는 모든 사용자 연결이 끊어진 후 x 초 후에 음악을 중지해요. 0 이면 자동으로 연결을 끊는 걸 비활성화해요"
-#: redbot/cogs/audio/audio.py:286 redbot/cogs/audio/audio.py:317
-#: redbot/cogs/audio/audio.py:405
+#: redbot/cogs/audio/audio.py:413 redbot/cogs/audio/audio.py:436
+#: redbot/cogs/audio/audio.py:543 redbot/cogs/audio/audio.py:687
msgid "Can't be less than zero."
msgstr ""
-#: redbot/cogs/audio/audio.py:291
+#: redbot/cogs/audio/audio.py:418
msgid "Empty disconnect disabled."
msgstr ""
-#: redbot/cogs/audio/audio.py:296
+#: redbot/cogs/audio/audio.py:423
msgid "Empty disconnect timer set to {num_seconds}."
msgstr ""
-#: redbot/cogs/audio/audio.py:307
-#, docstring
-msgid "Set the role to use for DJ mode."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:310
-msgid "DJ role set to: {role.name}."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:315
+#: redbot/cogs/audio/audio.py:434
#, docstring
msgid "Set a price for queueing tracks for non-mods. 0 to disable."
msgstr ""
-#: redbot/cogs/audio/audio.py:320
+#: redbot/cogs/audio/audio.py:439
msgid "Jukebox mode disabled."
msgstr ""
-#: redbot/cogs/audio/audio.py:325
+#: redbot/cogs/audio/audio.py:444
msgid "Track queueing command price set to {price} {currency}."
msgstr ""
-#: redbot/cogs/audio/audio.py:336
+#: redbot/cogs/audio/audio.py:455
+#, docstring
+msgid "Set the localtracks path if the Lavalink.jar is not run from the Audio data folder.\\n\\n Leave the path blank to reset the path to the default, the Audio data directory.\\n "
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:463
+msgid "The localtracks path location has been reset to the default location."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:466
+msgid "This setting is only for bot owners to set a localtracks folder location if the Lavalink.jar is being ran from outside of the Audio data directory.\\nIn the example below, the full path for 'ParentDirectory' must be passed to this command.\\nThe path must not contain spaces.\\n```\\nParentDirectory\\n |__ localtracks (folder)\\n | |__ Awesome Album Name (folder)\\n | |__01 Cool Song.mp3\\n | |__02 Groovy Song.mp3\\n |\\n |__ Lavalink.jar\\n |__ application.yml\\n```\\nThe folder path given to this command must contain the Lavalink.jar, the application.yml, and the localtracks folder.\\nUse this command with no path given to reset it to the default, the Audio data directory for this bot.\\nDo you want to continue to set the provided path for local tracks?"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:505
+msgid "{local_path} does not seem like a valid path."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:520
+msgid "The path that was entered does not have {filelist} file in that location. The path will still be saved, but please check the path and the file location before attempting to play local tracks or start your Lavalink.jar."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:530
+msgid "Localtracks path set to: {local_path}."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:536
+#, docstring
+msgid "Max length of a track to queue in seconds. 0 to disable.\\n\\n Accepts seconds or a value formatted like 00:00:00 (`hh:mm:ss`) or 00:00 (`mm:ss`).\\n Invalid input will turn the max length setting off."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:545
+msgid "Track max length disabled."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:549
+msgid "Track max length set to {seconds}."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:559
#, docstring
msgid "Toggle track announcement and other bot messages."
msgstr ""
-#: redbot/cogs/audio/audio.py:340
+#: redbot/cogs/audio/audio.py:563
msgid "Verbose mode on: {true_or_false}."
msgstr ""
-#: redbot/cogs/audio/audio.py:345
+#: redbot/cogs/audio/audio.py:569
+#, docstring
+msgid "Toggle the domain restriction on Audio.\\n\\n When toggled off, users will be able to play songs from non-commercial websites and links.\\n When toggled on, users are restricted to YouTube, SoundCloud, Mixer, Vimeo, Twitch, and Bandcamp links."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:576
+msgid "Commercial links only: {true_or_false}."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:582
+#, docstring
+msgid "Set the role to use for DJ mode."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:585
+msgid "DJ role set to: {role.name}."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:589
#, docstring
msgid "Show the current settings."
msgstr "현재 설정을 표시할게요."
-#: redbot/cogs/audio/audio.py:358
+#: redbot/cogs/audio/audio.py:604
msgid "Server Settings"
msgstr ""
-#: redbot/cogs/audio/audio.py:360
-msgid "Disconnect timer: [{num_seconds}]\n"
+#: redbot/cogs/audio/audio.py:606
+msgid "Auto-disconnect: [{dc}]\\n"
msgstr ""
-#: redbot/cogs/audio/audio.py:364
-msgid "DJ Role: [{role.name}]\n"
+#: redbot/cogs/audio/audio.py:609
+msgid "Disconnect timer: [{num_seconds}]\\n"
msgstr ""
-#: redbot/cogs/audio/audio.py:366
-msgid "Jukebox: [{jukebox_name}]\n"
+#: redbot/cogs/audio/audio.py:613
+msgid "DJ Role: [{role.name}]\\n"
msgstr ""
-#: redbot/cogs/audio/audio.py:367
-msgid "Command price: [{jukebox_price}]\n"
+#: redbot/cogs/audio/audio.py:615
+msgid "Jukebox: [{jukebox_name}]\\n"
msgstr ""
-#: redbot/cogs/audio/audio.py:368
-msgid "Repeat: [{repeat}]\n"
-"Shuffle: [{shuffle}]\n"
-"Song notify msgs: [{notify}]\n"
-"Songs as status: [{status}]\n"
+#: redbot/cogs/audio/audio.py:616
+msgid "Command price: [{jukebox_price}]\\n"
msgstr ""
-#: redbot/cogs/audio/audio.py:375
-msgid "Thumbnails: [{0}]\n"
+#: redbot/cogs/audio/audio.py:618
+msgid "Max track length: [{tracklength}]\\n"
msgstr ""
-#: redbot/cogs/audio/audio.py:377
-msgid "Vote skip: [{vote_enabled}]\n"
-"Skip percentage: [{vote_percent}%]\n"
+#: redbot/cogs/audio/audio.py:621
+msgid "Repeat: [{repeat}]\\nShuffle: [{shuffle}]\\nSong notify msgs: [{notify}]\\nSongs as status: [{status}]\\n"
msgstr ""
-#: redbot/cogs/audio/audio.py:380
-msgid "---Lavalink Settings---\n"
-"Cog version: [{version}]\n"
-"Jar build: [{jarbuild}]\n"
-"External server: [{use_external_lavalink}]"
+#: redbot/cogs/audio/audio.py:628
+msgid "Thumbnails: [{0}]\\n"
msgstr ""
-#: redbot/cogs/audio/audio.py:393
+#: redbot/cogs/audio/audio.py:630
+msgid "Vote skip: [{vote_enabled}]\\nSkip percentage: [{vote_percent}%]\\n"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:633
+msgid "---Lavalink Settings--- \\nCog version: [{version}]\\nJar build: [{jarbuild}]\\nExternal server: [{use_external_lavalink}]\\n"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:640
+msgid "Localtracks path: [{localpath}]\\n"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:648
#, docstring
-msgid "Toggle displaying a thumbnail on audio messages."
+msgid "Instructions to set the Spotify API tokens."
msgstr ""
-#: redbot/cogs/audio/audio.py:397
-msgid "Thumbnail display: {true_or_false}."
+#: redbot/cogs/audio/audio.py:649
+msgid "1. Go to Spotify developers and log in with your Spotify account.\\n(https://developer.spotify.com/dashboard/applications)\\n2. Click \\\"Create An App\\\".\\n3. Fill out the form provided with your app name, etc.\\n4. When asked if you're developing commercial integration select \\\"No\\\".\\n5. Accept the terms and conditions.\\n6. Copy your client ID and your client secret into:\\n`{prefix}set api spotify client_id, client_secret,`"
msgstr ""
-#: redbot/cogs/audio/audio.py:403
-#, docstring
-msgid "Percentage needed for non-mods to skip tracks. 0 to disable."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:411
-msgid "Voting disabled. All users can use queue management commands."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:416
-msgid "Vote percentage set to {percent}%."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:425
+#: redbot/cogs/audio/audio.py:665
#, docstring
msgid "Enable/disable tracks' titles as status."
msgstr ""
-#: redbot/cogs/audio/audio.py:429
+#: redbot/cogs/audio/audio.py:669
msgid "Song titles as status: {true_or_false}."
msgstr ""
-#: redbot/cogs/audio/audio.py:435
+#: redbot/cogs/audio/audio.py:675
+#, docstring
+msgid "Toggle displaying a thumbnail on audio messages."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:679
+msgid "Thumbnail display: {true_or_false}."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:685
+#, docstring
+msgid "Percentage needed for non-mods to skip tracks. 0 to disable."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:693
+msgid "Voting disabled. All users can use queue management commands."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:698
+msgid "Vote percentage set to {percent}%."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:707
+#, docstring
+msgid "Instructions to set the YouTube API key."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:726
#, docstring
msgid "Audio stats."
msgstr ""
-#: redbot/cogs/audio/audio.py:469 redbot/cogs/audio/audio.py:489
-#: redbot/cogs/audio/audio.py:698 redbot/cogs/audio/audio.py:788
-#: redbot/cogs/audio/audio.py:804 redbot/cogs/audio/audio.py:829
-#: redbot/cogs/audio/audio.py:836 redbot/cogs/audio/audio.py:1179
-#: redbot/cogs/audio/audio.py:1466 redbot/cogs/audio/audio.py:1724
-#: redbot/cogs/audio/audio.py:2026 redbot/cogs/audio/audio.py:2063
-#: redbot/cogs/audio/audio.py:2109 redbot/cogs/audio/audio.py:2265
-#: redbot/cogs/audio/audio.py:2304 redbot/cogs/audio/audio.py:2334
+#: redbot/cogs/audio/audio.py:754 redbot/cogs/audio/audio.py:782
+#: redbot/cogs/audio/audio.py:819 redbot/cogs/audio/audio.py:847
+#: redbot/cogs/audio/audio.py:914 redbot/cogs/audio/audio.py:932
+#: redbot/cogs/audio/audio.py:956 redbot/cogs/audio/audio.py:1026
+#: redbot/cogs/audio/audio.py:1280 redbot/cogs/audio/audio.py:1371
+#: redbot/cogs/audio/audio.py:1388 redbot/cogs/audio/audio.py:1411
+#: redbot/cogs/audio/audio.py:1419 redbot/cogs/audio/audio.py:2190
+#: redbot/cogs/audio/audio.py:2527 redbot/cogs/audio/audio.py:2860
+#: redbot/cogs/audio/audio.py:3201 redbot/cogs/audio/audio.py:3255
+#: redbot/cogs/audio/audio.py:3305 redbot/cogs/audio/audio.py:3497
+#: redbot/cogs/audio/audio.py:3575 redbot/cogs/audio/audio.py:3605
msgid "Nothing playing."
msgstr ""
-#: redbot/cogs/audio/audio.py:473
+#: redbot/cogs/audio/audio.py:758
msgid "Not connected anywhere."
msgstr ""
-#: redbot/cogs/audio/audio.py:478
-msgid "Connected in {num} servers:"
+#: redbot/cogs/audio/audio.py:764
+msgid "Playing in {num}/{total} servers:"
msgstr ""
-#: redbot/cogs/audio/audio.py:486
+#: redbot/cogs/audio/audio.py:779
#, docstring
msgid "Bump a track number to the top of the queue."
msgstr ""
-#: redbot/cogs/audio/audio.py:495
+#: redbot/cogs/audio/audio.py:788
msgid "You must be in the voice channel to bump a track."
msgstr ""
-#: redbot/cogs/audio/audio.py:499
+#: redbot/cogs/audio/audio.py:792
msgid "You need the DJ role to bump tracks."
msgstr ""
-#: redbot/cogs/audio/audio.py:502 redbot/cogs/audio/audio.py:1739
+#: redbot/cogs/audio/audio.py:795 redbot/cogs/audio/audio.py:2875
msgid "Song number must be greater than 1 and within the queue limit."
msgstr ""
-#: redbot/cogs/audio/audio.py:517
+#: redbot/cogs/audio/audio.py:810
msgid "Moved {track} to the top of the queue."
msgstr ""
-#: redbot/cogs/audio/audio.py:523
+#: redbot/cogs/audio/audio.py:817
#, docstring
msgid "Disconnect from the voice channel."
msgstr ""
-#: redbot/cogs/audio/audio.py:528
+#: redbot/cogs/audio/audio.py:826
msgid "You need the DJ role to disconnect."
msgstr ""
-#: redbot/cogs/audio/audio.py:532
+#: redbot/cogs/audio/audio.py:830
msgid "There are other people listening to music."
msgstr ""
-#: redbot/cogs/audio/audio.py:540
+#: redbot/cogs/audio/audio.py:845
+#, docstring
+msgid "Equalizer management."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:865
+#, docstring
+msgid "Delete a saved eq preset."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:887
+#, docstring
+msgid "List saved eq presets."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:890
+msgid "No saved equalizer presets."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:897
+msgid "{num} preset(s)"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:903
+#, docstring
+msgid "Load a saved eq preset."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:930
+#, docstring
+msgid "Reset the eq to 0 across all bands."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:946
+msgid "Equalizer values have been reset."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:954
+#, docstring
+msgid "Save the current eq settings to a preset."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:958
+msgid "Please enter a name for this equalizer preset."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:972
+msgid "No equalizer preset name entered, try the command again later."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:981 redbot/cogs/audio/audio.py:2213
+msgid "Try the command again with a shorter name."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:985
+msgid "Preset name already exists, do you want to replace it?"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:994
+msgid "Not saving preset."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1019
+#, docstring
+msgid "Set an eq band with a band number or name and value.\\n\\n Band positions are 1-15 and values have a range of -0.25 to 1.0.\\n Band names are 25, 40, 63, 100, 160, 250, 400, 630, 1k, 1.6k, 2.5k, 4k, 6.3k, 10k, and 16k Hz.\\n Setting a band value to -0.25 nullifies it while +0.25 is double.\\n "
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1063
+msgid "Valid band numbers are 1-15 or the band names listed in the help for this command."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1099
#, docstring
msgid "Local playback commands."
msgstr ""
-#: redbot/cogs/audio/audio.py:545
+#: redbot/cogs/audio/audio.py:1104
#, docstring
msgid "Play all songs in a localtracks folder."
msgstr ""
-#: redbot/cogs/audio/audio.py:552
+#: redbot/cogs/audio/audio.py:1115
+msgid "No localtracks folder named {name}."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1121
#, docstring
msgid "Play a local track."
msgstr ""
-#: redbot/cogs/audio/audio.py:557
+#: redbot/cogs/audio/audio.py:1126
msgid "No local track folders found."
msgstr ""
-#: redbot/cogs/audio/audio.py:600
+#: redbot/cogs/audio/audio.py:1169
#, docstring
msgid "Search for songs across all localtracks folders."
msgstr ""
-#: redbot/cogs/audio/audio.py:605
+#: redbot/cogs/audio/audio.py:1174
msgid "No album folders found."
msgstr ""
-#: redbot/cogs/audio/audio.py:612 redbot/cogs/audio/audio.py:1634
+#: redbot/cogs/audio/audio.py:1181 redbot/cogs/audio/audio.py:2816
msgid "No matches."
msgstr ""
-#: redbot/cogs/audio/audio.py:688
+#: redbot/cogs/audio/audio.py:1269
msgid "No localtracks folder."
msgstr ""
-#: redbot/cogs/audio/audio.py:696
+#: redbot/cogs/audio/audio.py:1278
#, docstring
msgid "Now playing."
msgstr ""
-#: redbot/cogs/audio/audio.py:716
+#: redbot/cogs/audio/audio.py:1298
msgid "Requested by: **{track.requester}**"
msgstr ""
-#: redbot/cogs/audio/audio.py:726
+#: redbot/cogs/audio/audio.py:1308
msgid "Nothing."
msgstr ""
-#: redbot/cogs/audio/audio.py:785
+#: redbot/cogs/audio/audio.py:1368
#, docstring
-msgid "Pause and resume."
+msgid "Pause or resume a playing track."
msgstr ""
-#: redbot/cogs/audio/audio.py:794
-msgid "You must be in the voice channel to pause the music."
+#: redbot/cogs/audio/audio.py:1377
+msgid "You must be in the voice channel pause or resume."
msgstr ""
-#: redbot/cogs/audio/audio.py:800
-msgid "You need the DJ role to pause tracks."
+#: redbot/cogs/audio/audio.py:1384
+msgid "You need the DJ role to pause or resume tracks."
msgstr ""
-#: redbot/cogs/audio/audio.py:814
+#: redbot/cogs/audio/audio.py:1401
msgid "Track Paused"
msgstr ""
-#: redbot/cogs/audio/audio.py:821
+#: redbot/cogs/audio/audio.py:1407
msgid "Track Resumed"
msgstr ""
-#: redbot/cogs/audio/audio.py:826
-msgid "Track is paused."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:828
-msgid "Track is playing."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:834
+#: redbot/cogs/audio/audio.py:1417
#, docstring
msgid "Queue percentage."
msgstr ""
-#: redbot/cogs/audio/audio.py:860
+#: redbot/cogs/audio/audio.py:1443
msgid "Nothing in the queue."
msgstr ""
-#: redbot/cogs/audio/audio.py:882
+#: redbot/cogs/audio/audio.py:1465
msgid "Queued and playing tracks:"
msgstr ""
-#: redbot/cogs/audio/audio.py:890
+#: redbot/cogs/audio/audio.py:1474
#, docstring
msgid "Play a URL or search for a track."
msgstr ""
-#: redbot/cogs/audio/audio.py:900 redbot/cogs/audio/audio.py:1411
-#: redbot/cogs/audio/audio.py:1795
+#: redbot/cogs/audio/audio.py:1481
+msgid "That URL is not allowed."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1484 redbot/cogs/audio/audio.py:2437
+#: redbot/cogs/audio/audio.py:2928 redbot/cogs/audio/audio.py:3047
+msgid "Connection to Lavalink has failed."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1486 redbot/cogs/audio/audio.py:2439
+#: redbot/cogs/audio/audio.py:2930 redbot/cogs/audio/audio.py:3049
+msgid "Please check your console or logs for details."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1495 redbot/cogs/audio/audio.py:2449
+#: redbot/cogs/audio/audio.py:2939 redbot/cogs/audio/audio.py:3543
msgid "I don't have permission to connect to your channel."
msgstr ""
-#: redbot/cogs/audio/audio.py:906 redbot/cogs/audio/audio.py:1422
-#: redbot/cogs/audio/audio.py:1801 redbot/cogs/audio/audio.py:1889
+#: redbot/cogs/audio/audio.py:1501 redbot/cogs/audio/audio.py:2461
+#: redbot/cogs/audio/audio.py:2945 redbot/cogs/audio/audio.py:3056
+#: redbot/cogs/audio/audio.py:3555
msgid "Connect to a voice channel first."
msgstr ""
-#: redbot/cogs/audio/audio.py:909 redbot/cogs/audio/audio.py:1418
-#: redbot/cogs/audio/audio.py:1804 redbot/cogs/audio/audio.py:1892
+#: redbot/cogs/audio/audio.py:1504 redbot/cogs/audio/audio.py:2457
+#: redbot/cogs/audio/audio.py:2948 redbot/cogs/audio/audio.py:3059
+#: redbot/cogs/audio/audio.py:3558
msgid "Connection to Lavalink has not yet been established."
msgstr ""
-#: redbot/cogs/audio/audio.py:913
+#: redbot/cogs/audio/audio.py:1508
msgid "You need the DJ role to queue tracks."
msgstr ""
-#: redbot/cogs/audio/audio.py:922
+#: redbot/cogs/audio/audio.py:1519
msgid "You must be in the voice channel to use the play command."
msgstr ""
-#: redbot/cogs/audio/audio.py:928
+#: redbot/cogs/audio/audio.py:1525
msgid "No tracks to play."
msgstr ""
-#: redbot/cogs/audio/audio.py:942 redbot/cogs/audio/audio.py:1450
-#: redbot/cogs/audio/audio.py:1828 redbot/cogs/audio/audio.py:1865
+#: redbot/cogs/audio/audio.py:1565
+msgid "The owner needs to set the Spotify client ID, Spotify client secret, and YouTube API key before Spotify URLs or codes can be used. \\nSee `{prefix}audioset youtubeapi` and `{prefix}audioset spotifyapi` for instructions."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1575 redbot/cogs/audio/audio.py:2493
+msgid "Wait until the playlist has finished loading."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1592 redbot/cogs/audio/audio.py:1657
+#: redbot/cogs/audio/audio.py:2499 redbot/cogs/audio/audio.py:2509
+#: redbot/cogs/audio/audio.py:2973 redbot/cogs/audio/audio.py:3027
msgid "Nothing found."
msgstr ""
-#: redbot/cogs/audio/audio.py:953 redbot/cogs/audio/audio.py:1295
+#: redbot/cogs/audio/audio.py:1600
+msgid "The Spotify API key or client secret has not been set properly. \\nUse `{prefix}audioset spotifyapi` for instructions."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1639 redbot/cogs/audio/audio.py:1776
+msgid "This doesn't seem to be a valid Spotify URL or code."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1688 redbot/cogs/audio/audio.py:2320
msgid "Playlist Enqueued"
msgstr ""
-#: redbot/cogs/audio/audio.py:954 redbot/cogs/audio/audio.py:1296
-msgid "Added {num} tracks to the queue."
+#: redbot/cogs/audio/audio.py:1689 redbot/cogs/audio/audio.py:2321
+msgid "Added {num} tracks to the queue.{maxlength_msg}"
msgstr ""
-#: redbot/cogs/audio/audio.py:958
+#: redbot/cogs/audio/audio.py:1695
msgid "{time} until start of playlist playback: starts at #{position} in queue"
msgstr ""
-#: redbot/cogs/audio/audio.py:980 redbot/cogs/audio/audio.py:1938
+#: redbot/cogs/audio/audio.py:1711 redbot/cogs/audio/audio.py:3125
+msgid "Track exceeds maximum length."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1717
+msgid "Nothing found. Check your Lavalink logs for details."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1732 redbot/cogs/audio/audio.py:3108
msgid "Track Enqueued"
msgstr ""
-#: redbot/cogs/audio/audio.py:984 redbot/cogs/audio/audio.py:1944
+#: redbot/cogs/audio/audio.py:1736 redbot/cogs/audio/audio.py:3114
msgid "{time} until track playback: #{position} in queue"
msgstr ""
-#: redbot/cogs/audio/audio.py:989 redbot/cogs/audio/audio.py:1949
+#: redbot/cogs/audio/audio.py:1741 redbot/cogs/audio/audio.py:3119
msgid "#{position} in queue"
msgstr ""
-#: redbot/cogs/audio/audio.py:997
+#: redbot/cogs/audio/audio.py:1761
+msgid "The Spotify API key or client secret has not been set properly. \\nUse `{prefix}audioset spotifyapi` for instructions."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1793 redbot/cogs/audio/audio.py:2384
+msgid "Please wait, adding tracks..."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1809
+msgid "The connection was reset while loading the playlist."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1826 redbot/cogs/audio/audio.py:2401
+msgid "Loading track {num}/{total}..."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1840
+msgid "Approximate time remaining: {seconds}"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1850
+msgid "Nothing found.\\nThe YouTube API key may be invalid or you may be rate limited on YouTube's search service.\\nCheck the YouTube API key again and follow the instructions at `{prefix}audioset youtubeapi`."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1871
#, docstring
msgid "Playlist configuration options."
msgstr ""
-#: redbot/cogs/audio/audio.py:1002
+#: redbot/cogs/audio/audio.py:1876
#, docstring
-msgid "Add a track URL, playlist link, or quick search to a playlist.\n\n"
-" The track(s) will be appended to the end of the playlist.\n"
-" "
+msgid "Add a track URL, playlist link, or quick search to a playlist.\\n\\n The track(s) will be appended to the end of the playlist.\\n "
msgstr ""
-#: redbot/cogs/audio/audio.py:1014 redbot/cogs/audio/audio.py:1078
-#: redbot/cogs/audio/audio.py:1228
+#: redbot/cogs/audio/audio.py:1888 redbot/cogs/audio/audio.py:2028
+#: redbot/cogs/audio/audio.py:2241
msgid "You are not the author of that playlist."
msgstr ""
-#: redbot/cogs/audio/audio.py:1024
+#: redbot/cogs/audio/audio.py:1898
msgid "{track} is already in {playlist}."
msgstr ""
-#: redbot/cogs/audio/audio.py:1033 redbot/cogs/audio/audio.py:1082
-#: redbot/cogs/audio/audio.py:1092 redbot/cogs/audio/audio.py:1231
+#: redbot/cogs/audio/audio.py:1907 redbot/cogs/audio/audio.py:2032
+#: redbot/cogs/audio/audio.py:2081 redbot/cogs/audio/audio.py:2244
msgid "No playlist with that name."
msgstr ""
-#: redbot/cogs/audio/audio.py:1040
+#: redbot/cogs/audio/audio.py:1914
msgid "{track} appended to {playlist}."
msgstr ""
-#: redbot/cogs/audio/audio.py:1046
+#: redbot/cogs/audio/audio.py:1920
msgid "{num} tracks appended to {playlist}."
msgstr ""
-#: redbot/cogs/audio/audio.py:1053
+#: redbot/cogs/audio/audio.py:1928
+#, docstring
+msgid "Copy a playlist from one server to another."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1932
+msgid "Invalid server ID for source server."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1934
+msgid "Invalid server ID for target server."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1939
+msgid "No playlist with that name in {from_guild_name}."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1950
+msgid "Playlist {name} copied from {from_guild_name} to {to_guild_name}."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1962
+msgid "A playlist with that name already exists in {to_guild_name}.\\nPlease enter a new name for this playlist."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1975
+msgid "Try the playlist copy command again with a shorter name."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1980
+msgid "Playlist name already exists in {to_guild_name}, try the playlist copy command again with a different name."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1986 redbot/cogs/audio/audio.py:2220
+msgid "No playlist name entered, try again later."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1991
+msgid "Playlist {name} copied from {from_guild_name} to {to_guild_name}.\\nNew playlist name on {to_guild_name}: {new_name}"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2003
#, docstring
msgid "Create an empty playlist."
msgstr ""
-#: redbot/cogs/audio/audio.py:1057 redbot/cogs/audio/audio.py:1172
+#: redbot/cogs/audio/audio.py:2007 redbot/cogs/audio/audio.py:2183
msgid "You need the DJ role to save playlists."
msgstr ""
-#: redbot/cogs/audio/audio.py:1061 redbot/cogs/audio/audio.py:1176
-#: redbot/cogs/audio/audio.py:1204
+#: redbot/cogs/audio/audio.py:2011 redbot/cogs/audio/audio.py:2187
+#: redbot/cogs/audio/audio.py:2217
msgid "Playlist name already exists, try again with a different name."
msgstr ""
-#: redbot/cogs/audio/audio.py:1067
+#: redbot/cogs/audio/audio.py:2017
msgid "Empty playlist {name} created."
msgstr ""
-#: redbot/cogs/audio/audio.py:1071
+#: redbot/cogs/audio/audio.py:2021
#, docstring
msgid "Delete a saved playlist."
msgstr ""
-#: redbot/cogs/audio/audio.py:1083
+#: redbot/cogs/audio/audio.py:2033
msgid "{name} playlist deleted."
msgstr ""
-#: redbot/cogs/audio/audio.py:1087
+#: redbot/cogs/audio/audio.py:2039
+#, docstring
+msgid "Download a copy of a playlist.\\n\\n These files can be used with the [p]playlist upload command.\\n Red v2-compatible playlists can be generated by passing True\\n for the v2 variable."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2061
+msgid "That playlist has no tracks."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2063 redbot/cogs/audio/audio.py:2331
+msgid "That playlist doesn't exist."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2076
#, docstring
msgid "Retrieve information from a saved playlist."
msgstr ""
-#: redbot/cogs/audio/audio.py:1100
-msgid "**Custom playlist.**"
+#: redbot/cogs/audio/audio.py:2101
+msgid "Playlist info for {playlist_name}:\\n"
msgstr ""
-#: redbot/cogs/audio/audio.py:1102
-msgid "URL: <{url}>"
+#: redbot/cogs/audio/audio.py:2105
+msgid "Playlist info for {playlist_name}:\\nURL: {url}"
msgstr ""
-#: redbot/cogs/audio/audio.py:1105
-msgid "Playlist info for {playlist_name}:"
+#: redbot/cogs/audio/audio.py:2116
+msgid "Author: {author_name} | {num} track(s)"
msgstr ""
-#: redbot/cogs/audio/audio.py:1106
-msgid "Author: **{author_name}**\n"
-"{url}"
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:1110
-msgid "{num} track(s)"
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:1115
+#: redbot/cogs/audio/audio.py:2126
#, docstring
msgid "List saved playlists."
msgstr ""
-#: redbot/cogs/audio/audio.py:1118
+#: redbot/cogs/audio/audio.py:2129
msgid "No saved playlists."
msgstr ""
-#: redbot/cogs/audio/audio.py:1130
+#: redbot/cogs/audio/audio.py:2141
msgid "Tracks: {num}"
msgstr ""
-#: redbot/cogs/audio/audio.py:1131
-msgid "Author: {name}\n"
+#: redbot/cogs/audio/audio.py:2142
+msgid "Author: {name}\\n"
msgstr ""
-#: redbot/cogs/audio/audio.py:1155
+#: redbot/cogs/audio/audio.py:2166
msgid "Playlists for {server_name}:"
msgstr ""
-#: redbot/cogs/audio/audio.py:1159
+#: redbot/cogs/audio/audio.py:2170
msgid "Page {page_num}/{total_pages} | {num} playlists"
msgstr ""
-#: redbot/cogs/audio/audio.py:1168
+#: redbot/cogs/audio/audio.py:2179
#, docstring
msgid "Save the queue to a playlist."
msgstr ""
-#: redbot/cogs/audio/audio.py:1189
+#: redbot/cogs/audio/audio.py:2193 redbot/cogs/audio/audio.py:2590
+#: redbot/cogs/audio/audio.py:2593 redbot/cogs/audio/audio.py:2613
+#: redbot/cogs/audio/audio.py:2756 redbot/cogs/audio/audio.py:2759
+#: redbot/cogs/audio/audio.py:2775 redbot/cogs/audio/audio.py:2778
+#: redbot/cogs/audio/audio.py:2810 redbot/cogs/audio/audio.py:2812
+#: redbot/cogs/audio/audio.py:3418 redbot/cogs/audio/audio.py:3422
+#: redbot/cogs/audio/audio.py:3429
+msgid "There's nothing in the queue."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2202
msgid "Please enter a name for this playlist."
msgstr ""
-#: redbot/cogs/audio/audio.py:1200
-msgid "Try the command again with a shorter name."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:1207
-msgid "No playlist name entered, try again later."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:1214
+#: redbot/cogs/audio/audio.py:2227
msgid "Playlist {name} saved from current queue: {num} tracks added."
msgstr ""
-#: redbot/cogs/audio/audio.py:1221
+#: redbot/cogs/audio/audio.py:2234
#, docstring
msgid "Remove a track from a playlist by url."
msgstr ""
-#: redbot/cogs/audio/audio.py:1235
+#: redbot/cogs/audio/audio.py:2248
msgid "URL not in playlist."
msgstr ""
-#: redbot/cogs/audio/audio.py:1239
+#: redbot/cogs/audio/audio.py:2252
msgid "No tracks left, removing playlist."
msgstr ""
-#: redbot/cogs/audio/audio.py:1246
+#: redbot/cogs/audio/audio.py:2259
msgid "{num} entries have been removed from the {playlist_name} playlist."
msgstr ""
-#: redbot/cogs/audio/audio.py:1253
+#: redbot/cogs/audio/audio.py:2266
msgid "The track has been removed from the {playlist_name} playlist."
msgstr ""
-#: redbot/cogs/audio/audio.py:1260
+#: redbot/cogs/audio/audio.py:2273
#, docstring
msgid "Save a playlist from a url."
msgstr ""
-#: redbot/cogs/audio/audio.py:1272
+#: redbot/cogs/audio/audio.py:2285
msgid "Playlist {name} saved: {num} tracks added."
msgstr ""
-#: redbot/cogs/audio/audio.py:1279
+#: redbot/cogs/audio/audio.py:2292
#, docstring
msgid "Load a playlist into the queue."
msgstr ""
-#: redbot/cogs/audio/audio.py:1304
-msgid "That playlist doesn't exist."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:1309
+#: redbot/cogs/audio/audio.py:2336
#, docstring
msgid "Convert a Red v2 playlist file to a playlist."
msgstr ""
-#: redbot/cogs/audio/audio.py:1315
+#: redbot/cogs/audio/audio.py:2342
msgid "Please upload the playlist file. Any other message will cancel this operation."
msgstr ""
-#: redbot/cogs/audio/audio.py:1323
+#: redbot/cogs/audio/audio.py:2350
msgid "No file detected, try again later."
msgstr ""
-#: redbot/cogs/audio/audio.py:1327
+#: redbot/cogs/audio/audio.py:2354
msgid "Upload cancelled."
msgstr ""
-#: redbot/cogs/audio/audio.py:1331
+#: redbot/cogs/audio/audio.py:2358
msgid "Only playlist files can be uploaded."
msgstr ""
-#: redbot/cogs/audio/audio.py:1336
+#: redbot/cogs/audio/audio.py:2363
msgid "Not a valid playlist file."
msgstr ""
-#: redbot/cogs/audio/audio.py:1352
+#: redbot/cogs/audio/audio.py:2379
msgid "A playlist already exists with this name."
msgstr ""
-#: redbot/cogs/audio/audio.py:1357
-msgid "Please wait, adding tracks..."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:1371
-msgid "Loading track {num}/{total}..."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:1377
+#: redbot/cogs/audio/audio.py:2407
msgid "No tracks found."
msgstr ""
-#: redbot/cogs/audio/audio.py:1383
+#: redbot/cogs/audio/audio.py:2413
msgid "Added {num} tracks from the {playlist_name} playlist. {num_bad} track(s) could not be loaded."
msgstr ""
-#: redbot/cogs/audio/audio.py:1388
+#: redbot/cogs/audio/audio.py:2418
msgid "Added {num} tracks from the {playlist_name} playlist."
msgstr ""
-#: redbot/cogs/audio/audio.py:1392
+#: redbot/cogs/audio/audio.py:2422
msgid "Playlist Saved"
msgstr ""
-#: redbot/cogs/audio/audio.py:1403
+#: redbot/cogs/audio/audio.py:2433
msgid "You need the DJ role to use playlists."
msgstr ""
-#: redbot/cogs/audio/audio.py:1432
+#: redbot/cogs/audio/audio.py:2471
msgid "You must be in the voice channel to use the playlist command."
msgstr ""
-#: redbot/cogs/audio/audio.py:1464
+#: redbot/cogs/audio/audio.py:2525
#, docstring
msgid "Skip to the start of the previously played track."
msgstr ""
-#: redbot/cogs/audio/audio.py:1474 redbot/cogs/audio/audio.py:2121
+#: redbot/cogs/audio/audio.py:2535 redbot/cogs/audio/audio.py:3317
msgid "You need the DJ role to skip tracks."
msgstr ""
-#: redbot/cogs/audio/audio.py:1479 redbot/cogs/audio/audio.py:2115
+#: redbot/cogs/audio/audio.py:2540 redbot/cogs/audio/audio.py:3311
msgid "You must be in the voice channel to skip the music."
msgstr ""
-#: redbot/cogs/audio/audio.py:1482
+#: redbot/cogs/audio/audio.py:2543
msgid "Turn shuffle off to use this command."
msgstr ""
-#: redbot/cogs/audio/audio.py:1484
+#: redbot/cogs/audio/audio.py:2545
msgid "No previous track."
msgstr ""
-#: redbot/cogs/audio/audio.py:1501
+#: redbot/cogs/audio/audio.py:2562
msgid "Replaying Track"
msgstr ""
-#: redbot/cogs/audio/audio.py:1509
+#: redbot/cogs/audio/audio.py:2571
#, docstring
-msgid "List the queue.\n\n"
-" Use [p]queue search to search the queue.\n"
-" "
+msgid "List the songs in the queue."
msgstr ""
-#: redbot/cogs/audio/audio.py:1514 redbot/cogs/audio/audio.py:1517
-#: redbot/cogs/audio/audio.py:1544 redbot/cogs/audio/audio.py:2221
-#: redbot/cogs/audio/audio.py:2225 redbot/cogs/audio/audio.py:2232
-msgid "There's nothing in the queue."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:1553
+#: redbot/cogs/audio/audio.py:2622
msgid "**Currently livestreaming:**"
msgstr ""
-#: redbot/cogs/audio/audio.py:1559 redbot/cogs/audio/audio.py:1569
-#: redbot/cogs/audio/audio.py:1575
+#: redbot/cogs/audio/audio.py:2628 redbot/cogs/audio/audio.py:2638
+#: redbot/cogs/audio/audio.py:2644
msgid "Playing: "
msgstr ""
-#: redbot/cogs/audio/audio.py:1562 redbot/cogs/audio/audio.py:1570
-msgid "Requested by: **{user}**\n"
+#: redbot/cogs/audio/audio.py:2631
+msgid "Requested by: **{user}**\\n"
msgstr ""
-#: redbot/cogs/audio/audio.py:1577
+#: redbot/cogs/audio/audio.py:2639
+msgid "Requested by: **{user}**\\n"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2646
msgid "Requested by: **{user}**"
msgstr ""
-#: redbot/cogs/audio/audio.py:1595 redbot/cogs/audio/audio.py:1599
-#: redbot/cogs/audio/audio.py:1604
-msgid "requested by **{user}**\n"
+#: redbot/cogs/audio/audio.py:2664
+msgid "requested by **{user}**\\n"
msgstr ""
-#: redbot/cogs/audio/audio.py:1615
+#: redbot/cogs/audio/audio.py:2668
+msgid "requested by **{user}**\\n"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2673
+msgid "requested by **{user}**\\n"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2684
msgid "Page {page_num}/{total_pages} | {num_tracks} tracks, {num_remaining} remaining"
msgstr ""
-#: redbot/cogs/audio/audio.py:1624
+#: redbot/cogs/audio/audio.py:2693
msgid "Repeat"
msgstr ""
-#: redbot/cogs/audio/audio.py:1626
+#: redbot/cogs/audio/audio.py:2695
msgid "Shuffle"
msgstr ""
-#: redbot/cogs/audio/audio.py:1683
+#: redbot/cogs/audio/audio.py:2740
msgid "Matching Tracks:"
msgstr ""
-#: redbot/cogs/audio/audio.py:1686 redbot/cogs/audio/audio.py:2010
+#: redbot/cogs/audio/audio.py:2743 redbot/cogs/audio/audio.py:3182
msgid "Page {page_num}/{total_pages}"
msgstr ""
-#: redbot/cogs/audio/audio.py:1695
+#: redbot/cogs/audio/audio.py:2752
+#, docstring
+msgid "Clears the queue."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2764
+msgid "You need the DJ role to clear the queue."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2766
+msgid "The queue has been cleared."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2771
+#, docstring
+msgid "Removes songs from the queue if the requester is not in the voice channel."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2783
+msgid "You need the DJ role to clean the queue."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2794
+msgid "Removed 0 tracks."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2798
+msgid "Removed {removed_tracks} tracks queued by members outside of the voice channel."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2806
+#, docstring
+msgid "Search the queue."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2829
#, docstring
msgid "Toggle repeat."
msgstr ""
-#: redbot/cogs/audio/audio.py:1701
+#: redbot/cogs/audio/audio.py:2835
msgid "You need the DJ role to toggle repeat."
msgstr ""
-#: redbot/cogs/audio/audio.py:1712
+#: redbot/cogs/audio/audio.py:2843
msgid "You must be in the voice channel to toggle repeat."
msgstr ""
-#: redbot/cogs/audio/audio.py:1715
+#: redbot/cogs/audio/audio.py:2849
msgid "Repeat tracks: {true_or_false}."
msgstr ""
-#: redbot/cogs/audio/audio.py:1721
+#: redbot/cogs/audio/audio.py:2857
#, docstring
msgid "Remove a specific track number from the queue."
msgstr ""
-#: redbot/cogs/audio/audio.py:1727
+#: redbot/cogs/audio/audio.py:2863
msgid "Nothing queued."
msgstr ""
-#: redbot/cogs/audio/audio.py:1730
+#: redbot/cogs/audio/audio.py:2866
msgid "You need the DJ role to remove tracks."
msgstr ""
-#: redbot/cogs/audio/audio.py:1735
+#: redbot/cogs/audio/audio.py:2871
msgid "You must be in the voice channel to manage the queue."
msgstr ""
-#: redbot/cogs/audio/audio.py:1751
+#: redbot/cogs/audio/audio.py:2887
msgid "Removed {track} from the queue."
msgstr ""
-#: redbot/cogs/audio/audio.py:1757
+#: redbot/cogs/audio/audio.py:2894
#, docstring
-msgid "Pick a track with a search.\n\n"
-" Use `[p]search list ` to queue all tracks found\n"
-" on YouTube. `[p]search sc ` will search SoundCloud\n"
-" instead of YouTube.\n"
-" "
+msgid "Pick a track with a search.\\n\\n Use `[p]search list ` to queue all tracks found\\n on YouTube. `[p]search sc ` will search SoundCloud\\n instead of YouTube.\\n "
msgstr ""
-#: redbot/cogs/audio/audio.py:1814
+#: redbot/cogs/audio/audio.py:2958
msgid "You must be in the voice channel to enqueue tracks."
msgstr ""
-#: redbot/cogs/audio/audio.py:1831
-msgid "Queued {num} track(s)."
+#: redbot/cogs/audio/audio.py:2997
+msgid "Queued {num} track(s).{maxlength_msg}"
msgstr ""
-#: redbot/cogs/audio/audio.py:1837
+#: redbot/cogs/audio/audio.py:3003
msgid "{time} until start of search playback: starts at #{position} in queue"
msgstr ""
-#: redbot/cogs/audio/audio.py:1997
+#: redbot/cogs/audio/audio.py:3169
msgid "Tracks Found:"
msgstr ""
-#: redbot/cogs/audio/audio.py:1998
+#: redbot/cogs/audio/audio.py:3170
msgid "search results"
msgstr ""
-#: redbot/cogs/audio/audio.py:2001
+#: redbot/cogs/audio/audio.py:3173
msgid "Folders Found:"
msgstr ""
-#: redbot/cogs/audio/audio.py:2002
+#: redbot/cogs/audio/audio.py:3174
msgid "local folders"
msgstr ""
-#: redbot/cogs/audio/audio.py:2004
+#: redbot/cogs/audio/audio.py:3176
msgid "Files Found:"
msgstr ""
-#: redbot/cogs/audio/audio.py:2005
+#: redbot/cogs/audio/audio.py:3177
msgid "local tracks"
msgstr ""
-#: redbot/cogs/audio/audio.py:2022
+#: redbot/cogs/audio/audio.py:3195
#, docstring
-msgid "Seek ahead or behind on a track by seconds."
+msgid "Seek ahead or behind on a track by seconds or a to a specific time.\\n\\n Accepts seconds or a value formatted like 00:00:00 (`hh:mm:ss`) or 00:00 (`mm:ss`)."
msgstr ""
-#: redbot/cogs/audio/audio.py:2031
+#: redbot/cogs/audio/audio.py:3206
msgid "You must be in the voice channel to use seek."
msgstr ""
-#: redbot/cogs/audio/audio.py:2036
+#: redbot/cogs/audio/audio.py:3211
msgid "You need the DJ role to use seek."
msgstr ""
-#: redbot/cogs/audio/audio.py:2042 redbot/cogs/audio/audio.py:2278
+#: redbot/cogs/audio/audio.py:3217 redbot/cogs/audio/audio.py:3510
msgid "There are other people listening - vote to skip instead."
msgstr ""
-#: redbot/cogs/audio/audio.py:2046
+#: redbot/cogs/audio/audio.py:3221
msgid "Can't seek on a stream."
msgstr ""
-#: redbot/cogs/audio/audio.py:2052
+#: redbot/cogs/audio/audio.py:3230
+msgid "Invalid input for the time to seek."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:3236
msgid "Moved {num_seconds}s to 00:00:00"
msgstr ""
-#: redbot/cogs/audio/audio.py:2057
+#: redbot/cogs/audio/audio.py:3241
msgid "Moved {num_seconds}s to {time}"
msgstr ""
-#: redbot/cogs/audio/audio.py:2068
+#: redbot/cogs/audio/audio.py:3249
+msgid "Moved to {time}"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:3261
#, docstring
msgid "Toggle shuffle."
msgstr ""
-#: redbot/cogs/audio/audio.py:2072
+#: redbot/cogs/audio/audio.py:3265
msgid "You need the DJ role to toggle shuffle."
msgstr ""
-#: redbot/cogs/audio/audio.py:2083
+#: redbot/cogs/audio/audio.py:3273
msgid "You must be in the voice channel to toggle shuffle."
msgstr ""
-#: redbot/cogs/audio/audio.py:2086
+#: redbot/cogs/audio/audio.py:3279
msgid "Shuffle tracks: {true_or_false}."
msgstr ""
-#: redbot/cogs/audio/audio.py:2092
+#: redbot/cogs/audio/audio.py:3287
#, docstring
-msgid "Make Red sing one of her songs"
+msgid "Make Red sing one of her songs."
msgstr ""
-#: redbot/cogs/audio/audio.py:2107
+#: redbot/cogs/audio/audio.py:3303
#, docstring
-msgid "Skip to the next track."
+msgid "Skip to the next track, or to a given track number."
msgstr ""
-#: redbot/cogs/audio/audio.py:2126
+#: redbot/cogs/audio/audio.py:3322
+msgid "Can't skip to a specific track in vote mode without the DJ role."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:3326
msgid "I removed your vote to skip."
msgstr ""
-#: redbot/cogs/audio/audio.py:2129
+#: redbot/cogs/audio/audio.py:3329
msgid "You voted to skip."
msgstr ""
-#: redbot/cogs/audio/audio.py:2142
+#: redbot/cogs/audio/audio.py:3342
msgid "Vote threshold met."
msgstr ""
-#: redbot/cogs/audio/audio.py:2145
+#: redbot/cogs/audio/audio.py:3345
msgid " Votes: {num_votes}/{num_members} ({cur_percent}% out of {required_percent}% needed)"
msgstr ""
-#: redbot/cogs/audio/audio.py:2228
+#: redbot/cogs/audio/audio.py:3425
msgid "Currently livestreaming {track}"
msgstr ""
-#: redbot/cogs/audio/audio.py:2235
+#: redbot/cogs/audio/audio.py:3432
msgid "{time} left on {track}"
msgstr ""
-#: redbot/cogs/audio/audio.py:2253
+#: redbot/cogs/audio/audio.py:3441
+msgid "Track number must be equal to or greater than 1."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:3454
+msgid "Can't skip to a track while shuffle is enabled."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:3470
msgid "Track Skipped"
msgstr ""
-#: redbot/cogs/audio/audio.py:2261
+#: redbot/cogs/audio/audio.py:3493
#, docstring
msgid "Stop playback and clear the queue."
msgstr ""
-#: redbot/cogs/audio/audio.py:2271
+#: redbot/cogs/audio/audio.py:3503
msgid "You must be in the voice channel to stop the music."
msgstr ""
-#: redbot/cogs/audio/audio.py:2282
+#: redbot/cogs/audio/audio.py:3514
msgid "You need the DJ role to stop the music."
msgstr ""
-#: redbot/cogs/audio/audio.py:2284
+#: redbot/cogs/audio/audio.py:3516
msgid "Stopping..."
msgstr ""
-#: redbot/cogs/audio/audio.py:2294
+#: redbot/cogs/audio/audio.py:3531
+#, docstring
+msgid "Summon the bot to a voice channel."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:3535
+msgid "You need the DJ role to summon the bot."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:3565
#, docstring
msgid "Set the volume, 1% - 150%."
msgstr ""
-#: redbot/cogs/audio/audio.py:2300
+#: redbot/cogs/audio/audio.py:3571
msgid "Current Volume:"
msgstr ""
-#: redbot/cogs/audio/audio.py:2312
+#: redbot/cogs/audio/audio.py:3583
msgid "You must be in the voice channel to change the volume."
msgstr ""
-#: redbot/cogs/audio/audio.py:2318
+#: redbot/cogs/audio/audio.py:3589
msgid "You need the DJ role to change the volume."
msgstr ""
-#: redbot/cogs/audio/audio.py:2331
+#: redbot/cogs/audio/audio.py:3602
msgid "Volume:"
msgstr ""
-#: redbot/cogs/audio/audio.py:2341
+#: redbot/cogs/audio/audio.py:3613
#, docstring
msgid "Lavalink server configuration options."
msgstr ""
-#: redbot/cogs/audio/audio.py:2346
+#: redbot/cogs/audio/audio.py:3618
#, docstring
msgid "Toggle using external lavalink servers."
msgstr ""
-#: redbot/cogs/audio/audio.py:2357 redbot/cogs/audio/audio.py:2366
+#: redbot/cogs/audio/audio.py:3625 redbot/cogs/audio/audio.py:3635
msgid "External lavalink server: {true_or_false}."
msgstr ""
-#: redbot/cogs/audio/audio.py:2361
-msgid "Defaults reset."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:2373
+#: redbot/cogs/audio/audio.py:3642
#, docstring
msgid "Set the lavalink server host."
msgstr ""
-#: redbot/cogs/audio/audio.py:2377 redbot/cogs/audio/audio.py:2382
+#: redbot/cogs/audio/audio.py:3646 redbot/cogs/audio/audio.py:3651
msgid "Host set to {host}."
msgstr ""
-#: redbot/cogs/audio/audio.py:2379 redbot/cogs/audio/audio.py:2395
-#: redbot/cogs/audio/audio.py:2413 redbot/cogs/audio/audio.py:2429
+#: redbot/cogs/audio/audio.py:3648 redbot/cogs/audio/audio.py:3664
+#: redbot/cogs/audio/audio.py:3682 redbot/cogs/audio/audio.py:3698
msgid "External lavalink server set to True."
msgstr ""
-#: redbot/cogs/audio/audio.py:2388
+#: redbot/cogs/audio/audio.py:3657
#, docstring
msgid "Set the lavalink server password."
msgstr ""
-#: redbot/cogs/audio/audio.py:2393 redbot/cogs/audio/audio.py:2399
+#: redbot/cogs/audio/audio.py:3662 redbot/cogs/audio/audio.py:3668
msgid "Server password set to {password}."
msgstr ""
-#: redbot/cogs/audio/audio.py:2406
+#: redbot/cogs/audio/audio.py:3675
#, docstring
msgid "Set the lavalink REST server port."
msgstr ""
-#: redbot/cogs/audio/audio.py:2411 redbot/cogs/audio/audio.py:2416
+#: redbot/cogs/audio/audio.py:3680 redbot/cogs/audio/audio.py:3685
msgid "REST port set to {port}."
msgstr ""
-#: redbot/cogs/audio/audio.py:2422
+#: redbot/cogs/audio/audio.py:3691
#, docstring
msgid "Set the lavalink websocket server port."
msgstr ""
-#: redbot/cogs/audio/audio.py:2427 redbot/cogs/audio/audio.py:2432
+#: redbot/cogs/audio/audio.py:3696 redbot/cogs/audio/audio.py:3701
msgid "Websocket port set to {port}."
msgstr ""
-#: redbot/cogs/audio/audio.py:2461
+#: redbot/cogs/audio/audio.py:3801
msgid "Not enough {currency} ({required_credits} required)."
msgstr ""
diff --git a/redbot/cogs/audio/locales/lol-US.po b/redbot/cogs/audio/locales/lol-US.po
index a9165b4de..6534eb353 100644
--- a/redbot/cogs/audio/locales/lol-US.po
+++ b/redbot/cogs/audio/locales/lol-US.po
@@ -1,14 +1,14 @@
msgid ""
msgstr ""
"Project-Id-Version: red-discordbot\n"
-"POT-Creation-Date: 2019-02-17 02:24+0000\n"
-"PO-Revision-Date: 2019-02-25 03:08\n"
-"Last-Translator: Kowlin \n"
+"POT-Creation-Date: 2019-07-05 22:33+0200\n"
+"PO-Revision-Date: 2019-07-06 16:14\n"
+"Last-Translator: Robert Jansen (Kowlin)\n"
"Language-Team: LOLCAT\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"Generated-By: redgettext 2.2\n"
+"Generated-By: redgettext 3.0\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: crowdin.com\n"
"X-Crowdin-Project: red-discordbot\n"
@@ -16,971 +16,1275 @@ msgstr ""
"X-Crowdin-File: /cogs/audio/locales/messages.pot\n"
"Language: lol_US\n"
-#: redbot/cogs/audio/audio.py:38
+#: redbot/cogs/audio/audio.py:47
#, docstring
msgid "Play audio through voice channels."
msgstr ""
-#: redbot/cogs/audio/audio.py:173 redbot/cogs/audio/audio.py:735
-msgid "Now Playing"
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:177
-msgid "Track length: {length} | Requested by: {user}"
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:201 redbot/cogs/audio/audio.py:227
+#: redbot/cogs/audio/audio.py:260
msgid "music in {} servers"
msgstr ""
-#: redbot/cogs/audio/audio.py:211
+#: redbot/cogs/audio/audio.py:300 redbot/cogs/audio/audio.py:1317
+msgid "Now Playing"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:304
+msgid "Track length: {length} | Requested by: {user}"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:331
msgid "Queue ended."
msgstr ""
-#: redbot/cogs/audio/audio.py:240
+#: redbot/cogs/audio/audio.py:350
msgid "Track Error"
msgstr ""
-#: redbot/cogs/audio/audio.py:245
+#: redbot/cogs/audio/audio.py:355
msgid "Skipping..."
msgstr ""
-#: redbot/cogs/audio/audio.py:252
+#: redbot/cogs/audio/audio.py:363
#, docstring
msgid "Music configuration options."
msgstr ""
-#: redbot/cogs/audio/audio.py:258
+#: redbot/cogs/audio/audio.py:369
#, docstring
-msgid "Toggle DJ mode.\n\n"
-" DJ mode allows users with the DJ role to use audio commands.\n"
-" "
+msgid "Toggle the bot auto-disconnecting when done playing.\\n\\n This setting takes precedence over [p]audioset emptydisconnect.\\n "
msgstr ""
-#: redbot/cogs/audio/audio.py:265
+#: redbot/cogs/audio/audio.py:377
+msgid "Auto-disconnection at queue end: {true_or_false}."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:385
+#, docstring
+msgid "Toggle DJ mode.\\n\\n DJ mode allows users with the DJ role to use audio commands.\\n "
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:392
msgid "Please set a role to use with DJ mode. Enter the role name or ID now."
msgstr ""
-#: redbot/cogs/audio/audio.py:273
+#: redbot/cogs/audio/audio.py:400
msgid "Response timed out, try again later."
msgstr ""
-#: redbot/cogs/audio/audio.py:284
+#: redbot/cogs/audio/audio.py:405
+msgid "DJ role enabled: {true_or_false}."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:411
#, docstring
msgid "Auto-disconnection after x seconds while stopped. 0 to disable."
msgstr ""
-#: redbot/cogs/audio/audio.py:286 redbot/cogs/audio/audio.py:317
-#: redbot/cogs/audio/audio.py:405
+#: redbot/cogs/audio/audio.py:413 redbot/cogs/audio/audio.py:436
+#: redbot/cogs/audio/audio.py:543 redbot/cogs/audio/audio.py:687
msgid "Can't be less than zero."
msgstr ""
-#: redbot/cogs/audio/audio.py:291
+#: redbot/cogs/audio/audio.py:418
msgid "Empty disconnect disabled."
msgstr ""
-#: redbot/cogs/audio/audio.py:296
+#: redbot/cogs/audio/audio.py:423
msgid "Empty disconnect timer set to {num_seconds}."
msgstr ""
-#: redbot/cogs/audio/audio.py:307
-#, docstring
-msgid "Set the role to use for DJ mode."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:310
-msgid "DJ role set to: {role.name}."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:315
+#: redbot/cogs/audio/audio.py:434
#, docstring
msgid "Set a price for queueing tracks for non-mods. 0 to disable."
msgstr ""
-#: redbot/cogs/audio/audio.py:320
+#: redbot/cogs/audio/audio.py:439
msgid "Jukebox mode disabled."
msgstr ""
-#: redbot/cogs/audio/audio.py:325
+#: redbot/cogs/audio/audio.py:444
msgid "Track queueing command price set to {price} {currency}."
msgstr ""
-#: redbot/cogs/audio/audio.py:336
+#: redbot/cogs/audio/audio.py:455
+#, docstring
+msgid "Set the localtracks path if the Lavalink.jar is not run from the Audio data folder.\\n\\n Leave the path blank to reset the path to the default, the Audio data directory.\\n "
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:463
+msgid "The localtracks path location has been reset to the default location."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:466
+msgid "This setting is only for bot owners to set a localtracks folder location if the Lavalink.jar is being ran from outside of the Audio data directory.\\nIn the example below, the full path for 'ParentDirectory' must be passed to this command.\\nThe path must not contain spaces.\\n```\\nParentDirectory\\n |__ localtracks (folder)\\n | |__ Awesome Album Name (folder)\\n | |__01 Cool Song.mp3\\n | |__02 Groovy Song.mp3\\n |\\n |__ Lavalink.jar\\n |__ application.yml\\n```\\nThe folder path given to this command must contain the Lavalink.jar, the application.yml, and the localtracks folder.\\nUse this command with no path given to reset it to the default, the Audio data directory for this bot.\\nDo you want to continue to set the provided path for local tracks?"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:505
+msgid "{local_path} does not seem like a valid path."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:520
+msgid "The path that was entered does not have {filelist} file in that location. The path will still be saved, but please check the path and the file location before attempting to play local tracks or start your Lavalink.jar."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:530
+msgid "Localtracks path set to: {local_path}."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:536
+#, docstring
+msgid "Max length of a track to queue in seconds. 0 to disable.\\n\\n Accepts seconds or a value formatted like 00:00:00 (`hh:mm:ss`) or 00:00 (`mm:ss`).\\n Invalid input will turn the max length setting off."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:545
+msgid "Track max length disabled."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:549
+msgid "Track max length set to {seconds}."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:559
#, docstring
msgid "Toggle track announcement and other bot messages."
msgstr ""
-#: redbot/cogs/audio/audio.py:340
+#: redbot/cogs/audio/audio.py:563
msgid "Verbose mode on: {true_or_false}."
msgstr ""
-#: redbot/cogs/audio/audio.py:345
+#: redbot/cogs/audio/audio.py:569
+#, docstring
+msgid "Toggle the domain restriction on Audio.\\n\\n When toggled off, users will be able to play songs from non-commercial websites and links.\\n When toggled on, users are restricted to YouTube, SoundCloud, Mixer, Vimeo, Twitch, and Bandcamp links."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:576
+msgid "Commercial links only: {true_or_false}."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:582
+#, docstring
+msgid "Set the role to use for DJ mode."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:585
+msgid "DJ role set to: {role.name}."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:589
#, docstring
msgid "Show the current settings."
msgstr ""
-#: redbot/cogs/audio/audio.py:358
+#: redbot/cogs/audio/audio.py:604
msgid "Server Settings"
msgstr ""
-#: redbot/cogs/audio/audio.py:360
-msgid "Disconnect timer: [{num_seconds}]\n"
+#: redbot/cogs/audio/audio.py:606
+msgid "Auto-disconnect: [{dc}]\\n"
msgstr ""
-#: redbot/cogs/audio/audio.py:364
-msgid "DJ Role: [{role.name}]\n"
+#: redbot/cogs/audio/audio.py:609
+msgid "Disconnect timer: [{num_seconds}]\\n"
msgstr ""
-#: redbot/cogs/audio/audio.py:366
-msgid "Jukebox: [{jukebox_name}]\n"
+#: redbot/cogs/audio/audio.py:613
+msgid "DJ Role: [{role.name}]\\n"
msgstr ""
-#: redbot/cogs/audio/audio.py:367
-msgid "Command price: [{jukebox_price}]\n"
+#: redbot/cogs/audio/audio.py:615
+msgid "Jukebox: [{jukebox_name}]\\n"
msgstr ""
-#: redbot/cogs/audio/audio.py:368
-msgid "Repeat: [{repeat}]\n"
-"Shuffle: [{shuffle}]\n"
-"Song notify msgs: [{notify}]\n"
-"Songs as status: [{status}]\n"
+#: redbot/cogs/audio/audio.py:616
+msgid "Command price: [{jukebox_price}]\\n"
msgstr ""
-#: redbot/cogs/audio/audio.py:375
-msgid "Thumbnails: [{0}]\n"
+#: redbot/cogs/audio/audio.py:618
+msgid "Max track length: [{tracklength}]\\n"
msgstr ""
-#: redbot/cogs/audio/audio.py:377
-msgid "Vote skip: [{vote_enabled}]\n"
-"Skip percentage: [{vote_percent}%]\n"
+#: redbot/cogs/audio/audio.py:621
+msgid "Repeat: [{repeat}]\\nShuffle: [{shuffle}]\\nSong notify msgs: [{notify}]\\nSongs as status: [{status}]\\n"
msgstr ""
-#: redbot/cogs/audio/audio.py:380
-msgid "---Lavalink Settings---\n"
-"Cog version: [{version}]\n"
-"Jar build: [{jarbuild}]\n"
-"External server: [{use_external_lavalink}]"
+#: redbot/cogs/audio/audio.py:628
+msgid "Thumbnails: [{0}]\\n"
msgstr ""
-#: redbot/cogs/audio/audio.py:393
+#: redbot/cogs/audio/audio.py:630
+msgid "Vote skip: [{vote_enabled}]\\nSkip percentage: [{vote_percent}%]\\n"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:633
+msgid "---Lavalink Settings--- \\nCog version: [{version}]\\nJar build: [{jarbuild}]\\nExternal server: [{use_external_lavalink}]\\n"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:640
+msgid "Localtracks path: [{localpath}]\\n"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:648
#, docstring
-msgid "Toggle displaying a thumbnail on audio messages."
+msgid "Instructions to set the Spotify API tokens."
msgstr ""
-#: redbot/cogs/audio/audio.py:397
-msgid "Thumbnail display: {true_or_false}."
+#: redbot/cogs/audio/audio.py:649
+msgid "1. Go to Spotify developers and log in with your Spotify account.\\n(https://developer.spotify.com/dashboard/applications)\\n2. Click \\\"Create An App\\\".\\n3. Fill out the form provided with your app name, etc.\\n4. When asked if you're developing commercial integration select \\\"No\\\".\\n5. Accept the terms and conditions.\\n6. Copy your client ID and your client secret into:\\n`{prefix}set api spotify client_id, client_secret,`"
msgstr ""
-#: redbot/cogs/audio/audio.py:403
-#, docstring
-msgid "Percentage needed for non-mods to skip tracks. 0 to disable."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:411
-msgid "Voting disabled. All users can use queue management commands."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:416
-msgid "Vote percentage set to {percent}%."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:425
+#: redbot/cogs/audio/audio.py:665
#, docstring
msgid "Enable/disable tracks' titles as status."
msgstr ""
-#: redbot/cogs/audio/audio.py:429
+#: redbot/cogs/audio/audio.py:669
msgid "Song titles as status: {true_or_false}."
msgstr ""
-#: redbot/cogs/audio/audio.py:435
+#: redbot/cogs/audio/audio.py:675
+#, docstring
+msgid "Toggle displaying a thumbnail on audio messages."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:679
+msgid "Thumbnail display: {true_or_false}."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:685
+#, docstring
+msgid "Percentage needed for non-mods to skip tracks. 0 to disable."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:693
+msgid "Voting disabled. All users can use queue management commands."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:698
+msgid "Vote percentage set to {percent}%."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:707
+#, docstring
+msgid "Instructions to set the YouTube API key."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:726
#, docstring
msgid "Audio stats."
msgstr ""
-#: redbot/cogs/audio/audio.py:469 redbot/cogs/audio/audio.py:489
-#: redbot/cogs/audio/audio.py:698 redbot/cogs/audio/audio.py:788
-#: redbot/cogs/audio/audio.py:804 redbot/cogs/audio/audio.py:829
-#: redbot/cogs/audio/audio.py:836 redbot/cogs/audio/audio.py:1179
-#: redbot/cogs/audio/audio.py:1466 redbot/cogs/audio/audio.py:1724
-#: redbot/cogs/audio/audio.py:2026 redbot/cogs/audio/audio.py:2063
-#: redbot/cogs/audio/audio.py:2109 redbot/cogs/audio/audio.py:2265
-#: redbot/cogs/audio/audio.py:2304 redbot/cogs/audio/audio.py:2334
+#: redbot/cogs/audio/audio.py:754 redbot/cogs/audio/audio.py:782
+#: redbot/cogs/audio/audio.py:819 redbot/cogs/audio/audio.py:847
+#: redbot/cogs/audio/audio.py:914 redbot/cogs/audio/audio.py:932
+#: redbot/cogs/audio/audio.py:956 redbot/cogs/audio/audio.py:1026
+#: redbot/cogs/audio/audio.py:1280 redbot/cogs/audio/audio.py:1371
+#: redbot/cogs/audio/audio.py:1388 redbot/cogs/audio/audio.py:1411
+#: redbot/cogs/audio/audio.py:1419 redbot/cogs/audio/audio.py:2190
+#: redbot/cogs/audio/audio.py:2527 redbot/cogs/audio/audio.py:2860
+#: redbot/cogs/audio/audio.py:3201 redbot/cogs/audio/audio.py:3255
+#: redbot/cogs/audio/audio.py:3305 redbot/cogs/audio/audio.py:3497
+#: redbot/cogs/audio/audio.py:3575 redbot/cogs/audio/audio.py:3605
msgid "Nothing playing."
msgstr ""
-#: redbot/cogs/audio/audio.py:473
+#: redbot/cogs/audio/audio.py:758
msgid "Not connected anywhere."
msgstr ""
-#: redbot/cogs/audio/audio.py:478
-msgid "Connected in {num} servers:"
+#: redbot/cogs/audio/audio.py:764
+msgid "Playing in {num}/{total} servers:"
msgstr ""
-#: redbot/cogs/audio/audio.py:486
+#: redbot/cogs/audio/audio.py:779
#, docstring
msgid "Bump a track number to the top of the queue."
msgstr ""
-#: redbot/cogs/audio/audio.py:495
+#: redbot/cogs/audio/audio.py:788
msgid "You must be in the voice channel to bump a track."
msgstr ""
-#: redbot/cogs/audio/audio.py:499
+#: redbot/cogs/audio/audio.py:792
msgid "You need the DJ role to bump tracks."
msgstr ""
-#: redbot/cogs/audio/audio.py:502 redbot/cogs/audio/audio.py:1739
+#: redbot/cogs/audio/audio.py:795 redbot/cogs/audio/audio.py:2875
msgid "Song number must be greater than 1 and within the queue limit."
msgstr ""
-#: redbot/cogs/audio/audio.py:517
+#: redbot/cogs/audio/audio.py:810
msgid "Moved {track} to the top of the queue."
msgstr ""
-#: redbot/cogs/audio/audio.py:523
+#: redbot/cogs/audio/audio.py:817
#, docstring
msgid "Disconnect from the voice channel."
msgstr ""
-#: redbot/cogs/audio/audio.py:528
+#: redbot/cogs/audio/audio.py:826
msgid "You need the DJ role to disconnect."
msgstr ""
-#: redbot/cogs/audio/audio.py:532
+#: redbot/cogs/audio/audio.py:830
msgid "There are other people listening to music."
msgstr ""
-#: redbot/cogs/audio/audio.py:540
+#: redbot/cogs/audio/audio.py:845
+#, docstring
+msgid "Equalizer management."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:865
+#, docstring
+msgid "Delete a saved eq preset."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:887
+#, docstring
+msgid "List saved eq presets."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:890
+msgid "No saved equalizer presets."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:897
+msgid "{num} preset(s)"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:903
+#, docstring
+msgid "Load a saved eq preset."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:930
+#, docstring
+msgid "Reset the eq to 0 across all bands."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:946
+msgid "Equalizer values have been reset."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:954
+#, docstring
+msgid "Save the current eq settings to a preset."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:958
+msgid "Please enter a name for this equalizer preset."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:972
+msgid "No equalizer preset name entered, try the command again later."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:981 redbot/cogs/audio/audio.py:2213
+msgid "Try the command again with a shorter name."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:985
+msgid "Preset name already exists, do you want to replace it?"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:994
+msgid "Not saving preset."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1019
+#, docstring
+msgid "Set an eq band with a band number or name and value.\\n\\n Band positions are 1-15 and values have a range of -0.25 to 1.0.\\n Band names are 25, 40, 63, 100, 160, 250, 400, 630, 1k, 1.6k, 2.5k, 4k, 6.3k, 10k, and 16k Hz.\\n Setting a band value to -0.25 nullifies it while +0.25 is double.\\n "
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1063
+msgid "Valid band numbers are 1-15 or the band names listed in the help for this command."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1099
#, docstring
msgid "Local playback commands."
msgstr ""
-#: redbot/cogs/audio/audio.py:545
+#: redbot/cogs/audio/audio.py:1104
#, docstring
msgid "Play all songs in a localtracks folder."
msgstr ""
-#: redbot/cogs/audio/audio.py:552
+#: redbot/cogs/audio/audio.py:1115
+msgid "No localtracks folder named {name}."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1121
#, docstring
msgid "Play a local track."
msgstr ""
-#: redbot/cogs/audio/audio.py:557
+#: redbot/cogs/audio/audio.py:1126
msgid "No local track folders found."
msgstr ""
-#: redbot/cogs/audio/audio.py:600
+#: redbot/cogs/audio/audio.py:1169
#, docstring
msgid "Search for songs across all localtracks folders."
msgstr ""
-#: redbot/cogs/audio/audio.py:605
+#: redbot/cogs/audio/audio.py:1174
msgid "No album folders found."
msgstr ""
-#: redbot/cogs/audio/audio.py:612 redbot/cogs/audio/audio.py:1634
+#: redbot/cogs/audio/audio.py:1181 redbot/cogs/audio/audio.py:2816
msgid "No matches."
msgstr ""
-#: redbot/cogs/audio/audio.py:688
+#: redbot/cogs/audio/audio.py:1269
msgid "No localtracks folder."
msgstr ""
-#: redbot/cogs/audio/audio.py:696
+#: redbot/cogs/audio/audio.py:1278
#, docstring
msgid "Now playing."
msgstr ""
-#: redbot/cogs/audio/audio.py:716
+#: redbot/cogs/audio/audio.py:1298
msgid "Requested by: **{track.requester}**"
msgstr ""
-#: redbot/cogs/audio/audio.py:726
+#: redbot/cogs/audio/audio.py:1308
msgid "Nothing."
msgstr ""
-#: redbot/cogs/audio/audio.py:785
+#: redbot/cogs/audio/audio.py:1368
#, docstring
-msgid "Pause and resume."
+msgid "Pause or resume a playing track."
msgstr ""
-#: redbot/cogs/audio/audio.py:794
-msgid "You must be in the voice channel to pause the music."
+#: redbot/cogs/audio/audio.py:1377
+msgid "You must be in the voice channel pause or resume."
msgstr ""
-#: redbot/cogs/audio/audio.py:800
-msgid "You need the DJ role to pause tracks."
+#: redbot/cogs/audio/audio.py:1384
+msgid "You need the DJ role to pause or resume tracks."
msgstr ""
-#: redbot/cogs/audio/audio.py:814
+#: redbot/cogs/audio/audio.py:1401
msgid "Track Paused"
msgstr ""
-#: redbot/cogs/audio/audio.py:821
+#: redbot/cogs/audio/audio.py:1407
msgid "Track Resumed"
msgstr ""
-#: redbot/cogs/audio/audio.py:826
-msgid "Track is paused."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:828
-msgid "Track is playing."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:834
+#: redbot/cogs/audio/audio.py:1417
#, docstring
msgid "Queue percentage."
msgstr ""
-#: redbot/cogs/audio/audio.py:860
+#: redbot/cogs/audio/audio.py:1443
msgid "Nothing in the queue."
msgstr ""
-#: redbot/cogs/audio/audio.py:882
+#: redbot/cogs/audio/audio.py:1465
msgid "Queued and playing tracks:"
msgstr ""
-#: redbot/cogs/audio/audio.py:890
+#: redbot/cogs/audio/audio.py:1474
#, docstring
msgid "Play a URL or search for a track."
msgstr ""
-#: redbot/cogs/audio/audio.py:900 redbot/cogs/audio/audio.py:1411
-#: redbot/cogs/audio/audio.py:1795
+#: redbot/cogs/audio/audio.py:1481
+msgid "That URL is not allowed."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1484 redbot/cogs/audio/audio.py:2437
+#: redbot/cogs/audio/audio.py:2928 redbot/cogs/audio/audio.py:3047
+msgid "Connection to Lavalink has failed."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1486 redbot/cogs/audio/audio.py:2439
+#: redbot/cogs/audio/audio.py:2930 redbot/cogs/audio/audio.py:3049
+msgid "Please check your console or logs for details."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1495 redbot/cogs/audio/audio.py:2449
+#: redbot/cogs/audio/audio.py:2939 redbot/cogs/audio/audio.py:3543
msgid "I don't have permission to connect to your channel."
msgstr ""
-#: redbot/cogs/audio/audio.py:906 redbot/cogs/audio/audio.py:1422
-#: redbot/cogs/audio/audio.py:1801 redbot/cogs/audio/audio.py:1889
+#: redbot/cogs/audio/audio.py:1501 redbot/cogs/audio/audio.py:2461
+#: redbot/cogs/audio/audio.py:2945 redbot/cogs/audio/audio.py:3056
+#: redbot/cogs/audio/audio.py:3555
msgid "Connect to a voice channel first."
msgstr ""
-#: redbot/cogs/audio/audio.py:909 redbot/cogs/audio/audio.py:1418
-#: redbot/cogs/audio/audio.py:1804 redbot/cogs/audio/audio.py:1892
+#: redbot/cogs/audio/audio.py:1504 redbot/cogs/audio/audio.py:2457
+#: redbot/cogs/audio/audio.py:2948 redbot/cogs/audio/audio.py:3059
+#: redbot/cogs/audio/audio.py:3558
msgid "Connection to Lavalink has not yet been established."
msgstr ""
-#: redbot/cogs/audio/audio.py:913
+#: redbot/cogs/audio/audio.py:1508
msgid "You need the DJ role to queue tracks."
msgstr ""
-#: redbot/cogs/audio/audio.py:922
+#: redbot/cogs/audio/audio.py:1519
msgid "You must be in the voice channel to use the play command."
msgstr ""
-#: redbot/cogs/audio/audio.py:928
+#: redbot/cogs/audio/audio.py:1525
msgid "No tracks to play."
msgstr ""
-#: redbot/cogs/audio/audio.py:942 redbot/cogs/audio/audio.py:1450
-#: redbot/cogs/audio/audio.py:1828 redbot/cogs/audio/audio.py:1865
+#: redbot/cogs/audio/audio.py:1565
+msgid "The owner needs to set the Spotify client ID, Spotify client secret, and YouTube API key before Spotify URLs or codes can be used. \\nSee `{prefix}audioset youtubeapi` and `{prefix}audioset spotifyapi` for instructions."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1575 redbot/cogs/audio/audio.py:2493
+msgid "Wait until the playlist has finished loading."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1592 redbot/cogs/audio/audio.py:1657
+#: redbot/cogs/audio/audio.py:2499 redbot/cogs/audio/audio.py:2509
+#: redbot/cogs/audio/audio.py:2973 redbot/cogs/audio/audio.py:3027
msgid "Nothing found."
msgstr ""
-#: redbot/cogs/audio/audio.py:953 redbot/cogs/audio/audio.py:1295
+#: redbot/cogs/audio/audio.py:1600
+msgid "The Spotify API key or client secret has not been set properly. \\nUse `{prefix}audioset spotifyapi` for instructions."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1639 redbot/cogs/audio/audio.py:1776
+msgid "This doesn't seem to be a valid Spotify URL or code."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1688 redbot/cogs/audio/audio.py:2320
msgid "Playlist Enqueued"
msgstr ""
-#: redbot/cogs/audio/audio.py:954 redbot/cogs/audio/audio.py:1296
-msgid "Added {num} tracks to the queue."
+#: redbot/cogs/audio/audio.py:1689 redbot/cogs/audio/audio.py:2321
+msgid "Added {num} tracks to the queue.{maxlength_msg}"
msgstr ""
-#: redbot/cogs/audio/audio.py:958
+#: redbot/cogs/audio/audio.py:1695
msgid "{time} until start of playlist playback: starts at #{position} in queue"
msgstr ""
-#: redbot/cogs/audio/audio.py:980 redbot/cogs/audio/audio.py:1938
+#: redbot/cogs/audio/audio.py:1711 redbot/cogs/audio/audio.py:3125
+msgid "Track exceeds maximum length."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1717
+msgid "Nothing found. Check your Lavalink logs for details."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1732 redbot/cogs/audio/audio.py:3108
msgid "Track Enqueued"
msgstr ""
-#: redbot/cogs/audio/audio.py:984 redbot/cogs/audio/audio.py:1944
+#: redbot/cogs/audio/audio.py:1736 redbot/cogs/audio/audio.py:3114
msgid "{time} until track playback: #{position} in queue"
msgstr ""
-#: redbot/cogs/audio/audio.py:989 redbot/cogs/audio/audio.py:1949
+#: redbot/cogs/audio/audio.py:1741 redbot/cogs/audio/audio.py:3119
msgid "#{position} in queue"
msgstr ""
-#: redbot/cogs/audio/audio.py:997
+#: redbot/cogs/audio/audio.py:1761
+msgid "The Spotify API key or client secret has not been set properly. \\nUse `{prefix}audioset spotifyapi` for instructions."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1793 redbot/cogs/audio/audio.py:2384
+msgid "Please wait, adding tracks..."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1809
+msgid "The connection was reset while loading the playlist."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1826 redbot/cogs/audio/audio.py:2401
+msgid "Loading track {num}/{total}..."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1840
+msgid "Approximate time remaining: {seconds}"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1850
+msgid "Nothing found.\\nThe YouTube API key may be invalid or you may be rate limited on YouTube's search service.\\nCheck the YouTube API key again and follow the instructions at `{prefix}audioset youtubeapi`."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1871
#, docstring
msgid "Playlist configuration options."
msgstr ""
-#: redbot/cogs/audio/audio.py:1002
+#: redbot/cogs/audio/audio.py:1876
#, docstring
-msgid "Add a track URL, playlist link, or quick search to a playlist.\n\n"
-" The track(s) will be appended to the end of the playlist.\n"
-" "
+msgid "Add a track URL, playlist link, or quick search to a playlist.\\n\\n The track(s) will be appended to the end of the playlist.\\n "
msgstr ""
-#: redbot/cogs/audio/audio.py:1014 redbot/cogs/audio/audio.py:1078
-#: redbot/cogs/audio/audio.py:1228
+#: redbot/cogs/audio/audio.py:1888 redbot/cogs/audio/audio.py:2028
+#: redbot/cogs/audio/audio.py:2241
msgid "You are not the author of that playlist."
msgstr ""
-#: redbot/cogs/audio/audio.py:1024
+#: redbot/cogs/audio/audio.py:1898
msgid "{track} is already in {playlist}."
msgstr ""
-#: redbot/cogs/audio/audio.py:1033 redbot/cogs/audio/audio.py:1082
-#: redbot/cogs/audio/audio.py:1092 redbot/cogs/audio/audio.py:1231
+#: redbot/cogs/audio/audio.py:1907 redbot/cogs/audio/audio.py:2032
+#: redbot/cogs/audio/audio.py:2081 redbot/cogs/audio/audio.py:2244
msgid "No playlist with that name."
msgstr ""
-#: redbot/cogs/audio/audio.py:1040
+#: redbot/cogs/audio/audio.py:1914
msgid "{track} appended to {playlist}."
msgstr ""
-#: redbot/cogs/audio/audio.py:1046
+#: redbot/cogs/audio/audio.py:1920
msgid "{num} tracks appended to {playlist}."
msgstr ""
-#: redbot/cogs/audio/audio.py:1053
+#: redbot/cogs/audio/audio.py:1928
+#, docstring
+msgid "Copy a playlist from one server to another."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1932
+msgid "Invalid server ID for source server."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1934
+msgid "Invalid server ID for target server."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1939
+msgid "No playlist with that name in {from_guild_name}."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1950
+msgid "Playlist {name} copied from {from_guild_name} to {to_guild_name}."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1962
+msgid "A playlist with that name already exists in {to_guild_name}.\\nPlease enter a new name for this playlist."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1975
+msgid "Try the playlist copy command again with a shorter name."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1980
+msgid "Playlist name already exists in {to_guild_name}, try the playlist copy command again with a different name."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1986 redbot/cogs/audio/audio.py:2220
+msgid "No playlist name entered, try again later."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1991
+msgid "Playlist {name} copied from {from_guild_name} to {to_guild_name}.\\nNew playlist name on {to_guild_name}: {new_name}"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2003
#, docstring
msgid "Create an empty playlist."
msgstr ""
-#: redbot/cogs/audio/audio.py:1057 redbot/cogs/audio/audio.py:1172
+#: redbot/cogs/audio/audio.py:2007 redbot/cogs/audio/audio.py:2183
msgid "You need the DJ role to save playlists."
msgstr ""
-#: redbot/cogs/audio/audio.py:1061 redbot/cogs/audio/audio.py:1176
-#: redbot/cogs/audio/audio.py:1204
+#: redbot/cogs/audio/audio.py:2011 redbot/cogs/audio/audio.py:2187
+#: redbot/cogs/audio/audio.py:2217
msgid "Playlist name already exists, try again with a different name."
msgstr ""
-#: redbot/cogs/audio/audio.py:1067
+#: redbot/cogs/audio/audio.py:2017
msgid "Empty playlist {name} created."
msgstr ""
-#: redbot/cogs/audio/audio.py:1071
+#: redbot/cogs/audio/audio.py:2021
#, docstring
msgid "Delete a saved playlist."
msgstr ""
-#: redbot/cogs/audio/audio.py:1083
+#: redbot/cogs/audio/audio.py:2033
msgid "{name} playlist deleted."
msgstr ""
-#: redbot/cogs/audio/audio.py:1087
+#: redbot/cogs/audio/audio.py:2039
+#, docstring
+msgid "Download a copy of a playlist.\\n\\n These files can be used with the [p]playlist upload command.\\n Red v2-compatible playlists can be generated by passing True\\n for the v2 variable."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2061
+msgid "That playlist has no tracks."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2063 redbot/cogs/audio/audio.py:2331
+msgid "That playlist doesn't exist."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2076
#, docstring
msgid "Retrieve information from a saved playlist."
msgstr ""
-#: redbot/cogs/audio/audio.py:1100
-msgid "**Custom playlist.**"
+#: redbot/cogs/audio/audio.py:2101
+msgid "Playlist info for {playlist_name}:\\n"
msgstr ""
-#: redbot/cogs/audio/audio.py:1102
-msgid "URL: <{url}>"
+#: redbot/cogs/audio/audio.py:2105
+msgid "Playlist info for {playlist_name}:\\nURL: {url}"
msgstr ""
-#: redbot/cogs/audio/audio.py:1105
-msgid "Playlist info for {playlist_name}:"
+#: redbot/cogs/audio/audio.py:2116
+msgid "Author: {author_name} | {num} track(s)"
msgstr ""
-#: redbot/cogs/audio/audio.py:1106
-msgid "Author: **{author_name}**\n"
-"{url}"
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:1110
-msgid "{num} track(s)"
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:1115
+#: redbot/cogs/audio/audio.py:2126
#, docstring
msgid "List saved playlists."
msgstr ""
-#: redbot/cogs/audio/audio.py:1118
+#: redbot/cogs/audio/audio.py:2129
msgid "No saved playlists."
msgstr ""
-#: redbot/cogs/audio/audio.py:1130
+#: redbot/cogs/audio/audio.py:2141
msgid "Tracks: {num}"
msgstr ""
-#: redbot/cogs/audio/audio.py:1131
-msgid "Author: {name}\n"
+#: redbot/cogs/audio/audio.py:2142
+msgid "Author: {name}\\n"
msgstr ""
-#: redbot/cogs/audio/audio.py:1155
+#: redbot/cogs/audio/audio.py:2166
msgid "Playlists for {server_name}:"
msgstr ""
-#: redbot/cogs/audio/audio.py:1159
+#: redbot/cogs/audio/audio.py:2170
msgid "Page {page_num}/{total_pages} | {num} playlists"
msgstr ""
-#: redbot/cogs/audio/audio.py:1168
+#: redbot/cogs/audio/audio.py:2179
#, docstring
msgid "Save the queue to a playlist."
msgstr ""
-#: redbot/cogs/audio/audio.py:1189
+#: redbot/cogs/audio/audio.py:2193 redbot/cogs/audio/audio.py:2590
+#: redbot/cogs/audio/audio.py:2593 redbot/cogs/audio/audio.py:2613
+#: redbot/cogs/audio/audio.py:2756 redbot/cogs/audio/audio.py:2759
+#: redbot/cogs/audio/audio.py:2775 redbot/cogs/audio/audio.py:2778
+#: redbot/cogs/audio/audio.py:2810 redbot/cogs/audio/audio.py:2812
+#: redbot/cogs/audio/audio.py:3418 redbot/cogs/audio/audio.py:3422
+#: redbot/cogs/audio/audio.py:3429
+msgid "There's nothing in the queue."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2202
msgid "Please enter a name for this playlist."
msgstr ""
-#: redbot/cogs/audio/audio.py:1200
-msgid "Try the command again with a shorter name."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:1207
-msgid "No playlist name entered, try again later."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:1214
+#: redbot/cogs/audio/audio.py:2227
msgid "Playlist {name} saved from current queue: {num} tracks added."
msgstr ""
-#: redbot/cogs/audio/audio.py:1221
+#: redbot/cogs/audio/audio.py:2234
#, docstring
msgid "Remove a track from a playlist by url."
msgstr ""
-#: redbot/cogs/audio/audio.py:1235
+#: redbot/cogs/audio/audio.py:2248
msgid "URL not in playlist."
msgstr ""
-#: redbot/cogs/audio/audio.py:1239
+#: redbot/cogs/audio/audio.py:2252
msgid "No tracks left, removing playlist."
msgstr ""
-#: redbot/cogs/audio/audio.py:1246
+#: redbot/cogs/audio/audio.py:2259
msgid "{num} entries have been removed from the {playlist_name} playlist."
msgstr ""
-#: redbot/cogs/audio/audio.py:1253
+#: redbot/cogs/audio/audio.py:2266
msgid "The track has been removed from the {playlist_name} playlist."
msgstr ""
-#: redbot/cogs/audio/audio.py:1260
+#: redbot/cogs/audio/audio.py:2273
#, docstring
msgid "Save a playlist from a url."
msgstr ""
-#: redbot/cogs/audio/audio.py:1272
+#: redbot/cogs/audio/audio.py:2285
msgid "Playlist {name} saved: {num} tracks added."
msgstr ""
-#: redbot/cogs/audio/audio.py:1279
+#: redbot/cogs/audio/audio.py:2292
#, docstring
msgid "Load a playlist into the queue."
msgstr ""
-#: redbot/cogs/audio/audio.py:1304
-msgid "That playlist doesn't exist."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:1309
+#: redbot/cogs/audio/audio.py:2336
#, docstring
msgid "Convert a Red v2 playlist file to a playlist."
msgstr ""
-#: redbot/cogs/audio/audio.py:1315
+#: redbot/cogs/audio/audio.py:2342
msgid "Please upload the playlist file. Any other message will cancel this operation."
msgstr ""
-#: redbot/cogs/audio/audio.py:1323
+#: redbot/cogs/audio/audio.py:2350
msgid "No file detected, try again later."
msgstr ""
-#: redbot/cogs/audio/audio.py:1327
+#: redbot/cogs/audio/audio.py:2354
msgid "Upload cancelled."
msgstr ""
-#: redbot/cogs/audio/audio.py:1331
+#: redbot/cogs/audio/audio.py:2358
msgid "Only playlist files can be uploaded."
msgstr ""
-#: redbot/cogs/audio/audio.py:1336
+#: redbot/cogs/audio/audio.py:2363
msgid "Not a valid playlist file."
msgstr ""
-#: redbot/cogs/audio/audio.py:1352
+#: redbot/cogs/audio/audio.py:2379
msgid "A playlist already exists with this name."
msgstr ""
-#: redbot/cogs/audio/audio.py:1357
-msgid "Please wait, adding tracks..."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:1371
-msgid "Loading track {num}/{total}..."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:1377
+#: redbot/cogs/audio/audio.py:2407
msgid "No tracks found."
msgstr ""
-#: redbot/cogs/audio/audio.py:1383
+#: redbot/cogs/audio/audio.py:2413
msgid "Added {num} tracks from the {playlist_name} playlist. {num_bad} track(s) could not be loaded."
msgstr ""
-#: redbot/cogs/audio/audio.py:1388
+#: redbot/cogs/audio/audio.py:2418
msgid "Added {num} tracks from the {playlist_name} playlist."
msgstr ""
-#: redbot/cogs/audio/audio.py:1392
+#: redbot/cogs/audio/audio.py:2422
msgid "Playlist Saved"
msgstr ""
-#: redbot/cogs/audio/audio.py:1403
+#: redbot/cogs/audio/audio.py:2433
msgid "You need the DJ role to use playlists."
msgstr ""
-#: redbot/cogs/audio/audio.py:1432
+#: redbot/cogs/audio/audio.py:2471
msgid "You must be in the voice channel to use the playlist command."
msgstr ""
-#: redbot/cogs/audio/audio.py:1464
+#: redbot/cogs/audio/audio.py:2525
#, docstring
msgid "Skip to the start of the previously played track."
msgstr ""
-#: redbot/cogs/audio/audio.py:1474 redbot/cogs/audio/audio.py:2121
+#: redbot/cogs/audio/audio.py:2535 redbot/cogs/audio/audio.py:3317
msgid "You need the DJ role to skip tracks."
msgstr ""
-#: redbot/cogs/audio/audio.py:1479 redbot/cogs/audio/audio.py:2115
+#: redbot/cogs/audio/audio.py:2540 redbot/cogs/audio/audio.py:3311
msgid "You must be in the voice channel to skip the music."
msgstr ""
-#: redbot/cogs/audio/audio.py:1482
+#: redbot/cogs/audio/audio.py:2543
msgid "Turn shuffle off to use this command."
msgstr ""
-#: redbot/cogs/audio/audio.py:1484
+#: redbot/cogs/audio/audio.py:2545
msgid "No previous track."
msgstr ""
-#: redbot/cogs/audio/audio.py:1501
+#: redbot/cogs/audio/audio.py:2562
msgid "Replaying Track"
msgstr ""
-#: redbot/cogs/audio/audio.py:1509
+#: redbot/cogs/audio/audio.py:2571
#, docstring
-msgid "List the queue.\n\n"
-" Use [p]queue search to search the queue.\n"
-" "
+msgid "List the songs in the queue."
msgstr ""
-#: redbot/cogs/audio/audio.py:1514 redbot/cogs/audio/audio.py:1517
-#: redbot/cogs/audio/audio.py:1544 redbot/cogs/audio/audio.py:2221
-#: redbot/cogs/audio/audio.py:2225 redbot/cogs/audio/audio.py:2232
-msgid "There's nothing in the queue."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:1553
+#: redbot/cogs/audio/audio.py:2622
msgid "**Currently livestreaming:**"
msgstr ""
-#: redbot/cogs/audio/audio.py:1559 redbot/cogs/audio/audio.py:1569
-#: redbot/cogs/audio/audio.py:1575
+#: redbot/cogs/audio/audio.py:2628 redbot/cogs/audio/audio.py:2638
+#: redbot/cogs/audio/audio.py:2644
msgid "Playing: "
msgstr ""
-#: redbot/cogs/audio/audio.py:1562 redbot/cogs/audio/audio.py:1570
-msgid "Requested by: **{user}**\n"
+#: redbot/cogs/audio/audio.py:2631
+msgid "Requested by: **{user}**\\n"
msgstr ""
-#: redbot/cogs/audio/audio.py:1577
+#: redbot/cogs/audio/audio.py:2639
+msgid "Requested by: **{user}**\\n"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2646
msgid "Requested by: **{user}**"
msgstr ""
-#: redbot/cogs/audio/audio.py:1595 redbot/cogs/audio/audio.py:1599
-#: redbot/cogs/audio/audio.py:1604
-msgid "requested by **{user}**\n"
+#: redbot/cogs/audio/audio.py:2664
+msgid "requested by **{user}**\\n"
msgstr ""
-#: redbot/cogs/audio/audio.py:1615
+#: redbot/cogs/audio/audio.py:2668
+msgid "requested by **{user}**\\n"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2673
+msgid "requested by **{user}**\\n"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2684
msgid "Page {page_num}/{total_pages} | {num_tracks} tracks, {num_remaining} remaining"
msgstr ""
-#: redbot/cogs/audio/audio.py:1624
+#: redbot/cogs/audio/audio.py:2693
msgid "Repeat"
msgstr ""
-#: redbot/cogs/audio/audio.py:1626
+#: redbot/cogs/audio/audio.py:2695
msgid "Shuffle"
msgstr ""
-#: redbot/cogs/audio/audio.py:1683
+#: redbot/cogs/audio/audio.py:2740
msgid "Matching Tracks:"
msgstr ""
-#: redbot/cogs/audio/audio.py:1686 redbot/cogs/audio/audio.py:2010
+#: redbot/cogs/audio/audio.py:2743 redbot/cogs/audio/audio.py:3182
msgid "Page {page_num}/{total_pages}"
msgstr ""
-#: redbot/cogs/audio/audio.py:1695
+#: redbot/cogs/audio/audio.py:2752
+#, docstring
+msgid "Clears the queue."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2764
+msgid "You need the DJ role to clear the queue."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2766
+msgid "The queue has been cleared."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2771
+#, docstring
+msgid "Removes songs from the queue if the requester is not in the voice channel."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2783
+msgid "You need the DJ role to clean the queue."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2794
+msgid "Removed 0 tracks."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2798
+msgid "Removed {removed_tracks} tracks queued by members outside of the voice channel."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2806
+#, docstring
+msgid "Search the queue."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2829
#, docstring
msgid "Toggle repeat."
msgstr ""
-#: redbot/cogs/audio/audio.py:1701
+#: redbot/cogs/audio/audio.py:2835
msgid "You need the DJ role to toggle repeat."
msgstr ""
-#: redbot/cogs/audio/audio.py:1712
+#: redbot/cogs/audio/audio.py:2843
msgid "You must be in the voice channel to toggle repeat."
msgstr ""
-#: redbot/cogs/audio/audio.py:1715
+#: redbot/cogs/audio/audio.py:2849
msgid "Repeat tracks: {true_or_false}."
msgstr ""
-#: redbot/cogs/audio/audio.py:1721
+#: redbot/cogs/audio/audio.py:2857
#, docstring
msgid "Remove a specific track number from the queue."
msgstr ""
-#: redbot/cogs/audio/audio.py:1727
+#: redbot/cogs/audio/audio.py:2863
msgid "Nothing queued."
msgstr ""
-#: redbot/cogs/audio/audio.py:1730
+#: redbot/cogs/audio/audio.py:2866
msgid "You need the DJ role to remove tracks."
msgstr ""
-#: redbot/cogs/audio/audio.py:1735
+#: redbot/cogs/audio/audio.py:2871
msgid "You must be in the voice channel to manage the queue."
msgstr ""
-#: redbot/cogs/audio/audio.py:1751
+#: redbot/cogs/audio/audio.py:2887
msgid "Removed {track} from the queue."
msgstr ""
-#: redbot/cogs/audio/audio.py:1757
+#: redbot/cogs/audio/audio.py:2894
#, docstring
-msgid "Pick a track with a search.\n\n"
-" Use `[p]search list ` to queue all tracks found\n"
-" on YouTube. `[p]search sc ` will search SoundCloud\n"
-" instead of YouTube.\n"
-" "
+msgid "Pick a track with a search.\\n\\n Use `[p]search list ` to queue all tracks found\\n on YouTube. `[p]search sc ` will search SoundCloud\\n instead of YouTube.\\n "
msgstr ""
-#: redbot/cogs/audio/audio.py:1814
+#: redbot/cogs/audio/audio.py:2958
msgid "You must be in the voice channel to enqueue tracks."
msgstr ""
-#: redbot/cogs/audio/audio.py:1831
-msgid "Queued {num} track(s)."
+#: redbot/cogs/audio/audio.py:2997
+msgid "Queued {num} track(s).{maxlength_msg}"
msgstr ""
-#: redbot/cogs/audio/audio.py:1837
+#: redbot/cogs/audio/audio.py:3003
msgid "{time} until start of search playback: starts at #{position} in queue"
msgstr ""
-#: redbot/cogs/audio/audio.py:1997
+#: redbot/cogs/audio/audio.py:3169
msgid "Tracks Found:"
msgstr ""
-#: redbot/cogs/audio/audio.py:1998
+#: redbot/cogs/audio/audio.py:3170
msgid "search results"
msgstr ""
-#: redbot/cogs/audio/audio.py:2001
+#: redbot/cogs/audio/audio.py:3173
msgid "Folders Found:"
msgstr ""
-#: redbot/cogs/audio/audio.py:2002
+#: redbot/cogs/audio/audio.py:3174
msgid "local folders"
msgstr ""
-#: redbot/cogs/audio/audio.py:2004
+#: redbot/cogs/audio/audio.py:3176
msgid "Files Found:"
msgstr ""
-#: redbot/cogs/audio/audio.py:2005
+#: redbot/cogs/audio/audio.py:3177
msgid "local tracks"
msgstr ""
-#: redbot/cogs/audio/audio.py:2022
+#: redbot/cogs/audio/audio.py:3195
#, docstring
-msgid "Seek ahead or behind on a track by seconds."
+msgid "Seek ahead or behind on a track by seconds or a to a specific time.\\n\\n Accepts seconds or a value formatted like 00:00:00 (`hh:mm:ss`) or 00:00 (`mm:ss`)."
msgstr ""
-#: redbot/cogs/audio/audio.py:2031
+#: redbot/cogs/audio/audio.py:3206
msgid "You must be in the voice channel to use seek."
msgstr ""
-#: redbot/cogs/audio/audio.py:2036
+#: redbot/cogs/audio/audio.py:3211
msgid "You need the DJ role to use seek."
msgstr ""
-#: redbot/cogs/audio/audio.py:2042 redbot/cogs/audio/audio.py:2278
+#: redbot/cogs/audio/audio.py:3217 redbot/cogs/audio/audio.py:3510
msgid "There are other people listening - vote to skip instead."
msgstr ""
-#: redbot/cogs/audio/audio.py:2046
+#: redbot/cogs/audio/audio.py:3221
msgid "Can't seek on a stream."
msgstr ""
-#: redbot/cogs/audio/audio.py:2052
+#: redbot/cogs/audio/audio.py:3230
+msgid "Invalid input for the time to seek."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:3236
msgid "Moved {num_seconds}s to 00:00:00"
msgstr ""
-#: redbot/cogs/audio/audio.py:2057
+#: redbot/cogs/audio/audio.py:3241
msgid "Moved {num_seconds}s to {time}"
msgstr ""
-#: redbot/cogs/audio/audio.py:2068
+#: redbot/cogs/audio/audio.py:3249
+msgid "Moved to {time}"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:3261
#, docstring
msgid "Toggle shuffle."
msgstr ""
-#: redbot/cogs/audio/audio.py:2072
+#: redbot/cogs/audio/audio.py:3265
msgid "You need the DJ role to toggle shuffle."
msgstr ""
-#: redbot/cogs/audio/audio.py:2083
+#: redbot/cogs/audio/audio.py:3273
msgid "You must be in the voice channel to toggle shuffle."
msgstr ""
-#: redbot/cogs/audio/audio.py:2086
+#: redbot/cogs/audio/audio.py:3279
msgid "Shuffle tracks: {true_or_false}."
msgstr ""
-#: redbot/cogs/audio/audio.py:2092
+#: redbot/cogs/audio/audio.py:3287
#, docstring
-msgid "Make Red sing one of her songs"
+msgid "Make Red sing one of her songs."
msgstr ""
-#: redbot/cogs/audio/audio.py:2107
+#: redbot/cogs/audio/audio.py:3303
#, docstring
-msgid "Skip to the next track."
+msgid "Skip to the next track, or to a given track number."
msgstr ""
-#: redbot/cogs/audio/audio.py:2126
+#: redbot/cogs/audio/audio.py:3322
+msgid "Can't skip to a specific track in vote mode without the DJ role."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:3326
msgid "I removed your vote to skip."
msgstr ""
-#: redbot/cogs/audio/audio.py:2129
+#: redbot/cogs/audio/audio.py:3329
msgid "You voted to skip."
msgstr ""
-#: redbot/cogs/audio/audio.py:2142
+#: redbot/cogs/audio/audio.py:3342
msgid "Vote threshold met."
msgstr ""
-#: redbot/cogs/audio/audio.py:2145
+#: redbot/cogs/audio/audio.py:3345
msgid " Votes: {num_votes}/{num_members} ({cur_percent}% out of {required_percent}% needed)"
msgstr ""
-#: redbot/cogs/audio/audio.py:2228
+#: redbot/cogs/audio/audio.py:3425
msgid "Currently livestreaming {track}"
msgstr ""
-#: redbot/cogs/audio/audio.py:2235
+#: redbot/cogs/audio/audio.py:3432
msgid "{time} left on {track}"
msgstr ""
-#: redbot/cogs/audio/audio.py:2253
+#: redbot/cogs/audio/audio.py:3441
+msgid "Track number must be equal to or greater than 1."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:3454
+msgid "Can't skip to a track while shuffle is enabled."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:3470
msgid "Track Skipped"
msgstr ""
-#: redbot/cogs/audio/audio.py:2261
+#: redbot/cogs/audio/audio.py:3493
#, docstring
msgid "Stop playback and clear the queue."
msgstr ""
-#: redbot/cogs/audio/audio.py:2271
+#: redbot/cogs/audio/audio.py:3503
msgid "You must be in the voice channel to stop the music."
msgstr ""
-#: redbot/cogs/audio/audio.py:2282
+#: redbot/cogs/audio/audio.py:3514
msgid "You need the DJ role to stop the music."
msgstr ""
-#: redbot/cogs/audio/audio.py:2284
+#: redbot/cogs/audio/audio.py:3516
msgid "Stopping..."
msgstr ""
-#: redbot/cogs/audio/audio.py:2294
+#: redbot/cogs/audio/audio.py:3531
+#, docstring
+msgid "Summon the bot to a voice channel."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:3535
+msgid "You need the DJ role to summon the bot."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:3565
#, docstring
msgid "Set the volume, 1% - 150%."
msgstr ""
-#: redbot/cogs/audio/audio.py:2300
+#: redbot/cogs/audio/audio.py:3571
msgid "Current Volume:"
msgstr ""
-#: redbot/cogs/audio/audio.py:2312
+#: redbot/cogs/audio/audio.py:3583
msgid "You must be in the voice channel to change the volume."
msgstr ""
-#: redbot/cogs/audio/audio.py:2318
+#: redbot/cogs/audio/audio.py:3589
msgid "You need the DJ role to change the volume."
msgstr ""
-#: redbot/cogs/audio/audio.py:2331
+#: redbot/cogs/audio/audio.py:3602
msgid "Volume:"
msgstr ""
-#: redbot/cogs/audio/audio.py:2341
+#: redbot/cogs/audio/audio.py:3613
#, docstring
msgid "Lavalink server configuration options."
msgstr ""
-#: redbot/cogs/audio/audio.py:2346
+#: redbot/cogs/audio/audio.py:3618
#, docstring
msgid "Toggle using external lavalink servers."
msgstr ""
-#: redbot/cogs/audio/audio.py:2357 redbot/cogs/audio/audio.py:2366
+#: redbot/cogs/audio/audio.py:3625 redbot/cogs/audio/audio.py:3635
msgid "External lavalink server: {true_or_false}."
msgstr ""
-#: redbot/cogs/audio/audio.py:2361
-msgid "Defaults reset."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:2373
+#: redbot/cogs/audio/audio.py:3642
#, docstring
msgid "Set the lavalink server host."
msgstr ""
-#: redbot/cogs/audio/audio.py:2377 redbot/cogs/audio/audio.py:2382
+#: redbot/cogs/audio/audio.py:3646 redbot/cogs/audio/audio.py:3651
msgid "Host set to {host}."
msgstr ""
-#: redbot/cogs/audio/audio.py:2379 redbot/cogs/audio/audio.py:2395
-#: redbot/cogs/audio/audio.py:2413 redbot/cogs/audio/audio.py:2429
+#: redbot/cogs/audio/audio.py:3648 redbot/cogs/audio/audio.py:3664
+#: redbot/cogs/audio/audio.py:3682 redbot/cogs/audio/audio.py:3698
msgid "External lavalink server set to True."
msgstr ""
-#: redbot/cogs/audio/audio.py:2388
+#: redbot/cogs/audio/audio.py:3657
#, docstring
msgid "Set the lavalink server password."
msgstr ""
-#: redbot/cogs/audio/audio.py:2393 redbot/cogs/audio/audio.py:2399
+#: redbot/cogs/audio/audio.py:3662 redbot/cogs/audio/audio.py:3668
msgid "Server password set to {password}."
msgstr ""
-#: redbot/cogs/audio/audio.py:2406
+#: redbot/cogs/audio/audio.py:3675
#, docstring
msgid "Set the lavalink REST server port."
msgstr ""
-#: redbot/cogs/audio/audio.py:2411 redbot/cogs/audio/audio.py:2416
+#: redbot/cogs/audio/audio.py:3680 redbot/cogs/audio/audio.py:3685
msgid "REST port set to {port}."
msgstr ""
-#: redbot/cogs/audio/audio.py:2422
+#: redbot/cogs/audio/audio.py:3691
#, docstring
msgid "Set the lavalink websocket server port."
msgstr ""
-#: redbot/cogs/audio/audio.py:2427 redbot/cogs/audio/audio.py:2432
+#: redbot/cogs/audio/audio.py:3696 redbot/cogs/audio/audio.py:3701
msgid "Websocket port set to {port}."
msgstr ""
-#: redbot/cogs/audio/audio.py:2461
+#: redbot/cogs/audio/audio.py:3801
msgid "Not enough {currency} ({required_credits} required)."
msgstr ""
diff --git a/redbot/cogs/audio/locales/nl-NL.po b/redbot/cogs/audio/locales/nl-NL.po
index b89f85439..d772fb2bc 100644
--- a/redbot/cogs/audio/locales/nl-NL.po
+++ b/redbot/cogs/audio/locales/nl-NL.po
@@ -1,14 +1,14 @@
msgid ""
msgstr ""
"Project-Id-Version: red-discordbot\n"
-"POT-Creation-Date: 2019-02-17 02:24+0000\n"
-"PO-Revision-Date: 2019-02-25 03:07\n"
-"Last-Translator: Kowlin \n"
+"POT-Creation-Date: 2019-07-05 22:33+0200\n"
+"PO-Revision-Date: 2019-07-06 16:13\n"
+"Last-Translator: Robert Jansen (Kowlin)\n"
"Language-Team: Dutch\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"Generated-By: redgettext 2.2\n"
+"Generated-By: redgettext 3.0\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: crowdin.com\n"
"X-Crowdin-Project: red-discordbot\n"
@@ -16,980 +16,1275 @@ msgstr ""
"X-Crowdin-File: /cogs/audio/locales/messages.pot\n"
"Language: nl_NL\n"
-#: redbot/cogs/audio/audio.py:38
+#: redbot/cogs/audio/audio.py:47
#, docstring
msgid "Play audio through voice channels."
msgstr "Speel audio af via spraakkanalen."
-#: redbot/cogs/audio/audio.py:173 redbot/cogs/audio/audio.py:735
-msgid "Now Playing"
-msgstr "Nu aan het spelen"
-
-#: redbot/cogs/audio/audio.py:177
-msgid "Track length: {length} | Requested by: {user}"
-msgstr "Track lengte: {length} | Aangevraagd door: {user}"
-
-#: redbot/cogs/audio/audio.py:201 redbot/cogs/audio/audio.py:227
+#: redbot/cogs/audio/audio.py:260
msgid "music in {} servers"
msgstr "muziek in {} servers"
-#: redbot/cogs/audio/audio.py:211
+#: redbot/cogs/audio/audio.py:300 redbot/cogs/audio/audio.py:1317
+msgid "Now Playing"
+msgstr "Nu aan het spelen"
+
+#: redbot/cogs/audio/audio.py:304
+msgid "Track length: {length} | Requested by: {user}"
+msgstr "Track lengte: {length} | Aangevraagd door: {user}"
+
+#: redbot/cogs/audio/audio.py:331
msgid "Queue ended."
msgstr "Wachtrij beëindigd."
-#: redbot/cogs/audio/audio.py:240
+#: redbot/cogs/audio/audio.py:350
msgid "Track Error"
msgstr "Track error"
-#: redbot/cogs/audio/audio.py:245
+#: redbot/cogs/audio/audio.py:355
msgid "Skipping..."
msgstr "Overslaan..."
-#: redbot/cogs/audio/audio.py:252
+#: redbot/cogs/audio/audio.py:363
#, docstring
msgid "Music configuration options."
msgstr "Muziek configuratie opties."
-#: redbot/cogs/audio/audio.py:258
+#: redbot/cogs/audio/audio.py:369
#, docstring
-msgid "Toggle DJ mode.\n\n"
-" DJ mode allows users with the DJ role to use audio commands.\n"
-" "
-msgstr "Overschakelen naar DJ mode.\n\n"
-" Met de DJ-modus kunnen gebruikers met de DJ-rol audiocommando's gebruiken.\n"
-" "
+msgid "Toggle the bot auto-disconnecting when done playing.\\n\\n This setting takes precedence over [p]audioset emptydisconnect.\\n "
+msgstr ""
-#: redbot/cogs/audio/audio.py:265
+#: redbot/cogs/audio/audio.py:377
+msgid "Auto-disconnection at queue end: {true_or_false}."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:385
+#, docstring
+msgid "Toggle DJ mode.\\n\\n DJ mode allows users with the DJ role to use audio commands.\\n "
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:392
msgid "Please set a role to use with DJ mode. Enter the role name or ID now."
msgstr "Stel een rol in voor gebruik met de DJ-modus. Voer nu de rolnaam of ID in."
-#: redbot/cogs/audio/audio.py:273
+#: redbot/cogs/audio/audio.py:400
msgid "Response timed out, try again later."
msgstr "Geen reactie ontvangen, probeer het later opnieuw."
-#: redbot/cogs/audio/audio.py:284
+#: redbot/cogs/audio/audio.py:405
+msgid "DJ role enabled: {true_or_false}."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:411
#, docstring
msgid "Auto-disconnection after x seconds while stopped. 0 to disable."
msgstr "Auto-disconnection na x seconden in de stopstand. 0 om uit te schakelen."
-#: redbot/cogs/audio/audio.py:286 redbot/cogs/audio/audio.py:317
-#: redbot/cogs/audio/audio.py:405
+#: redbot/cogs/audio/audio.py:413 redbot/cogs/audio/audio.py:436
+#: redbot/cogs/audio/audio.py:543 redbot/cogs/audio/audio.py:687
msgid "Can't be less than zero."
msgstr "Kan niet minder zijn dan nul."
-#: redbot/cogs/audio/audio.py:291
+#: redbot/cogs/audio/audio.py:418
msgid "Empty disconnect disabled."
msgstr "Lege verbinding verbreken is uitgeschakeld."
-#: redbot/cogs/audio/audio.py:296
+#: redbot/cogs/audio/audio.py:423
msgid "Empty disconnect timer set to {num_seconds}."
msgstr "Lege verbinding verbreken is uingesteld op {num_seconds}."
-#: redbot/cogs/audio/audio.py:307
-#, docstring
-msgid "Set the role to use for DJ mode."
-msgstr "Stel de rol in die moet worden gebruikt voor de DJ-modus."
-
-#: redbot/cogs/audio/audio.py:310
-msgid "DJ role set to: {role.name}."
-msgstr "DJ-rol ingesteld op: {role.name}."
-
-#: redbot/cogs/audio/audio.py:315
+#: redbot/cogs/audio/audio.py:434
#, docstring
msgid "Set a price for queueing tracks for non-mods. 0 to disable."
msgstr "Stel een prijs in voor wachtrijen voor niet-mods. 0 om uit te schakelen."
-#: redbot/cogs/audio/audio.py:320
+#: redbot/cogs/audio/audio.py:439
msgid "Jukebox mode disabled."
msgstr "Jukebox-modus uitgeschakeld."
-#: redbot/cogs/audio/audio.py:325
+#: redbot/cogs/audio/audio.py:444
msgid "Track queueing command price set to {price} {currency}."
msgstr "Trackwachtrijopdracht instellen ingesteld op {price} {currency}."
-#: redbot/cogs/audio/audio.py:336
+#: redbot/cogs/audio/audio.py:455
+#, docstring
+msgid "Set the localtracks path if the Lavalink.jar is not run from the Audio data folder.\\n\\n Leave the path blank to reset the path to the default, the Audio data directory.\\n "
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:463
+msgid "The localtracks path location has been reset to the default location."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:466
+msgid "This setting is only for bot owners to set a localtracks folder location if the Lavalink.jar is being ran from outside of the Audio data directory.\\nIn the example below, the full path for 'ParentDirectory' must be passed to this command.\\nThe path must not contain spaces.\\n```\\nParentDirectory\\n |__ localtracks (folder)\\n | |__ Awesome Album Name (folder)\\n | |__01 Cool Song.mp3\\n | |__02 Groovy Song.mp3\\n |\\n |__ Lavalink.jar\\n |__ application.yml\\n```\\nThe folder path given to this command must contain the Lavalink.jar, the application.yml, and the localtracks folder.\\nUse this command with no path given to reset it to the default, the Audio data directory for this bot.\\nDo you want to continue to set the provided path for local tracks?"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:505
+msgid "{local_path} does not seem like a valid path."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:520
+msgid "The path that was entered does not have {filelist} file in that location. The path will still be saved, but please check the path and the file location before attempting to play local tracks or start your Lavalink.jar."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:530
+msgid "Localtracks path set to: {local_path}."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:536
+#, docstring
+msgid "Max length of a track to queue in seconds. 0 to disable.\\n\\n Accepts seconds or a value formatted like 00:00:00 (`hh:mm:ss`) or 00:00 (`mm:ss`).\\n Invalid input will turn the max length setting off."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:545
+msgid "Track max length disabled."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:549
+msgid "Track max length set to {seconds}."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:559
#, docstring
msgid "Toggle track announcement and other bot messages."
msgstr "Schakel track aankondigingen en andere bot berichten in of uit."
-#: redbot/cogs/audio/audio.py:340
+#: redbot/cogs/audio/audio.py:563
msgid "Verbose mode on: {true_or_false}."
msgstr "Verbose mode op: {true_or_false}."
-#: redbot/cogs/audio/audio.py:345
+#: redbot/cogs/audio/audio.py:569
+#, docstring
+msgid "Toggle the domain restriction on Audio.\\n\\n When toggled off, users will be able to play songs from non-commercial websites and links.\\n When toggled on, users are restricted to YouTube, SoundCloud, Mixer, Vimeo, Twitch, and Bandcamp links."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:576
+msgid "Commercial links only: {true_or_false}."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:582
+#, docstring
+msgid "Set the role to use for DJ mode."
+msgstr "Stel de rol in die moet worden gebruikt voor de DJ-modus."
+
+#: redbot/cogs/audio/audio.py:585
+msgid "DJ role set to: {role.name}."
+msgstr "DJ-rol ingesteld op: {role.name}."
+
+#: redbot/cogs/audio/audio.py:589
#, docstring
msgid "Show the current settings."
msgstr "Laat de huidige instellingen zien."
-#: redbot/cogs/audio/audio.py:358
+#: redbot/cogs/audio/audio.py:604
msgid "Server Settings"
msgstr "Server instellingen"
-#: redbot/cogs/audio/audio.py:360
-msgid "Disconnect timer: [{num_seconds}]\n"
-msgstr "Disconnect timer: [{num_seconds}]\n"
+#: redbot/cogs/audio/audio.py:606
+msgid "Auto-disconnect: [{dc}]\\n"
+msgstr ""
-#: redbot/cogs/audio/audio.py:364
-msgid "DJ Role: [{role.name}]\n"
-msgstr "DJ Role: [{role.name}]\n"
+#: redbot/cogs/audio/audio.py:609
+msgid "Disconnect timer: [{num_seconds}]\\n"
+msgstr ""
-#: redbot/cogs/audio/audio.py:366
-msgid "Jukebox: [{jukebox_name}]\n"
-msgstr "Jukebox: [{jukebox_name}]\n"
+#: redbot/cogs/audio/audio.py:613
+msgid "DJ Role: [{role.name}]\\n"
+msgstr ""
-#: redbot/cogs/audio/audio.py:367
-msgid "Command price: [{jukebox_price}]\n"
-msgstr "Command prijs: [{jukebox_price}]\n"
+#: redbot/cogs/audio/audio.py:615
+msgid "Jukebox: [{jukebox_name}]\\n"
+msgstr ""
-#: redbot/cogs/audio/audio.py:368
-msgid "Repeat: [{repeat}]\n"
-"Shuffle: [{shuffle}]\n"
-"Song notify msgs: [{notify}]\n"
-"Songs as status: [{status}]\n"
-msgstr "Herhaal: [{repeat}] \n"
-"Shuffle: [{shuffle}] \n"
-"Nummerberichten: [{notify}] \n"
-"Nummers als status: [{status}]\n"
+#: redbot/cogs/audio/audio.py:616
+msgid "Command price: [{jukebox_price}]\\n"
+msgstr ""
-#: redbot/cogs/audio/audio.py:375
-msgid "Thumbnails: [{0}]\n"
-msgstr "Voorbeelden: [{0}]\n"
+#: redbot/cogs/audio/audio.py:618
+msgid "Max track length: [{tracklength}]\\n"
+msgstr ""
-#: redbot/cogs/audio/audio.py:377
-msgid "Vote skip: [{vote_enabled}]\n"
-"Skip percentage: [{vote_percent}%]\n"
-msgstr "Stemmen voor overslaan: [{vote_enabled}] \n"
-"Percentage om over te slaan: [{vote_percent}%]\n"
+#: redbot/cogs/audio/audio.py:621
+msgid "Repeat: [{repeat}]\\nShuffle: [{shuffle}]\\nSong notify msgs: [{notify}]\\nSongs as status: [{status}]\\n"
+msgstr ""
-#: redbot/cogs/audio/audio.py:380
-msgid "---Lavalink Settings---\n"
-"Cog version: [{version}]\n"
-"Jar build: [{jarbuild}]\n"
-"External server: [{use_external_lavalink}]"
-msgstr "---Lavalink Settings--- \n"
-"Cog versie: [{version}] \n"
-"Jar build: [{jarbuild}] \n"
-"Externe server: [{use_external_lavalink}]"
+#: redbot/cogs/audio/audio.py:628
+msgid "Thumbnails: [{0}]\\n"
+msgstr ""
-#: redbot/cogs/audio/audio.py:393
+#: redbot/cogs/audio/audio.py:630
+msgid "Vote skip: [{vote_enabled}]\\nSkip percentage: [{vote_percent}%]\\n"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:633
+msgid "---Lavalink Settings--- \\nCog version: [{version}]\\nJar build: [{jarbuild}]\\nExternal server: [{use_external_lavalink}]\\n"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:640
+msgid "Localtracks path: [{localpath}]\\n"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:648
#, docstring
-msgid "Toggle displaying a thumbnail on audio messages."
-msgstr "Schakelen tussen weergave van een miniatuur op audioboodschappen."
+msgid "Instructions to set the Spotify API tokens."
+msgstr ""
-#: redbot/cogs/audio/audio.py:397
-msgid "Thumbnail display: {true_or_false}."
-msgstr "Miniatuurweergave: {true_or_false}."
+#: redbot/cogs/audio/audio.py:649
+msgid "1. Go to Spotify developers and log in with your Spotify account.\\n(https://developer.spotify.com/dashboard/applications)\\n2. Click \\\"Create An App\\\".\\n3. Fill out the form provided with your app name, etc.\\n4. When asked if you're developing commercial integration select \\\"No\\\".\\n5. Accept the terms and conditions.\\n6. Copy your client ID and your client secret into:\\n`{prefix}set api spotify client_id, client_secret,`"
+msgstr ""
-#: redbot/cogs/audio/audio.py:403
-#, docstring
-msgid "Percentage needed for non-mods to skip tracks. 0 to disable."
-msgstr "Percentage dat nodig is voor niet-mods om tracks over te slaan. 0 om uit te schakelen."
-
-#: redbot/cogs/audio/audio.py:411
-msgid "Voting disabled. All users can use queue management commands."
-msgstr "Stemmen uitgeschakeld. Alle gebruikers kunnen commando's voor wachtrijbeheer gebruiken."
-
-#: redbot/cogs/audio/audio.py:416
-msgid "Vote percentage set to {percent}%."
-msgstr "Stempercentage ingesteld op {percent}%."
-
-#: redbot/cogs/audio/audio.py:425
+#: redbot/cogs/audio/audio.py:665
#, docstring
msgid "Enable/disable tracks' titles as status."
msgstr "Muziektitel als status aan of uit zetten."
-#: redbot/cogs/audio/audio.py:429
+#: redbot/cogs/audio/audio.py:669
msgid "Song titles as status: {true_or_false}."
msgstr "Muziektitel als status: {true_or_false}."
-#: redbot/cogs/audio/audio.py:435
+#: redbot/cogs/audio/audio.py:675
+#, docstring
+msgid "Toggle displaying a thumbnail on audio messages."
+msgstr "Schakelen tussen weergave van een miniatuur op audioboodschappen."
+
+#: redbot/cogs/audio/audio.py:679
+msgid "Thumbnail display: {true_or_false}."
+msgstr "Miniatuurweergave: {true_or_false}."
+
+#: redbot/cogs/audio/audio.py:685
+#, docstring
+msgid "Percentage needed for non-mods to skip tracks. 0 to disable."
+msgstr "Percentage dat nodig is voor niet-mods om tracks over te slaan. 0 om uit te schakelen."
+
+#: redbot/cogs/audio/audio.py:693
+msgid "Voting disabled. All users can use queue management commands."
+msgstr "Stemmen uitgeschakeld. Alle gebruikers kunnen commando's voor wachtrijbeheer gebruiken."
+
+#: redbot/cogs/audio/audio.py:698
+msgid "Vote percentage set to {percent}%."
+msgstr "Stempercentage ingesteld op {percent}%."
+
+#: redbot/cogs/audio/audio.py:707
+#, docstring
+msgid "Instructions to set the YouTube API key."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:726
#, docstring
msgid "Audio stats."
msgstr "Audio statistieken."
-#: redbot/cogs/audio/audio.py:469 redbot/cogs/audio/audio.py:489
-#: redbot/cogs/audio/audio.py:698 redbot/cogs/audio/audio.py:788
-#: redbot/cogs/audio/audio.py:804 redbot/cogs/audio/audio.py:829
-#: redbot/cogs/audio/audio.py:836 redbot/cogs/audio/audio.py:1179
-#: redbot/cogs/audio/audio.py:1466 redbot/cogs/audio/audio.py:1724
-#: redbot/cogs/audio/audio.py:2026 redbot/cogs/audio/audio.py:2063
-#: redbot/cogs/audio/audio.py:2109 redbot/cogs/audio/audio.py:2265
-#: redbot/cogs/audio/audio.py:2304 redbot/cogs/audio/audio.py:2334
+#: redbot/cogs/audio/audio.py:754 redbot/cogs/audio/audio.py:782
+#: redbot/cogs/audio/audio.py:819 redbot/cogs/audio/audio.py:847
+#: redbot/cogs/audio/audio.py:914 redbot/cogs/audio/audio.py:932
+#: redbot/cogs/audio/audio.py:956 redbot/cogs/audio/audio.py:1026
+#: redbot/cogs/audio/audio.py:1280 redbot/cogs/audio/audio.py:1371
+#: redbot/cogs/audio/audio.py:1388 redbot/cogs/audio/audio.py:1411
+#: redbot/cogs/audio/audio.py:1419 redbot/cogs/audio/audio.py:2190
+#: redbot/cogs/audio/audio.py:2527 redbot/cogs/audio/audio.py:2860
+#: redbot/cogs/audio/audio.py:3201 redbot/cogs/audio/audio.py:3255
+#: redbot/cogs/audio/audio.py:3305 redbot/cogs/audio/audio.py:3497
+#: redbot/cogs/audio/audio.py:3575 redbot/cogs/audio/audio.py:3605
msgid "Nothing playing."
msgstr "Er wordt niets uitgevoerd."
-#: redbot/cogs/audio/audio.py:473
+#: redbot/cogs/audio/audio.py:758
msgid "Not connected anywhere."
msgstr "Nergens verbonden."
-#: redbot/cogs/audio/audio.py:478
-msgid "Connected in {num} servers:"
-msgstr "Verbonden in {num} servers:"
+#: redbot/cogs/audio/audio.py:764
+msgid "Playing in {num}/{total} servers:"
+msgstr ""
-#: redbot/cogs/audio/audio.py:486
+#: redbot/cogs/audio/audio.py:779
#, docstring
msgid "Bump a track number to the top of the queue."
msgstr "Zet een nummer bovenaan de wachtrij."
-#: redbot/cogs/audio/audio.py:495
+#: redbot/cogs/audio/audio.py:788
msgid "You must be in the voice channel to bump a track."
msgstr "Je moet in een spraakkanaal zitten om het nummer bovenaan de wachtrij te zetten."
-#: redbot/cogs/audio/audio.py:499
+#: redbot/cogs/audio/audio.py:792
msgid "You need the DJ role to bump tracks."
msgstr "Je hebt de DJ rol nodig om nummers bovenaan de wachtrij te zetten."
-#: redbot/cogs/audio/audio.py:502 redbot/cogs/audio/audio.py:1739
+#: redbot/cogs/audio/audio.py:795 redbot/cogs/audio/audio.py:2875
msgid "Song number must be greater than 1 and within the queue limit."
msgstr "Het aantal nummers moet groter zijn dan 1 en binnen de wachtrijlimiet."
-#: redbot/cogs/audio/audio.py:517
+#: redbot/cogs/audio/audio.py:810
msgid "Moved {track} to the top of the queue."
msgstr "{track} verplaatst naar de bovenkant van de wachtrij."
-#: redbot/cogs/audio/audio.py:523
+#: redbot/cogs/audio/audio.py:817
#, docstring
msgid "Disconnect from the voice channel."
msgstr "Verbreek de verbinding met het spraakkanaal."
-#: redbot/cogs/audio/audio.py:528
+#: redbot/cogs/audio/audio.py:826
msgid "You need the DJ role to disconnect."
msgstr "Je hebt de DJ rol nodig om de verbinding te verbreken."
-#: redbot/cogs/audio/audio.py:532
+#: redbot/cogs/audio/audio.py:830
msgid "There are other people listening to music."
msgstr "Er zijn andere mensen die naar muziek luisteren."
-#: redbot/cogs/audio/audio.py:540
+#: redbot/cogs/audio/audio.py:845
+#, docstring
+msgid "Equalizer management."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:865
+#, docstring
+msgid "Delete a saved eq preset."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:887
+#, docstring
+msgid "List saved eq presets."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:890
+msgid "No saved equalizer presets."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:897
+msgid "{num} preset(s)"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:903
+#, docstring
+msgid "Load a saved eq preset."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:930
+#, docstring
+msgid "Reset the eq to 0 across all bands."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:946
+msgid "Equalizer values have been reset."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:954
+#, docstring
+msgid "Save the current eq settings to a preset."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:958
+msgid "Please enter a name for this equalizer preset."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:972
+msgid "No equalizer preset name entered, try the command again later."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:981 redbot/cogs/audio/audio.py:2213
+msgid "Try the command again with a shorter name."
+msgstr "Probeer het commando opnieuw met een kortere naam."
+
+#: redbot/cogs/audio/audio.py:985
+msgid "Preset name already exists, do you want to replace it?"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:994
+msgid "Not saving preset."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1019
+#, docstring
+msgid "Set an eq band with a band number or name and value.\\n\\n Band positions are 1-15 and values have a range of -0.25 to 1.0.\\n Band names are 25, 40, 63, 100, 160, 250, 400, 630, 1k, 1.6k, 2.5k, 4k, 6.3k, 10k, and 16k Hz.\\n Setting a band value to -0.25 nullifies it while +0.25 is double.\\n "
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1063
+msgid "Valid band numbers are 1-15 or the band names listed in the help for this command."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1099
#, docstring
msgid "Local playback commands."
msgstr "Lokale afspeelopdrachten."
-#: redbot/cogs/audio/audio.py:545
+#: redbot/cogs/audio/audio.py:1104
#, docstring
msgid "Play all songs in a localtracks folder."
msgstr "Speel alle nummers af in een localtracks-map."
-#: redbot/cogs/audio/audio.py:552
+#: redbot/cogs/audio/audio.py:1115
+msgid "No localtracks folder named {name}."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1121
#, docstring
msgid "Play a local track."
msgstr "Speel een local track af."
-#: redbot/cogs/audio/audio.py:557
+#: redbot/cogs/audio/audio.py:1126
msgid "No local track folders found."
msgstr "Geen local track map gevonden."
-#: redbot/cogs/audio/audio.py:600
+#: redbot/cogs/audio/audio.py:1169
#, docstring
msgid "Search for songs across all localtracks folders."
msgstr "Zoek naar nummer in de algemene lokale tracklijst."
-#: redbot/cogs/audio/audio.py:605
+#: redbot/cogs/audio/audio.py:1174
msgid "No album folders found."
msgstr "Geen albums gevonden."
-#: redbot/cogs/audio/audio.py:612 redbot/cogs/audio/audio.py:1634
+#: redbot/cogs/audio/audio.py:1181 redbot/cogs/audio/audio.py:2816
msgid "No matches."
msgstr "Geen overeenkomsten."
-#: redbot/cogs/audio/audio.py:688
+#: redbot/cogs/audio/audio.py:1269
msgid "No localtracks folder."
msgstr "Geen lokale track-map gevonden."
-#: redbot/cogs/audio/audio.py:696
+#: redbot/cogs/audio/audio.py:1278
#, docstring
msgid "Now playing."
msgstr "Nu aan het afspelen."
-#: redbot/cogs/audio/audio.py:716
+#: redbot/cogs/audio/audio.py:1298
msgid "Requested by: **{track.requester}**"
msgstr "Aangevraagd door: **{track.requester}**"
-#: redbot/cogs/audio/audio.py:726
+#: redbot/cogs/audio/audio.py:1308
msgid "Nothing."
msgstr "Niets."
-#: redbot/cogs/audio/audio.py:785
+#: redbot/cogs/audio/audio.py:1368
#, docstring
-msgid "Pause and resume."
-msgstr "Onderbreken en hervatten."
+msgid "Pause or resume a playing track."
+msgstr ""
-#: redbot/cogs/audio/audio.py:794
-msgid "You must be in the voice channel to pause the music."
-msgstr "Je moet in het spraakkanaal zitten om de muziek op pauze te zetten."
+#: redbot/cogs/audio/audio.py:1377
+msgid "You must be in the voice channel pause or resume."
+msgstr ""
-#: redbot/cogs/audio/audio.py:800
-msgid "You need the DJ role to pause tracks."
-msgstr "Je hebt de DJ rol nodig om muziek op pauze te zetten."
+#: redbot/cogs/audio/audio.py:1384
+msgid "You need the DJ role to pause or resume tracks."
+msgstr ""
-#: redbot/cogs/audio/audio.py:814
+#: redbot/cogs/audio/audio.py:1401
msgid "Track Paused"
msgstr "Nummer is onderbroken"
-#: redbot/cogs/audio/audio.py:821
+#: redbot/cogs/audio/audio.py:1407
msgid "Track Resumed"
msgstr "Nummer hervat"
-#: redbot/cogs/audio/audio.py:826
-msgid "Track is paused."
-msgstr "Nummer is onderbroken."
-
-#: redbot/cogs/audio/audio.py:828
-msgid "Track is playing."
-msgstr "Nummer is aan het afspelen."
-
-#: redbot/cogs/audio/audio.py:834
+#: redbot/cogs/audio/audio.py:1417
#, docstring
msgid "Queue percentage."
msgstr "Wachtrij percentage."
-#: redbot/cogs/audio/audio.py:860
+#: redbot/cogs/audio/audio.py:1443
msgid "Nothing in the queue."
msgstr "Niets in de wachtrij."
-#: redbot/cogs/audio/audio.py:882
+#: redbot/cogs/audio/audio.py:1465
msgid "Queued and playing tracks:"
msgstr "Wachtrij en nummers die afspelen:"
-#: redbot/cogs/audio/audio.py:890
+#: redbot/cogs/audio/audio.py:1474
#, docstring
msgid "Play a URL or search for a track."
msgstr "Speel een URL af of zoek naar nummers."
-#: redbot/cogs/audio/audio.py:900 redbot/cogs/audio/audio.py:1411
-#: redbot/cogs/audio/audio.py:1795
+#: redbot/cogs/audio/audio.py:1481
+msgid "That URL is not allowed."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1484 redbot/cogs/audio/audio.py:2437
+#: redbot/cogs/audio/audio.py:2928 redbot/cogs/audio/audio.py:3047
+msgid "Connection to Lavalink has failed."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1486 redbot/cogs/audio/audio.py:2439
+#: redbot/cogs/audio/audio.py:2930 redbot/cogs/audio/audio.py:3049
+msgid "Please check your console or logs for details."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1495 redbot/cogs/audio/audio.py:2449
+#: redbot/cogs/audio/audio.py:2939 redbot/cogs/audio/audio.py:3543
msgid "I don't have permission to connect to your channel."
msgstr "Ik heb geen toestemming om te verbinden met jouw kanaal."
-#: redbot/cogs/audio/audio.py:906 redbot/cogs/audio/audio.py:1422
-#: redbot/cogs/audio/audio.py:1801 redbot/cogs/audio/audio.py:1889
+#: redbot/cogs/audio/audio.py:1501 redbot/cogs/audio/audio.py:2461
+#: redbot/cogs/audio/audio.py:2945 redbot/cogs/audio/audio.py:3056
+#: redbot/cogs/audio/audio.py:3555
msgid "Connect to a voice channel first."
msgstr "Verbind eerst met een spraakkanaal."
-#: redbot/cogs/audio/audio.py:909 redbot/cogs/audio/audio.py:1418
-#: redbot/cogs/audio/audio.py:1804 redbot/cogs/audio/audio.py:1892
+#: redbot/cogs/audio/audio.py:1504 redbot/cogs/audio/audio.py:2457
+#: redbot/cogs/audio/audio.py:2948 redbot/cogs/audio/audio.py:3059
+#: redbot/cogs/audio/audio.py:3558
msgid "Connection to Lavalink has not yet been established."
-msgstr ""
+msgstr "Er is nog geen verbinding gemaakt met Lavalink."
-#: redbot/cogs/audio/audio.py:913
+#: redbot/cogs/audio/audio.py:1508
msgid "You need the DJ role to queue tracks."
-msgstr ""
+msgstr "Je heeft de DJ rol nodig om nummers in de wachtrij te zetten."
-#: redbot/cogs/audio/audio.py:922
+#: redbot/cogs/audio/audio.py:1519
msgid "You must be in the voice channel to use the play command."
-msgstr ""
+msgstr "Je moet in het spraakkanaal zijn om de `play` commando te gebruiken."
-#: redbot/cogs/audio/audio.py:928
+#: redbot/cogs/audio/audio.py:1525
msgid "No tracks to play."
+msgstr "Geen nummers om af te spelen."
+
+#: redbot/cogs/audio/audio.py:1565
+msgid "The owner needs to set the Spotify client ID, Spotify client secret, and YouTube API key before Spotify URLs or codes can be used. \\nSee `{prefix}audioset youtubeapi` and `{prefix}audioset spotifyapi` for instructions."
msgstr ""
-#: redbot/cogs/audio/audio.py:942 redbot/cogs/audio/audio.py:1450
-#: redbot/cogs/audio/audio.py:1828 redbot/cogs/audio/audio.py:1865
+#: redbot/cogs/audio/audio.py:1575 redbot/cogs/audio/audio.py:2493
+msgid "Wait until the playlist has finished loading."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1592 redbot/cogs/audio/audio.py:1657
+#: redbot/cogs/audio/audio.py:2499 redbot/cogs/audio/audio.py:2509
+#: redbot/cogs/audio/audio.py:2973 redbot/cogs/audio/audio.py:3027
msgid "Nothing found."
+msgstr "Geen resultaten."
+
+#: redbot/cogs/audio/audio.py:1600
+msgid "The Spotify API key or client secret has not been set properly. \\nUse `{prefix}audioset spotifyapi` for instructions."
msgstr ""
-#: redbot/cogs/audio/audio.py:953 redbot/cogs/audio/audio.py:1295
+#: redbot/cogs/audio/audio.py:1639 redbot/cogs/audio/audio.py:1776
+msgid "This doesn't seem to be a valid Spotify URL or code."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1688 redbot/cogs/audio/audio.py:2320
msgid "Playlist Enqueued"
+msgstr "Afspeellijst toegevoegd"
+
+#: redbot/cogs/audio/audio.py:1689 redbot/cogs/audio/audio.py:2321
+msgid "Added {num} tracks to the queue.{maxlength_msg}"
msgstr ""
-#: redbot/cogs/audio/audio.py:954 redbot/cogs/audio/audio.py:1296
-msgid "Added {num} tracks to the queue."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:958
+#: redbot/cogs/audio/audio.py:1695
msgid "{time} until start of playlist playback: starts at #{position} in queue"
+msgstr "{time} tot het begin van het afspelen van de afspeellijst: begint bij #{position} in de wachtrij"
+
+#: redbot/cogs/audio/audio.py:1711 redbot/cogs/audio/audio.py:3125
+msgid "Track exceeds maximum length."
msgstr ""
-#: redbot/cogs/audio/audio.py:980 redbot/cogs/audio/audio.py:1938
+#: redbot/cogs/audio/audio.py:1717
+msgid "Nothing found. Check your Lavalink logs for details."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1732 redbot/cogs/audio/audio.py:3108
msgid "Track Enqueued"
-msgstr ""
+msgstr "Nummer toegevoegd"
-#: redbot/cogs/audio/audio.py:984 redbot/cogs/audio/audio.py:1944
+#: redbot/cogs/audio/audio.py:1736 redbot/cogs/audio/audio.py:3114
msgid "{time} until track playback: #{position} in queue"
-msgstr ""
+msgstr "{time} tot het afspelen volgt: #{position} in de wachtrij"
-#: redbot/cogs/audio/audio.py:989 redbot/cogs/audio/audio.py:1949
+#: redbot/cogs/audio/audio.py:1741 redbot/cogs/audio/audio.py:3119
msgid "#{position} in queue"
+msgstr "#{position} in de wachtrij"
+
+#: redbot/cogs/audio/audio.py:1761
+msgid "The Spotify API key or client secret has not been set properly. \\nUse `{prefix}audioset spotifyapi` for instructions."
msgstr ""
-#: redbot/cogs/audio/audio.py:997
+#: redbot/cogs/audio/audio.py:1793 redbot/cogs/audio/audio.py:2384
+msgid "Please wait, adding tracks..."
+msgstr "Even geduld, nummers toevoegen..."
+
+#: redbot/cogs/audio/audio.py:1809
+msgid "The connection was reset while loading the playlist."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1826 redbot/cogs/audio/audio.py:2401
+msgid "Loading track {num}/{total}..."
+msgstr "Nummers laden {num}/{total}..."
+
+#: redbot/cogs/audio/audio.py:1840
+msgid "Approximate time remaining: {seconds}"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1850
+msgid "Nothing found.\\nThe YouTube API key may be invalid or you may be rate limited on YouTube's search service.\\nCheck the YouTube API key again and follow the instructions at `{prefix}audioset youtubeapi`."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1871
#, docstring
msgid "Playlist configuration options."
-msgstr ""
+msgstr "Opties voor afspeellijst configuratie."
-#: redbot/cogs/audio/audio.py:1002
+#: redbot/cogs/audio/audio.py:1876
#, docstring
-msgid "Add a track URL, playlist link, or quick search to a playlist.\n\n"
-" The track(s) will be appended to the end of the playlist.\n"
-" "
+msgid "Add a track URL, playlist link, or quick search to a playlist.\\n\\n The track(s) will be appended to the end of the playlist.\\n "
msgstr ""
-#: redbot/cogs/audio/audio.py:1014 redbot/cogs/audio/audio.py:1078
-#: redbot/cogs/audio/audio.py:1228
+#: redbot/cogs/audio/audio.py:1888 redbot/cogs/audio/audio.py:2028
+#: redbot/cogs/audio/audio.py:2241
msgid "You are not the author of that playlist."
-msgstr ""
+msgstr "Je bent niet de auteur van die afspeellijst."
-#: redbot/cogs/audio/audio.py:1024
+#: redbot/cogs/audio/audio.py:1898
msgid "{track} is already in {playlist}."
-msgstr ""
+msgstr "{track} is al in {playlist}."
-#: redbot/cogs/audio/audio.py:1033 redbot/cogs/audio/audio.py:1082
-#: redbot/cogs/audio/audio.py:1092 redbot/cogs/audio/audio.py:1231
+#: redbot/cogs/audio/audio.py:1907 redbot/cogs/audio/audio.py:2032
+#: redbot/cogs/audio/audio.py:2081 redbot/cogs/audio/audio.py:2244
msgid "No playlist with that name."
-msgstr ""
+msgstr "Geen afspeellijst met die naam."
-#: redbot/cogs/audio/audio.py:1040
+#: redbot/cogs/audio/audio.py:1914
msgid "{track} appended to {playlist}."
-msgstr ""
+msgstr "{track} toegevoegd aan {playlist}."
-#: redbot/cogs/audio/audio.py:1046
+#: redbot/cogs/audio/audio.py:1920
msgid "{num} tracks appended to {playlist}."
+msgstr "{num} nummers toegevoegd aan {playlist}."
+
+#: redbot/cogs/audio/audio.py:1928
+#, docstring
+msgid "Copy a playlist from one server to another."
msgstr ""
-#: redbot/cogs/audio/audio.py:1053
+#: redbot/cogs/audio/audio.py:1932
+msgid "Invalid server ID for source server."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1934
+msgid "Invalid server ID for target server."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1939
+msgid "No playlist with that name in {from_guild_name}."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1950
+msgid "Playlist {name} copied from {from_guild_name} to {to_guild_name}."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1962
+msgid "A playlist with that name already exists in {to_guild_name}.\\nPlease enter a new name for this playlist."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1975
+msgid "Try the playlist copy command again with a shorter name."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1980
+msgid "Playlist name already exists in {to_guild_name}, try the playlist copy command again with a different name."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1986 redbot/cogs/audio/audio.py:2220
+msgid "No playlist name entered, try again later."
+msgstr "Geen afspeellijst naam ingevoerd, probeer het later opnieuw."
+
+#: redbot/cogs/audio/audio.py:1991
+msgid "Playlist {name} copied from {from_guild_name} to {to_guild_name}.\\nNew playlist name on {to_guild_name}: {new_name}"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2003
#, docstring
msgid "Create an empty playlist."
-msgstr ""
+msgstr "Maak een lege afspeellijst aan."
-#: redbot/cogs/audio/audio.py:1057 redbot/cogs/audio/audio.py:1172
+#: redbot/cogs/audio/audio.py:2007 redbot/cogs/audio/audio.py:2183
msgid "You need the DJ role to save playlists."
-msgstr ""
+msgstr "Je hebt de DJ rol nodig om afspeellijsten op te slaan."
-#: redbot/cogs/audio/audio.py:1061 redbot/cogs/audio/audio.py:1176
-#: redbot/cogs/audio/audio.py:1204
+#: redbot/cogs/audio/audio.py:2011 redbot/cogs/audio/audio.py:2187
+#: redbot/cogs/audio/audio.py:2217
msgid "Playlist name already exists, try again with a different name."
-msgstr ""
+msgstr "Deze afspeellijst bestaat al, probeer het opnieuw met een andere naam."
-#: redbot/cogs/audio/audio.py:1067
+#: redbot/cogs/audio/audio.py:2017
msgid "Empty playlist {name} created."
-msgstr ""
+msgstr "Lege afspeellijst `{name}` aangemaakt."
-#: redbot/cogs/audio/audio.py:1071
+#: redbot/cogs/audio/audio.py:2021
#, docstring
msgid "Delete a saved playlist."
-msgstr ""
+msgstr "Verwijder een opgeslagen afspeellijst."
-#: redbot/cogs/audio/audio.py:1083
+#: redbot/cogs/audio/audio.py:2033
msgid "{name} playlist deleted."
+msgstr "afspeellijst `{name}` verwijderd."
+
+#: redbot/cogs/audio/audio.py:2039
+#, docstring
+msgid "Download a copy of a playlist.\\n\\n These files can be used with the [p]playlist upload command.\\n Red v2-compatible playlists can be generated by passing True\\n for the v2 variable."
msgstr ""
-#: redbot/cogs/audio/audio.py:1087
+#: redbot/cogs/audio/audio.py:2061
+msgid "That playlist has no tracks."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2063 redbot/cogs/audio/audio.py:2331
+msgid "That playlist doesn't exist."
+msgstr "Die afspeellijst bestaat niet."
+
+#: redbot/cogs/audio/audio.py:2076
#, docstring
msgid "Retrieve information from a saved playlist."
+msgstr "Haal informatie op van een opgeslagen afspeellijst."
+
+#: redbot/cogs/audio/audio.py:2101
+msgid "Playlist info for {playlist_name}:\\n"
msgstr ""
-#: redbot/cogs/audio/audio.py:1100
-msgid "**Custom playlist.**"
+#: redbot/cogs/audio/audio.py:2105
+msgid "Playlist info for {playlist_name}:\\nURL: {url}"
msgstr ""
-#: redbot/cogs/audio/audio.py:1102
-msgid "URL: <{url}>"
+#: redbot/cogs/audio/audio.py:2116
+msgid "Author: {author_name} | {num} track(s)"
msgstr ""
-#: redbot/cogs/audio/audio.py:1105
-msgid "Playlist info for {playlist_name}:"
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:1106
-msgid "Author: **{author_name}**\n"
-"{url}"
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:1110
-msgid "{num} track(s)"
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:1115
+#: redbot/cogs/audio/audio.py:2126
#, docstring
msgid "List saved playlists."
-msgstr ""
+msgstr "Toon opgeslagen afspeellijsten."
-#: redbot/cogs/audio/audio.py:1118
+#: redbot/cogs/audio/audio.py:2129
msgid "No saved playlists."
-msgstr ""
+msgstr "Geen opgeslagen afspeellijsten."
-#: redbot/cogs/audio/audio.py:1130
+#: redbot/cogs/audio/audio.py:2141
msgid "Tracks: {num}"
+msgstr "Nummers: {num}"
+
+#: redbot/cogs/audio/audio.py:2142
+msgid "Author: {name}\\n"
msgstr ""
-#: redbot/cogs/audio/audio.py:1131
-msgid "Author: {name}\n"
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:1155
+#: redbot/cogs/audio/audio.py:2166
msgid "Playlists for {server_name}:"
-msgstr ""
+msgstr "Afspeellijsten voor {server_name}:"
-#: redbot/cogs/audio/audio.py:1159
+#: redbot/cogs/audio/audio.py:2170
msgid "Page {page_num}/{total_pages} | {num} playlists"
-msgstr ""
+msgstr "Pagina {page_num}/{total_pages} | {num} afspeellijsten"
-#: redbot/cogs/audio/audio.py:1168
+#: redbot/cogs/audio/audio.py:2179
#, docstring
msgid "Save the queue to a playlist."
+msgstr "Sla de wachtrij op naar een afspeellijst."
+
+#: redbot/cogs/audio/audio.py:2193 redbot/cogs/audio/audio.py:2590
+#: redbot/cogs/audio/audio.py:2593 redbot/cogs/audio/audio.py:2613
+#: redbot/cogs/audio/audio.py:2756 redbot/cogs/audio/audio.py:2759
+#: redbot/cogs/audio/audio.py:2775 redbot/cogs/audio/audio.py:2778
+#: redbot/cogs/audio/audio.py:2810 redbot/cogs/audio/audio.py:2812
+#: redbot/cogs/audio/audio.py:3418 redbot/cogs/audio/audio.py:3422
+#: redbot/cogs/audio/audio.py:3429
+msgid "There's nothing in the queue."
msgstr ""
-#: redbot/cogs/audio/audio.py:1189
+#: redbot/cogs/audio/audio.py:2202
msgid "Please enter a name for this playlist."
-msgstr ""
+msgstr "Voer een naam in voor deze afspeellijst."
-#: redbot/cogs/audio/audio.py:1200
-msgid "Try the command again with a shorter name."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:1207
-msgid "No playlist name entered, try again later."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:1214
+#: redbot/cogs/audio/audio.py:2227
msgid "Playlist {name} saved from current queue: {num} tracks added."
-msgstr ""
+msgstr "Afspeellijst `{name}` opgeslagen van de huidige wachtrij: {num} nummers toegevoegd."
-#: redbot/cogs/audio/audio.py:1221
+#: redbot/cogs/audio/audio.py:2234
#, docstring
msgid "Remove a track from a playlist by url."
-msgstr ""
+msgstr "Verwijder een track van een afspeellijst via url."
-#: redbot/cogs/audio/audio.py:1235
+#: redbot/cogs/audio/audio.py:2248
msgid "URL not in playlist."
-msgstr ""
+msgstr "URL niet in de afspeellijst."
-#: redbot/cogs/audio/audio.py:1239
+#: redbot/cogs/audio/audio.py:2252
msgid "No tracks left, removing playlist."
-msgstr ""
+msgstr "Geen nummers meer in de afspeellijst, de afspeellijst wordt verwijderd."
-#: redbot/cogs/audio/audio.py:1246
+#: redbot/cogs/audio/audio.py:2259
msgid "{num} entries have been removed from the {playlist_name} playlist."
-msgstr ""
+msgstr "{num} nummers zijn verwijderd van de afspeellijst `{playlist_name}`."
-#: redbot/cogs/audio/audio.py:1253
+#: redbot/cogs/audio/audio.py:2266
msgid "The track has been removed from the {playlist_name} playlist."
-msgstr ""
+msgstr "Het nummer is verwijderd van de afspeellijst `{playlist_name}`."
-#: redbot/cogs/audio/audio.py:1260
+#: redbot/cogs/audio/audio.py:2273
#, docstring
msgid "Save a playlist from a url."
-msgstr ""
+msgstr "Een afspeellijst opslaan van een url."
-#: redbot/cogs/audio/audio.py:1272
+#: redbot/cogs/audio/audio.py:2285
msgid "Playlist {name} saved: {num} tracks added."
-msgstr ""
+msgstr "Afspeellijst {name} opgeslagen: {num} nummers toegevoegd."
-#: redbot/cogs/audio/audio.py:1279
+#: redbot/cogs/audio/audio.py:2292
#, docstring
msgid "Load a playlist into the queue."
-msgstr ""
+msgstr "Laad een afspeellijst in de wachtrij."
-#: redbot/cogs/audio/audio.py:1304
-msgid "That playlist doesn't exist."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:1309
+#: redbot/cogs/audio/audio.py:2336
#, docstring
msgid "Convert a Red v2 playlist file to a playlist."
-msgstr ""
+msgstr "Converteer een Red v2 afspeellijst naar een Red v3 afspeellijst."
-#: redbot/cogs/audio/audio.py:1315
+#: redbot/cogs/audio/audio.py:2342
msgid "Please upload the playlist file. Any other message will cancel this operation."
-msgstr ""
+msgstr "Upload het afspeellijst bestand. Elk ander bericht zal deze bewerking annuleren."
-#: redbot/cogs/audio/audio.py:1323
+#: redbot/cogs/audio/audio.py:2350
msgid "No file detected, try again later."
-msgstr ""
+msgstr "Geen bestand gedetecteerd, probeer het later opnieuw."
-#: redbot/cogs/audio/audio.py:1327
+#: redbot/cogs/audio/audio.py:2354
msgid "Upload cancelled."
-msgstr ""
+msgstr "Upload geannuleerd."
-#: redbot/cogs/audio/audio.py:1331
+#: redbot/cogs/audio/audio.py:2358
msgid "Only playlist files can be uploaded."
-msgstr ""
+msgstr "Alleen afspeellijsten kunnen worden geüpload."
-#: redbot/cogs/audio/audio.py:1336
+#: redbot/cogs/audio/audio.py:2363
msgid "Not a valid playlist file."
-msgstr ""
+msgstr "Geen geldig afspeellijst bestand."
-#: redbot/cogs/audio/audio.py:1352
+#: redbot/cogs/audio/audio.py:2379
msgid "A playlist already exists with this name."
-msgstr ""
+msgstr "Een afspeellijst bestaat al met deze naam."
-#: redbot/cogs/audio/audio.py:1357
-msgid "Please wait, adding tracks..."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:1371
-msgid "Loading track {num}/{total}..."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:1377
+#: redbot/cogs/audio/audio.py:2407
msgid "No tracks found."
-msgstr ""
+msgstr "Geen nummers gevonden."
-#: redbot/cogs/audio/audio.py:1383
+#: redbot/cogs/audio/audio.py:2413
msgid "Added {num} tracks from the {playlist_name} playlist. {num_bad} track(s) could not be loaded."
msgstr ""
-#: redbot/cogs/audio/audio.py:1388
+#: redbot/cogs/audio/audio.py:2418
msgid "Added {num} tracks from the {playlist_name} playlist."
msgstr ""
-#: redbot/cogs/audio/audio.py:1392
+#: redbot/cogs/audio/audio.py:2422
msgid "Playlist Saved"
msgstr ""
-#: redbot/cogs/audio/audio.py:1403
+#: redbot/cogs/audio/audio.py:2433
msgid "You need the DJ role to use playlists."
msgstr ""
-#: redbot/cogs/audio/audio.py:1432
+#: redbot/cogs/audio/audio.py:2471
msgid "You must be in the voice channel to use the playlist command."
msgstr ""
-#: redbot/cogs/audio/audio.py:1464
+#: redbot/cogs/audio/audio.py:2525
#, docstring
msgid "Skip to the start of the previously played track."
msgstr ""
-#: redbot/cogs/audio/audio.py:1474 redbot/cogs/audio/audio.py:2121
+#: redbot/cogs/audio/audio.py:2535 redbot/cogs/audio/audio.py:3317
msgid "You need the DJ role to skip tracks."
msgstr ""
-#: redbot/cogs/audio/audio.py:1479 redbot/cogs/audio/audio.py:2115
+#: redbot/cogs/audio/audio.py:2540 redbot/cogs/audio/audio.py:3311
msgid "You must be in the voice channel to skip the music."
msgstr ""
-#: redbot/cogs/audio/audio.py:1482
+#: redbot/cogs/audio/audio.py:2543
msgid "Turn shuffle off to use this command."
msgstr ""
-#: redbot/cogs/audio/audio.py:1484
+#: redbot/cogs/audio/audio.py:2545
msgid "No previous track."
msgstr ""
-#: redbot/cogs/audio/audio.py:1501
+#: redbot/cogs/audio/audio.py:2562
msgid "Replaying Track"
msgstr ""
-#: redbot/cogs/audio/audio.py:1509
+#: redbot/cogs/audio/audio.py:2571
#, docstring
-msgid "List the queue.\n\n"
-" Use [p]queue search to search the queue.\n"
-" "
+msgid "List the songs in the queue."
msgstr ""
-#: redbot/cogs/audio/audio.py:1514 redbot/cogs/audio/audio.py:1517
-#: redbot/cogs/audio/audio.py:1544 redbot/cogs/audio/audio.py:2221
-#: redbot/cogs/audio/audio.py:2225 redbot/cogs/audio/audio.py:2232
-msgid "There's nothing in the queue."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:1553
+#: redbot/cogs/audio/audio.py:2622
msgid "**Currently livestreaming:**"
msgstr ""
-#: redbot/cogs/audio/audio.py:1559 redbot/cogs/audio/audio.py:1569
-#: redbot/cogs/audio/audio.py:1575
+#: redbot/cogs/audio/audio.py:2628 redbot/cogs/audio/audio.py:2638
+#: redbot/cogs/audio/audio.py:2644
msgid "Playing: "
msgstr ""
-#: redbot/cogs/audio/audio.py:1562 redbot/cogs/audio/audio.py:1570
-msgid "Requested by: **{user}**\n"
+#: redbot/cogs/audio/audio.py:2631
+msgid "Requested by: **{user}**\\n"
msgstr ""
-#: redbot/cogs/audio/audio.py:1577
+#: redbot/cogs/audio/audio.py:2639
+msgid "Requested by: **{user}**\\n"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2646
msgid "Requested by: **{user}**"
msgstr ""
-#: redbot/cogs/audio/audio.py:1595 redbot/cogs/audio/audio.py:1599
-#: redbot/cogs/audio/audio.py:1604
-msgid "requested by **{user}**\n"
+#: redbot/cogs/audio/audio.py:2664
+msgid "requested by **{user}**\\n"
msgstr ""
-#: redbot/cogs/audio/audio.py:1615
+#: redbot/cogs/audio/audio.py:2668
+msgid "requested by **{user}**\\n"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2673
+msgid "requested by **{user}**\\n"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2684
msgid "Page {page_num}/{total_pages} | {num_tracks} tracks, {num_remaining} remaining"
msgstr ""
-#: redbot/cogs/audio/audio.py:1624
+#: redbot/cogs/audio/audio.py:2693
msgid "Repeat"
msgstr ""
-#: redbot/cogs/audio/audio.py:1626
+#: redbot/cogs/audio/audio.py:2695
msgid "Shuffle"
msgstr ""
-#: redbot/cogs/audio/audio.py:1683
+#: redbot/cogs/audio/audio.py:2740
msgid "Matching Tracks:"
msgstr ""
-#: redbot/cogs/audio/audio.py:1686 redbot/cogs/audio/audio.py:2010
+#: redbot/cogs/audio/audio.py:2743 redbot/cogs/audio/audio.py:3182
msgid "Page {page_num}/{total_pages}"
msgstr ""
-#: redbot/cogs/audio/audio.py:1695
+#: redbot/cogs/audio/audio.py:2752
+#, docstring
+msgid "Clears the queue."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2764
+msgid "You need the DJ role to clear the queue."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2766
+msgid "The queue has been cleared."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2771
+#, docstring
+msgid "Removes songs from the queue if the requester is not in the voice channel."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2783
+msgid "You need the DJ role to clean the queue."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2794
+msgid "Removed 0 tracks."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2798
+msgid "Removed {removed_tracks} tracks queued by members outside of the voice channel."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2806
+#, docstring
+msgid "Search the queue."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2829
#, docstring
msgid "Toggle repeat."
msgstr ""
-#: redbot/cogs/audio/audio.py:1701
+#: redbot/cogs/audio/audio.py:2835
msgid "You need the DJ role to toggle repeat."
msgstr ""
-#: redbot/cogs/audio/audio.py:1712
+#: redbot/cogs/audio/audio.py:2843
msgid "You must be in the voice channel to toggle repeat."
msgstr ""
-#: redbot/cogs/audio/audio.py:1715
+#: redbot/cogs/audio/audio.py:2849
msgid "Repeat tracks: {true_or_false}."
msgstr ""
-#: redbot/cogs/audio/audio.py:1721
+#: redbot/cogs/audio/audio.py:2857
#, docstring
msgid "Remove a specific track number from the queue."
msgstr ""
-#: redbot/cogs/audio/audio.py:1727
+#: redbot/cogs/audio/audio.py:2863
msgid "Nothing queued."
msgstr ""
-#: redbot/cogs/audio/audio.py:1730
+#: redbot/cogs/audio/audio.py:2866
msgid "You need the DJ role to remove tracks."
msgstr ""
-#: redbot/cogs/audio/audio.py:1735
+#: redbot/cogs/audio/audio.py:2871
msgid "You must be in the voice channel to manage the queue."
msgstr ""
-#: redbot/cogs/audio/audio.py:1751
+#: redbot/cogs/audio/audio.py:2887
msgid "Removed {track} from the queue."
msgstr ""
-#: redbot/cogs/audio/audio.py:1757
+#: redbot/cogs/audio/audio.py:2894
#, docstring
-msgid "Pick a track with a search.\n\n"
-" Use `[p]search list ` to queue all tracks found\n"
-" on YouTube. `[p]search sc ` will search SoundCloud\n"
-" instead of YouTube.\n"
-" "
+msgid "Pick a track with a search.\\n\\n Use `[p]search list ` to queue all tracks found\\n on YouTube. `[p]search sc ` will search SoundCloud\\n instead of YouTube.\\n "
msgstr ""
-#: redbot/cogs/audio/audio.py:1814
+#: redbot/cogs/audio/audio.py:2958
msgid "You must be in the voice channel to enqueue tracks."
msgstr ""
-#: redbot/cogs/audio/audio.py:1831
-msgid "Queued {num} track(s)."
+#: redbot/cogs/audio/audio.py:2997
+msgid "Queued {num} track(s).{maxlength_msg}"
msgstr ""
-#: redbot/cogs/audio/audio.py:1837
+#: redbot/cogs/audio/audio.py:3003
msgid "{time} until start of search playback: starts at #{position} in queue"
msgstr ""
-#: redbot/cogs/audio/audio.py:1997
+#: redbot/cogs/audio/audio.py:3169
msgid "Tracks Found:"
msgstr ""
-#: redbot/cogs/audio/audio.py:1998
+#: redbot/cogs/audio/audio.py:3170
msgid "search results"
msgstr ""
-#: redbot/cogs/audio/audio.py:2001
+#: redbot/cogs/audio/audio.py:3173
msgid "Folders Found:"
msgstr ""
-#: redbot/cogs/audio/audio.py:2002
+#: redbot/cogs/audio/audio.py:3174
msgid "local folders"
msgstr ""
-#: redbot/cogs/audio/audio.py:2004
+#: redbot/cogs/audio/audio.py:3176
msgid "Files Found:"
msgstr ""
-#: redbot/cogs/audio/audio.py:2005
+#: redbot/cogs/audio/audio.py:3177
msgid "local tracks"
msgstr ""
-#: redbot/cogs/audio/audio.py:2022
+#: redbot/cogs/audio/audio.py:3195
#, docstring
-msgid "Seek ahead or behind on a track by seconds."
+msgid "Seek ahead or behind on a track by seconds or a to a specific time.\\n\\n Accepts seconds or a value formatted like 00:00:00 (`hh:mm:ss`) or 00:00 (`mm:ss`)."
msgstr ""
-#: redbot/cogs/audio/audio.py:2031
+#: redbot/cogs/audio/audio.py:3206
msgid "You must be in the voice channel to use seek."
msgstr ""
-#: redbot/cogs/audio/audio.py:2036
+#: redbot/cogs/audio/audio.py:3211
msgid "You need the DJ role to use seek."
msgstr ""
-#: redbot/cogs/audio/audio.py:2042 redbot/cogs/audio/audio.py:2278
+#: redbot/cogs/audio/audio.py:3217 redbot/cogs/audio/audio.py:3510
msgid "There are other people listening - vote to skip instead."
msgstr ""
-#: redbot/cogs/audio/audio.py:2046
+#: redbot/cogs/audio/audio.py:3221
msgid "Can't seek on a stream."
msgstr ""
-#: redbot/cogs/audio/audio.py:2052
+#: redbot/cogs/audio/audio.py:3230
+msgid "Invalid input for the time to seek."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:3236
msgid "Moved {num_seconds}s to 00:00:00"
msgstr ""
-#: redbot/cogs/audio/audio.py:2057
+#: redbot/cogs/audio/audio.py:3241
msgid "Moved {num_seconds}s to {time}"
msgstr ""
-#: redbot/cogs/audio/audio.py:2068
+#: redbot/cogs/audio/audio.py:3249
+msgid "Moved to {time}"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:3261
#, docstring
msgid "Toggle shuffle."
msgstr ""
-#: redbot/cogs/audio/audio.py:2072
+#: redbot/cogs/audio/audio.py:3265
msgid "You need the DJ role to toggle shuffle."
msgstr ""
-#: redbot/cogs/audio/audio.py:2083
+#: redbot/cogs/audio/audio.py:3273
msgid "You must be in the voice channel to toggle shuffle."
msgstr ""
-#: redbot/cogs/audio/audio.py:2086
+#: redbot/cogs/audio/audio.py:3279
msgid "Shuffle tracks: {true_or_false}."
msgstr ""
-#: redbot/cogs/audio/audio.py:2092
+#: redbot/cogs/audio/audio.py:3287
#, docstring
-msgid "Make Red sing one of her songs"
+msgid "Make Red sing one of her songs."
msgstr ""
-#: redbot/cogs/audio/audio.py:2107
+#: redbot/cogs/audio/audio.py:3303
#, docstring
-msgid "Skip to the next track."
+msgid "Skip to the next track, or to a given track number."
msgstr ""
-#: redbot/cogs/audio/audio.py:2126
+#: redbot/cogs/audio/audio.py:3322
+msgid "Can't skip to a specific track in vote mode without the DJ role."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:3326
msgid "I removed your vote to skip."
msgstr ""
-#: redbot/cogs/audio/audio.py:2129
+#: redbot/cogs/audio/audio.py:3329
msgid "You voted to skip."
msgstr ""
-#: redbot/cogs/audio/audio.py:2142
+#: redbot/cogs/audio/audio.py:3342
msgid "Vote threshold met."
msgstr ""
-#: redbot/cogs/audio/audio.py:2145
+#: redbot/cogs/audio/audio.py:3345
msgid " Votes: {num_votes}/{num_members} ({cur_percent}% out of {required_percent}% needed)"
msgstr ""
-#: redbot/cogs/audio/audio.py:2228
+#: redbot/cogs/audio/audio.py:3425
msgid "Currently livestreaming {track}"
msgstr ""
-#: redbot/cogs/audio/audio.py:2235
+#: redbot/cogs/audio/audio.py:3432
msgid "{time} left on {track}"
msgstr ""
-#: redbot/cogs/audio/audio.py:2253
+#: redbot/cogs/audio/audio.py:3441
+msgid "Track number must be equal to or greater than 1."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:3454
+msgid "Can't skip to a track while shuffle is enabled."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:3470
msgid "Track Skipped"
msgstr ""
-#: redbot/cogs/audio/audio.py:2261
+#: redbot/cogs/audio/audio.py:3493
#, docstring
msgid "Stop playback and clear the queue."
msgstr ""
-#: redbot/cogs/audio/audio.py:2271
+#: redbot/cogs/audio/audio.py:3503
msgid "You must be in the voice channel to stop the music."
msgstr ""
-#: redbot/cogs/audio/audio.py:2282
+#: redbot/cogs/audio/audio.py:3514
msgid "You need the DJ role to stop the music."
msgstr ""
-#: redbot/cogs/audio/audio.py:2284
+#: redbot/cogs/audio/audio.py:3516
msgid "Stopping..."
msgstr ""
-#: redbot/cogs/audio/audio.py:2294
+#: redbot/cogs/audio/audio.py:3531
+#, docstring
+msgid "Summon the bot to a voice channel."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:3535
+msgid "You need the DJ role to summon the bot."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:3565
#, docstring
msgid "Set the volume, 1% - 150%."
msgstr ""
-#: redbot/cogs/audio/audio.py:2300
+#: redbot/cogs/audio/audio.py:3571
msgid "Current Volume:"
msgstr ""
-#: redbot/cogs/audio/audio.py:2312
+#: redbot/cogs/audio/audio.py:3583
msgid "You must be in the voice channel to change the volume."
msgstr ""
-#: redbot/cogs/audio/audio.py:2318
+#: redbot/cogs/audio/audio.py:3589
msgid "You need the DJ role to change the volume."
msgstr ""
-#: redbot/cogs/audio/audio.py:2331
+#: redbot/cogs/audio/audio.py:3602
msgid "Volume:"
msgstr ""
-#: redbot/cogs/audio/audio.py:2341
+#: redbot/cogs/audio/audio.py:3613
#, docstring
msgid "Lavalink server configuration options."
msgstr ""
-#: redbot/cogs/audio/audio.py:2346
+#: redbot/cogs/audio/audio.py:3618
#, docstring
msgid "Toggle using external lavalink servers."
msgstr ""
-#: redbot/cogs/audio/audio.py:2357 redbot/cogs/audio/audio.py:2366
+#: redbot/cogs/audio/audio.py:3625 redbot/cogs/audio/audio.py:3635
msgid "External lavalink server: {true_or_false}."
msgstr ""
-#: redbot/cogs/audio/audio.py:2361
-msgid "Defaults reset."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:2373
+#: redbot/cogs/audio/audio.py:3642
#, docstring
msgid "Set the lavalink server host."
msgstr ""
-#: redbot/cogs/audio/audio.py:2377 redbot/cogs/audio/audio.py:2382
+#: redbot/cogs/audio/audio.py:3646 redbot/cogs/audio/audio.py:3651
msgid "Host set to {host}."
msgstr ""
-#: redbot/cogs/audio/audio.py:2379 redbot/cogs/audio/audio.py:2395
-#: redbot/cogs/audio/audio.py:2413 redbot/cogs/audio/audio.py:2429
+#: redbot/cogs/audio/audio.py:3648 redbot/cogs/audio/audio.py:3664
+#: redbot/cogs/audio/audio.py:3682 redbot/cogs/audio/audio.py:3698
msgid "External lavalink server set to True."
msgstr ""
-#: redbot/cogs/audio/audio.py:2388
+#: redbot/cogs/audio/audio.py:3657
#, docstring
msgid "Set the lavalink server password."
msgstr ""
-#: redbot/cogs/audio/audio.py:2393 redbot/cogs/audio/audio.py:2399
+#: redbot/cogs/audio/audio.py:3662 redbot/cogs/audio/audio.py:3668
msgid "Server password set to {password}."
msgstr ""
-#: redbot/cogs/audio/audio.py:2406
+#: redbot/cogs/audio/audio.py:3675
#, docstring
msgid "Set the lavalink REST server port."
msgstr ""
-#: redbot/cogs/audio/audio.py:2411 redbot/cogs/audio/audio.py:2416
+#: redbot/cogs/audio/audio.py:3680 redbot/cogs/audio/audio.py:3685
msgid "REST port set to {port}."
msgstr ""
-#: redbot/cogs/audio/audio.py:2422
+#: redbot/cogs/audio/audio.py:3691
#, docstring
msgid "Set the lavalink websocket server port."
msgstr ""
-#: redbot/cogs/audio/audio.py:2427 redbot/cogs/audio/audio.py:2432
+#: redbot/cogs/audio/audio.py:3696 redbot/cogs/audio/audio.py:3701
msgid "Websocket port set to {port}."
msgstr ""
-#: redbot/cogs/audio/audio.py:2461
+#: redbot/cogs/audio/audio.py:3801
msgid "Not enough {currency} ({required_credits} required)."
msgstr ""
diff --git a/redbot/cogs/audio/locales/no-NO.po b/redbot/cogs/audio/locales/no-NO.po
index b061d261f..f74db0f22 100644
--- a/redbot/cogs/audio/locales/no-NO.po
+++ b/redbot/cogs/audio/locales/no-NO.po
@@ -1,14 +1,14 @@
msgid ""
msgstr ""
"Project-Id-Version: red-discordbot\n"
-"POT-Creation-Date: 2019-02-17 02:24+0000\n"
-"PO-Revision-Date: 2019-02-25 03:07\n"
-"Last-Translator: Kowlin \n"
+"POT-Creation-Date: 2019-07-05 22:33+0200\n"
+"PO-Revision-Date: 2019-07-06 16:13\n"
+"Last-Translator: Robert Jansen (Kowlin)\n"
"Language-Team: Norwegian\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"Generated-By: redgettext 2.2\n"
+"Generated-By: redgettext 3.0\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: crowdin.com\n"
"X-Crowdin-Project: red-discordbot\n"
@@ -16,971 +16,1275 @@ msgstr ""
"X-Crowdin-File: /cogs/audio/locales/messages.pot\n"
"Language: no_NO\n"
-#: redbot/cogs/audio/audio.py:38
+#: redbot/cogs/audio/audio.py:47
#, docstring
msgid "Play audio through voice channels."
msgstr ""
-#: redbot/cogs/audio/audio.py:173 redbot/cogs/audio/audio.py:735
-msgid "Now Playing"
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:177
-msgid "Track length: {length} | Requested by: {user}"
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:201 redbot/cogs/audio/audio.py:227
+#: redbot/cogs/audio/audio.py:260
msgid "music in {} servers"
msgstr ""
-#: redbot/cogs/audio/audio.py:211
+#: redbot/cogs/audio/audio.py:300 redbot/cogs/audio/audio.py:1317
+msgid "Now Playing"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:304
+msgid "Track length: {length} | Requested by: {user}"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:331
msgid "Queue ended."
msgstr ""
-#: redbot/cogs/audio/audio.py:240
+#: redbot/cogs/audio/audio.py:350
msgid "Track Error"
msgstr ""
-#: redbot/cogs/audio/audio.py:245
+#: redbot/cogs/audio/audio.py:355
msgid "Skipping..."
msgstr ""
-#: redbot/cogs/audio/audio.py:252
+#: redbot/cogs/audio/audio.py:363
#, docstring
msgid "Music configuration options."
msgstr ""
-#: redbot/cogs/audio/audio.py:258
+#: redbot/cogs/audio/audio.py:369
#, docstring
-msgid "Toggle DJ mode.\n\n"
-" DJ mode allows users with the DJ role to use audio commands.\n"
-" "
+msgid "Toggle the bot auto-disconnecting when done playing.\\n\\n This setting takes precedence over [p]audioset emptydisconnect.\\n "
msgstr ""
-#: redbot/cogs/audio/audio.py:265
+#: redbot/cogs/audio/audio.py:377
+msgid "Auto-disconnection at queue end: {true_or_false}."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:385
+#, docstring
+msgid "Toggle DJ mode.\\n\\n DJ mode allows users with the DJ role to use audio commands.\\n "
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:392
msgid "Please set a role to use with DJ mode. Enter the role name or ID now."
msgstr ""
-#: redbot/cogs/audio/audio.py:273
+#: redbot/cogs/audio/audio.py:400
msgid "Response timed out, try again later."
msgstr ""
-#: redbot/cogs/audio/audio.py:284
+#: redbot/cogs/audio/audio.py:405
+msgid "DJ role enabled: {true_or_false}."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:411
#, docstring
msgid "Auto-disconnection after x seconds while stopped. 0 to disable."
msgstr ""
-#: redbot/cogs/audio/audio.py:286 redbot/cogs/audio/audio.py:317
-#: redbot/cogs/audio/audio.py:405
+#: redbot/cogs/audio/audio.py:413 redbot/cogs/audio/audio.py:436
+#: redbot/cogs/audio/audio.py:543 redbot/cogs/audio/audio.py:687
msgid "Can't be less than zero."
msgstr ""
-#: redbot/cogs/audio/audio.py:291
+#: redbot/cogs/audio/audio.py:418
msgid "Empty disconnect disabled."
msgstr ""
-#: redbot/cogs/audio/audio.py:296
+#: redbot/cogs/audio/audio.py:423
msgid "Empty disconnect timer set to {num_seconds}."
msgstr ""
-#: redbot/cogs/audio/audio.py:307
-#, docstring
-msgid "Set the role to use for DJ mode."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:310
-msgid "DJ role set to: {role.name}."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:315
+#: redbot/cogs/audio/audio.py:434
#, docstring
msgid "Set a price for queueing tracks for non-mods. 0 to disable."
msgstr ""
-#: redbot/cogs/audio/audio.py:320
+#: redbot/cogs/audio/audio.py:439
msgid "Jukebox mode disabled."
msgstr ""
-#: redbot/cogs/audio/audio.py:325
+#: redbot/cogs/audio/audio.py:444
msgid "Track queueing command price set to {price} {currency}."
msgstr ""
-#: redbot/cogs/audio/audio.py:336
+#: redbot/cogs/audio/audio.py:455
+#, docstring
+msgid "Set the localtracks path if the Lavalink.jar is not run from the Audio data folder.\\n\\n Leave the path blank to reset the path to the default, the Audio data directory.\\n "
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:463
+msgid "The localtracks path location has been reset to the default location."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:466
+msgid "This setting is only for bot owners to set a localtracks folder location if the Lavalink.jar is being ran from outside of the Audio data directory.\\nIn the example below, the full path for 'ParentDirectory' must be passed to this command.\\nThe path must not contain spaces.\\n```\\nParentDirectory\\n |__ localtracks (folder)\\n | |__ Awesome Album Name (folder)\\n | |__01 Cool Song.mp3\\n | |__02 Groovy Song.mp3\\n |\\n |__ Lavalink.jar\\n |__ application.yml\\n```\\nThe folder path given to this command must contain the Lavalink.jar, the application.yml, and the localtracks folder.\\nUse this command with no path given to reset it to the default, the Audio data directory for this bot.\\nDo you want to continue to set the provided path for local tracks?"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:505
+msgid "{local_path} does not seem like a valid path."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:520
+msgid "The path that was entered does not have {filelist} file in that location. The path will still be saved, but please check the path and the file location before attempting to play local tracks or start your Lavalink.jar."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:530
+msgid "Localtracks path set to: {local_path}."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:536
+#, docstring
+msgid "Max length of a track to queue in seconds. 0 to disable.\\n\\n Accepts seconds or a value formatted like 00:00:00 (`hh:mm:ss`) or 00:00 (`mm:ss`).\\n Invalid input will turn the max length setting off."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:545
+msgid "Track max length disabled."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:549
+msgid "Track max length set to {seconds}."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:559
#, docstring
msgid "Toggle track announcement and other bot messages."
msgstr ""
-#: redbot/cogs/audio/audio.py:340
+#: redbot/cogs/audio/audio.py:563
msgid "Verbose mode on: {true_or_false}."
msgstr ""
-#: redbot/cogs/audio/audio.py:345
+#: redbot/cogs/audio/audio.py:569
+#, docstring
+msgid "Toggle the domain restriction on Audio.\\n\\n When toggled off, users will be able to play songs from non-commercial websites and links.\\n When toggled on, users are restricted to YouTube, SoundCloud, Mixer, Vimeo, Twitch, and Bandcamp links."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:576
+msgid "Commercial links only: {true_or_false}."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:582
+#, docstring
+msgid "Set the role to use for DJ mode."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:585
+msgid "DJ role set to: {role.name}."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:589
#, docstring
msgid "Show the current settings."
msgstr ""
-#: redbot/cogs/audio/audio.py:358
+#: redbot/cogs/audio/audio.py:604
msgid "Server Settings"
msgstr ""
-#: redbot/cogs/audio/audio.py:360
-msgid "Disconnect timer: [{num_seconds}]\n"
+#: redbot/cogs/audio/audio.py:606
+msgid "Auto-disconnect: [{dc}]\\n"
msgstr ""
-#: redbot/cogs/audio/audio.py:364
-msgid "DJ Role: [{role.name}]\n"
+#: redbot/cogs/audio/audio.py:609
+msgid "Disconnect timer: [{num_seconds}]\\n"
msgstr ""
-#: redbot/cogs/audio/audio.py:366
-msgid "Jukebox: [{jukebox_name}]\n"
+#: redbot/cogs/audio/audio.py:613
+msgid "DJ Role: [{role.name}]\\n"
msgstr ""
-#: redbot/cogs/audio/audio.py:367
-msgid "Command price: [{jukebox_price}]\n"
+#: redbot/cogs/audio/audio.py:615
+msgid "Jukebox: [{jukebox_name}]\\n"
msgstr ""
-#: redbot/cogs/audio/audio.py:368
-msgid "Repeat: [{repeat}]\n"
-"Shuffle: [{shuffle}]\n"
-"Song notify msgs: [{notify}]\n"
-"Songs as status: [{status}]\n"
+#: redbot/cogs/audio/audio.py:616
+msgid "Command price: [{jukebox_price}]\\n"
msgstr ""
-#: redbot/cogs/audio/audio.py:375
-msgid "Thumbnails: [{0}]\n"
+#: redbot/cogs/audio/audio.py:618
+msgid "Max track length: [{tracklength}]\\n"
msgstr ""
-#: redbot/cogs/audio/audio.py:377
-msgid "Vote skip: [{vote_enabled}]\n"
-"Skip percentage: [{vote_percent}%]\n"
+#: redbot/cogs/audio/audio.py:621
+msgid "Repeat: [{repeat}]\\nShuffle: [{shuffle}]\\nSong notify msgs: [{notify}]\\nSongs as status: [{status}]\\n"
msgstr ""
-#: redbot/cogs/audio/audio.py:380
-msgid "---Lavalink Settings---\n"
-"Cog version: [{version}]\n"
-"Jar build: [{jarbuild}]\n"
-"External server: [{use_external_lavalink}]"
+#: redbot/cogs/audio/audio.py:628
+msgid "Thumbnails: [{0}]\\n"
msgstr ""
-#: redbot/cogs/audio/audio.py:393
+#: redbot/cogs/audio/audio.py:630
+msgid "Vote skip: [{vote_enabled}]\\nSkip percentage: [{vote_percent}%]\\n"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:633
+msgid "---Lavalink Settings--- \\nCog version: [{version}]\\nJar build: [{jarbuild}]\\nExternal server: [{use_external_lavalink}]\\n"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:640
+msgid "Localtracks path: [{localpath}]\\n"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:648
#, docstring
-msgid "Toggle displaying a thumbnail on audio messages."
+msgid "Instructions to set the Spotify API tokens."
msgstr ""
-#: redbot/cogs/audio/audio.py:397
-msgid "Thumbnail display: {true_or_false}."
+#: redbot/cogs/audio/audio.py:649
+msgid "1. Go to Spotify developers and log in with your Spotify account.\\n(https://developer.spotify.com/dashboard/applications)\\n2. Click \\\"Create An App\\\".\\n3. Fill out the form provided with your app name, etc.\\n4. When asked if you're developing commercial integration select \\\"No\\\".\\n5. Accept the terms and conditions.\\n6. Copy your client ID and your client secret into:\\n`{prefix}set api spotify client_id, client_secret,`"
msgstr ""
-#: redbot/cogs/audio/audio.py:403
-#, docstring
-msgid "Percentage needed for non-mods to skip tracks. 0 to disable."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:411
-msgid "Voting disabled. All users can use queue management commands."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:416
-msgid "Vote percentage set to {percent}%."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:425
+#: redbot/cogs/audio/audio.py:665
#, docstring
msgid "Enable/disable tracks' titles as status."
msgstr ""
-#: redbot/cogs/audio/audio.py:429
+#: redbot/cogs/audio/audio.py:669
msgid "Song titles as status: {true_or_false}."
msgstr ""
-#: redbot/cogs/audio/audio.py:435
+#: redbot/cogs/audio/audio.py:675
+#, docstring
+msgid "Toggle displaying a thumbnail on audio messages."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:679
+msgid "Thumbnail display: {true_or_false}."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:685
+#, docstring
+msgid "Percentage needed for non-mods to skip tracks. 0 to disable."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:693
+msgid "Voting disabled. All users can use queue management commands."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:698
+msgid "Vote percentage set to {percent}%."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:707
+#, docstring
+msgid "Instructions to set the YouTube API key."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:726
#, docstring
msgid "Audio stats."
msgstr ""
-#: redbot/cogs/audio/audio.py:469 redbot/cogs/audio/audio.py:489
-#: redbot/cogs/audio/audio.py:698 redbot/cogs/audio/audio.py:788
-#: redbot/cogs/audio/audio.py:804 redbot/cogs/audio/audio.py:829
-#: redbot/cogs/audio/audio.py:836 redbot/cogs/audio/audio.py:1179
-#: redbot/cogs/audio/audio.py:1466 redbot/cogs/audio/audio.py:1724
-#: redbot/cogs/audio/audio.py:2026 redbot/cogs/audio/audio.py:2063
-#: redbot/cogs/audio/audio.py:2109 redbot/cogs/audio/audio.py:2265
-#: redbot/cogs/audio/audio.py:2304 redbot/cogs/audio/audio.py:2334
+#: redbot/cogs/audio/audio.py:754 redbot/cogs/audio/audio.py:782
+#: redbot/cogs/audio/audio.py:819 redbot/cogs/audio/audio.py:847
+#: redbot/cogs/audio/audio.py:914 redbot/cogs/audio/audio.py:932
+#: redbot/cogs/audio/audio.py:956 redbot/cogs/audio/audio.py:1026
+#: redbot/cogs/audio/audio.py:1280 redbot/cogs/audio/audio.py:1371
+#: redbot/cogs/audio/audio.py:1388 redbot/cogs/audio/audio.py:1411
+#: redbot/cogs/audio/audio.py:1419 redbot/cogs/audio/audio.py:2190
+#: redbot/cogs/audio/audio.py:2527 redbot/cogs/audio/audio.py:2860
+#: redbot/cogs/audio/audio.py:3201 redbot/cogs/audio/audio.py:3255
+#: redbot/cogs/audio/audio.py:3305 redbot/cogs/audio/audio.py:3497
+#: redbot/cogs/audio/audio.py:3575 redbot/cogs/audio/audio.py:3605
msgid "Nothing playing."
msgstr ""
-#: redbot/cogs/audio/audio.py:473
+#: redbot/cogs/audio/audio.py:758
msgid "Not connected anywhere."
msgstr ""
-#: redbot/cogs/audio/audio.py:478
-msgid "Connected in {num} servers:"
+#: redbot/cogs/audio/audio.py:764
+msgid "Playing in {num}/{total} servers:"
msgstr ""
-#: redbot/cogs/audio/audio.py:486
+#: redbot/cogs/audio/audio.py:779
#, docstring
msgid "Bump a track number to the top of the queue."
msgstr ""
-#: redbot/cogs/audio/audio.py:495
+#: redbot/cogs/audio/audio.py:788
msgid "You must be in the voice channel to bump a track."
msgstr ""
-#: redbot/cogs/audio/audio.py:499
+#: redbot/cogs/audio/audio.py:792
msgid "You need the DJ role to bump tracks."
msgstr ""
-#: redbot/cogs/audio/audio.py:502 redbot/cogs/audio/audio.py:1739
+#: redbot/cogs/audio/audio.py:795 redbot/cogs/audio/audio.py:2875
msgid "Song number must be greater than 1 and within the queue limit."
msgstr ""
-#: redbot/cogs/audio/audio.py:517
+#: redbot/cogs/audio/audio.py:810
msgid "Moved {track} to the top of the queue."
msgstr ""
-#: redbot/cogs/audio/audio.py:523
+#: redbot/cogs/audio/audio.py:817
#, docstring
msgid "Disconnect from the voice channel."
msgstr ""
-#: redbot/cogs/audio/audio.py:528
+#: redbot/cogs/audio/audio.py:826
msgid "You need the DJ role to disconnect."
msgstr ""
-#: redbot/cogs/audio/audio.py:532
+#: redbot/cogs/audio/audio.py:830
msgid "There are other people listening to music."
msgstr ""
-#: redbot/cogs/audio/audio.py:540
+#: redbot/cogs/audio/audio.py:845
+#, docstring
+msgid "Equalizer management."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:865
+#, docstring
+msgid "Delete a saved eq preset."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:887
+#, docstring
+msgid "List saved eq presets."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:890
+msgid "No saved equalizer presets."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:897
+msgid "{num} preset(s)"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:903
+#, docstring
+msgid "Load a saved eq preset."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:930
+#, docstring
+msgid "Reset the eq to 0 across all bands."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:946
+msgid "Equalizer values have been reset."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:954
+#, docstring
+msgid "Save the current eq settings to a preset."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:958
+msgid "Please enter a name for this equalizer preset."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:972
+msgid "No equalizer preset name entered, try the command again later."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:981 redbot/cogs/audio/audio.py:2213
+msgid "Try the command again with a shorter name."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:985
+msgid "Preset name already exists, do you want to replace it?"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:994
+msgid "Not saving preset."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1019
+#, docstring
+msgid "Set an eq band with a band number or name and value.\\n\\n Band positions are 1-15 and values have a range of -0.25 to 1.0.\\n Band names are 25, 40, 63, 100, 160, 250, 400, 630, 1k, 1.6k, 2.5k, 4k, 6.3k, 10k, and 16k Hz.\\n Setting a band value to -0.25 nullifies it while +0.25 is double.\\n "
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1063
+msgid "Valid band numbers are 1-15 or the band names listed in the help for this command."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1099
#, docstring
msgid "Local playback commands."
msgstr ""
-#: redbot/cogs/audio/audio.py:545
+#: redbot/cogs/audio/audio.py:1104
#, docstring
msgid "Play all songs in a localtracks folder."
msgstr ""
-#: redbot/cogs/audio/audio.py:552
+#: redbot/cogs/audio/audio.py:1115
+msgid "No localtracks folder named {name}."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1121
#, docstring
msgid "Play a local track."
msgstr ""
-#: redbot/cogs/audio/audio.py:557
+#: redbot/cogs/audio/audio.py:1126
msgid "No local track folders found."
msgstr ""
-#: redbot/cogs/audio/audio.py:600
+#: redbot/cogs/audio/audio.py:1169
#, docstring
msgid "Search for songs across all localtracks folders."
msgstr ""
-#: redbot/cogs/audio/audio.py:605
+#: redbot/cogs/audio/audio.py:1174
msgid "No album folders found."
msgstr ""
-#: redbot/cogs/audio/audio.py:612 redbot/cogs/audio/audio.py:1634
+#: redbot/cogs/audio/audio.py:1181 redbot/cogs/audio/audio.py:2816
msgid "No matches."
msgstr ""
-#: redbot/cogs/audio/audio.py:688
+#: redbot/cogs/audio/audio.py:1269
msgid "No localtracks folder."
msgstr ""
-#: redbot/cogs/audio/audio.py:696
+#: redbot/cogs/audio/audio.py:1278
#, docstring
msgid "Now playing."
msgstr ""
-#: redbot/cogs/audio/audio.py:716
+#: redbot/cogs/audio/audio.py:1298
msgid "Requested by: **{track.requester}**"
msgstr ""
-#: redbot/cogs/audio/audio.py:726
+#: redbot/cogs/audio/audio.py:1308
msgid "Nothing."
msgstr ""
-#: redbot/cogs/audio/audio.py:785
+#: redbot/cogs/audio/audio.py:1368
#, docstring
-msgid "Pause and resume."
+msgid "Pause or resume a playing track."
msgstr ""
-#: redbot/cogs/audio/audio.py:794
-msgid "You must be in the voice channel to pause the music."
+#: redbot/cogs/audio/audio.py:1377
+msgid "You must be in the voice channel pause or resume."
msgstr ""
-#: redbot/cogs/audio/audio.py:800
-msgid "You need the DJ role to pause tracks."
+#: redbot/cogs/audio/audio.py:1384
+msgid "You need the DJ role to pause or resume tracks."
msgstr ""
-#: redbot/cogs/audio/audio.py:814
+#: redbot/cogs/audio/audio.py:1401
msgid "Track Paused"
msgstr ""
-#: redbot/cogs/audio/audio.py:821
+#: redbot/cogs/audio/audio.py:1407
msgid "Track Resumed"
msgstr ""
-#: redbot/cogs/audio/audio.py:826
-msgid "Track is paused."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:828
-msgid "Track is playing."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:834
+#: redbot/cogs/audio/audio.py:1417
#, docstring
msgid "Queue percentage."
msgstr ""
-#: redbot/cogs/audio/audio.py:860
+#: redbot/cogs/audio/audio.py:1443
msgid "Nothing in the queue."
msgstr ""
-#: redbot/cogs/audio/audio.py:882
+#: redbot/cogs/audio/audio.py:1465
msgid "Queued and playing tracks:"
msgstr ""
-#: redbot/cogs/audio/audio.py:890
+#: redbot/cogs/audio/audio.py:1474
#, docstring
msgid "Play a URL or search for a track."
msgstr ""
-#: redbot/cogs/audio/audio.py:900 redbot/cogs/audio/audio.py:1411
-#: redbot/cogs/audio/audio.py:1795
+#: redbot/cogs/audio/audio.py:1481
+msgid "That URL is not allowed."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1484 redbot/cogs/audio/audio.py:2437
+#: redbot/cogs/audio/audio.py:2928 redbot/cogs/audio/audio.py:3047
+msgid "Connection to Lavalink has failed."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1486 redbot/cogs/audio/audio.py:2439
+#: redbot/cogs/audio/audio.py:2930 redbot/cogs/audio/audio.py:3049
+msgid "Please check your console or logs for details."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1495 redbot/cogs/audio/audio.py:2449
+#: redbot/cogs/audio/audio.py:2939 redbot/cogs/audio/audio.py:3543
msgid "I don't have permission to connect to your channel."
msgstr ""
-#: redbot/cogs/audio/audio.py:906 redbot/cogs/audio/audio.py:1422
-#: redbot/cogs/audio/audio.py:1801 redbot/cogs/audio/audio.py:1889
+#: redbot/cogs/audio/audio.py:1501 redbot/cogs/audio/audio.py:2461
+#: redbot/cogs/audio/audio.py:2945 redbot/cogs/audio/audio.py:3056
+#: redbot/cogs/audio/audio.py:3555
msgid "Connect to a voice channel first."
msgstr ""
-#: redbot/cogs/audio/audio.py:909 redbot/cogs/audio/audio.py:1418
-#: redbot/cogs/audio/audio.py:1804 redbot/cogs/audio/audio.py:1892
+#: redbot/cogs/audio/audio.py:1504 redbot/cogs/audio/audio.py:2457
+#: redbot/cogs/audio/audio.py:2948 redbot/cogs/audio/audio.py:3059
+#: redbot/cogs/audio/audio.py:3558
msgid "Connection to Lavalink has not yet been established."
msgstr ""
-#: redbot/cogs/audio/audio.py:913
+#: redbot/cogs/audio/audio.py:1508
msgid "You need the DJ role to queue tracks."
msgstr ""
-#: redbot/cogs/audio/audio.py:922
+#: redbot/cogs/audio/audio.py:1519
msgid "You must be in the voice channel to use the play command."
msgstr ""
-#: redbot/cogs/audio/audio.py:928
+#: redbot/cogs/audio/audio.py:1525
msgid "No tracks to play."
msgstr ""
-#: redbot/cogs/audio/audio.py:942 redbot/cogs/audio/audio.py:1450
-#: redbot/cogs/audio/audio.py:1828 redbot/cogs/audio/audio.py:1865
+#: redbot/cogs/audio/audio.py:1565
+msgid "The owner needs to set the Spotify client ID, Spotify client secret, and YouTube API key before Spotify URLs or codes can be used. \\nSee `{prefix}audioset youtubeapi` and `{prefix}audioset spotifyapi` for instructions."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1575 redbot/cogs/audio/audio.py:2493
+msgid "Wait until the playlist has finished loading."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1592 redbot/cogs/audio/audio.py:1657
+#: redbot/cogs/audio/audio.py:2499 redbot/cogs/audio/audio.py:2509
+#: redbot/cogs/audio/audio.py:2973 redbot/cogs/audio/audio.py:3027
msgid "Nothing found."
msgstr ""
-#: redbot/cogs/audio/audio.py:953 redbot/cogs/audio/audio.py:1295
+#: redbot/cogs/audio/audio.py:1600
+msgid "The Spotify API key or client secret has not been set properly. \\nUse `{prefix}audioset spotifyapi` for instructions."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1639 redbot/cogs/audio/audio.py:1776
+msgid "This doesn't seem to be a valid Spotify URL or code."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1688 redbot/cogs/audio/audio.py:2320
msgid "Playlist Enqueued"
msgstr ""
-#: redbot/cogs/audio/audio.py:954 redbot/cogs/audio/audio.py:1296
-msgid "Added {num} tracks to the queue."
+#: redbot/cogs/audio/audio.py:1689 redbot/cogs/audio/audio.py:2321
+msgid "Added {num} tracks to the queue.{maxlength_msg}"
msgstr ""
-#: redbot/cogs/audio/audio.py:958
+#: redbot/cogs/audio/audio.py:1695
msgid "{time} until start of playlist playback: starts at #{position} in queue"
msgstr ""
-#: redbot/cogs/audio/audio.py:980 redbot/cogs/audio/audio.py:1938
+#: redbot/cogs/audio/audio.py:1711 redbot/cogs/audio/audio.py:3125
+msgid "Track exceeds maximum length."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1717
+msgid "Nothing found. Check your Lavalink logs for details."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1732 redbot/cogs/audio/audio.py:3108
msgid "Track Enqueued"
msgstr ""
-#: redbot/cogs/audio/audio.py:984 redbot/cogs/audio/audio.py:1944
+#: redbot/cogs/audio/audio.py:1736 redbot/cogs/audio/audio.py:3114
msgid "{time} until track playback: #{position} in queue"
msgstr ""
-#: redbot/cogs/audio/audio.py:989 redbot/cogs/audio/audio.py:1949
+#: redbot/cogs/audio/audio.py:1741 redbot/cogs/audio/audio.py:3119
msgid "#{position} in queue"
msgstr ""
-#: redbot/cogs/audio/audio.py:997
+#: redbot/cogs/audio/audio.py:1761
+msgid "The Spotify API key or client secret has not been set properly. \\nUse `{prefix}audioset spotifyapi` for instructions."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1793 redbot/cogs/audio/audio.py:2384
+msgid "Please wait, adding tracks..."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1809
+msgid "The connection was reset while loading the playlist."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1826 redbot/cogs/audio/audio.py:2401
+msgid "Loading track {num}/{total}..."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1840
+msgid "Approximate time remaining: {seconds}"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1850
+msgid "Nothing found.\\nThe YouTube API key may be invalid or you may be rate limited on YouTube's search service.\\nCheck the YouTube API key again and follow the instructions at `{prefix}audioset youtubeapi`."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1871
#, docstring
msgid "Playlist configuration options."
msgstr ""
-#: redbot/cogs/audio/audio.py:1002
+#: redbot/cogs/audio/audio.py:1876
#, docstring
-msgid "Add a track URL, playlist link, or quick search to a playlist.\n\n"
-" The track(s) will be appended to the end of the playlist.\n"
-" "
+msgid "Add a track URL, playlist link, or quick search to a playlist.\\n\\n The track(s) will be appended to the end of the playlist.\\n "
msgstr ""
-#: redbot/cogs/audio/audio.py:1014 redbot/cogs/audio/audio.py:1078
-#: redbot/cogs/audio/audio.py:1228
+#: redbot/cogs/audio/audio.py:1888 redbot/cogs/audio/audio.py:2028
+#: redbot/cogs/audio/audio.py:2241
msgid "You are not the author of that playlist."
msgstr ""
-#: redbot/cogs/audio/audio.py:1024
+#: redbot/cogs/audio/audio.py:1898
msgid "{track} is already in {playlist}."
msgstr ""
-#: redbot/cogs/audio/audio.py:1033 redbot/cogs/audio/audio.py:1082
-#: redbot/cogs/audio/audio.py:1092 redbot/cogs/audio/audio.py:1231
+#: redbot/cogs/audio/audio.py:1907 redbot/cogs/audio/audio.py:2032
+#: redbot/cogs/audio/audio.py:2081 redbot/cogs/audio/audio.py:2244
msgid "No playlist with that name."
msgstr ""
-#: redbot/cogs/audio/audio.py:1040
+#: redbot/cogs/audio/audio.py:1914
msgid "{track} appended to {playlist}."
msgstr ""
-#: redbot/cogs/audio/audio.py:1046
+#: redbot/cogs/audio/audio.py:1920
msgid "{num} tracks appended to {playlist}."
msgstr ""
-#: redbot/cogs/audio/audio.py:1053
+#: redbot/cogs/audio/audio.py:1928
+#, docstring
+msgid "Copy a playlist from one server to another."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1932
+msgid "Invalid server ID for source server."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1934
+msgid "Invalid server ID for target server."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1939
+msgid "No playlist with that name in {from_guild_name}."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1950
+msgid "Playlist {name} copied from {from_guild_name} to {to_guild_name}."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1962
+msgid "A playlist with that name already exists in {to_guild_name}.\\nPlease enter a new name for this playlist."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1975
+msgid "Try the playlist copy command again with a shorter name."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1980
+msgid "Playlist name already exists in {to_guild_name}, try the playlist copy command again with a different name."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1986 redbot/cogs/audio/audio.py:2220
+msgid "No playlist name entered, try again later."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1991
+msgid "Playlist {name} copied from {from_guild_name} to {to_guild_name}.\\nNew playlist name on {to_guild_name}: {new_name}"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2003
#, docstring
msgid "Create an empty playlist."
msgstr ""
-#: redbot/cogs/audio/audio.py:1057 redbot/cogs/audio/audio.py:1172
+#: redbot/cogs/audio/audio.py:2007 redbot/cogs/audio/audio.py:2183
msgid "You need the DJ role to save playlists."
msgstr ""
-#: redbot/cogs/audio/audio.py:1061 redbot/cogs/audio/audio.py:1176
-#: redbot/cogs/audio/audio.py:1204
+#: redbot/cogs/audio/audio.py:2011 redbot/cogs/audio/audio.py:2187
+#: redbot/cogs/audio/audio.py:2217
msgid "Playlist name already exists, try again with a different name."
msgstr ""
-#: redbot/cogs/audio/audio.py:1067
+#: redbot/cogs/audio/audio.py:2017
msgid "Empty playlist {name} created."
msgstr ""
-#: redbot/cogs/audio/audio.py:1071
+#: redbot/cogs/audio/audio.py:2021
#, docstring
msgid "Delete a saved playlist."
msgstr ""
-#: redbot/cogs/audio/audio.py:1083
+#: redbot/cogs/audio/audio.py:2033
msgid "{name} playlist deleted."
msgstr ""
-#: redbot/cogs/audio/audio.py:1087
+#: redbot/cogs/audio/audio.py:2039
+#, docstring
+msgid "Download a copy of a playlist.\\n\\n These files can be used with the [p]playlist upload command.\\n Red v2-compatible playlists can be generated by passing True\\n for the v2 variable."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2061
+msgid "That playlist has no tracks."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2063 redbot/cogs/audio/audio.py:2331
+msgid "That playlist doesn't exist."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2076
#, docstring
msgid "Retrieve information from a saved playlist."
msgstr ""
-#: redbot/cogs/audio/audio.py:1100
-msgid "**Custom playlist.**"
+#: redbot/cogs/audio/audio.py:2101
+msgid "Playlist info for {playlist_name}:\\n"
msgstr ""
-#: redbot/cogs/audio/audio.py:1102
-msgid "URL: <{url}>"
+#: redbot/cogs/audio/audio.py:2105
+msgid "Playlist info for {playlist_name}:\\nURL: {url}"
msgstr ""
-#: redbot/cogs/audio/audio.py:1105
-msgid "Playlist info for {playlist_name}:"
+#: redbot/cogs/audio/audio.py:2116
+msgid "Author: {author_name} | {num} track(s)"
msgstr ""
-#: redbot/cogs/audio/audio.py:1106
-msgid "Author: **{author_name}**\n"
-"{url}"
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:1110
-msgid "{num} track(s)"
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:1115
+#: redbot/cogs/audio/audio.py:2126
#, docstring
msgid "List saved playlists."
msgstr ""
-#: redbot/cogs/audio/audio.py:1118
+#: redbot/cogs/audio/audio.py:2129
msgid "No saved playlists."
msgstr ""
-#: redbot/cogs/audio/audio.py:1130
+#: redbot/cogs/audio/audio.py:2141
msgid "Tracks: {num}"
msgstr ""
-#: redbot/cogs/audio/audio.py:1131
-msgid "Author: {name}\n"
+#: redbot/cogs/audio/audio.py:2142
+msgid "Author: {name}\\n"
msgstr ""
-#: redbot/cogs/audio/audio.py:1155
+#: redbot/cogs/audio/audio.py:2166
msgid "Playlists for {server_name}:"
msgstr ""
-#: redbot/cogs/audio/audio.py:1159
+#: redbot/cogs/audio/audio.py:2170
msgid "Page {page_num}/{total_pages} | {num} playlists"
msgstr ""
-#: redbot/cogs/audio/audio.py:1168
+#: redbot/cogs/audio/audio.py:2179
#, docstring
msgid "Save the queue to a playlist."
msgstr ""
-#: redbot/cogs/audio/audio.py:1189
+#: redbot/cogs/audio/audio.py:2193 redbot/cogs/audio/audio.py:2590
+#: redbot/cogs/audio/audio.py:2593 redbot/cogs/audio/audio.py:2613
+#: redbot/cogs/audio/audio.py:2756 redbot/cogs/audio/audio.py:2759
+#: redbot/cogs/audio/audio.py:2775 redbot/cogs/audio/audio.py:2778
+#: redbot/cogs/audio/audio.py:2810 redbot/cogs/audio/audio.py:2812
+#: redbot/cogs/audio/audio.py:3418 redbot/cogs/audio/audio.py:3422
+#: redbot/cogs/audio/audio.py:3429
+msgid "There's nothing in the queue."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2202
msgid "Please enter a name for this playlist."
msgstr ""
-#: redbot/cogs/audio/audio.py:1200
-msgid "Try the command again with a shorter name."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:1207
-msgid "No playlist name entered, try again later."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:1214
+#: redbot/cogs/audio/audio.py:2227
msgid "Playlist {name} saved from current queue: {num} tracks added."
msgstr ""
-#: redbot/cogs/audio/audio.py:1221
+#: redbot/cogs/audio/audio.py:2234
#, docstring
msgid "Remove a track from a playlist by url."
msgstr ""
-#: redbot/cogs/audio/audio.py:1235
+#: redbot/cogs/audio/audio.py:2248
msgid "URL not in playlist."
msgstr ""
-#: redbot/cogs/audio/audio.py:1239
+#: redbot/cogs/audio/audio.py:2252
msgid "No tracks left, removing playlist."
msgstr ""
-#: redbot/cogs/audio/audio.py:1246
+#: redbot/cogs/audio/audio.py:2259
msgid "{num} entries have been removed from the {playlist_name} playlist."
msgstr ""
-#: redbot/cogs/audio/audio.py:1253
+#: redbot/cogs/audio/audio.py:2266
msgid "The track has been removed from the {playlist_name} playlist."
msgstr ""
-#: redbot/cogs/audio/audio.py:1260
+#: redbot/cogs/audio/audio.py:2273
#, docstring
msgid "Save a playlist from a url."
msgstr ""
-#: redbot/cogs/audio/audio.py:1272
+#: redbot/cogs/audio/audio.py:2285
msgid "Playlist {name} saved: {num} tracks added."
msgstr ""
-#: redbot/cogs/audio/audio.py:1279
+#: redbot/cogs/audio/audio.py:2292
#, docstring
msgid "Load a playlist into the queue."
msgstr ""
-#: redbot/cogs/audio/audio.py:1304
-msgid "That playlist doesn't exist."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:1309
+#: redbot/cogs/audio/audio.py:2336
#, docstring
msgid "Convert a Red v2 playlist file to a playlist."
msgstr ""
-#: redbot/cogs/audio/audio.py:1315
+#: redbot/cogs/audio/audio.py:2342
msgid "Please upload the playlist file. Any other message will cancel this operation."
msgstr ""
-#: redbot/cogs/audio/audio.py:1323
+#: redbot/cogs/audio/audio.py:2350
msgid "No file detected, try again later."
msgstr ""
-#: redbot/cogs/audio/audio.py:1327
+#: redbot/cogs/audio/audio.py:2354
msgid "Upload cancelled."
msgstr ""
-#: redbot/cogs/audio/audio.py:1331
+#: redbot/cogs/audio/audio.py:2358
msgid "Only playlist files can be uploaded."
msgstr ""
-#: redbot/cogs/audio/audio.py:1336
+#: redbot/cogs/audio/audio.py:2363
msgid "Not a valid playlist file."
msgstr ""
-#: redbot/cogs/audio/audio.py:1352
+#: redbot/cogs/audio/audio.py:2379
msgid "A playlist already exists with this name."
msgstr ""
-#: redbot/cogs/audio/audio.py:1357
-msgid "Please wait, adding tracks..."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:1371
-msgid "Loading track {num}/{total}..."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:1377
+#: redbot/cogs/audio/audio.py:2407
msgid "No tracks found."
msgstr ""
-#: redbot/cogs/audio/audio.py:1383
+#: redbot/cogs/audio/audio.py:2413
msgid "Added {num} tracks from the {playlist_name} playlist. {num_bad} track(s) could not be loaded."
msgstr ""
-#: redbot/cogs/audio/audio.py:1388
+#: redbot/cogs/audio/audio.py:2418
msgid "Added {num} tracks from the {playlist_name} playlist."
msgstr ""
-#: redbot/cogs/audio/audio.py:1392
+#: redbot/cogs/audio/audio.py:2422
msgid "Playlist Saved"
msgstr ""
-#: redbot/cogs/audio/audio.py:1403
+#: redbot/cogs/audio/audio.py:2433
msgid "You need the DJ role to use playlists."
msgstr ""
-#: redbot/cogs/audio/audio.py:1432
+#: redbot/cogs/audio/audio.py:2471
msgid "You must be in the voice channel to use the playlist command."
msgstr ""
-#: redbot/cogs/audio/audio.py:1464
+#: redbot/cogs/audio/audio.py:2525
#, docstring
msgid "Skip to the start of the previously played track."
msgstr ""
-#: redbot/cogs/audio/audio.py:1474 redbot/cogs/audio/audio.py:2121
+#: redbot/cogs/audio/audio.py:2535 redbot/cogs/audio/audio.py:3317
msgid "You need the DJ role to skip tracks."
msgstr ""
-#: redbot/cogs/audio/audio.py:1479 redbot/cogs/audio/audio.py:2115
+#: redbot/cogs/audio/audio.py:2540 redbot/cogs/audio/audio.py:3311
msgid "You must be in the voice channel to skip the music."
msgstr ""
-#: redbot/cogs/audio/audio.py:1482
+#: redbot/cogs/audio/audio.py:2543
msgid "Turn shuffle off to use this command."
msgstr ""
-#: redbot/cogs/audio/audio.py:1484
+#: redbot/cogs/audio/audio.py:2545
msgid "No previous track."
msgstr ""
-#: redbot/cogs/audio/audio.py:1501
+#: redbot/cogs/audio/audio.py:2562
msgid "Replaying Track"
msgstr ""
-#: redbot/cogs/audio/audio.py:1509
+#: redbot/cogs/audio/audio.py:2571
#, docstring
-msgid "List the queue.\n\n"
-" Use [p]queue search to search the queue.\n"
-" "
+msgid "List the songs in the queue."
msgstr ""
-#: redbot/cogs/audio/audio.py:1514 redbot/cogs/audio/audio.py:1517
-#: redbot/cogs/audio/audio.py:1544 redbot/cogs/audio/audio.py:2221
-#: redbot/cogs/audio/audio.py:2225 redbot/cogs/audio/audio.py:2232
-msgid "There's nothing in the queue."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:1553
+#: redbot/cogs/audio/audio.py:2622
msgid "**Currently livestreaming:**"
msgstr ""
-#: redbot/cogs/audio/audio.py:1559 redbot/cogs/audio/audio.py:1569
-#: redbot/cogs/audio/audio.py:1575
+#: redbot/cogs/audio/audio.py:2628 redbot/cogs/audio/audio.py:2638
+#: redbot/cogs/audio/audio.py:2644
msgid "Playing: "
msgstr ""
-#: redbot/cogs/audio/audio.py:1562 redbot/cogs/audio/audio.py:1570
-msgid "Requested by: **{user}**\n"
+#: redbot/cogs/audio/audio.py:2631
+msgid "Requested by: **{user}**\\n"
msgstr ""
-#: redbot/cogs/audio/audio.py:1577
+#: redbot/cogs/audio/audio.py:2639
+msgid "Requested by: **{user}**\\n"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2646
msgid "Requested by: **{user}**"
msgstr ""
-#: redbot/cogs/audio/audio.py:1595 redbot/cogs/audio/audio.py:1599
-#: redbot/cogs/audio/audio.py:1604
-msgid "requested by **{user}**\n"
+#: redbot/cogs/audio/audio.py:2664
+msgid "requested by **{user}**\\n"
msgstr ""
-#: redbot/cogs/audio/audio.py:1615
+#: redbot/cogs/audio/audio.py:2668
+msgid "requested by **{user}**\\n"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2673
+msgid "requested by **{user}**\\n"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2684
msgid "Page {page_num}/{total_pages} | {num_tracks} tracks, {num_remaining} remaining"
msgstr ""
-#: redbot/cogs/audio/audio.py:1624
+#: redbot/cogs/audio/audio.py:2693
msgid "Repeat"
msgstr ""
-#: redbot/cogs/audio/audio.py:1626
+#: redbot/cogs/audio/audio.py:2695
msgid "Shuffle"
msgstr ""
-#: redbot/cogs/audio/audio.py:1683
+#: redbot/cogs/audio/audio.py:2740
msgid "Matching Tracks:"
msgstr ""
-#: redbot/cogs/audio/audio.py:1686 redbot/cogs/audio/audio.py:2010
+#: redbot/cogs/audio/audio.py:2743 redbot/cogs/audio/audio.py:3182
msgid "Page {page_num}/{total_pages}"
msgstr ""
-#: redbot/cogs/audio/audio.py:1695
+#: redbot/cogs/audio/audio.py:2752
+#, docstring
+msgid "Clears the queue."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2764
+msgid "You need the DJ role to clear the queue."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2766
+msgid "The queue has been cleared."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2771
+#, docstring
+msgid "Removes songs from the queue if the requester is not in the voice channel."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2783
+msgid "You need the DJ role to clean the queue."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2794
+msgid "Removed 0 tracks."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2798
+msgid "Removed {removed_tracks} tracks queued by members outside of the voice channel."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2806
+#, docstring
+msgid "Search the queue."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2829
#, docstring
msgid "Toggle repeat."
msgstr ""
-#: redbot/cogs/audio/audio.py:1701
+#: redbot/cogs/audio/audio.py:2835
msgid "You need the DJ role to toggle repeat."
msgstr ""
-#: redbot/cogs/audio/audio.py:1712
+#: redbot/cogs/audio/audio.py:2843
msgid "You must be in the voice channel to toggle repeat."
msgstr ""
-#: redbot/cogs/audio/audio.py:1715
+#: redbot/cogs/audio/audio.py:2849
msgid "Repeat tracks: {true_or_false}."
msgstr ""
-#: redbot/cogs/audio/audio.py:1721
+#: redbot/cogs/audio/audio.py:2857
#, docstring
msgid "Remove a specific track number from the queue."
msgstr ""
-#: redbot/cogs/audio/audio.py:1727
+#: redbot/cogs/audio/audio.py:2863
msgid "Nothing queued."
msgstr ""
-#: redbot/cogs/audio/audio.py:1730
+#: redbot/cogs/audio/audio.py:2866
msgid "You need the DJ role to remove tracks."
msgstr ""
-#: redbot/cogs/audio/audio.py:1735
+#: redbot/cogs/audio/audio.py:2871
msgid "You must be in the voice channel to manage the queue."
msgstr ""
-#: redbot/cogs/audio/audio.py:1751
+#: redbot/cogs/audio/audio.py:2887
msgid "Removed {track} from the queue."
msgstr ""
-#: redbot/cogs/audio/audio.py:1757
+#: redbot/cogs/audio/audio.py:2894
#, docstring
-msgid "Pick a track with a search.\n\n"
-" Use `[p]search list ` to queue all tracks found\n"
-" on YouTube. `[p]search sc ` will search SoundCloud\n"
-" instead of YouTube.\n"
-" "
+msgid "Pick a track with a search.\\n\\n Use `[p]search list ` to queue all tracks found\\n on YouTube. `[p]search sc ` will search SoundCloud\\n instead of YouTube.\\n "
msgstr ""
-#: redbot/cogs/audio/audio.py:1814
+#: redbot/cogs/audio/audio.py:2958
msgid "You must be in the voice channel to enqueue tracks."
msgstr ""
-#: redbot/cogs/audio/audio.py:1831
-msgid "Queued {num} track(s)."
+#: redbot/cogs/audio/audio.py:2997
+msgid "Queued {num} track(s).{maxlength_msg}"
msgstr ""
-#: redbot/cogs/audio/audio.py:1837
+#: redbot/cogs/audio/audio.py:3003
msgid "{time} until start of search playback: starts at #{position} in queue"
msgstr ""
-#: redbot/cogs/audio/audio.py:1997
+#: redbot/cogs/audio/audio.py:3169
msgid "Tracks Found:"
msgstr ""
-#: redbot/cogs/audio/audio.py:1998
+#: redbot/cogs/audio/audio.py:3170
msgid "search results"
msgstr ""
-#: redbot/cogs/audio/audio.py:2001
+#: redbot/cogs/audio/audio.py:3173
msgid "Folders Found:"
msgstr ""
-#: redbot/cogs/audio/audio.py:2002
+#: redbot/cogs/audio/audio.py:3174
msgid "local folders"
msgstr ""
-#: redbot/cogs/audio/audio.py:2004
+#: redbot/cogs/audio/audio.py:3176
msgid "Files Found:"
msgstr ""
-#: redbot/cogs/audio/audio.py:2005
+#: redbot/cogs/audio/audio.py:3177
msgid "local tracks"
msgstr ""
-#: redbot/cogs/audio/audio.py:2022
+#: redbot/cogs/audio/audio.py:3195
#, docstring
-msgid "Seek ahead or behind on a track by seconds."
+msgid "Seek ahead or behind on a track by seconds or a to a specific time.\\n\\n Accepts seconds or a value formatted like 00:00:00 (`hh:mm:ss`) or 00:00 (`mm:ss`)."
msgstr ""
-#: redbot/cogs/audio/audio.py:2031
+#: redbot/cogs/audio/audio.py:3206
msgid "You must be in the voice channel to use seek."
msgstr ""
-#: redbot/cogs/audio/audio.py:2036
+#: redbot/cogs/audio/audio.py:3211
msgid "You need the DJ role to use seek."
msgstr ""
-#: redbot/cogs/audio/audio.py:2042 redbot/cogs/audio/audio.py:2278
+#: redbot/cogs/audio/audio.py:3217 redbot/cogs/audio/audio.py:3510
msgid "There are other people listening - vote to skip instead."
msgstr ""
-#: redbot/cogs/audio/audio.py:2046
+#: redbot/cogs/audio/audio.py:3221
msgid "Can't seek on a stream."
msgstr ""
-#: redbot/cogs/audio/audio.py:2052
+#: redbot/cogs/audio/audio.py:3230
+msgid "Invalid input for the time to seek."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:3236
msgid "Moved {num_seconds}s to 00:00:00"
msgstr ""
-#: redbot/cogs/audio/audio.py:2057
+#: redbot/cogs/audio/audio.py:3241
msgid "Moved {num_seconds}s to {time}"
msgstr ""
-#: redbot/cogs/audio/audio.py:2068
+#: redbot/cogs/audio/audio.py:3249
+msgid "Moved to {time}"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:3261
#, docstring
msgid "Toggle shuffle."
msgstr ""
-#: redbot/cogs/audio/audio.py:2072
+#: redbot/cogs/audio/audio.py:3265
msgid "You need the DJ role to toggle shuffle."
msgstr ""
-#: redbot/cogs/audio/audio.py:2083
+#: redbot/cogs/audio/audio.py:3273
msgid "You must be in the voice channel to toggle shuffle."
msgstr ""
-#: redbot/cogs/audio/audio.py:2086
+#: redbot/cogs/audio/audio.py:3279
msgid "Shuffle tracks: {true_or_false}."
msgstr ""
-#: redbot/cogs/audio/audio.py:2092
+#: redbot/cogs/audio/audio.py:3287
#, docstring
-msgid "Make Red sing one of her songs"
+msgid "Make Red sing one of her songs."
msgstr ""
-#: redbot/cogs/audio/audio.py:2107
+#: redbot/cogs/audio/audio.py:3303
#, docstring
-msgid "Skip to the next track."
+msgid "Skip to the next track, or to a given track number."
msgstr ""
-#: redbot/cogs/audio/audio.py:2126
+#: redbot/cogs/audio/audio.py:3322
+msgid "Can't skip to a specific track in vote mode without the DJ role."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:3326
msgid "I removed your vote to skip."
msgstr ""
-#: redbot/cogs/audio/audio.py:2129
+#: redbot/cogs/audio/audio.py:3329
msgid "You voted to skip."
msgstr ""
-#: redbot/cogs/audio/audio.py:2142
+#: redbot/cogs/audio/audio.py:3342
msgid "Vote threshold met."
msgstr ""
-#: redbot/cogs/audio/audio.py:2145
+#: redbot/cogs/audio/audio.py:3345
msgid " Votes: {num_votes}/{num_members} ({cur_percent}% out of {required_percent}% needed)"
msgstr ""
-#: redbot/cogs/audio/audio.py:2228
+#: redbot/cogs/audio/audio.py:3425
msgid "Currently livestreaming {track}"
msgstr ""
-#: redbot/cogs/audio/audio.py:2235
+#: redbot/cogs/audio/audio.py:3432
msgid "{time} left on {track}"
msgstr ""
-#: redbot/cogs/audio/audio.py:2253
+#: redbot/cogs/audio/audio.py:3441
+msgid "Track number must be equal to or greater than 1."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:3454
+msgid "Can't skip to a track while shuffle is enabled."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:3470
msgid "Track Skipped"
msgstr ""
-#: redbot/cogs/audio/audio.py:2261
+#: redbot/cogs/audio/audio.py:3493
#, docstring
msgid "Stop playback and clear the queue."
msgstr ""
-#: redbot/cogs/audio/audio.py:2271
+#: redbot/cogs/audio/audio.py:3503
msgid "You must be in the voice channel to stop the music."
msgstr ""
-#: redbot/cogs/audio/audio.py:2282
+#: redbot/cogs/audio/audio.py:3514
msgid "You need the DJ role to stop the music."
msgstr ""
-#: redbot/cogs/audio/audio.py:2284
+#: redbot/cogs/audio/audio.py:3516
msgid "Stopping..."
msgstr ""
-#: redbot/cogs/audio/audio.py:2294
+#: redbot/cogs/audio/audio.py:3531
+#, docstring
+msgid "Summon the bot to a voice channel."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:3535
+msgid "You need the DJ role to summon the bot."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:3565
#, docstring
msgid "Set the volume, 1% - 150%."
msgstr ""
-#: redbot/cogs/audio/audio.py:2300
+#: redbot/cogs/audio/audio.py:3571
msgid "Current Volume:"
msgstr ""
-#: redbot/cogs/audio/audio.py:2312
+#: redbot/cogs/audio/audio.py:3583
msgid "You must be in the voice channel to change the volume."
msgstr ""
-#: redbot/cogs/audio/audio.py:2318
+#: redbot/cogs/audio/audio.py:3589
msgid "You need the DJ role to change the volume."
msgstr ""
-#: redbot/cogs/audio/audio.py:2331
+#: redbot/cogs/audio/audio.py:3602
msgid "Volume:"
msgstr ""
-#: redbot/cogs/audio/audio.py:2341
+#: redbot/cogs/audio/audio.py:3613
#, docstring
msgid "Lavalink server configuration options."
msgstr ""
-#: redbot/cogs/audio/audio.py:2346
+#: redbot/cogs/audio/audio.py:3618
#, docstring
msgid "Toggle using external lavalink servers."
msgstr ""
-#: redbot/cogs/audio/audio.py:2357 redbot/cogs/audio/audio.py:2366
+#: redbot/cogs/audio/audio.py:3625 redbot/cogs/audio/audio.py:3635
msgid "External lavalink server: {true_or_false}."
msgstr ""
-#: redbot/cogs/audio/audio.py:2361
-msgid "Defaults reset."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:2373
+#: redbot/cogs/audio/audio.py:3642
#, docstring
msgid "Set the lavalink server host."
msgstr ""
-#: redbot/cogs/audio/audio.py:2377 redbot/cogs/audio/audio.py:2382
+#: redbot/cogs/audio/audio.py:3646 redbot/cogs/audio/audio.py:3651
msgid "Host set to {host}."
msgstr ""
-#: redbot/cogs/audio/audio.py:2379 redbot/cogs/audio/audio.py:2395
-#: redbot/cogs/audio/audio.py:2413 redbot/cogs/audio/audio.py:2429
+#: redbot/cogs/audio/audio.py:3648 redbot/cogs/audio/audio.py:3664
+#: redbot/cogs/audio/audio.py:3682 redbot/cogs/audio/audio.py:3698
msgid "External lavalink server set to True."
msgstr ""
-#: redbot/cogs/audio/audio.py:2388
+#: redbot/cogs/audio/audio.py:3657
#, docstring
msgid "Set the lavalink server password."
msgstr ""
-#: redbot/cogs/audio/audio.py:2393 redbot/cogs/audio/audio.py:2399
+#: redbot/cogs/audio/audio.py:3662 redbot/cogs/audio/audio.py:3668
msgid "Server password set to {password}."
msgstr ""
-#: redbot/cogs/audio/audio.py:2406
+#: redbot/cogs/audio/audio.py:3675
#, docstring
msgid "Set the lavalink REST server port."
msgstr ""
-#: redbot/cogs/audio/audio.py:2411 redbot/cogs/audio/audio.py:2416
+#: redbot/cogs/audio/audio.py:3680 redbot/cogs/audio/audio.py:3685
msgid "REST port set to {port}."
msgstr ""
-#: redbot/cogs/audio/audio.py:2422
+#: redbot/cogs/audio/audio.py:3691
#, docstring
msgid "Set the lavalink websocket server port."
msgstr ""
-#: redbot/cogs/audio/audio.py:2427 redbot/cogs/audio/audio.py:2432
+#: redbot/cogs/audio/audio.py:3696 redbot/cogs/audio/audio.py:3701
msgid "Websocket port set to {port}."
msgstr ""
-#: redbot/cogs/audio/audio.py:2461
+#: redbot/cogs/audio/audio.py:3801
msgid "Not enough {currency} ({required_credits} required)."
msgstr ""
diff --git a/redbot/cogs/audio/locales/pl-PL.po b/redbot/cogs/audio/locales/pl-PL.po
index 5dc781f8b..f4d54c54f 100644
--- a/redbot/cogs/audio/locales/pl-PL.po
+++ b/redbot/cogs/audio/locales/pl-PL.po
@@ -1,14 +1,14 @@
msgid ""
msgstr ""
"Project-Id-Version: red-discordbot\n"
-"POT-Creation-Date: 2019-02-17 02:24+0000\n"
-"PO-Revision-Date: 2019-02-25 03:07\n"
-"Last-Translator: Kowlin \n"
+"POT-Creation-Date: 2019-07-05 22:33+0200\n"
+"PO-Revision-Date: 2019-07-06 16:13\n"
+"Last-Translator: Robert Jansen (Kowlin)\n"
"Language-Team: Polish\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"Generated-By: redgettext 2.2\n"
+"Generated-By: redgettext 3.0\n"
"Plural-Forms: nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && (n%100<12 || n%100>14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);\n"
"X-Generator: crowdin.com\n"
"X-Crowdin-Project: red-discordbot\n"
@@ -16,971 +16,1275 @@ msgstr ""
"X-Crowdin-File: /cogs/audio/locales/messages.pot\n"
"Language: pl_PL\n"
-#: redbot/cogs/audio/audio.py:38
+#: redbot/cogs/audio/audio.py:47
#, docstring
msgid "Play audio through voice channels."
msgstr ""
-#: redbot/cogs/audio/audio.py:173 redbot/cogs/audio/audio.py:735
-msgid "Now Playing"
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:177
-msgid "Track length: {length} | Requested by: {user}"
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:201 redbot/cogs/audio/audio.py:227
+#: redbot/cogs/audio/audio.py:260
msgid "music in {} servers"
msgstr ""
-#: redbot/cogs/audio/audio.py:211
+#: redbot/cogs/audio/audio.py:300 redbot/cogs/audio/audio.py:1317
+msgid "Now Playing"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:304
+msgid "Track length: {length} | Requested by: {user}"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:331
msgid "Queue ended."
msgstr ""
-#: redbot/cogs/audio/audio.py:240
+#: redbot/cogs/audio/audio.py:350
msgid "Track Error"
msgstr ""
-#: redbot/cogs/audio/audio.py:245
+#: redbot/cogs/audio/audio.py:355
msgid "Skipping..."
msgstr ""
-#: redbot/cogs/audio/audio.py:252
+#: redbot/cogs/audio/audio.py:363
#, docstring
msgid "Music configuration options."
msgstr ""
-#: redbot/cogs/audio/audio.py:258
+#: redbot/cogs/audio/audio.py:369
#, docstring
-msgid "Toggle DJ mode.\n\n"
-" DJ mode allows users with the DJ role to use audio commands.\n"
-" "
+msgid "Toggle the bot auto-disconnecting when done playing.\\n\\n This setting takes precedence over [p]audioset emptydisconnect.\\n "
msgstr ""
-#: redbot/cogs/audio/audio.py:265
+#: redbot/cogs/audio/audio.py:377
+msgid "Auto-disconnection at queue end: {true_or_false}."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:385
+#, docstring
+msgid "Toggle DJ mode.\\n\\n DJ mode allows users with the DJ role to use audio commands.\\n "
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:392
msgid "Please set a role to use with DJ mode. Enter the role name or ID now."
msgstr ""
-#: redbot/cogs/audio/audio.py:273
+#: redbot/cogs/audio/audio.py:400
msgid "Response timed out, try again later."
msgstr ""
-#: redbot/cogs/audio/audio.py:284
+#: redbot/cogs/audio/audio.py:405
+msgid "DJ role enabled: {true_or_false}."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:411
#, docstring
msgid "Auto-disconnection after x seconds while stopped. 0 to disable."
msgstr ""
-#: redbot/cogs/audio/audio.py:286 redbot/cogs/audio/audio.py:317
-#: redbot/cogs/audio/audio.py:405
+#: redbot/cogs/audio/audio.py:413 redbot/cogs/audio/audio.py:436
+#: redbot/cogs/audio/audio.py:543 redbot/cogs/audio/audio.py:687
msgid "Can't be less than zero."
msgstr ""
-#: redbot/cogs/audio/audio.py:291
+#: redbot/cogs/audio/audio.py:418
msgid "Empty disconnect disabled."
msgstr ""
-#: redbot/cogs/audio/audio.py:296
+#: redbot/cogs/audio/audio.py:423
msgid "Empty disconnect timer set to {num_seconds}."
msgstr ""
-#: redbot/cogs/audio/audio.py:307
-#, docstring
-msgid "Set the role to use for DJ mode."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:310
-msgid "DJ role set to: {role.name}."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:315
+#: redbot/cogs/audio/audio.py:434
#, docstring
msgid "Set a price for queueing tracks for non-mods. 0 to disable."
msgstr ""
-#: redbot/cogs/audio/audio.py:320
+#: redbot/cogs/audio/audio.py:439
msgid "Jukebox mode disabled."
msgstr ""
-#: redbot/cogs/audio/audio.py:325
+#: redbot/cogs/audio/audio.py:444
msgid "Track queueing command price set to {price} {currency}."
msgstr ""
-#: redbot/cogs/audio/audio.py:336
+#: redbot/cogs/audio/audio.py:455
+#, docstring
+msgid "Set the localtracks path if the Lavalink.jar is not run from the Audio data folder.\\n\\n Leave the path blank to reset the path to the default, the Audio data directory.\\n "
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:463
+msgid "The localtracks path location has been reset to the default location."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:466
+msgid "This setting is only for bot owners to set a localtracks folder location if the Lavalink.jar is being ran from outside of the Audio data directory.\\nIn the example below, the full path for 'ParentDirectory' must be passed to this command.\\nThe path must not contain spaces.\\n```\\nParentDirectory\\n |__ localtracks (folder)\\n | |__ Awesome Album Name (folder)\\n | |__01 Cool Song.mp3\\n | |__02 Groovy Song.mp3\\n |\\n |__ Lavalink.jar\\n |__ application.yml\\n```\\nThe folder path given to this command must contain the Lavalink.jar, the application.yml, and the localtracks folder.\\nUse this command with no path given to reset it to the default, the Audio data directory for this bot.\\nDo you want to continue to set the provided path for local tracks?"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:505
+msgid "{local_path} does not seem like a valid path."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:520
+msgid "The path that was entered does not have {filelist} file in that location. The path will still be saved, but please check the path and the file location before attempting to play local tracks or start your Lavalink.jar."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:530
+msgid "Localtracks path set to: {local_path}."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:536
+#, docstring
+msgid "Max length of a track to queue in seconds. 0 to disable.\\n\\n Accepts seconds or a value formatted like 00:00:00 (`hh:mm:ss`) or 00:00 (`mm:ss`).\\n Invalid input will turn the max length setting off."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:545
+msgid "Track max length disabled."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:549
+msgid "Track max length set to {seconds}."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:559
#, docstring
msgid "Toggle track announcement and other bot messages."
msgstr ""
-#: redbot/cogs/audio/audio.py:340
+#: redbot/cogs/audio/audio.py:563
msgid "Verbose mode on: {true_or_false}."
msgstr ""
-#: redbot/cogs/audio/audio.py:345
+#: redbot/cogs/audio/audio.py:569
+#, docstring
+msgid "Toggle the domain restriction on Audio.\\n\\n When toggled off, users will be able to play songs from non-commercial websites and links.\\n When toggled on, users are restricted to YouTube, SoundCloud, Mixer, Vimeo, Twitch, and Bandcamp links."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:576
+msgid "Commercial links only: {true_or_false}."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:582
+#, docstring
+msgid "Set the role to use for DJ mode."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:585
+msgid "DJ role set to: {role.name}."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:589
#, docstring
msgid "Show the current settings."
msgstr ""
-#: redbot/cogs/audio/audio.py:358
+#: redbot/cogs/audio/audio.py:604
msgid "Server Settings"
msgstr ""
-#: redbot/cogs/audio/audio.py:360
-msgid "Disconnect timer: [{num_seconds}]\n"
+#: redbot/cogs/audio/audio.py:606
+msgid "Auto-disconnect: [{dc}]\\n"
msgstr ""
-#: redbot/cogs/audio/audio.py:364
-msgid "DJ Role: [{role.name}]\n"
+#: redbot/cogs/audio/audio.py:609
+msgid "Disconnect timer: [{num_seconds}]\\n"
msgstr ""
-#: redbot/cogs/audio/audio.py:366
-msgid "Jukebox: [{jukebox_name}]\n"
+#: redbot/cogs/audio/audio.py:613
+msgid "DJ Role: [{role.name}]\\n"
msgstr ""
-#: redbot/cogs/audio/audio.py:367
-msgid "Command price: [{jukebox_price}]\n"
+#: redbot/cogs/audio/audio.py:615
+msgid "Jukebox: [{jukebox_name}]\\n"
msgstr ""
-#: redbot/cogs/audio/audio.py:368
-msgid "Repeat: [{repeat}]\n"
-"Shuffle: [{shuffle}]\n"
-"Song notify msgs: [{notify}]\n"
-"Songs as status: [{status}]\n"
+#: redbot/cogs/audio/audio.py:616
+msgid "Command price: [{jukebox_price}]\\n"
msgstr ""
-#: redbot/cogs/audio/audio.py:375
-msgid "Thumbnails: [{0}]\n"
+#: redbot/cogs/audio/audio.py:618
+msgid "Max track length: [{tracklength}]\\n"
msgstr ""
-#: redbot/cogs/audio/audio.py:377
-msgid "Vote skip: [{vote_enabled}]\n"
-"Skip percentage: [{vote_percent}%]\n"
+#: redbot/cogs/audio/audio.py:621
+msgid "Repeat: [{repeat}]\\nShuffle: [{shuffle}]\\nSong notify msgs: [{notify}]\\nSongs as status: [{status}]\\n"
msgstr ""
-#: redbot/cogs/audio/audio.py:380
-msgid "---Lavalink Settings---\n"
-"Cog version: [{version}]\n"
-"Jar build: [{jarbuild}]\n"
-"External server: [{use_external_lavalink}]"
+#: redbot/cogs/audio/audio.py:628
+msgid "Thumbnails: [{0}]\\n"
msgstr ""
-#: redbot/cogs/audio/audio.py:393
+#: redbot/cogs/audio/audio.py:630
+msgid "Vote skip: [{vote_enabled}]\\nSkip percentage: [{vote_percent}%]\\n"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:633
+msgid "---Lavalink Settings--- \\nCog version: [{version}]\\nJar build: [{jarbuild}]\\nExternal server: [{use_external_lavalink}]\\n"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:640
+msgid "Localtracks path: [{localpath}]\\n"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:648
#, docstring
-msgid "Toggle displaying a thumbnail on audio messages."
+msgid "Instructions to set the Spotify API tokens."
msgstr ""
-#: redbot/cogs/audio/audio.py:397
-msgid "Thumbnail display: {true_or_false}."
+#: redbot/cogs/audio/audio.py:649
+msgid "1. Go to Spotify developers and log in with your Spotify account.\\n(https://developer.spotify.com/dashboard/applications)\\n2. Click \\\"Create An App\\\".\\n3. Fill out the form provided with your app name, etc.\\n4. When asked if you're developing commercial integration select \\\"No\\\".\\n5. Accept the terms and conditions.\\n6. Copy your client ID and your client secret into:\\n`{prefix}set api spotify client_id, client_secret,`"
msgstr ""
-#: redbot/cogs/audio/audio.py:403
-#, docstring
-msgid "Percentage needed for non-mods to skip tracks. 0 to disable."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:411
-msgid "Voting disabled. All users can use queue management commands."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:416
-msgid "Vote percentage set to {percent}%."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:425
+#: redbot/cogs/audio/audio.py:665
#, docstring
msgid "Enable/disable tracks' titles as status."
msgstr ""
-#: redbot/cogs/audio/audio.py:429
+#: redbot/cogs/audio/audio.py:669
msgid "Song titles as status: {true_or_false}."
msgstr ""
-#: redbot/cogs/audio/audio.py:435
+#: redbot/cogs/audio/audio.py:675
+#, docstring
+msgid "Toggle displaying a thumbnail on audio messages."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:679
+msgid "Thumbnail display: {true_or_false}."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:685
+#, docstring
+msgid "Percentage needed for non-mods to skip tracks. 0 to disable."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:693
+msgid "Voting disabled. All users can use queue management commands."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:698
+msgid "Vote percentage set to {percent}%."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:707
+#, docstring
+msgid "Instructions to set the YouTube API key."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:726
#, docstring
msgid "Audio stats."
msgstr ""
-#: redbot/cogs/audio/audio.py:469 redbot/cogs/audio/audio.py:489
-#: redbot/cogs/audio/audio.py:698 redbot/cogs/audio/audio.py:788
-#: redbot/cogs/audio/audio.py:804 redbot/cogs/audio/audio.py:829
-#: redbot/cogs/audio/audio.py:836 redbot/cogs/audio/audio.py:1179
-#: redbot/cogs/audio/audio.py:1466 redbot/cogs/audio/audio.py:1724
-#: redbot/cogs/audio/audio.py:2026 redbot/cogs/audio/audio.py:2063
-#: redbot/cogs/audio/audio.py:2109 redbot/cogs/audio/audio.py:2265
-#: redbot/cogs/audio/audio.py:2304 redbot/cogs/audio/audio.py:2334
+#: redbot/cogs/audio/audio.py:754 redbot/cogs/audio/audio.py:782
+#: redbot/cogs/audio/audio.py:819 redbot/cogs/audio/audio.py:847
+#: redbot/cogs/audio/audio.py:914 redbot/cogs/audio/audio.py:932
+#: redbot/cogs/audio/audio.py:956 redbot/cogs/audio/audio.py:1026
+#: redbot/cogs/audio/audio.py:1280 redbot/cogs/audio/audio.py:1371
+#: redbot/cogs/audio/audio.py:1388 redbot/cogs/audio/audio.py:1411
+#: redbot/cogs/audio/audio.py:1419 redbot/cogs/audio/audio.py:2190
+#: redbot/cogs/audio/audio.py:2527 redbot/cogs/audio/audio.py:2860
+#: redbot/cogs/audio/audio.py:3201 redbot/cogs/audio/audio.py:3255
+#: redbot/cogs/audio/audio.py:3305 redbot/cogs/audio/audio.py:3497
+#: redbot/cogs/audio/audio.py:3575 redbot/cogs/audio/audio.py:3605
msgid "Nothing playing."
msgstr ""
-#: redbot/cogs/audio/audio.py:473
+#: redbot/cogs/audio/audio.py:758
msgid "Not connected anywhere."
msgstr ""
-#: redbot/cogs/audio/audio.py:478
-msgid "Connected in {num} servers:"
+#: redbot/cogs/audio/audio.py:764
+msgid "Playing in {num}/{total} servers:"
msgstr ""
-#: redbot/cogs/audio/audio.py:486
+#: redbot/cogs/audio/audio.py:779
#, docstring
msgid "Bump a track number to the top of the queue."
msgstr ""
-#: redbot/cogs/audio/audio.py:495
+#: redbot/cogs/audio/audio.py:788
msgid "You must be in the voice channel to bump a track."
msgstr ""
-#: redbot/cogs/audio/audio.py:499
+#: redbot/cogs/audio/audio.py:792
msgid "You need the DJ role to bump tracks."
msgstr ""
-#: redbot/cogs/audio/audio.py:502 redbot/cogs/audio/audio.py:1739
+#: redbot/cogs/audio/audio.py:795 redbot/cogs/audio/audio.py:2875
msgid "Song number must be greater than 1 and within the queue limit."
msgstr ""
-#: redbot/cogs/audio/audio.py:517
+#: redbot/cogs/audio/audio.py:810
msgid "Moved {track} to the top of the queue."
msgstr ""
-#: redbot/cogs/audio/audio.py:523
+#: redbot/cogs/audio/audio.py:817
#, docstring
msgid "Disconnect from the voice channel."
msgstr ""
-#: redbot/cogs/audio/audio.py:528
+#: redbot/cogs/audio/audio.py:826
msgid "You need the DJ role to disconnect."
msgstr ""
-#: redbot/cogs/audio/audio.py:532
+#: redbot/cogs/audio/audio.py:830
msgid "There are other people listening to music."
msgstr ""
-#: redbot/cogs/audio/audio.py:540
+#: redbot/cogs/audio/audio.py:845
+#, docstring
+msgid "Equalizer management."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:865
+#, docstring
+msgid "Delete a saved eq preset."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:887
+#, docstring
+msgid "List saved eq presets."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:890
+msgid "No saved equalizer presets."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:897
+msgid "{num} preset(s)"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:903
+#, docstring
+msgid "Load a saved eq preset."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:930
+#, docstring
+msgid "Reset the eq to 0 across all bands."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:946
+msgid "Equalizer values have been reset."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:954
+#, docstring
+msgid "Save the current eq settings to a preset."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:958
+msgid "Please enter a name for this equalizer preset."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:972
+msgid "No equalizer preset name entered, try the command again later."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:981 redbot/cogs/audio/audio.py:2213
+msgid "Try the command again with a shorter name."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:985
+msgid "Preset name already exists, do you want to replace it?"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:994
+msgid "Not saving preset."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1019
+#, docstring
+msgid "Set an eq band with a band number or name and value.\\n\\n Band positions are 1-15 and values have a range of -0.25 to 1.0.\\n Band names are 25, 40, 63, 100, 160, 250, 400, 630, 1k, 1.6k, 2.5k, 4k, 6.3k, 10k, and 16k Hz.\\n Setting a band value to -0.25 nullifies it while +0.25 is double.\\n "
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1063
+msgid "Valid band numbers are 1-15 or the band names listed in the help for this command."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1099
#, docstring
msgid "Local playback commands."
msgstr ""
-#: redbot/cogs/audio/audio.py:545
+#: redbot/cogs/audio/audio.py:1104
#, docstring
msgid "Play all songs in a localtracks folder."
msgstr ""
-#: redbot/cogs/audio/audio.py:552
+#: redbot/cogs/audio/audio.py:1115
+msgid "No localtracks folder named {name}."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1121
#, docstring
msgid "Play a local track."
msgstr ""
-#: redbot/cogs/audio/audio.py:557
+#: redbot/cogs/audio/audio.py:1126
msgid "No local track folders found."
msgstr ""
-#: redbot/cogs/audio/audio.py:600
+#: redbot/cogs/audio/audio.py:1169
#, docstring
msgid "Search for songs across all localtracks folders."
msgstr ""
-#: redbot/cogs/audio/audio.py:605
+#: redbot/cogs/audio/audio.py:1174
msgid "No album folders found."
msgstr ""
-#: redbot/cogs/audio/audio.py:612 redbot/cogs/audio/audio.py:1634
+#: redbot/cogs/audio/audio.py:1181 redbot/cogs/audio/audio.py:2816
msgid "No matches."
msgstr ""
-#: redbot/cogs/audio/audio.py:688
+#: redbot/cogs/audio/audio.py:1269
msgid "No localtracks folder."
msgstr ""
-#: redbot/cogs/audio/audio.py:696
+#: redbot/cogs/audio/audio.py:1278
#, docstring
msgid "Now playing."
msgstr ""
-#: redbot/cogs/audio/audio.py:716
+#: redbot/cogs/audio/audio.py:1298
msgid "Requested by: **{track.requester}**"
msgstr ""
-#: redbot/cogs/audio/audio.py:726
+#: redbot/cogs/audio/audio.py:1308
msgid "Nothing."
msgstr ""
-#: redbot/cogs/audio/audio.py:785
+#: redbot/cogs/audio/audio.py:1368
#, docstring
-msgid "Pause and resume."
+msgid "Pause or resume a playing track."
msgstr ""
-#: redbot/cogs/audio/audio.py:794
-msgid "You must be in the voice channel to pause the music."
+#: redbot/cogs/audio/audio.py:1377
+msgid "You must be in the voice channel pause or resume."
msgstr ""
-#: redbot/cogs/audio/audio.py:800
-msgid "You need the DJ role to pause tracks."
+#: redbot/cogs/audio/audio.py:1384
+msgid "You need the DJ role to pause or resume tracks."
msgstr ""
-#: redbot/cogs/audio/audio.py:814
+#: redbot/cogs/audio/audio.py:1401
msgid "Track Paused"
msgstr ""
-#: redbot/cogs/audio/audio.py:821
+#: redbot/cogs/audio/audio.py:1407
msgid "Track Resumed"
msgstr ""
-#: redbot/cogs/audio/audio.py:826
-msgid "Track is paused."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:828
-msgid "Track is playing."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:834
+#: redbot/cogs/audio/audio.py:1417
#, docstring
msgid "Queue percentage."
msgstr ""
-#: redbot/cogs/audio/audio.py:860
+#: redbot/cogs/audio/audio.py:1443
msgid "Nothing in the queue."
msgstr ""
-#: redbot/cogs/audio/audio.py:882
+#: redbot/cogs/audio/audio.py:1465
msgid "Queued and playing tracks:"
msgstr ""
-#: redbot/cogs/audio/audio.py:890
+#: redbot/cogs/audio/audio.py:1474
#, docstring
msgid "Play a URL or search for a track."
msgstr ""
-#: redbot/cogs/audio/audio.py:900 redbot/cogs/audio/audio.py:1411
-#: redbot/cogs/audio/audio.py:1795
+#: redbot/cogs/audio/audio.py:1481
+msgid "That URL is not allowed."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1484 redbot/cogs/audio/audio.py:2437
+#: redbot/cogs/audio/audio.py:2928 redbot/cogs/audio/audio.py:3047
+msgid "Connection to Lavalink has failed."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1486 redbot/cogs/audio/audio.py:2439
+#: redbot/cogs/audio/audio.py:2930 redbot/cogs/audio/audio.py:3049
+msgid "Please check your console or logs for details."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1495 redbot/cogs/audio/audio.py:2449
+#: redbot/cogs/audio/audio.py:2939 redbot/cogs/audio/audio.py:3543
msgid "I don't have permission to connect to your channel."
msgstr ""
-#: redbot/cogs/audio/audio.py:906 redbot/cogs/audio/audio.py:1422
-#: redbot/cogs/audio/audio.py:1801 redbot/cogs/audio/audio.py:1889
+#: redbot/cogs/audio/audio.py:1501 redbot/cogs/audio/audio.py:2461
+#: redbot/cogs/audio/audio.py:2945 redbot/cogs/audio/audio.py:3056
+#: redbot/cogs/audio/audio.py:3555
msgid "Connect to a voice channel first."
msgstr ""
-#: redbot/cogs/audio/audio.py:909 redbot/cogs/audio/audio.py:1418
-#: redbot/cogs/audio/audio.py:1804 redbot/cogs/audio/audio.py:1892
+#: redbot/cogs/audio/audio.py:1504 redbot/cogs/audio/audio.py:2457
+#: redbot/cogs/audio/audio.py:2948 redbot/cogs/audio/audio.py:3059
+#: redbot/cogs/audio/audio.py:3558
msgid "Connection to Lavalink has not yet been established."
msgstr ""
-#: redbot/cogs/audio/audio.py:913
+#: redbot/cogs/audio/audio.py:1508
msgid "You need the DJ role to queue tracks."
msgstr ""
-#: redbot/cogs/audio/audio.py:922
+#: redbot/cogs/audio/audio.py:1519
msgid "You must be in the voice channel to use the play command."
msgstr ""
-#: redbot/cogs/audio/audio.py:928
+#: redbot/cogs/audio/audio.py:1525
msgid "No tracks to play."
msgstr ""
-#: redbot/cogs/audio/audio.py:942 redbot/cogs/audio/audio.py:1450
-#: redbot/cogs/audio/audio.py:1828 redbot/cogs/audio/audio.py:1865
+#: redbot/cogs/audio/audio.py:1565
+msgid "The owner needs to set the Spotify client ID, Spotify client secret, and YouTube API key before Spotify URLs or codes can be used. \\nSee `{prefix}audioset youtubeapi` and `{prefix}audioset spotifyapi` for instructions."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1575 redbot/cogs/audio/audio.py:2493
+msgid "Wait until the playlist has finished loading."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1592 redbot/cogs/audio/audio.py:1657
+#: redbot/cogs/audio/audio.py:2499 redbot/cogs/audio/audio.py:2509
+#: redbot/cogs/audio/audio.py:2973 redbot/cogs/audio/audio.py:3027
msgid "Nothing found."
msgstr ""
-#: redbot/cogs/audio/audio.py:953 redbot/cogs/audio/audio.py:1295
+#: redbot/cogs/audio/audio.py:1600
+msgid "The Spotify API key or client secret has not been set properly. \\nUse `{prefix}audioset spotifyapi` for instructions."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1639 redbot/cogs/audio/audio.py:1776
+msgid "This doesn't seem to be a valid Spotify URL or code."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1688 redbot/cogs/audio/audio.py:2320
msgid "Playlist Enqueued"
msgstr ""
-#: redbot/cogs/audio/audio.py:954 redbot/cogs/audio/audio.py:1296
-msgid "Added {num} tracks to the queue."
+#: redbot/cogs/audio/audio.py:1689 redbot/cogs/audio/audio.py:2321
+msgid "Added {num} tracks to the queue.{maxlength_msg}"
msgstr ""
-#: redbot/cogs/audio/audio.py:958
+#: redbot/cogs/audio/audio.py:1695
msgid "{time} until start of playlist playback: starts at #{position} in queue"
msgstr ""
-#: redbot/cogs/audio/audio.py:980 redbot/cogs/audio/audio.py:1938
+#: redbot/cogs/audio/audio.py:1711 redbot/cogs/audio/audio.py:3125
+msgid "Track exceeds maximum length."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1717
+msgid "Nothing found. Check your Lavalink logs for details."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1732 redbot/cogs/audio/audio.py:3108
msgid "Track Enqueued"
msgstr ""
-#: redbot/cogs/audio/audio.py:984 redbot/cogs/audio/audio.py:1944
+#: redbot/cogs/audio/audio.py:1736 redbot/cogs/audio/audio.py:3114
msgid "{time} until track playback: #{position} in queue"
msgstr ""
-#: redbot/cogs/audio/audio.py:989 redbot/cogs/audio/audio.py:1949
+#: redbot/cogs/audio/audio.py:1741 redbot/cogs/audio/audio.py:3119
msgid "#{position} in queue"
msgstr ""
-#: redbot/cogs/audio/audio.py:997
+#: redbot/cogs/audio/audio.py:1761
+msgid "The Spotify API key or client secret has not been set properly. \\nUse `{prefix}audioset spotifyapi` for instructions."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1793 redbot/cogs/audio/audio.py:2384
+msgid "Please wait, adding tracks..."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1809
+msgid "The connection was reset while loading the playlist."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1826 redbot/cogs/audio/audio.py:2401
+msgid "Loading track {num}/{total}..."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1840
+msgid "Approximate time remaining: {seconds}"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1850
+msgid "Nothing found.\\nThe YouTube API key may be invalid or you may be rate limited on YouTube's search service.\\nCheck the YouTube API key again and follow the instructions at `{prefix}audioset youtubeapi`."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1871
#, docstring
msgid "Playlist configuration options."
msgstr ""
-#: redbot/cogs/audio/audio.py:1002
+#: redbot/cogs/audio/audio.py:1876
#, docstring
-msgid "Add a track URL, playlist link, or quick search to a playlist.\n\n"
-" The track(s) will be appended to the end of the playlist.\n"
-" "
+msgid "Add a track URL, playlist link, or quick search to a playlist.\\n\\n The track(s) will be appended to the end of the playlist.\\n "
msgstr ""
-#: redbot/cogs/audio/audio.py:1014 redbot/cogs/audio/audio.py:1078
-#: redbot/cogs/audio/audio.py:1228
+#: redbot/cogs/audio/audio.py:1888 redbot/cogs/audio/audio.py:2028
+#: redbot/cogs/audio/audio.py:2241
msgid "You are not the author of that playlist."
msgstr ""
-#: redbot/cogs/audio/audio.py:1024
+#: redbot/cogs/audio/audio.py:1898
msgid "{track} is already in {playlist}."
msgstr ""
-#: redbot/cogs/audio/audio.py:1033 redbot/cogs/audio/audio.py:1082
-#: redbot/cogs/audio/audio.py:1092 redbot/cogs/audio/audio.py:1231
+#: redbot/cogs/audio/audio.py:1907 redbot/cogs/audio/audio.py:2032
+#: redbot/cogs/audio/audio.py:2081 redbot/cogs/audio/audio.py:2244
msgid "No playlist with that name."
msgstr ""
-#: redbot/cogs/audio/audio.py:1040
+#: redbot/cogs/audio/audio.py:1914
msgid "{track} appended to {playlist}."
msgstr ""
-#: redbot/cogs/audio/audio.py:1046
+#: redbot/cogs/audio/audio.py:1920
msgid "{num} tracks appended to {playlist}."
msgstr ""
-#: redbot/cogs/audio/audio.py:1053
+#: redbot/cogs/audio/audio.py:1928
+#, docstring
+msgid "Copy a playlist from one server to another."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1932
+msgid "Invalid server ID for source server."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1934
+msgid "Invalid server ID for target server."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1939
+msgid "No playlist with that name in {from_guild_name}."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1950
+msgid "Playlist {name} copied from {from_guild_name} to {to_guild_name}."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1962
+msgid "A playlist with that name already exists in {to_guild_name}.\\nPlease enter a new name for this playlist."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1975
+msgid "Try the playlist copy command again with a shorter name."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1980
+msgid "Playlist name already exists in {to_guild_name}, try the playlist copy command again with a different name."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1986 redbot/cogs/audio/audio.py:2220
+msgid "No playlist name entered, try again later."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1991
+msgid "Playlist {name} copied from {from_guild_name} to {to_guild_name}.\\nNew playlist name on {to_guild_name}: {new_name}"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2003
#, docstring
msgid "Create an empty playlist."
msgstr ""
-#: redbot/cogs/audio/audio.py:1057 redbot/cogs/audio/audio.py:1172
+#: redbot/cogs/audio/audio.py:2007 redbot/cogs/audio/audio.py:2183
msgid "You need the DJ role to save playlists."
msgstr ""
-#: redbot/cogs/audio/audio.py:1061 redbot/cogs/audio/audio.py:1176
-#: redbot/cogs/audio/audio.py:1204
+#: redbot/cogs/audio/audio.py:2011 redbot/cogs/audio/audio.py:2187
+#: redbot/cogs/audio/audio.py:2217
msgid "Playlist name already exists, try again with a different name."
msgstr ""
-#: redbot/cogs/audio/audio.py:1067
+#: redbot/cogs/audio/audio.py:2017
msgid "Empty playlist {name} created."
msgstr ""
-#: redbot/cogs/audio/audio.py:1071
+#: redbot/cogs/audio/audio.py:2021
#, docstring
msgid "Delete a saved playlist."
msgstr ""
-#: redbot/cogs/audio/audio.py:1083
+#: redbot/cogs/audio/audio.py:2033
msgid "{name} playlist deleted."
msgstr ""
-#: redbot/cogs/audio/audio.py:1087
+#: redbot/cogs/audio/audio.py:2039
+#, docstring
+msgid "Download a copy of a playlist.\\n\\n These files can be used with the [p]playlist upload command.\\n Red v2-compatible playlists can be generated by passing True\\n for the v2 variable."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2061
+msgid "That playlist has no tracks."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2063 redbot/cogs/audio/audio.py:2331
+msgid "That playlist doesn't exist."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2076
#, docstring
msgid "Retrieve information from a saved playlist."
msgstr ""
-#: redbot/cogs/audio/audio.py:1100
-msgid "**Custom playlist.**"
+#: redbot/cogs/audio/audio.py:2101
+msgid "Playlist info for {playlist_name}:\\n"
msgstr ""
-#: redbot/cogs/audio/audio.py:1102
-msgid "URL: <{url}>"
+#: redbot/cogs/audio/audio.py:2105
+msgid "Playlist info for {playlist_name}:\\nURL: {url}"
msgstr ""
-#: redbot/cogs/audio/audio.py:1105
-msgid "Playlist info for {playlist_name}:"
+#: redbot/cogs/audio/audio.py:2116
+msgid "Author: {author_name} | {num} track(s)"
msgstr ""
-#: redbot/cogs/audio/audio.py:1106
-msgid "Author: **{author_name}**\n"
-"{url}"
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:1110
-msgid "{num} track(s)"
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:1115
+#: redbot/cogs/audio/audio.py:2126
#, docstring
msgid "List saved playlists."
msgstr ""
-#: redbot/cogs/audio/audio.py:1118
+#: redbot/cogs/audio/audio.py:2129
msgid "No saved playlists."
msgstr ""
-#: redbot/cogs/audio/audio.py:1130
+#: redbot/cogs/audio/audio.py:2141
msgid "Tracks: {num}"
msgstr ""
-#: redbot/cogs/audio/audio.py:1131
-msgid "Author: {name}\n"
+#: redbot/cogs/audio/audio.py:2142
+msgid "Author: {name}\\n"
msgstr ""
-#: redbot/cogs/audio/audio.py:1155
+#: redbot/cogs/audio/audio.py:2166
msgid "Playlists for {server_name}:"
msgstr ""
-#: redbot/cogs/audio/audio.py:1159
+#: redbot/cogs/audio/audio.py:2170
msgid "Page {page_num}/{total_pages} | {num} playlists"
msgstr ""
-#: redbot/cogs/audio/audio.py:1168
+#: redbot/cogs/audio/audio.py:2179
#, docstring
msgid "Save the queue to a playlist."
msgstr ""
-#: redbot/cogs/audio/audio.py:1189
+#: redbot/cogs/audio/audio.py:2193 redbot/cogs/audio/audio.py:2590
+#: redbot/cogs/audio/audio.py:2593 redbot/cogs/audio/audio.py:2613
+#: redbot/cogs/audio/audio.py:2756 redbot/cogs/audio/audio.py:2759
+#: redbot/cogs/audio/audio.py:2775 redbot/cogs/audio/audio.py:2778
+#: redbot/cogs/audio/audio.py:2810 redbot/cogs/audio/audio.py:2812
+#: redbot/cogs/audio/audio.py:3418 redbot/cogs/audio/audio.py:3422
+#: redbot/cogs/audio/audio.py:3429
+msgid "There's nothing in the queue."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2202
msgid "Please enter a name for this playlist."
msgstr ""
-#: redbot/cogs/audio/audio.py:1200
-msgid "Try the command again with a shorter name."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:1207
-msgid "No playlist name entered, try again later."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:1214
+#: redbot/cogs/audio/audio.py:2227
msgid "Playlist {name} saved from current queue: {num} tracks added."
msgstr ""
-#: redbot/cogs/audio/audio.py:1221
+#: redbot/cogs/audio/audio.py:2234
#, docstring
msgid "Remove a track from a playlist by url."
msgstr ""
-#: redbot/cogs/audio/audio.py:1235
+#: redbot/cogs/audio/audio.py:2248
msgid "URL not in playlist."
msgstr ""
-#: redbot/cogs/audio/audio.py:1239
+#: redbot/cogs/audio/audio.py:2252
msgid "No tracks left, removing playlist."
msgstr ""
-#: redbot/cogs/audio/audio.py:1246
+#: redbot/cogs/audio/audio.py:2259
msgid "{num} entries have been removed from the {playlist_name} playlist."
msgstr ""
-#: redbot/cogs/audio/audio.py:1253
+#: redbot/cogs/audio/audio.py:2266
msgid "The track has been removed from the {playlist_name} playlist."
msgstr ""
-#: redbot/cogs/audio/audio.py:1260
+#: redbot/cogs/audio/audio.py:2273
#, docstring
msgid "Save a playlist from a url."
msgstr ""
-#: redbot/cogs/audio/audio.py:1272
+#: redbot/cogs/audio/audio.py:2285
msgid "Playlist {name} saved: {num} tracks added."
msgstr ""
-#: redbot/cogs/audio/audio.py:1279
+#: redbot/cogs/audio/audio.py:2292
#, docstring
msgid "Load a playlist into the queue."
msgstr ""
-#: redbot/cogs/audio/audio.py:1304
-msgid "That playlist doesn't exist."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:1309
+#: redbot/cogs/audio/audio.py:2336
#, docstring
msgid "Convert a Red v2 playlist file to a playlist."
msgstr ""
-#: redbot/cogs/audio/audio.py:1315
+#: redbot/cogs/audio/audio.py:2342
msgid "Please upload the playlist file. Any other message will cancel this operation."
msgstr ""
-#: redbot/cogs/audio/audio.py:1323
+#: redbot/cogs/audio/audio.py:2350
msgid "No file detected, try again later."
msgstr ""
-#: redbot/cogs/audio/audio.py:1327
+#: redbot/cogs/audio/audio.py:2354
msgid "Upload cancelled."
msgstr ""
-#: redbot/cogs/audio/audio.py:1331
+#: redbot/cogs/audio/audio.py:2358
msgid "Only playlist files can be uploaded."
msgstr ""
-#: redbot/cogs/audio/audio.py:1336
+#: redbot/cogs/audio/audio.py:2363
msgid "Not a valid playlist file."
msgstr ""
-#: redbot/cogs/audio/audio.py:1352
+#: redbot/cogs/audio/audio.py:2379
msgid "A playlist already exists with this name."
msgstr ""
-#: redbot/cogs/audio/audio.py:1357
-msgid "Please wait, adding tracks..."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:1371
-msgid "Loading track {num}/{total}..."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:1377
+#: redbot/cogs/audio/audio.py:2407
msgid "No tracks found."
msgstr ""
-#: redbot/cogs/audio/audio.py:1383
+#: redbot/cogs/audio/audio.py:2413
msgid "Added {num} tracks from the {playlist_name} playlist. {num_bad} track(s) could not be loaded."
msgstr ""
-#: redbot/cogs/audio/audio.py:1388
+#: redbot/cogs/audio/audio.py:2418
msgid "Added {num} tracks from the {playlist_name} playlist."
msgstr ""
-#: redbot/cogs/audio/audio.py:1392
+#: redbot/cogs/audio/audio.py:2422
msgid "Playlist Saved"
msgstr ""
-#: redbot/cogs/audio/audio.py:1403
+#: redbot/cogs/audio/audio.py:2433
msgid "You need the DJ role to use playlists."
msgstr ""
-#: redbot/cogs/audio/audio.py:1432
+#: redbot/cogs/audio/audio.py:2471
msgid "You must be in the voice channel to use the playlist command."
msgstr ""
-#: redbot/cogs/audio/audio.py:1464
+#: redbot/cogs/audio/audio.py:2525
#, docstring
msgid "Skip to the start of the previously played track."
msgstr ""
-#: redbot/cogs/audio/audio.py:1474 redbot/cogs/audio/audio.py:2121
+#: redbot/cogs/audio/audio.py:2535 redbot/cogs/audio/audio.py:3317
msgid "You need the DJ role to skip tracks."
msgstr ""
-#: redbot/cogs/audio/audio.py:1479 redbot/cogs/audio/audio.py:2115
+#: redbot/cogs/audio/audio.py:2540 redbot/cogs/audio/audio.py:3311
msgid "You must be in the voice channel to skip the music."
msgstr ""
-#: redbot/cogs/audio/audio.py:1482
+#: redbot/cogs/audio/audio.py:2543
msgid "Turn shuffle off to use this command."
msgstr ""
-#: redbot/cogs/audio/audio.py:1484
+#: redbot/cogs/audio/audio.py:2545
msgid "No previous track."
msgstr ""
-#: redbot/cogs/audio/audio.py:1501
+#: redbot/cogs/audio/audio.py:2562
msgid "Replaying Track"
msgstr ""
-#: redbot/cogs/audio/audio.py:1509
+#: redbot/cogs/audio/audio.py:2571
#, docstring
-msgid "List the queue.\n\n"
-" Use [p]queue search to search the queue.\n"
-" "
+msgid "List the songs in the queue."
msgstr ""
-#: redbot/cogs/audio/audio.py:1514 redbot/cogs/audio/audio.py:1517
-#: redbot/cogs/audio/audio.py:1544 redbot/cogs/audio/audio.py:2221
-#: redbot/cogs/audio/audio.py:2225 redbot/cogs/audio/audio.py:2232
-msgid "There's nothing in the queue."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:1553
+#: redbot/cogs/audio/audio.py:2622
msgid "**Currently livestreaming:**"
msgstr ""
-#: redbot/cogs/audio/audio.py:1559 redbot/cogs/audio/audio.py:1569
-#: redbot/cogs/audio/audio.py:1575
+#: redbot/cogs/audio/audio.py:2628 redbot/cogs/audio/audio.py:2638
+#: redbot/cogs/audio/audio.py:2644
msgid "Playing: "
msgstr ""
-#: redbot/cogs/audio/audio.py:1562 redbot/cogs/audio/audio.py:1570
-msgid "Requested by: **{user}**\n"
+#: redbot/cogs/audio/audio.py:2631
+msgid "Requested by: **{user}**\\n"
msgstr ""
-#: redbot/cogs/audio/audio.py:1577
+#: redbot/cogs/audio/audio.py:2639
+msgid "Requested by: **{user}**\\n"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2646
msgid "Requested by: **{user}**"
msgstr ""
-#: redbot/cogs/audio/audio.py:1595 redbot/cogs/audio/audio.py:1599
-#: redbot/cogs/audio/audio.py:1604
-msgid "requested by **{user}**\n"
+#: redbot/cogs/audio/audio.py:2664
+msgid "requested by **{user}**\\n"
msgstr ""
-#: redbot/cogs/audio/audio.py:1615
+#: redbot/cogs/audio/audio.py:2668
+msgid "requested by **{user}**\\n"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2673
+msgid "requested by **{user}**\\n"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2684
msgid "Page {page_num}/{total_pages} | {num_tracks} tracks, {num_remaining} remaining"
msgstr ""
-#: redbot/cogs/audio/audio.py:1624
+#: redbot/cogs/audio/audio.py:2693
msgid "Repeat"
msgstr ""
-#: redbot/cogs/audio/audio.py:1626
+#: redbot/cogs/audio/audio.py:2695
msgid "Shuffle"
msgstr ""
-#: redbot/cogs/audio/audio.py:1683
+#: redbot/cogs/audio/audio.py:2740
msgid "Matching Tracks:"
msgstr ""
-#: redbot/cogs/audio/audio.py:1686 redbot/cogs/audio/audio.py:2010
+#: redbot/cogs/audio/audio.py:2743 redbot/cogs/audio/audio.py:3182
msgid "Page {page_num}/{total_pages}"
msgstr ""
-#: redbot/cogs/audio/audio.py:1695
+#: redbot/cogs/audio/audio.py:2752
+#, docstring
+msgid "Clears the queue."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2764
+msgid "You need the DJ role to clear the queue."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2766
+msgid "The queue has been cleared."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2771
+#, docstring
+msgid "Removes songs from the queue if the requester is not in the voice channel."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2783
+msgid "You need the DJ role to clean the queue."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2794
+msgid "Removed 0 tracks."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2798
+msgid "Removed {removed_tracks} tracks queued by members outside of the voice channel."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2806
+#, docstring
+msgid "Search the queue."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2829
#, docstring
msgid "Toggle repeat."
msgstr ""
-#: redbot/cogs/audio/audio.py:1701
+#: redbot/cogs/audio/audio.py:2835
msgid "You need the DJ role to toggle repeat."
msgstr ""
-#: redbot/cogs/audio/audio.py:1712
+#: redbot/cogs/audio/audio.py:2843
msgid "You must be in the voice channel to toggle repeat."
msgstr ""
-#: redbot/cogs/audio/audio.py:1715
+#: redbot/cogs/audio/audio.py:2849
msgid "Repeat tracks: {true_or_false}."
msgstr ""
-#: redbot/cogs/audio/audio.py:1721
+#: redbot/cogs/audio/audio.py:2857
#, docstring
msgid "Remove a specific track number from the queue."
msgstr ""
-#: redbot/cogs/audio/audio.py:1727
+#: redbot/cogs/audio/audio.py:2863
msgid "Nothing queued."
msgstr ""
-#: redbot/cogs/audio/audio.py:1730
+#: redbot/cogs/audio/audio.py:2866
msgid "You need the DJ role to remove tracks."
msgstr ""
-#: redbot/cogs/audio/audio.py:1735
+#: redbot/cogs/audio/audio.py:2871
msgid "You must be in the voice channel to manage the queue."
msgstr ""
-#: redbot/cogs/audio/audio.py:1751
+#: redbot/cogs/audio/audio.py:2887
msgid "Removed {track} from the queue."
msgstr ""
-#: redbot/cogs/audio/audio.py:1757
+#: redbot/cogs/audio/audio.py:2894
#, docstring
-msgid "Pick a track with a search.\n\n"
-" Use `[p]search list ` to queue all tracks found\n"
-" on YouTube. `[p]search sc ` will search SoundCloud\n"
-" instead of YouTube.\n"
-" "
+msgid "Pick a track with a search.\\n\\n Use `[p]search list ` to queue all tracks found\\n on YouTube. `[p]search sc ` will search SoundCloud\\n instead of YouTube.\\n "
msgstr ""
-#: redbot/cogs/audio/audio.py:1814
+#: redbot/cogs/audio/audio.py:2958
msgid "You must be in the voice channel to enqueue tracks."
msgstr ""
-#: redbot/cogs/audio/audio.py:1831
-msgid "Queued {num} track(s)."
+#: redbot/cogs/audio/audio.py:2997
+msgid "Queued {num} track(s).{maxlength_msg}"
msgstr ""
-#: redbot/cogs/audio/audio.py:1837
+#: redbot/cogs/audio/audio.py:3003
msgid "{time} until start of search playback: starts at #{position} in queue"
msgstr ""
-#: redbot/cogs/audio/audio.py:1997
+#: redbot/cogs/audio/audio.py:3169
msgid "Tracks Found:"
msgstr ""
-#: redbot/cogs/audio/audio.py:1998
+#: redbot/cogs/audio/audio.py:3170
msgid "search results"
msgstr ""
-#: redbot/cogs/audio/audio.py:2001
+#: redbot/cogs/audio/audio.py:3173
msgid "Folders Found:"
msgstr ""
-#: redbot/cogs/audio/audio.py:2002
+#: redbot/cogs/audio/audio.py:3174
msgid "local folders"
msgstr ""
-#: redbot/cogs/audio/audio.py:2004
+#: redbot/cogs/audio/audio.py:3176
msgid "Files Found:"
msgstr ""
-#: redbot/cogs/audio/audio.py:2005
+#: redbot/cogs/audio/audio.py:3177
msgid "local tracks"
msgstr ""
-#: redbot/cogs/audio/audio.py:2022
+#: redbot/cogs/audio/audio.py:3195
#, docstring
-msgid "Seek ahead or behind on a track by seconds."
+msgid "Seek ahead or behind on a track by seconds or a to a specific time.\\n\\n Accepts seconds or a value formatted like 00:00:00 (`hh:mm:ss`) or 00:00 (`mm:ss`)."
msgstr ""
-#: redbot/cogs/audio/audio.py:2031
+#: redbot/cogs/audio/audio.py:3206
msgid "You must be in the voice channel to use seek."
msgstr ""
-#: redbot/cogs/audio/audio.py:2036
+#: redbot/cogs/audio/audio.py:3211
msgid "You need the DJ role to use seek."
msgstr ""
-#: redbot/cogs/audio/audio.py:2042 redbot/cogs/audio/audio.py:2278
+#: redbot/cogs/audio/audio.py:3217 redbot/cogs/audio/audio.py:3510
msgid "There are other people listening - vote to skip instead."
msgstr ""
-#: redbot/cogs/audio/audio.py:2046
+#: redbot/cogs/audio/audio.py:3221
msgid "Can't seek on a stream."
msgstr ""
-#: redbot/cogs/audio/audio.py:2052
+#: redbot/cogs/audio/audio.py:3230
+msgid "Invalid input for the time to seek."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:3236
msgid "Moved {num_seconds}s to 00:00:00"
msgstr ""
-#: redbot/cogs/audio/audio.py:2057
+#: redbot/cogs/audio/audio.py:3241
msgid "Moved {num_seconds}s to {time}"
msgstr ""
-#: redbot/cogs/audio/audio.py:2068
+#: redbot/cogs/audio/audio.py:3249
+msgid "Moved to {time}"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:3261
#, docstring
msgid "Toggle shuffle."
msgstr ""
-#: redbot/cogs/audio/audio.py:2072
+#: redbot/cogs/audio/audio.py:3265
msgid "You need the DJ role to toggle shuffle."
msgstr ""
-#: redbot/cogs/audio/audio.py:2083
+#: redbot/cogs/audio/audio.py:3273
msgid "You must be in the voice channel to toggle shuffle."
msgstr ""
-#: redbot/cogs/audio/audio.py:2086
+#: redbot/cogs/audio/audio.py:3279
msgid "Shuffle tracks: {true_or_false}."
msgstr ""
-#: redbot/cogs/audio/audio.py:2092
+#: redbot/cogs/audio/audio.py:3287
#, docstring
-msgid "Make Red sing one of her songs"
+msgid "Make Red sing one of her songs."
msgstr ""
-#: redbot/cogs/audio/audio.py:2107
+#: redbot/cogs/audio/audio.py:3303
#, docstring
-msgid "Skip to the next track."
+msgid "Skip to the next track, or to a given track number."
msgstr ""
-#: redbot/cogs/audio/audio.py:2126
+#: redbot/cogs/audio/audio.py:3322
+msgid "Can't skip to a specific track in vote mode without the DJ role."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:3326
msgid "I removed your vote to skip."
msgstr ""
-#: redbot/cogs/audio/audio.py:2129
+#: redbot/cogs/audio/audio.py:3329
msgid "You voted to skip."
msgstr ""
-#: redbot/cogs/audio/audio.py:2142
+#: redbot/cogs/audio/audio.py:3342
msgid "Vote threshold met."
msgstr ""
-#: redbot/cogs/audio/audio.py:2145
+#: redbot/cogs/audio/audio.py:3345
msgid " Votes: {num_votes}/{num_members} ({cur_percent}% out of {required_percent}% needed)"
msgstr ""
-#: redbot/cogs/audio/audio.py:2228
+#: redbot/cogs/audio/audio.py:3425
msgid "Currently livestreaming {track}"
msgstr ""
-#: redbot/cogs/audio/audio.py:2235
+#: redbot/cogs/audio/audio.py:3432
msgid "{time} left on {track}"
msgstr ""
-#: redbot/cogs/audio/audio.py:2253
+#: redbot/cogs/audio/audio.py:3441
+msgid "Track number must be equal to or greater than 1."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:3454
+msgid "Can't skip to a track while shuffle is enabled."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:3470
msgid "Track Skipped"
msgstr ""
-#: redbot/cogs/audio/audio.py:2261
+#: redbot/cogs/audio/audio.py:3493
#, docstring
msgid "Stop playback and clear the queue."
msgstr ""
-#: redbot/cogs/audio/audio.py:2271
+#: redbot/cogs/audio/audio.py:3503
msgid "You must be in the voice channel to stop the music."
msgstr ""
-#: redbot/cogs/audio/audio.py:2282
+#: redbot/cogs/audio/audio.py:3514
msgid "You need the DJ role to stop the music."
msgstr ""
-#: redbot/cogs/audio/audio.py:2284
+#: redbot/cogs/audio/audio.py:3516
msgid "Stopping..."
msgstr ""
-#: redbot/cogs/audio/audio.py:2294
+#: redbot/cogs/audio/audio.py:3531
+#, docstring
+msgid "Summon the bot to a voice channel."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:3535
+msgid "You need the DJ role to summon the bot."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:3565
#, docstring
msgid "Set the volume, 1% - 150%."
msgstr ""
-#: redbot/cogs/audio/audio.py:2300
+#: redbot/cogs/audio/audio.py:3571
msgid "Current Volume:"
msgstr ""
-#: redbot/cogs/audio/audio.py:2312
+#: redbot/cogs/audio/audio.py:3583
msgid "You must be in the voice channel to change the volume."
msgstr ""
-#: redbot/cogs/audio/audio.py:2318
+#: redbot/cogs/audio/audio.py:3589
msgid "You need the DJ role to change the volume."
msgstr ""
-#: redbot/cogs/audio/audio.py:2331
+#: redbot/cogs/audio/audio.py:3602
msgid "Volume:"
msgstr ""
-#: redbot/cogs/audio/audio.py:2341
+#: redbot/cogs/audio/audio.py:3613
#, docstring
msgid "Lavalink server configuration options."
msgstr ""
-#: redbot/cogs/audio/audio.py:2346
+#: redbot/cogs/audio/audio.py:3618
#, docstring
msgid "Toggle using external lavalink servers."
msgstr ""
-#: redbot/cogs/audio/audio.py:2357 redbot/cogs/audio/audio.py:2366
+#: redbot/cogs/audio/audio.py:3625 redbot/cogs/audio/audio.py:3635
msgid "External lavalink server: {true_or_false}."
msgstr ""
-#: redbot/cogs/audio/audio.py:2361
-msgid "Defaults reset."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:2373
+#: redbot/cogs/audio/audio.py:3642
#, docstring
msgid "Set the lavalink server host."
msgstr ""
-#: redbot/cogs/audio/audio.py:2377 redbot/cogs/audio/audio.py:2382
+#: redbot/cogs/audio/audio.py:3646 redbot/cogs/audio/audio.py:3651
msgid "Host set to {host}."
msgstr ""
-#: redbot/cogs/audio/audio.py:2379 redbot/cogs/audio/audio.py:2395
-#: redbot/cogs/audio/audio.py:2413 redbot/cogs/audio/audio.py:2429
+#: redbot/cogs/audio/audio.py:3648 redbot/cogs/audio/audio.py:3664
+#: redbot/cogs/audio/audio.py:3682 redbot/cogs/audio/audio.py:3698
msgid "External lavalink server set to True."
msgstr ""
-#: redbot/cogs/audio/audio.py:2388
+#: redbot/cogs/audio/audio.py:3657
#, docstring
msgid "Set the lavalink server password."
msgstr ""
-#: redbot/cogs/audio/audio.py:2393 redbot/cogs/audio/audio.py:2399
+#: redbot/cogs/audio/audio.py:3662 redbot/cogs/audio/audio.py:3668
msgid "Server password set to {password}."
msgstr ""
-#: redbot/cogs/audio/audio.py:2406
+#: redbot/cogs/audio/audio.py:3675
#, docstring
msgid "Set the lavalink REST server port."
msgstr ""
-#: redbot/cogs/audio/audio.py:2411 redbot/cogs/audio/audio.py:2416
+#: redbot/cogs/audio/audio.py:3680 redbot/cogs/audio/audio.py:3685
msgid "REST port set to {port}."
msgstr ""
-#: redbot/cogs/audio/audio.py:2422
+#: redbot/cogs/audio/audio.py:3691
#, docstring
msgid "Set the lavalink websocket server port."
msgstr ""
-#: redbot/cogs/audio/audio.py:2427 redbot/cogs/audio/audio.py:2432
+#: redbot/cogs/audio/audio.py:3696 redbot/cogs/audio/audio.py:3701
msgid "Websocket port set to {port}."
msgstr ""
-#: redbot/cogs/audio/audio.py:2461
+#: redbot/cogs/audio/audio.py:3801
msgid "Not enough {currency} ({required_credits} required)."
msgstr ""
diff --git a/redbot/cogs/audio/locales/pt-BR.po b/redbot/cogs/audio/locales/pt-BR.po
index 1b306c398..3a58ba3e0 100644
--- a/redbot/cogs/audio/locales/pt-BR.po
+++ b/redbot/cogs/audio/locales/pt-BR.po
@@ -1,14 +1,14 @@
msgid ""
msgstr ""
"Project-Id-Version: red-discordbot\n"
-"POT-Creation-Date: 2019-02-17 02:24+0000\n"
-"PO-Revision-Date: 2019-02-25 03:08\n"
-"Last-Translator: Kowlin \n"
+"POT-Creation-Date: 2019-07-05 22:33+0200\n"
+"PO-Revision-Date: 2019-07-06 16:14\n"
+"Last-Translator: Robert Jansen (Kowlin)\n"
"Language-Team: Portuguese, Brazilian\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"Generated-By: redgettext 2.2\n"
+"Generated-By: redgettext 3.0\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: crowdin.com\n"
"X-Crowdin-Project: red-discordbot\n"
@@ -16,971 +16,1275 @@ msgstr ""
"X-Crowdin-File: /cogs/audio/locales/messages.pot\n"
"Language: pt_BR\n"
-#: redbot/cogs/audio/audio.py:38
+#: redbot/cogs/audio/audio.py:47
#, docstring
msgid "Play audio through voice channels."
-msgstr ""
+msgstr "Reproduzir áudio através de canais de voz."
-#: redbot/cogs/audio/audio.py:173 redbot/cogs/audio/audio.py:735
-msgid "Now Playing"
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:177
-msgid "Track length: {length} | Requested by: {user}"
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:201 redbot/cogs/audio/audio.py:227
+#: redbot/cogs/audio/audio.py:260
msgid "music in {} servers"
-msgstr ""
+msgstr "música em {} servidores"
-#: redbot/cogs/audio/audio.py:211
+#: redbot/cogs/audio/audio.py:300 redbot/cogs/audio/audio.py:1317
+msgid "Now Playing"
+msgstr "Reproduzindo Agora"
+
+#: redbot/cogs/audio/audio.py:304
+msgid "Track length: {length} | Requested by: {user}"
+msgstr "Tamanho da faixa: {length} | Solicitado por: {user}"
+
+#: redbot/cogs/audio/audio.py:331
msgid "Queue ended."
-msgstr ""
+msgstr "Fila terminou."
-#: redbot/cogs/audio/audio.py:240
+#: redbot/cogs/audio/audio.py:350
msgid "Track Error"
-msgstr ""
+msgstr "Erro na faixa"
-#: redbot/cogs/audio/audio.py:245
+#: redbot/cogs/audio/audio.py:355
msgid "Skipping..."
-msgstr ""
+msgstr "Pulando..."
-#: redbot/cogs/audio/audio.py:252
+#: redbot/cogs/audio/audio.py:363
#, docstring
msgid "Music configuration options."
-msgstr ""
+msgstr "Opções de configuração de música."
-#: redbot/cogs/audio/audio.py:258
+#: redbot/cogs/audio/audio.py:369
#, docstring
-msgid "Toggle DJ mode.\n\n"
-" DJ mode allows users with the DJ role to use audio commands.\n"
-" "
+msgid "Toggle the bot auto-disconnecting when done playing.\\n\\n This setting takes precedence over [p]audioset emptydisconnect.\\n "
msgstr ""
-#: redbot/cogs/audio/audio.py:265
+#: redbot/cogs/audio/audio.py:377
+msgid "Auto-disconnection at queue end: {true_or_false}."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:385
+#, docstring
+msgid "Toggle DJ mode.\\n\\n DJ mode allows users with the DJ role to use audio commands.\\n "
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:392
msgid "Please set a role to use with DJ mode. Enter the role name or ID now."
-msgstr ""
+msgstr "Por favor, defina um cargo para usar com o modo DJ. Digite o nome ou ID do cargo agora."
-#: redbot/cogs/audio/audio.py:273
+#: redbot/cogs/audio/audio.py:400
msgid "Response timed out, try again later."
+msgstr "Tempo de resposta excedido, tente novamente mais tarde."
+
+#: redbot/cogs/audio/audio.py:405
+msgid "DJ role enabled: {true_or_false}."
msgstr ""
-#: redbot/cogs/audio/audio.py:284
+#: redbot/cogs/audio/audio.py:411
#, docstring
msgid "Auto-disconnection after x seconds while stopped. 0 to disable."
-msgstr ""
+msgstr "Desconexão automática após x segundos parados. 0 para desativar."
-#: redbot/cogs/audio/audio.py:286 redbot/cogs/audio/audio.py:317
-#: redbot/cogs/audio/audio.py:405
+#: redbot/cogs/audio/audio.py:413 redbot/cogs/audio/audio.py:436
+#: redbot/cogs/audio/audio.py:543 redbot/cogs/audio/audio.py:687
msgid "Can't be less than zero."
-msgstr ""
+msgstr "Não pode ser menor que zero."
-#: redbot/cogs/audio/audio.py:291
+#: redbot/cogs/audio/audio.py:418
msgid "Empty disconnect disabled."
-msgstr ""
+msgstr "Desconexão automática desativada."
-#: redbot/cogs/audio/audio.py:296
+#: redbot/cogs/audio/audio.py:423
msgid "Empty disconnect timer set to {num_seconds}."
-msgstr ""
+msgstr "Tempo de desconexão automática definido para {num_seconds}."
-#: redbot/cogs/audio/audio.py:307
-#, docstring
-msgid "Set the role to use for DJ mode."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:310
-msgid "DJ role set to: {role.name}."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:315
+#: redbot/cogs/audio/audio.py:434
#, docstring
msgid "Set a price for queueing tracks for non-mods. 0 to disable."
-msgstr ""
+msgstr "Defina um preço para enfileirar faixas para não-mods. 0 para desativar."
-#: redbot/cogs/audio/audio.py:320
+#: redbot/cogs/audio/audio.py:439
msgid "Jukebox mode disabled."
-msgstr ""
+msgstr "Modo Jukebox desativado."
-#: redbot/cogs/audio/audio.py:325
+#: redbot/cogs/audio/audio.py:444
msgid "Track queueing command price set to {price} {currency}."
msgstr ""
-#: redbot/cogs/audio/audio.py:336
+#: redbot/cogs/audio/audio.py:455
+#, docstring
+msgid "Set the localtracks path if the Lavalink.jar is not run from the Audio data folder.\\n\\n Leave the path blank to reset the path to the default, the Audio data directory.\\n "
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:463
+msgid "The localtracks path location has been reset to the default location."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:466
+msgid "This setting is only for bot owners to set a localtracks folder location if the Lavalink.jar is being ran from outside of the Audio data directory.\\nIn the example below, the full path for 'ParentDirectory' must be passed to this command.\\nThe path must not contain spaces.\\n```\\nParentDirectory\\n |__ localtracks (folder)\\n | |__ Awesome Album Name (folder)\\n | |__01 Cool Song.mp3\\n | |__02 Groovy Song.mp3\\n |\\n |__ Lavalink.jar\\n |__ application.yml\\n```\\nThe folder path given to this command must contain the Lavalink.jar, the application.yml, and the localtracks folder.\\nUse this command with no path given to reset it to the default, the Audio data directory for this bot.\\nDo you want to continue to set the provided path for local tracks?"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:505
+msgid "{local_path} does not seem like a valid path."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:520
+msgid "The path that was entered does not have {filelist} file in that location. The path will still be saved, but please check the path and the file location before attempting to play local tracks or start your Lavalink.jar."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:530
+msgid "Localtracks path set to: {local_path}."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:536
+#, docstring
+msgid "Max length of a track to queue in seconds. 0 to disable.\\n\\n Accepts seconds or a value formatted like 00:00:00 (`hh:mm:ss`) or 00:00 (`mm:ss`).\\n Invalid input will turn the max length setting off."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:545
+msgid "Track max length disabled."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:549
+msgid "Track max length set to {seconds}."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:559
#, docstring
msgid "Toggle track announcement and other bot messages."
msgstr ""
-#: redbot/cogs/audio/audio.py:340
+#: redbot/cogs/audio/audio.py:563
msgid "Verbose mode on: {true_or_false}."
msgstr ""
-#: redbot/cogs/audio/audio.py:345
+#: redbot/cogs/audio/audio.py:569
+#, docstring
+msgid "Toggle the domain restriction on Audio.\\n\\n When toggled off, users will be able to play songs from non-commercial websites and links.\\n When toggled on, users are restricted to YouTube, SoundCloud, Mixer, Vimeo, Twitch, and Bandcamp links."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:576
+msgid "Commercial links only: {true_or_false}."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:582
+#, docstring
+msgid "Set the role to use for DJ mode."
+msgstr "Defina o cargo a ser usado para o modo DJ."
+
+#: redbot/cogs/audio/audio.py:585
+msgid "DJ role set to: {role.name}."
+msgstr "Cargo DJ definido para: {role.name}."
+
+#: redbot/cogs/audio/audio.py:589
#, docstring
msgid "Show the current settings."
msgstr ""
-#: redbot/cogs/audio/audio.py:358
+#: redbot/cogs/audio/audio.py:604
msgid "Server Settings"
msgstr ""
-#: redbot/cogs/audio/audio.py:360
-msgid "Disconnect timer: [{num_seconds}]\n"
+#: redbot/cogs/audio/audio.py:606
+msgid "Auto-disconnect: [{dc}]\\n"
msgstr ""
-#: redbot/cogs/audio/audio.py:364
-msgid "DJ Role: [{role.name}]\n"
+#: redbot/cogs/audio/audio.py:609
+msgid "Disconnect timer: [{num_seconds}]\\n"
msgstr ""
-#: redbot/cogs/audio/audio.py:366
-msgid "Jukebox: [{jukebox_name}]\n"
+#: redbot/cogs/audio/audio.py:613
+msgid "DJ Role: [{role.name}]\\n"
msgstr ""
-#: redbot/cogs/audio/audio.py:367
-msgid "Command price: [{jukebox_price}]\n"
+#: redbot/cogs/audio/audio.py:615
+msgid "Jukebox: [{jukebox_name}]\\n"
msgstr ""
-#: redbot/cogs/audio/audio.py:368
-msgid "Repeat: [{repeat}]\n"
-"Shuffle: [{shuffle}]\n"
-"Song notify msgs: [{notify}]\n"
-"Songs as status: [{status}]\n"
+#: redbot/cogs/audio/audio.py:616
+msgid "Command price: [{jukebox_price}]\\n"
msgstr ""
-#: redbot/cogs/audio/audio.py:375
-msgid "Thumbnails: [{0}]\n"
+#: redbot/cogs/audio/audio.py:618
+msgid "Max track length: [{tracklength}]\\n"
msgstr ""
-#: redbot/cogs/audio/audio.py:377
-msgid "Vote skip: [{vote_enabled}]\n"
-"Skip percentage: [{vote_percent}%]\n"
+#: redbot/cogs/audio/audio.py:621
+msgid "Repeat: [{repeat}]\\nShuffle: [{shuffle}]\\nSong notify msgs: [{notify}]\\nSongs as status: [{status}]\\n"
msgstr ""
-#: redbot/cogs/audio/audio.py:380
-msgid "---Lavalink Settings---\n"
-"Cog version: [{version}]\n"
-"Jar build: [{jarbuild}]\n"
-"External server: [{use_external_lavalink}]"
+#: redbot/cogs/audio/audio.py:628
+msgid "Thumbnails: [{0}]\\n"
msgstr ""
-#: redbot/cogs/audio/audio.py:393
+#: redbot/cogs/audio/audio.py:630
+msgid "Vote skip: [{vote_enabled}]\\nSkip percentage: [{vote_percent}%]\\n"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:633
+msgid "---Lavalink Settings--- \\nCog version: [{version}]\\nJar build: [{jarbuild}]\\nExternal server: [{use_external_lavalink}]\\n"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:640
+msgid "Localtracks path: [{localpath}]\\n"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:648
#, docstring
-msgid "Toggle displaying a thumbnail on audio messages."
+msgid "Instructions to set the Spotify API tokens."
msgstr ""
-#: redbot/cogs/audio/audio.py:397
-msgid "Thumbnail display: {true_or_false}."
+#: redbot/cogs/audio/audio.py:649
+msgid "1. Go to Spotify developers and log in with your Spotify account.\\n(https://developer.spotify.com/dashboard/applications)\\n2. Click \\\"Create An App\\\".\\n3. Fill out the form provided with your app name, etc.\\n4. When asked if you're developing commercial integration select \\\"No\\\".\\n5. Accept the terms and conditions.\\n6. Copy your client ID and your client secret into:\\n`{prefix}set api spotify client_id, client_secret,`"
msgstr ""
-#: redbot/cogs/audio/audio.py:403
-#, docstring
-msgid "Percentage needed for non-mods to skip tracks. 0 to disable."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:411
-msgid "Voting disabled. All users can use queue management commands."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:416
-msgid "Vote percentage set to {percent}%."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:425
+#: redbot/cogs/audio/audio.py:665
#, docstring
msgid "Enable/disable tracks' titles as status."
msgstr ""
-#: redbot/cogs/audio/audio.py:429
+#: redbot/cogs/audio/audio.py:669
msgid "Song titles as status: {true_or_false}."
msgstr ""
-#: redbot/cogs/audio/audio.py:435
+#: redbot/cogs/audio/audio.py:675
+#, docstring
+msgid "Toggle displaying a thumbnail on audio messages."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:679
+msgid "Thumbnail display: {true_or_false}."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:685
+#, docstring
+msgid "Percentage needed for non-mods to skip tracks. 0 to disable."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:693
+msgid "Voting disabled. All users can use queue management commands."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:698
+msgid "Vote percentage set to {percent}%."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:707
+#, docstring
+msgid "Instructions to set the YouTube API key."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:726
#, docstring
msgid "Audio stats."
msgstr ""
-#: redbot/cogs/audio/audio.py:469 redbot/cogs/audio/audio.py:489
-#: redbot/cogs/audio/audio.py:698 redbot/cogs/audio/audio.py:788
-#: redbot/cogs/audio/audio.py:804 redbot/cogs/audio/audio.py:829
-#: redbot/cogs/audio/audio.py:836 redbot/cogs/audio/audio.py:1179
-#: redbot/cogs/audio/audio.py:1466 redbot/cogs/audio/audio.py:1724
-#: redbot/cogs/audio/audio.py:2026 redbot/cogs/audio/audio.py:2063
-#: redbot/cogs/audio/audio.py:2109 redbot/cogs/audio/audio.py:2265
-#: redbot/cogs/audio/audio.py:2304 redbot/cogs/audio/audio.py:2334
+#: redbot/cogs/audio/audio.py:754 redbot/cogs/audio/audio.py:782
+#: redbot/cogs/audio/audio.py:819 redbot/cogs/audio/audio.py:847
+#: redbot/cogs/audio/audio.py:914 redbot/cogs/audio/audio.py:932
+#: redbot/cogs/audio/audio.py:956 redbot/cogs/audio/audio.py:1026
+#: redbot/cogs/audio/audio.py:1280 redbot/cogs/audio/audio.py:1371
+#: redbot/cogs/audio/audio.py:1388 redbot/cogs/audio/audio.py:1411
+#: redbot/cogs/audio/audio.py:1419 redbot/cogs/audio/audio.py:2190
+#: redbot/cogs/audio/audio.py:2527 redbot/cogs/audio/audio.py:2860
+#: redbot/cogs/audio/audio.py:3201 redbot/cogs/audio/audio.py:3255
+#: redbot/cogs/audio/audio.py:3305 redbot/cogs/audio/audio.py:3497
+#: redbot/cogs/audio/audio.py:3575 redbot/cogs/audio/audio.py:3605
msgid "Nothing playing."
msgstr ""
-#: redbot/cogs/audio/audio.py:473
+#: redbot/cogs/audio/audio.py:758
msgid "Not connected anywhere."
msgstr ""
-#: redbot/cogs/audio/audio.py:478
-msgid "Connected in {num} servers:"
+#: redbot/cogs/audio/audio.py:764
+msgid "Playing in {num}/{total} servers:"
msgstr ""
-#: redbot/cogs/audio/audio.py:486
+#: redbot/cogs/audio/audio.py:779
#, docstring
msgid "Bump a track number to the top of the queue."
msgstr ""
-#: redbot/cogs/audio/audio.py:495
+#: redbot/cogs/audio/audio.py:788
msgid "You must be in the voice channel to bump a track."
msgstr ""
-#: redbot/cogs/audio/audio.py:499
+#: redbot/cogs/audio/audio.py:792
msgid "You need the DJ role to bump tracks."
msgstr ""
-#: redbot/cogs/audio/audio.py:502 redbot/cogs/audio/audio.py:1739
+#: redbot/cogs/audio/audio.py:795 redbot/cogs/audio/audio.py:2875
msgid "Song number must be greater than 1 and within the queue limit."
msgstr ""
-#: redbot/cogs/audio/audio.py:517
+#: redbot/cogs/audio/audio.py:810
msgid "Moved {track} to the top of the queue."
msgstr ""
-#: redbot/cogs/audio/audio.py:523
+#: redbot/cogs/audio/audio.py:817
#, docstring
msgid "Disconnect from the voice channel."
msgstr ""
-#: redbot/cogs/audio/audio.py:528
+#: redbot/cogs/audio/audio.py:826
msgid "You need the DJ role to disconnect."
msgstr ""
-#: redbot/cogs/audio/audio.py:532
+#: redbot/cogs/audio/audio.py:830
msgid "There are other people listening to music."
msgstr ""
-#: redbot/cogs/audio/audio.py:540
+#: redbot/cogs/audio/audio.py:845
+#, docstring
+msgid "Equalizer management."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:865
+#, docstring
+msgid "Delete a saved eq preset."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:887
+#, docstring
+msgid "List saved eq presets."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:890
+msgid "No saved equalizer presets."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:897
+msgid "{num} preset(s)"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:903
+#, docstring
+msgid "Load a saved eq preset."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:930
+#, docstring
+msgid "Reset the eq to 0 across all bands."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:946
+msgid "Equalizer values have been reset."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:954
+#, docstring
+msgid "Save the current eq settings to a preset."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:958
+msgid "Please enter a name for this equalizer preset."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:972
+msgid "No equalizer preset name entered, try the command again later."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:981 redbot/cogs/audio/audio.py:2213
+msgid "Try the command again with a shorter name."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:985
+msgid "Preset name already exists, do you want to replace it?"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:994
+msgid "Not saving preset."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1019
+#, docstring
+msgid "Set an eq band with a band number or name and value.\\n\\n Band positions are 1-15 and values have a range of -0.25 to 1.0.\\n Band names are 25, 40, 63, 100, 160, 250, 400, 630, 1k, 1.6k, 2.5k, 4k, 6.3k, 10k, and 16k Hz.\\n Setting a band value to -0.25 nullifies it while +0.25 is double.\\n "
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1063
+msgid "Valid band numbers are 1-15 or the band names listed in the help for this command."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1099
#, docstring
msgid "Local playback commands."
msgstr ""
-#: redbot/cogs/audio/audio.py:545
+#: redbot/cogs/audio/audio.py:1104
#, docstring
msgid "Play all songs in a localtracks folder."
msgstr ""
-#: redbot/cogs/audio/audio.py:552
+#: redbot/cogs/audio/audio.py:1115
+msgid "No localtracks folder named {name}."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1121
#, docstring
msgid "Play a local track."
msgstr ""
-#: redbot/cogs/audio/audio.py:557
+#: redbot/cogs/audio/audio.py:1126
msgid "No local track folders found."
msgstr ""
-#: redbot/cogs/audio/audio.py:600
+#: redbot/cogs/audio/audio.py:1169
#, docstring
msgid "Search for songs across all localtracks folders."
msgstr ""
-#: redbot/cogs/audio/audio.py:605
+#: redbot/cogs/audio/audio.py:1174
msgid "No album folders found."
msgstr ""
-#: redbot/cogs/audio/audio.py:612 redbot/cogs/audio/audio.py:1634
+#: redbot/cogs/audio/audio.py:1181 redbot/cogs/audio/audio.py:2816
msgid "No matches."
msgstr ""
-#: redbot/cogs/audio/audio.py:688
+#: redbot/cogs/audio/audio.py:1269
msgid "No localtracks folder."
msgstr ""
-#: redbot/cogs/audio/audio.py:696
+#: redbot/cogs/audio/audio.py:1278
#, docstring
msgid "Now playing."
msgstr ""
-#: redbot/cogs/audio/audio.py:716
+#: redbot/cogs/audio/audio.py:1298
msgid "Requested by: **{track.requester}**"
msgstr ""
-#: redbot/cogs/audio/audio.py:726
+#: redbot/cogs/audio/audio.py:1308
msgid "Nothing."
msgstr ""
-#: redbot/cogs/audio/audio.py:785
+#: redbot/cogs/audio/audio.py:1368
#, docstring
-msgid "Pause and resume."
+msgid "Pause or resume a playing track."
msgstr ""
-#: redbot/cogs/audio/audio.py:794
-msgid "You must be in the voice channel to pause the music."
+#: redbot/cogs/audio/audio.py:1377
+msgid "You must be in the voice channel pause or resume."
msgstr ""
-#: redbot/cogs/audio/audio.py:800
-msgid "You need the DJ role to pause tracks."
+#: redbot/cogs/audio/audio.py:1384
+msgid "You need the DJ role to pause or resume tracks."
msgstr ""
-#: redbot/cogs/audio/audio.py:814
+#: redbot/cogs/audio/audio.py:1401
msgid "Track Paused"
msgstr ""
-#: redbot/cogs/audio/audio.py:821
+#: redbot/cogs/audio/audio.py:1407
msgid "Track Resumed"
msgstr ""
-#: redbot/cogs/audio/audio.py:826
-msgid "Track is paused."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:828
-msgid "Track is playing."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:834
+#: redbot/cogs/audio/audio.py:1417
#, docstring
msgid "Queue percentage."
msgstr ""
-#: redbot/cogs/audio/audio.py:860
+#: redbot/cogs/audio/audio.py:1443
msgid "Nothing in the queue."
msgstr ""
-#: redbot/cogs/audio/audio.py:882
+#: redbot/cogs/audio/audio.py:1465
msgid "Queued and playing tracks:"
msgstr ""
-#: redbot/cogs/audio/audio.py:890
+#: redbot/cogs/audio/audio.py:1474
#, docstring
msgid "Play a URL or search for a track."
msgstr ""
-#: redbot/cogs/audio/audio.py:900 redbot/cogs/audio/audio.py:1411
-#: redbot/cogs/audio/audio.py:1795
+#: redbot/cogs/audio/audio.py:1481
+msgid "That URL is not allowed."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1484 redbot/cogs/audio/audio.py:2437
+#: redbot/cogs/audio/audio.py:2928 redbot/cogs/audio/audio.py:3047
+msgid "Connection to Lavalink has failed."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1486 redbot/cogs/audio/audio.py:2439
+#: redbot/cogs/audio/audio.py:2930 redbot/cogs/audio/audio.py:3049
+msgid "Please check your console or logs for details."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1495 redbot/cogs/audio/audio.py:2449
+#: redbot/cogs/audio/audio.py:2939 redbot/cogs/audio/audio.py:3543
msgid "I don't have permission to connect to your channel."
msgstr ""
-#: redbot/cogs/audio/audio.py:906 redbot/cogs/audio/audio.py:1422
-#: redbot/cogs/audio/audio.py:1801 redbot/cogs/audio/audio.py:1889
+#: redbot/cogs/audio/audio.py:1501 redbot/cogs/audio/audio.py:2461
+#: redbot/cogs/audio/audio.py:2945 redbot/cogs/audio/audio.py:3056
+#: redbot/cogs/audio/audio.py:3555
msgid "Connect to a voice channel first."
msgstr ""
-#: redbot/cogs/audio/audio.py:909 redbot/cogs/audio/audio.py:1418
-#: redbot/cogs/audio/audio.py:1804 redbot/cogs/audio/audio.py:1892
+#: redbot/cogs/audio/audio.py:1504 redbot/cogs/audio/audio.py:2457
+#: redbot/cogs/audio/audio.py:2948 redbot/cogs/audio/audio.py:3059
+#: redbot/cogs/audio/audio.py:3558
msgid "Connection to Lavalink has not yet been established."
msgstr ""
-#: redbot/cogs/audio/audio.py:913
+#: redbot/cogs/audio/audio.py:1508
msgid "You need the DJ role to queue tracks."
msgstr ""
-#: redbot/cogs/audio/audio.py:922
+#: redbot/cogs/audio/audio.py:1519
msgid "You must be in the voice channel to use the play command."
msgstr ""
-#: redbot/cogs/audio/audio.py:928
+#: redbot/cogs/audio/audio.py:1525
msgid "No tracks to play."
msgstr ""
-#: redbot/cogs/audio/audio.py:942 redbot/cogs/audio/audio.py:1450
-#: redbot/cogs/audio/audio.py:1828 redbot/cogs/audio/audio.py:1865
+#: redbot/cogs/audio/audio.py:1565
+msgid "The owner needs to set the Spotify client ID, Spotify client secret, and YouTube API key before Spotify URLs or codes can be used. \\nSee `{prefix}audioset youtubeapi` and `{prefix}audioset spotifyapi` for instructions."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1575 redbot/cogs/audio/audio.py:2493
+msgid "Wait until the playlist has finished loading."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1592 redbot/cogs/audio/audio.py:1657
+#: redbot/cogs/audio/audio.py:2499 redbot/cogs/audio/audio.py:2509
+#: redbot/cogs/audio/audio.py:2973 redbot/cogs/audio/audio.py:3027
msgid "Nothing found."
msgstr ""
-#: redbot/cogs/audio/audio.py:953 redbot/cogs/audio/audio.py:1295
+#: redbot/cogs/audio/audio.py:1600
+msgid "The Spotify API key or client secret has not been set properly. \\nUse `{prefix}audioset spotifyapi` for instructions."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1639 redbot/cogs/audio/audio.py:1776
+msgid "This doesn't seem to be a valid Spotify URL or code."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1688 redbot/cogs/audio/audio.py:2320
msgid "Playlist Enqueued"
msgstr ""
-#: redbot/cogs/audio/audio.py:954 redbot/cogs/audio/audio.py:1296
-msgid "Added {num} tracks to the queue."
+#: redbot/cogs/audio/audio.py:1689 redbot/cogs/audio/audio.py:2321
+msgid "Added {num} tracks to the queue.{maxlength_msg}"
msgstr ""
-#: redbot/cogs/audio/audio.py:958
+#: redbot/cogs/audio/audio.py:1695
msgid "{time} until start of playlist playback: starts at #{position} in queue"
msgstr ""
-#: redbot/cogs/audio/audio.py:980 redbot/cogs/audio/audio.py:1938
+#: redbot/cogs/audio/audio.py:1711 redbot/cogs/audio/audio.py:3125
+msgid "Track exceeds maximum length."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1717
+msgid "Nothing found. Check your Lavalink logs for details."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1732 redbot/cogs/audio/audio.py:3108
msgid "Track Enqueued"
msgstr ""
-#: redbot/cogs/audio/audio.py:984 redbot/cogs/audio/audio.py:1944
+#: redbot/cogs/audio/audio.py:1736 redbot/cogs/audio/audio.py:3114
msgid "{time} until track playback: #{position} in queue"
msgstr ""
-#: redbot/cogs/audio/audio.py:989 redbot/cogs/audio/audio.py:1949
+#: redbot/cogs/audio/audio.py:1741 redbot/cogs/audio/audio.py:3119
msgid "#{position} in queue"
msgstr ""
-#: redbot/cogs/audio/audio.py:997
+#: redbot/cogs/audio/audio.py:1761
+msgid "The Spotify API key or client secret has not been set properly. \\nUse `{prefix}audioset spotifyapi` for instructions."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1793 redbot/cogs/audio/audio.py:2384
+msgid "Please wait, adding tracks..."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1809
+msgid "The connection was reset while loading the playlist."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1826 redbot/cogs/audio/audio.py:2401
+msgid "Loading track {num}/{total}..."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1840
+msgid "Approximate time remaining: {seconds}"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1850
+msgid "Nothing found.\\nThe YouTube API key may be invalid or you may be rate limited on YouTube's search service.\\nCheck the YouTube API key again and follow the instructions at `{prefix}audioset youtubeapi`."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1871
#, docstring
msgid "Playlist configuration options."
msgstr ""
-#: redbot/cogs/audio/audio.py:1002
+#: redbot/cogs/audio/audio.py:1876
#, docstring
-msgid "Add a track URL, playlist link, or quick search to a playlist.\n\n"
-" The track(s) will be appended to the end of the playlist.\n"
-" "
+msgid "Add a track URL, playlist link, or quick search to a playlist.\\n\\n The track(s) will be appended to the end of the playlist.\\n "
msgstr ""
-#: redbot/cogs/audio/audio.py:1014 redbot/cogs/audio/audio.py:1078
-#: redbot/cogs/audio/audio.py:1228
+#: redbot/cogs/audio/audio.py:1888 redbot/cogs/audio/audio.py:2028
+#: redbot/cogs/audio/audio.py:2241
msgid "You are not the author of that playlist."
msgstr ""
-#: redbot/cogs/audio/audio.py:1024
+#: redbot/cogs/audio/audio.py:1898
msgid "{track} is already in {playlist}."
msgstr ""
-#: redbot/cogs/audio/audio.py:1033 redbot/cogs/audio/audio.py:1082
-#: redbot/cogs/audio/audio.py:1092 redbot/cogs/audio/audio.py:1231
+#: redbot/cogs/audio/audio.py:1907 redbot/cogs/audio/audio.py:2032
+#: redbot/cogs/audio/audio.py:2081 redbot/cogs/audio/audio.py:2244
msgid "No playlist with that name."
msgstr ""
-#: redbot/cogs/audio/audio.py:1040
+#: redbot/cogs/audio/audio.py:1914
msgid "{track} appended to {playlist}."
msgstr ""
-#: redbot/cogs/audio/audio.py:1046
+#: redbot/cogs/audio/audio.py:1920
msgid "{num} tracks appended to {playlist}."
msgstr ""
-#: redbot/cogs/audio/audio.py:1053
+#: redbot/cogs/audio/audio.py:1928
+#, docstring
+msgid "Copy a playlist from one server to another."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1932
+msgid "Invalid server ID for source server."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1934
+msgid "Invalid server ID for target server."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1939
+msgid "No playlist with that name in {from_guild_name}."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1950
+msgid "Playlist {name} copied from {from_guild_name} to {to_guild_name}."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1962
+msgid "A playlist with that name already exists in {to_guild_name}.\\nPlease enter a new name for this playlist."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1975
+msgid "Try the playlist copy command again with a shorter name."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1980
+msgid "Playlist name already exists in {to_guild_name}, try the playlist copy command again with a different name."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1986 redbot/cogs/audio/audio.py:2220
+msgid "No playlist name entered, try again later."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1991
+msgid "Playlist {name} copied from {from_guild_name} to {to_guild_name}.\\nNew playlist name on {to_guild_name}: {new_name}"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2003
#, docstring
msgid "Create an empty playlist."
msgstr ""
-#: redbot/cogs/audio/audio.py:1057 redbot/cogs/audio/audio.py:1172
+#: redbot/cogs/audio/audio.py:2007 redbot/cogs/audio/audio.py:2183
msgid "You need the DJ role to save playlists."
msgstr ""
-#: redbot/cogs/audio/audio.py:1061 redbot/cogs/audio/audio.py:1176
-#: redbot/cogs/audio/audio.py:1204
+#: redbot/cogs/audio/audio.py:2011 redbot/cogs/audio/audio.py:2187
+#: redbot/cogs/audio/audio.py:2217
msgid "Playlist name already exists, try again with a different name."
msgstr ""
-#: redbot/cogs/audio/audio.py:1067
+#: redbot/cogs/audio/audio.py:2017
msgid "Empty playlist {name} created."
msgstr ""
-#: redbot/cogs/audio/audio.py:1071
+#: redbot/cogs/audio/audio.py:2021
#, docstring
msgid "Delete a saved playlist."
msgstr ""
-#: redbot/cogs/audio/audio.py:1083
+#: redbot/cogs/audio/audio.py:2033
msgid "{name} playlist deleted."
msgstr ""
-#: redbot/cogs/audio/audio.py:1087
+#: redbot/cogs/audio/audio.py:2039
+#, docstring
+msgid "Download a copy of a playlist.\\n\\n These files can be used with the [p]playlist upload command.\\n Red v2-compatible playlists can be generated by passing True\\n for the v2 variable."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2061
+msgid "That playlist has no tracks."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2063 redbot/cogs/audio/audio.py:2331
+msgid "That playlist doesn't exist."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2076
#, docstring
msgid "Retrieve information from a saved playlist."
msgstr ""
-#: redbot/cogs/audio/audio.py:1100
-msgid "**Custom playlist.**"
+#: redbot/cogs/audio/audio.py:2101
+msgid "Playlist info for {playlist_name}:\\n"
msgstr ""
-#: redbot/cogs/audio/audio.py:1102
-msgid "URL: <{url}>"
+#: redbot/cogs/audio/audio.py:2105
+msgid "Playlist info for {playlist_name}:\\nURL: {url}"
msgstr ""
-#: redbot/cogs/audio/audio.py:1105
-msgid "Playlist info for {playlist_name}:"
+#: redbot/cogs/audio/audio.py:2116
+msgid "Author: {author_name} | {num} track(s)"
msgstr ""
-#: redbot/cogs/audio/audio.py:1106
-msgid "Author: **{author_name}**\n"
-"{url}"
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:1110
-msgid "{num} track(s)"
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:1115
+#: redbot/cogs/audio/audio.py:2126
#, docstring
msgid "List saved playlists."
msgstr ""
-#: redbot/cogs/audio/audio.py:1118
+#: redbot/cogs/audio/audio.py:2129
msgid "No saved playlists."
msgstr ""
-#: redbot/cogs/audio/audio.py:1130
+#: redbot/cogs/audio/audio.py:2141
msgid "Tracks: {num}"
msgstr ""
-#: redbot/cogs/audio/audio.py:1131
-msgid "Author: {name}\n"
+#: redbot/cogs/audio/audio.py:2142
+msgid "Author: {name}\\n"
msgstr ""
-#: redbot/cogs/audio/audio.py:1155
+#: redbot/cogs/audio/audio.py:2166
msgid "Playlists for {server_name}:"
msgstr ""
-#: redbot/cogs/audio/audio.py:1159
+#: redbot/cogs/audio/audio.py:2170
msgid "Page {page_num}/{total_pages} | {num} playlists"
msgstr ""
-#: redbot/cogs/audio/audio.py:1168
+#: redbot/cogs/audio/audio.py:2179
#, docstring
msgid "Save the queue to a playlist."
msgstr ""
-#: redbot/cogs/audio/audio.py:1189
+#: redbot/cogs/audio/audio.py:2193 redbot/cogs/audio/audio.py:2590
+#: redbot/cogs/audio/audio.py:2593 redbot/cogs/audio/audio.py:2613
+#: redbot/cogs/audio/audio.py:2756 redbot/cogs/audio/audio.py:2759
+#: redbot/cogs/audio/audio.py:2775 redbot/cogs/audio/audio.py:2778
+#: redbot/cogs/audio/audio.py:2810 redbot/cogs/audio/audio.py:2812
+#: redbot/cogs/audio/audio.py:3418 redbot/cogs/audio/audio.py:3422
+#: redbot/cogs/audio/audio.py:3429
+msgid "There's nothing in the queue."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2202
msgid "Please enter a name for this playlist."
msgstr ""
-#: redbot/cogs/audio/audio.py:1200
-msgid "Try the command again with a shorter name."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:1207
-msgid "No playlist name entered, try again later."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:1214
+#: redbot/cogs/audio/audio.py:2227
msgid "Playlist {name} saved from current queue: {num} tracks added."
msgstr ""
-#: redbot/cogs/audio/audio.py:1221
+#: redbot/cogs/audio/audio.py:2234
#, docstring
msgid "Remove a track from a playlist by url."
msgstr ""
-#: redbot/cogs/audio/audio.py:1235
+#: redbot/cogs/audio/audio.py:2248
msgid "URL not in playlist."
msgstr ""
-#: redbot/cogs/audio/audio.py:1239
+#: redbot/cogs/audio/audio.py:2252
msgid "No tracks left, removing playlist."
msgstr ""
-#: redbot/cogs/audio/audio.py:1246
+#: redbot/cogs/audio/audio.py:2259
msgid "{num} entries have been removed from the {playlist_name} playlist."
msgstr ""
-#: redbot/cogs/audio/audio.py:1253
+#: redbot/cogs/audio/audio.py:2266
msgid "The track has been removed from the {playlist_name} playlist."
msgstr ""
-#: redbot/cogs/audio/audio.py:1260
+#: redbot/cogs/audio/audio.py:2273
#, docstring
msgid "Save a playlist from a url."
msgstr ""
-#: redbot/cogs/audio/audio.py:1272
+#: redbot/cogs/audio/audio.py:2285
msgid "Playlist {name} saved: {num} tracks added."
msgstr ""
-#: redbot/cogs/audio/audio.py:1279
+#: redbot/cogs/audio/audio.py:2292
#, docstring
msgid "Load a playlist into the queue."
msgstr ""
-#: redbot/cogs/audio/audio.py:1304
-msgid "That playlist doesn't exist."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:1309
+#: redbot/cogs/audio/audio.py:2336
#, docstring
msgid "Convert a Red v2 playlist file to a playlist."
msgstr ""
-#: redbot/cogs/audio/audio.py:1315
+#: redbot/cogs/audio/audio.py:2342
msgid "Please upload the playlist file. Any other message will cancel this operation."
msgstr ""
-#: redbot/cogs/audio/audio.py:1323
+#: redbot/cogs/audio/audio.py:2350
msgid "No file detected, try again later."
msgstr ""
-#: redbot/cogs/audio/audio.py:1327
+#: redbot/cogs/audio/audio.py:2354
msgid "Upload cancelled."
msgstr ""
-#: redbot/cogs/audio/audio.py:1331
+#: redbot/cogs/audio/audio.py:2358
msgid "Only playlist files can be uploaded."
msgstr ""
-#: redbot/cogs/audio/audio.py:1336
+#: redbot/cogs/audio/audio.py:2363
msgid "Not a valid playlist file."
msgstr ""
-#: redbot/cogs/audio/audio.py:1352
+#: redbot/cogs/audio/audio.py:2379
msgid "A playlist already exists with this name."
msgstr ""
-#: redbot/cogs/audio/audio.py:1357
-msgid "Please wait, adding tracks..."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:1371
-msgid "Loading track {num}/{total}..."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:1377
+#: redbot/cogs/audio/audio.py:2407
msgid "No tracks found."
msgstr ""
-#: redbot/cogs/audio/audio.py:1383
+#: redbot/cogs/audio/audio.py:2413
msgid "Added {num} tracks from the {playlist_name} playlist. {num_bad} track(s) could not be loaded."
msgstr ""
-#: redbot/cogs/audio/audio.py:1388
+#: redbot/cogs/audio/audio.py:2418
msgid "Added {num} tracks from the {playlist_name} playlist."
msgstr ""
-#: redbot/cogs/audio/audio.py:1392
+#: redbot/cogs/audio/audio.py:2422
msgid "Playlist Saved"
msgstr ""
-#: redbot/cogs/audio/audio.py:1403
+#: redbot/cogs/audio/audio.py:2433
msgid "You need the DJ role to use playlists."
msgstr ""
-#: redbot/cogs/audio/audio.py:1432
+#: redbot/cogs/audio/audio.py:2471
msgid "You must be in the voice channel to use the playlist command."
msgstr ""
-#: redbot/cogs/audio/audio.py:1464
+#: redbot/cogs/audio/audio.py:2525
#, docstring
msgid "Skip to the start of the previously played track."
msgstr ""
-#: redbot/cogs/audio/audio.py:1474 redbot/cogs/audio/audio.py:2121
+#: redbot/cogs/audio/audio.py:2535 redbot/cogs/audio/audio.py:3317
msgid "You need the DJ role to skip tracks."
msgstr ""
-#: redbot/cogs/audio/audio.py:1479 redbot/cogs/audio/audio.py:2115
+#: redbot/cogs/audio/audio.py:2540 redbot/cogs/audio/audio.py:3311
msgid "You must be in the voice channel to skip the music."
msgstr ""
-#: redbot/cogs/audio/audio.py:1482
+#: redbot/cogs/audio/audio.py:2543
msgid "Turn shuffle off to use this command."
msgstr ""
-#: redbot/cogs/audio/audio.py:1484
+#: redbot/cogs/audio/audio.py:2545
msgid "No previous track."
msgstr ""
-#: redbot/cogs/audio/audio.py:1501
+#: redbot/cogs/audio/audio.py:2562
msgid "Replaying Track"
msgstr ""
-#: redbot/cogs/audio/audio.py:1509
+#: redbot/cogs/audio/audio.py:2571
#, docstring
-msgid "List the queue.\n\n"
-" Use [p]queue search to search the queue.\n"
-" "
+msgid "List the songs in the queue."
msgstr ""
-#: redbot/cogs/audio/audio.py:1514 redbot/cogs/audio/audio.py:1517
-#: redbot/cogs/audio/audio.py:1544 redbot/cogs/audio/audio.py:2221
-#: redbot/cogs/audio/audio.py:2225 redbot/cogs/audio/audio.py:2232
-msgid "There's nothing in the queue."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:1553
+#: redbot/cogs/audio/audio.py:2622
msgid "**Currently livestreaming:**"
msgstr ""
-#: redbot/cogs/audio/audio.py:1559 redbot/cogs/audio/audio.py:1569
-#: redbot/cogs/audio/audio.py:1575
+#: redbot/cogs/audio/audio.py:2628 redbot/cogs/audio/audio.py:2638
+#: redbot/cogs/audio/audio.py:2644
msgid "Playing: "
msgstr ""
-#: redbot/cogs/audio/audio.py:1562 redbot/cogs/audio/audio.py:1570
-msgid "Requested by: **{user}**\n"
+#: redbot/cogs/audio/audio.py:2631
+msgid "Requested by: **{user}**\\n"
msgstr ""
-#: redbot/cogs/audio/audio.py:1577
+#: redbot/cogs/audio/audio.py:2639
+msgid "Requested by: **{user}**\\n"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2646
msgid "Requested by: **{user}**"
msgstr ""
-#: redbot/cogs/audio/audio.py:1595 redbot/cogs/audio/audio.py:1599
-#: redbot/cogs/audio/audio.py:1604
-msgid "requested by **{user}**\n"
+#: redbot/cogs/audio/audio.py:2664
+msgid "requested by **{user}**\\n"
msgstr ""
-#: redbot/cogs/audio/audio.py:1615
+#: redbot/cogs/audio/audio.py:2668
+msgid "requested by **{user}**\\n"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2673
+msgid "requested by **{user}**\\n"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2684
msgid "Page {page_num}/{total_pages} | {num_tracks} tracks, {num_remaining} remaining"
msgstr ""
-#: redbot/cogs/audio/audio.py:1624
+#: redbot/cogs/audio/audio.py:2693
msgid "Repeat"
msgstr ""
-#: redbot/cogs/audio/audio.py:1626
+#: redbot/cogs/audio/audio.py:2695
msgid "Shuffle"
msgstr ""
-#: redbot/cogs/audio/audio.py:1683
+#: redbot/cogs/audio/audio.py:2740
msgid "Matching Tracks:"
msgstr ""
-#: redbot/cogs/audio/audio.py:1686 redbot/cogs/audio/audio.py:2010
+#: redbot/cogs/audio/audio.py:2743 redbot/cogs/audio/audio.py:3182
msgid "Page {page_num}/{total_pages}"
msgstr ""
-#: redbot/cogs/audio/audio.py:1695
+#: redbot/cogs/audio/audio.py:2752
+#, docstring
+msgid "Clears the queue."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2764
+msgid "You need the DJ role to clear the queue."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2766
+msgid "The queue has been cleared."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2771
+#, docstring
+msgid "Removes songs from the queue if the requester is not in the voice channel."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2783
+msgid "You need the DJ role to clean the queue."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2794
+msgid "Removed 0 tracks."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2798
+msgid "Removed {removed_tracks} tracks queued by members outside of the voice channel."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2806
+#, docstring
+msgid "Search the queue."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2829
#, docstring
msgid "Toggle repeat."
msgstr ""
-#: redbot/cogs/audio/audio.py:1701
+#: redbot/cogs/audio/audio.py:2835
msgid "You need the DJ role to toggle repeat."
msgstr ""
-#: redbot/cogs/audio/audio.py:1712
+#: redbot/cogs/audio/audio.py:2843
msgid "You must be in the voice channel to toggle repeat."
msgstr ""
-#: redbot/cogs/audio/audio.py:1715
+#: redbot/cogs/audio/audio.py:2849
msgid "Repeat tracks: {true_or_false}."
msgstr ""
-#: redbot/cogs/audio/audio.py:1721
+#: redbot/cogs/audio/audio.py:2857
#, docstring
msgid "Remove a specific track number from the queue."
msgstr ""
-#: redbot/cogs/audio/audio.py:1727
+#: redbot/cogs/audio/audio.py:2863
msgid "Nothing queued."
msgstr ""
-#: redbot/cogs/audio/audio.py:1730
+#: redbot/cogs/audio/audio.py:2866
msgid "You need the DJ role to remove tracks."
msgstr ""
-#: redbot/cogs/audio/audio.py:1735
+#: redbot/cogs/audio/audio.py:2871
msgid "You must be in the voice channel to manage the queue."
msgstr ""
-#: redbot/cogs/audio/audio.py:1751
+#: redbot/cogs/audio/audio.py:2887
msgid "Removed {track} from the queue."
msgstr ""
-#: redbot/cogs/audio/audio.py:1757
+#: redbot/cogs/audio/audio.py:2894
#, docstring
-msgid "Pick a track with a search.\n\n"
-" Use `[p]search list ` to queue all tracks found\n"
-" on YouTube. `[p]search sc ` will search SoundCloud\n"
-" instead of YouTube.\n"
-" "
+msgid "Pick a track with a search.\\n\\n Use `[p]search list ` to queue all tracks found\\n on YouTube. `[p]search sc ` will search SoundCloud\\n instead of YouTube.\\n "
msgstr ""
-#: redbot/cogs/audio/audio.py:1814
+#: redbot/cogs/audio/audio.py:2958
msgid "You must be in the voice channel to enqueue tracks."
msgstr ""
-#: redbot/cogs/audio/audio.py:1831
-msgid "Queued {num} track(s)."
+#: redbot/cogs/audio/audio.py:2997
+msgid "Queued {num} track(s).{maxlength_msg}"
msgstr ""
-#: redbot/cogs/audio/audio.py:1837
+#: redbot/cogs/audio/audio.py:3003
msgid "{time} until start of search playback: starts at #{position} in queue"
msgstr ""
-#: redbot/cogs/audio/audio.py:1997
+#: redbot/cogs/audio/audio.py:3169
msgid "Tracks Found:"
msgstr ""
-#: redbot/cogs/audio/audio.py:1998
+#: redbot/cogs/audio/audio.py:3170
msgid "search results"
msgstr ""
-#: redbot/cogs/audio/audio.py:2001
+#: redbot/cogs/audio/audio.py:3173
msgid "Folders Found:"
msgstr ""
-#: redbot/cogs/audio/audio.py:2002
+#: redbot/cogs/audio/audio.py:3174
msgid "local folders"
msgstr ""
-#: redbot/cogs/audio/audio.py:2004
+#: redbot/cogs/audio/audio.py:3176
msgid "Files Found:"
msgstr ""
-#: redbot/cogs/audio/audio.py:2005
+#: redbot/cogs/audio/audio.py:3177
msgid "local tracks"
msgstr ""
-#: redbot/cogs/audio/audio.py:2022
+#: redbot/cogs/audio/audio.py:3195
#, docstring
-msgid "Seek ahead or behind on a track by seconds."
+msgid "Seek ahead or behind on a track by seconds or a to a specific time.\\n\\n Accepts seconds or a value formatted like 00:00:00 (`hh:mm:ss`) or 00:00 (`mm:ss`)."
msgstr ""
-#: redbot/cogs/audio/audio.py:2031
+#: redbot/cogs/audio/audio.py:3206
msgid "You must be in the voice channel to use seek."
msgstr ""
-#: redbot/cogs/audio/audio.py:2036
+#: redbot/cogs/audio/audio.py:3211
msgid "You need the DJ role to use seek."
msgstr ""
-#: redbot/cogs/audio/audio.py:2042 redbot/cogs/audio/audio.py:2278
+#: redbot/cogs/audio/audio.py:3217 redbot/cogs/audio/audio.py:3510
msgid "There are other people listening - vote to skip instead."
msgstr ""
-#: redbot/cogs/audio/audio.py:2046
+#: redbot/cogs/audio/audio.py:3221
msgid "Can't seek on a stream."
msgstr ""
-#: redbot/cogs/audio/audio.py:2052
+#: redbot/cogs/audio/audio.py:3230
+msgid "Invalid input for the time to seek."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:3236
msgid "Moved {num_seconds}s to 00:00:00"
msgstr ""
-#: redbot/cogs/audio/audio.py:2057
+#: redbot/cogs/audio/audio.py:3241
msgid "Moved {num_seconds}s to {time}"
msgstr ""
-#: redbot/cogs/audio/audio.py:2068
+#: redbot/cogs/audio/audio.py:3249
+msgid "Moved to {time}"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:3261
#, docstring
msgid "Toggle shuffle."
msgstr ""
-#: redbot/cogs/audio/audio.py:2072
+#: redbot/cogs/audio/audio.py:3265
msgid "You need the DJ role to toggle shuffle."
msgstr ""
-#: redbot/cogs/audio/audio.py:2083
+#: redbot/cogs/audio/audio.py:3273
msgid "You must be in the voice channel to toggle shuffle."
msgstr ""
-#: redbot/cogs/audio/audio.py:2086
+#: redbot/cogs/audio/audio.py:3279
msgid "Shuffle tracks: {true_or_false}."
msgstr ""
-#: redbot/cogs/audio/audio.py:2092
+#: redbot/cogs/audio/audio.py:3287
#, docstring
-msgid "Make Red sing one of her songs"
+msgid "Make Red sing one of her songs."
msgstr ""
-#: redbot/cogs/audio/audio.py:2107
+#: redbot/cogs/audio/audio.py:3303
#, docstring
-msgid "Skip to the next track."
+msgid "Skip to the next track, or to a given track number."
msgstr ""
-#: redbot/cogs/audio/audio.py:2126
+#: redbot/cogs/audio/audio.py:3322
+msgid "Can't skip to a specific track in vote mode without the DJ role."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:3326
msgid "I removed your vote to skip."
msgstr ""
-#: redbot/cogs/audio/audio.py:2129
+#: redbot/cogs/audio/audio.py:3329
msgid "You voted to skip."
msgstr ""
-#: redbot/cogs/audio/audio.py:2142
+#: redbot/cogs/audio/audio.py:3342
msgid "Vote threshold met."
msgstr ""
-#: redbot/cogs/audio/audio.py:2145
+#: redbot/cogs/audio/audio.py:3345
msgid " Votes: {num_votes}/{num_members} ({cur_percent}% out of {required_percent}% needed)"
msgstr ""
-#: redbot/cogs/audio/audio.py:2228
+#: redbot/cogs/audio/audio.py:3425
msgid "Currently livestreaming {track}"
msgstr ""
-#: redbot/cogs/audio/audio.py:2235
+#: redbot/cogs/audio/audio.py:3432
msgid "{time} left on {track}"
msgstr ""
-#: redbot/cogs/audio/audio.py:2253
+#: redbot/cogs/audio/audio.py:3441
+msgid "Track number must be equal to or greater than 1."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:3454
+msgid "Can't skip to a track while shuffle is enabled."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:3470
msgid "Track Skipped"
msgstr ""
-#: redbot/cogs/audio/audio.py:2261
+#: redbot/cogs/audio/audio.py:3493
#, docstring
msgid "Stop playback and clear the queue."
msgstr ""
-#: redbot/cogs/audio/audio.py:2271
+#: redbot/cogs/audio/audio.py:3503
msgid "You must be in the voice channel to stop the music."
msgstr ""
-#: redbot/cogs/audio/audio.py:2282
+#: redbot/cogs/audio/audio.py:3514
msgid "You need the DJ role to stop the music."
msgstr ""
-#: redbot/cogs/audio/audio.py:2284
+#: redbot/cogs/audio/audio.py:3516
msgid "Stopping..."
msgstr ""
-#: redbot/cogs/audio/audio.py:2294
+#: redbot/cogs/audio/audio.py:3531
+#, docstring
+msgid "Summon the bot to a voice channel."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:3535
+msgid "You need the DJ role to summon the bot."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:3565
#, docstring
msgid "Set the volume, 1% - 150%."
msgstr ""
-#: redbot/cogs/audio/audio.py:2300
+#: redbot/cogs/audio/audio.py:3571
msgid "Current Volume:"
msgstr ""
-#: redbot/cogs/audio/audio.py:2312
+#: redbot/cogs/audio/audio.py:3583
msgid "You must be in the voice channel to change the volume."
msgstr ""
-#: redbot/cogs/audio/audio.py:2318
+#: redbot/cogs/audio/audio.py:3589
msgid "You need the DJ role to change the volume."
msgstr ""
-#: redbot/cogs/audio/audio.py:2331
+#: redbot/cogs/audio/audio.py:3602
msgid "Volume:"
msgstr ""
-#: redbot/cogs/audio/audio.py:2341
+#: redbot/cogs/audio/audio.py:3613
#, docstring
msgid "Lavalink server configuration options."
msgstr ""
-#: redbot/cogs/audio/audio.py:2346
+#: redbot/cogs/audio/audio.py:3618
#, docstring
msgid "Toggle using external lavalink servers."
msgstr ""
-#: redbot/cogs/audio/audio.py:2357 redbot/cogs/audio/audio.py:2366
+#: redbot/cogs/audio/audio.py:3625 redbot/cogs/audio/audio.py:3635
msgid "External lavalink server: {true_or_false}."
msgstr ""
-#: redbot/cogs/audio/audio.py:2361
-msgid "Defaults reset."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:2373
+#: redbot/cogs/audio/audio.py:3642
#, docstring
msgid "Set the lavalink server host."
msgstr ""
-#: redbot/cogs/audio/audio.py:2377 redbot/cogs/audio/audio.py:2382
+#: redbot/cogs/audio/audio.py:3646 redbot/cogs/audio/audio.py:3651
msgid "Host set to {host}."
msgstr ""
-#: redbot/cogs/audio/audio.py:2379 redbot/cogs/audio/audio.py:2395
-#: redbot/cogs/audio/audio.py:2413 redbot/cogs/audio/audio.py:2429
+#: redbot/cogs/audio/audio.py:3648 redbot/cogs/audio/audio.py:3664
+#: redbot/cogs/audio/audio.py:3682 redbot/cogs/audio/audio.py:3698
msgid "External lavalink server set to True."
msgstr ""
-#: redbot/cogs/audio/audio.py:2388
+#: redbot/cogs/audio/audio.py:3657
#, docstring
msgid "Set the lavalink server password."
msgstr ""
-#: redbot/cogs/audio/audio.py:2393 redbot/cogs/audio/audio.py:2399
+#: redbot/cogs/audio/audio.py:3662 redbot/cogs/audio/audio.py:3668
msgid "Server password set to {password}."
msgstr ""
-#: redbot/cogs/audio/audio.py:2406
+#: redbot/cogs/audio/audio.py:3675
#, docstring
msgid "Set the lavalink REST server port."
msgstr ""
-#: redbot/cogs/audio/audio.py:2411 redbot/cogs/audio/audio.py:2416
+#: redbot/cogs/audio/audio.py:3680 redbot/cogs/audio/audio.py:3685
msgid "REST port set to {port}."
msgstr ""
-#: redbot/cogs/audio/audio.py:2422
+#: redbot/cogs/audio/audio.py:3691
#, docstring
msgid "Set the lavalink websocket server port."
msgstr ""
-#: redbot/cogs/audio/audio.py:2427 redbot/cogs/audio/audio.py:2432
+#: redbot/cogs/audio/audio.py:3696 redbot/cogs/audio/audio.py:3701
msgid "Websocket port set to {port}."
msgstr ""
-#: redbot/cogs/audio/audio.py:2461
+#: redbot/cogs/audio/audio.py:3801
msgid "Not enough {currency} ({required_credits} required)."
msgstr ""
diff --git a/redbot/cogs/audio/locales/pt-PT.po b/redbot/cogs/audio/locales/pt-PT.po
index 3e8e4024e..528e0e946 100644
--- a/redbot/cogs/audio/locales/pt-PT.po
+++ b/redbot/cogs/audio/locales/pt-PT.po
@@ -1,14 +1,14 @@
msgid ""
msgstr ""
"Project-Id-Version: red-discordbot\n"
-"POT-Creation-Date: 2019-02-17 02:24+0000\n"
-"PO-Revision-Date: 2019-02-25 03:07\n"
-"Last-Translator: Kowlin \n"
+"POT-Creation-Date: 2019-07-05 22:33+0200\n"
+"PO-Revision-Date: 2019-07-06 16:13\n"
+"Last-Translator: Robert Jansen (Kowlin)\n"
"Language-Team: Portuguese\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"Generated-By: redgettext 2.2\n"
+"Generated-By: redgettext 3.0\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: crowdin.com\n"
"X-Crowdin-Project: red-discordbot\n"
@@ -16,971 +16,1275 @@ msgstr ""
"X-Crowdin-File: /cogs/audio/locales/messages.pot\n"
"Language: pt_PT\n"
-#: redbot/cogs/audio/audio.py:38
+#: redbot/cogs/audio/audio.py:47
#, docstring
msgid "Play audio through voice channels."
msgstr ""
-#: redbot/cogs/audio/audio.py:173 redbot/cogs/audio/audio.py:735
-msgid "Now Playing"
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:177
-msgid "Track length: {length} | Requested by: {user}"
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:201 redbot/cogs/audio/audio.py:227
+#: redbot/cogs/audio/audio.py:260
msgid "music in {} servers"
msgstr ""
-#: redbot/cogs/audio/audio.py:211
+#: redbot/cogs/audio/audio.py:300 redbot/cogs/audio/audio.py:1317
+msgid "Now Playing"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:304
+msgid "Track length: {length} | Requested by: {user}"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:331
msgid "Queue ended."
msgstr ""
-#: redbot/cogs/audio/audio.py:240
+#: redbot/cogs/audio/audio.py:350
msgid "Track Error"
msgstr ""
-#: redbot/cogs/audio/audio.py:245
+#: redbot/cogs/audio/audio.py:355
msgid "Skipping..."
msgstr ""
-#: redbot/cogs/audio/audio.py:252
+#: redbot/cogs/audio/audio.py:363
#, docstring
msgid "Music configuration options."
msgstr ""
-#: redbot/cogs/audio/audio.py:258
+#: redbot/cogs/audio/audio.py:369
#, docstring
-msgid "Toggle DJ mode.\n\n"
-" DJ mode allows users with the DJ role to use audio commands.\n"
-" "
+msgid "Toggle the bot auto-disconnecting when done playing.\\n\\n This setting takes precedence over [p]audioset emptydisconnect.\\n "
msgstr ""
-#: redbot/cogs/audio/audio.py:265
+#: redbot/cogs/audio/audio.py:377
+msgid "Auto-disconnection at queue end: {true_or_false}."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:385
+#, docstring
+msgid "Toggle DJ mode.\\n\\n DJ mode allows users with the DJ role to use audio commands.\\n "
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:392
msgid "Please set a role to use with DJ mode. Enter the role name or ID now."
msgstr ""
-#: redbot/cogs/audio/audio.py:273
+#: redbot/cogs/audio/audio.py:400
msgid "Response timed out, try again later."
msgstr ""
-#: redbot/cogs/audio/audio.py:284
+#: redbot/cogs/audio/audio.py:405
+msgid "DJ role enabled: {true_or_false}."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:411
#, docstring
msgid "Auto-disconnection after x seconds while stopped. 0 to disable."
msgstr ""
-#: redbot/cogs/audio/audio.py:286 redbot/cogs/audio/audio.py:317
-#: redbot/cogs/audio/audio.py:405
+#: redbot/cogs/audio/audio.py:413 redbot/cogs/audio/audio.py:436
+#: redbot/cogs/audio/audio.py:543 redbot/cogs/audio/audio.py:687
msgid "Can't be less than zero."
msgstr ""
-#: redbot/cogs/audio/audio.py:291
+#: redbot/cogs/audio/audio.py:418
msgid "Empty disconnect disabled."
msgstr ""
-#: redbot/cogs/audio/audio.py:296
+#: redbot/cogs/audio/audio.py:423
msgid "Empty disconnect timer set to {num_seconds}."
msgstr ""
-#: redbot/cogs/audio/audio.py:307
-#, docstring
-msgid "Set the role to use for DJ mode."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:310
-msgid "DJ role set to: {role.name}."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:315
+#: redbot/cogs/audio/audio.py:434
#, docstring
msgid "Set a price for queueing tracks for non-mods. 0 to disable."
msgstr ""
-#: redbot/cogs/audio/audio.py:320
+#: redbot/cogs/audio/audio.py:439
msgid "Jukebox mode disabled."
msgstr ""
-#: redbot/cogs/audio/audio.py:325
+#: redbot/cogs/audio/audio.py:444
msgid "Track queueing command price set to {price} {currency}."
msgstr ""
-#: redbot/cogs/audio/audio.py:336
+#: redbot/cogs/audio/audio.py:455
+#, docstring
+msgid "Set the localtracks path if the Lavalink.jar is not run from the Audio data folder.\\n\\n Leave the path blank to reset the path to the default, the Audio data directory.\\n "
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:463
+msgid "The localtracks path location has been reset to the default location."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:466
+msgid "This setting is only for bot owners to set a localtracks folder location if the Lavalink.jar is being ran from outside of the Audio data directory.\\nIn the example below, the full path for 'ParentDirectory' must be passed to this command.\\nThe path must not contain spaces.\\n```\\nParentDirectory\\n |__ localtracks (folder)\\n | |__ Awesome Album Name (folder)\\n | |__01 Cool Song.mp3\\n | |__02 Groovy Song.mp3\\n |\\n |__ Lavalink.jar\\n |__ application.yml\\n```\\nThe folder path given to this command must contain the Lavalink.jar, the application.yml, and the localtracks folder.\\nUse this command with no path given to reset it to the default, the Audio data directory for this bot.\\nDo you want to continue to set the provided path for local tracks?"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:505
+msgid "{local_path} does not seem like a valid path."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:520
+msgid "The path that was entered does not have {filelist} file in that location. The path will still be saved, but please check the path and the file location before attempting to play local tracks or start your Lavalink.jar."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:530
+msgid "Localtracks path set to: {local_path}."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:536
+#, docstring
+msgid "Max length of a track to queue in seconds. 0 to disable.\\n\\n Accepts seconds or a value formatted like 00:00:00 (`hh:mm:ss`) or 00:00 (`mm:ss`).\\n Invalid input will turn the max length setting off."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:545
+msgid "Track max length disabled."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:549
+msgid "Track max length set to {seconds}."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:559
#, docstring
msgid "Toggle track announcement and other bot messages."
msgstr ""
-#: redbot/cogs/audio/audio.py:340
+#: redbot/cogs/audio/audio.py:563
msgid "Verbose mode on: {true_or_false}."
msgstr ""
-#: redbot/cogs/audio/audio.py:345
+#: redbot/cogs/audio/audio.py:569
+#, docstring
+msgid "Toggle the domain restriction on Audio.\\n\\n When toggled off, users will be able to play songs from non-commercial websites and links.\\n When toggled on, users are restricted to YouTube, SoundCloud, Mixer, Vimeo, Twitch, and Bandcamp links."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:576
+msgid "Commercial links only: {true_or_false}."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:582
+#, docstring
+msgid "Set the role to use for DJ mode."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:585
+msgid "DJ role set to: {role.name}."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:589
#, docstring
msgid "Show the current settings."
msgstr ""
-#: redbot/cogs/audio/audio.py:358
+#: redbot/cogs/audio/audio.py:604
msgid "Server Settings"
msgstr ""
-#: redbot/cogs/audio/audio.py:360
-msgid "Disconnect timer: [{num_seconds}]\n"
+#: redbot/cogs/audio/audio.py:606
+msgid "Auto-disconnect: [{dc}]\\n"
msgstr ""
-#: redbot/cogs/audio/audio.py:364
-msgid "DJ Role: [{role.name}]\n"
+#: redbot/cogs/audio/audio.py:609
+msgid "Disconnect timer: [{num_seconds}]\\n"
msgstr ""
-#: redbot/cogs/audio/audio.py:366
-msgid "Jukebox: [{jukebox_name}]\n"
+#: redbot/cogs/audio/audio.py:613
+msgid "DJ Role: [{role.name}]\\n"
msgstr ""
-#: redbot/cogs/audio/audio.py:367
-msgid "Command price: [{jukebox_price}]\n"
+#: redbot/cogs/audio/audio.py:615
+msgid "Jukebox: [{jukebox_name}]\\n"
msgstr ""
-#: redbot/cogs/audio/audio.py:368
-msgid "Repeat: [{repeat}]\n"
-"Shuffle: [{shuffle}]\n"
-"Song notify msgs: [{notify}]\n"
-"Songs as status: [{status}]\n"
+#: redbot/cogs/audio/audio.py:616
+msgid "Command price: [{jukebox_price}]\\n"
msgstr ""
-#: redbot/cogs/audio/audio.py:375
-msgid "Thumbnails: [{0}]\n"
+#: redbot/cogs/audio/audio.py:618
+msgid "Max track length: [{tracklength}]\\n"
msgstr ""
-#: redbot/cogs/audio/audio.py:377
-msgid "Vote skip: [{vote_enabled}]\n"
-"Skip percentage: [{vote_percent}%]\n"
+#: redbot/cogs/audio/audio.py:621
+msgid "Repeat: [{repeat}]\\nShuffle: [{shuffle}]\\nSong notify msgs: [{notify}]\\nSongs as status: [{status}]\\n"
msgstr ""
-#: redbot/cogs/audio/audio.py:380
-msgid "---Lavalink Settings---\n"
-"Cog version: [{version}]\n"
-"Jar build: [{jarbuild}]\n"
-"External server: [{use_external_lavalink}]"
+#: redbot/cogs/audio/audio.py:628
+msgid "Thumbnails: [{0}]\\n"
msgstr ""
-#: redbot/cogs/audio/audio.py:393
+#: redbot/cogs/audio/audio.py:630
+msgid "Vote skip: [{vote_enabled}]\\nSkip percentage: [{vote_percent}%]\\n"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:633
+msgid "---Lavalink Settings--- \\nCog version: [{version}]\\nJar build: [{jarbuild}]\\nExternal server: [{use_external_lavalink}]\\n"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:640
+msgid "Localtracks path: [{localpath}]\\n"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:648
#, docstring
-msgid "Toggle displaying a thumbnail on audio messages."
+msgid "Instructions to set the Spotify API tokens."
msgstr ""
-#: redbot/cogs/audio/audio.py:397
-msgid "Thumbnail display: {true_or_false}."
+#: redbot/cogs/audio/audio.py:649
+msgid "1. Go to Spotify developers and log in with your Spotify account.\\n(https://developer.spotify.com/dashboard/applications)\\n2. Click \\\"Create An App\\\".\\n3. Fill out the form provided with your app name, etc.\\n4. When asked if you're developing commercial integration select \\\"No\\\".\\n5. Accept the terms and conditions.\\n6. Copy your client ID and your client secret into:\\n`{prefix}set api spotify client_id, client_secret,`"
msgstr ""
-#: redbot/cogs/audio/audio.py:403
-#, docstring
-msgid "Percentage needed for non-mods to skip tracks. 0 to disable."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:411
-msgid "Voting disabled. All users can use queue management commands."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:416
-msgid "Vote percentage set to {percent}%."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:425
+#: redbot/cogs/audio/audio.py:665
#, docstring
msgid "Enable/disable tracks' titles as status."
msgstr ""
-#: redbot/cogs/audio/audio.py:429
+#: redbot/cogs/audio/audio.py:669
msgid "Song titles as status: {true_or_false}."
msgstr ""
-#: redbot/cogs/audio/audio.py:435
+#: redbot/cogs/audio/audio.py:675
+#, docstring
+msgid "Toggle displaying a thumbnail on audio messages."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:679
+msgid "Thumbnail display: {true_or_false}."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:685
+#, docstring
+msgid "Percentage needed for non-mods to skip tracks. 0 to disable."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:693
+msgid "Voting disabled. All users can use queue management commands."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:698
+msgid "Vote percentage set to {percent}%."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:707
+#, docstring
+msgid "Instructions to set the YouTube API key."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:726
#, docstring
msgid "Audio stats."
msgstr ""
-#: redbot/cogs/audio/audio.py:469 redbot/cogs/audio/audio.py:489
-#: redbot/cogs/audio/audio.py:698 redbot/cogs/audio/audio.py:788
-#: redbot/cogs/audio/audio.py:804 redbot/cogs/audio/audio.py:829
-#: redbot/cogs/audio/audio.py:836 redbot/cogs/audio/audio.py:1179
-#: redbot/cogs/audio/audio.py:1466 redbot/cogs/audio/audio.py:1724
-#: redbot/cogs/audio/audio.py:2026 redbot/cogs/audio/audio.py:2063
-#: redbot/cogs/audio/audio.py:2109 redbot/cogs/audio/audio.py:2265
-#: redbot/cogs/audio/audio.py:2304 redbot/cogs/audio/audio.py:2334
+#: redbot/cogs/audio/audio.py:754 redbot/cogs/audio/audio.py:782
+#: redbot/cogs/audio/audio.py:819 redbot/cogs/audio/audio.py:847
+#: redbot/cogs/audio/audio.py:914 redbot/cogs/audio/audio.py:932
+#: redbot/cogs/audio/audio.py:956 redbot/cogs/audio/audio.py:1026
+#: redbot/cogs/audio/audio.py:1280 redbot/cogs/audio/audio.py:1371
+#: redbot/cogs/audio/audio.py:1388 redbot/cogs/audio/audio.py:1411
+#: redbot/cogs/audio/audio.py:1419 redbot/cogs/audio/audio.py:2190
+#: redbot/cogs/audio/audio.py:2527 redbot/cogs/audio/audio.py:2860
+#: redbot/cogs/audio/audio.py:3201 redbot/cogs/audio/audio.py:3255
+#: redbot/cogs/audio/audio.py:3305 redbot/cogs/audio/audio.py:3497
+#: redbot/cogs/audio/audio.py:3575 redbot/cogs/audio/audio.py:3605
msgid "Nothing playing."
msgstr ""
-#: redbot/cogs/audio/audio.py:473
+#: redbot/cogs/audio/audio.py:758
msgid "Not connected anywhere."
msgstr ""
-#: redbot/cogs/audio/audio.py:478
-msgid "Connected in {num} servers:"
+#: redbot/cogs/audio/audio.py:764
+msgid "Playing in {num}/{total} servers:"
msgstr ""
-#: redbot/cogs/audio/audio.py:486
+#: redbot/cogs/audio/audio.py:779
#, docstring
msgid "Bump a track number to the top of the queue."
msgstr ""
-#: redbot/cogs/audio/audio.py:495
+#: redbot/cogs/audio/audio.py:788
msgid "You must be in the voice channel to bump a track."
msgstr ""
-#: redbot/cogs/audio/audio.py:499
+#: redbot/cogs/audio/audio.py:792
msgid "You need the DJ role to bump tracks."
msgstr ""
-#: redbot/cogs/audio/audio.py:502 redbot/cogs/audio/audio.py:1739
+#: redbot/cogs/audio/audio.py:795 redbot/cogs/audio/audio.py:2875
msgid "Song number must be greater than 1 and within the queue limit."
msgstr ""
-#: redbot/cogs/audio/audio.py:517
+#: redbot/cogs/audio/audio.py:810
msgid "Moved {track} to the top of the queue."
msgstr ""
-#: redbot/cogs/audio/audio.py:523
+#: redbot/cogs/audio/audio.py:817
#, docstring
msgid "Disconnect from the voice channel."
msgstr ""
-#: redbot/cogs/audio/audio.py:528
+#: redbot/cogs/audio/audio.py:826
msgid "You need the DJ role to disconnect."
msgstr ""
-#: redbot/cogs/audio/audio.py:532
+#: redbot/cogs/audio/audio.py:830
msgid "There are other people listening to music."
msgstr ""
-#: redbot/cogs/audio/audio.py:540
+#: redbot/cogs/audio/audio.py:845
+#, docstring
+msgid "Equalizer management."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:865
+#, docstring
+msgid "Delete a saved eq preset."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:887
+#, docstring
+msgid "List saved eq presets."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:890
+msgid "No saved equalizer presets."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:897
+msgid "{num} preset(s)"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:903
+#, docstring
+msgid "Load a saved eq preset."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:930
+#, docstring
+msgid "Reset the eq to 0 across all bands."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:946
+msgid "Equalizer values have been reset."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:954
+#, docstring
+msgid "Save the current eq settings to a preset."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:958
+msgid "Please enter a name for this equalizer preset."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:972
+msgid "No equalizer preset name entered, try the command again later."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:981 redbot/cogs/audio/audio.py:2213
+msgid "Try the command again with a shorter name."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:985
+msgid "Preset name already exists, do you want to replace it?"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:994
+msgid "Not saving preset."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1019
+#, docstring
+msgid "Set an eq band with a band number or name and value.\\n\\n Band positions are 1-15 and values have a range of -0.25 to 1.0.\\n Band names are 25, 40, 63, 100, 160, 250, 400, 630, 1k, 1.6k, 2.5k, 4k, 6.3k, 10k, and 16k Hz.\\n Setting a band value to -0.25 nullifies it while +0.25 is double.\\n "
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1063
+msgid "Valid band numbers are 1-15 or the band names listed in the help for this command."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1099
#, docstring
msgid "Local playback commands."
msgstr ""
-#: redbot/cogs/audio/audio.py:545
+#: redbot/cogs/audio/audio.py:1104
#, docstring
msgid "Play all songs in a localtracks folder."
msgstr ""
-#: redbot/cogs/audio/audio.py:552
+#: redbot/cogs/audio/audio.py:1115
+msgid "No localtracks folder named {name}."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1121
#, docstring
msgid "Play a local track."
msgstr ""
-#: redbot/cogs/audio/audio.py:557
+#: redbot/cogs/audio/audio.py:1126
msgid "No local track folders found."
msgstr ""
-#: redbot/cogs/audio/audio.py:600
+#: redbot/cogs/audio/audio.py:1169
#, docstring
msgid "Search for songs across all localtracks folders."
msgstr ""
-#: redbot/cogs/audio/audio.py:605
+#: redbot/cogs/audio/audio.py:1174
msgid "No album folders found."
msgstr ""
-#: redbot/cogs/audio/audio.py:612 redbot/cogs/audio/audio.py:1634
+#: redbot/cogs/audio/audio.py:1181 redbot/cogs/audio/audio.py:2816
msgid "No matches."
msgstr ""
-#: redbot/cogs/audio/audio.py:688
+#: redbot/cogs/audio/audio.py:1269
msgid "No localtracks folder."
msgstr ""
-#: redbot/cogs/audio/audio.py:696
+#: redbot/cogs/audio/audio.py:1278
#, docstring
msgid "Now playing."
msgstr ""
-#: redbot/cogs/audio/audio.py:716
+#: redbot/cogs/audio/audio.py:1298
msgid "Requested by: **{track.requester}**"
msgstr ""
-#: redbot/cogs/audio/audio.py:726
+#: redbot/cogs/audio/audio.py:1308
msgid "Nothing."
msgstr ""
-#: redbot/cogs/audio/audio.py:785
+#: redbot/cogs/audio/audio.py:1368
#, docstring
-msgid "Pause and resume."
+msgid "Pause or resume a playing track."
msgstr ""
-#: redbot/cogs/audio/audio.py:794
-msgid "You must be in the voice channel to pause the music."
+#: redbot/cogs/audio/audio.py:1377
+msgid "You must be in the voice channel pause or resume."
msgstr ""
-#: redbot/cogs/audio/audio.py:800
-msgid "You need the DJ role to pause tracks."
+#: redbot/cogs/audio/audio.py:1384
+msgid "You need the DJ role to pause or resume tracks."
msgstr ""
-#: redbot/cogs/audio/audio.py:814
+#: redbot/cogs/audio/audio.py:1401
msgid "Track Paused"
msgstr ""
-#: redbot/cogs/audio/audio.py:821
+#: redbot/cogs/audio/audio.py:1407
msgid "Track Resumed"
msgstr ""
-#: redbot/cogs/audio/audio.py:826
-msgid "Track is paused."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:828
-msgid "Track is playing."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:834
+#: redbot/cogs/audio/audio.py:1417
#, docstring
msgid "Queue percentage."
msgstr ""
-#: redbot/cogs/audio/audio.py:860
+#: redbot/cogs/audio/audio.py:1443
msgid "Nothing in the queue."
msgstr ""
-#: redbot/cogs/audio/audio.py:882
+#: redbot/cogs/audio/audio.py:1465
msgid "Queued and playing tracks:"
msgstr ""
-#: redbot/cogs/audio/audio.py:890
+#: redbot/cogs/audio/audio.py:1474
#, docstring
msgid "Play a URL or search for a track."
msgstr ""
-#: redbot/cogs/audio/audio.py:900 redbot/cogs/audio/audio.py:1411
-#: redbot/cogs/audio/audio.py:1795
+#: redbot/cogs/audio/audio.py:1481
+msgid "That URL is not allowed."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1484 redbot/cogs/audio/audio.py:2437
+#: redbot/cogs/audio/audio.py:2928 redbot/cogs/audio/audio.py:3047
+msgid "Connection to Lavalink has failed."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1486 redbot/cogs/audio/audio.py:2439
+#: redbot/cogs/audio/audio.py:2930 redbot/cogs/audio/audio.py:3049
+msgid "Please check your console or logs for details."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1495 redbot/cogs/audio/audio.py:2449
+#: redbot/cogs/audio/audio.py:2939 redbot/cogs/audio/audio.py:3543
msgid "I don't have permission to connect to your channel."
msgstr ""
-#: redbot/cogs/audio/audio.py:906 redbot/cogs/audio/audio.py:1422
-#: redbot/cogs/audio/audio.py:1801 redbot/cogs/audio/audio.py:1889
+#: redbot/cogs/audio/audio.py:1501 redbot/cogs/audio/audio.py:2461
+#: redbot/cogs/audio/audio.py:2945 redbot/cogs/audio/audio.py:3056
+#: redbot/cogs/audio/audio.py:3555
msgid "Connect to a voice channel first."
msgstr ""
-#: redbot/cogs/audio/audio.py:909 redbot/cogs/audio/audio.py:1418
-#: redbot/cogs/audio/audio.py:1804 redbot/cogs/audio/audio.py:1892
+#: redbot/cogs/audio/audio.py:1504 redbot/cogs/audio/audio.py:2457
+#: redbot/cogs/audio/audio.py:2948 redbot/cogs/audio/audio.py:3059
+#: redbot/cogs/audio/audio.py:3558
msgid "Connection to Lavalink has not yet been established."
msgstr ""
-#: redbot/cogs/audio/audio.py:913
+#: redbot/cogs/audio/audio.py:1508
msgid "You need the DJ role to queue tracks."
msgstr ""
-#: redbot/cogs/audio/audio.py:922
+#: redbot/cogs/audio/audio.py:1519
msgid "You must be in the voice channel to use the play command."
msgstr ""
-#: redbot/cogs/audio/audio.py:928
+#: redbot/cogs/audio/audio.py:1525
msgid "No tracks to play."
msgstr ""
-#: redbot/cogs/audio/audio.py:942 redbot/cogs/audio/audio.py:1450
-#: redbot/cogs/audio/audio.py:1828 redbot/cogs/audio/audio.py:1865
+#: redbot/cogs/audio/audio.py:1565
+msgid "The owner needs to set the Spotify client ID, Spotify client secret, and YouTube API key before Spotify URLs or codes can be used. \\nSee `{prefix}audioset youtubeapi` and `{prefix}audioset spotifyapi` for instructions."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1575 redbot/cogs/audio/audio.py:2493
+msgid "Wait until the playlist has finished loading."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1592 redbot/cogs/audio/audio.py:1657
+#: redbot/cogs/audio/audio.py:2499 redbot/cogs/audio/audio.py:2509
+#: redbot/cogs/audio/audio.py:2973 redbot/cogs/audio/audio.py:3027
msgid "Nothing found."
msgstr ""
-#: redbot/cogs/audio/audio.py:953 redbot/cogs/audio/audio.py:1295
+#: redbot/cogs/audio/audio.py:1600
+msgid "The Spotify API key or client secret has not been set properly. \\nUse `{prefix}audioset spotifyapi` for instructions."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1639 redbot/cogs/audio/audio.py:1776
+msgid "This doesn't seem to be a valid Spotify URL or code."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1688 redbot/cogs/audio/audio.py:2320
msgid "Playlist Enqueued"
msgstr ""
-#: redbot/cogs/audio/audio.py:954 redbot/cogs/audio/audio.py:1296
-msgid "Added {num} tracks to the queue."
+#: redbot/cogs/audio/audio.py:1689 redbot/cogs/audio/audio.py:2321
+msgid "Added {num} tracks to the queue.{maxlength_msg}"
msgstr ""
-#: redbot/cogs/audio/audio.py:958
+#: redbot/cogs/audio/audio.py:1695
msgid "{time} until start of playlist playback: starts at #{position} in queue"
msgstr ""
-#: redbot/cogs/audio/audio.py:980 redbot/cogs/audio/audio.py:1938
+#: redbot/cogs/audio/audio.py:1711 redbot/cogs/audio/audio.py:3125
+msgid "Track exceeds maximum length."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1717
+msgid "Nothing found. Check your Lavalink logs for details."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1732 redbot/cogs/audio/audio.py:3108
msgid "Track Enqueued"
msgstr ""
-#: redbot/cogs/audio/audio.py:984 redbot/cogs/audio/audio.py:1944
+#: redbot/cogs/audio/audio.py:1736 redbot/cogs/audio/audio.py:3114
msgid "{time} until track playback: #{position} in queue"
msgstr ""
-#: redbot/cogs/audio/audio.py:989 redbot/cogs/audio/audio.py:1949
+#: redbot/cogs/audio/audio.py:1741 redbot/cogs/audio/audio.py:3119
msgid "#{position} in queue"
msgstr ""
-#: redbot/cogs/audio/audio.py:997
+#: redbot/cogs/audio/audio.py:1761
+msgid "The Spotify API key or client secret has not been set properly. \\nUse `{prefix}audioset spotifyapi` for instructions."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1793 redbot/cogs/audio/audio.py:2384
+msgid "Please wait, adding tracks..."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1809
+msgid "The connection was reset while loading the playlist."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1826 redbot/cogs/audio/audio.py:2401
+msgid "Loading track {num}/{total}..."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1840
+msgid "Approximate time remaining: {seconds}"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1850
+msgid "Nothing found.\\nThe YouTube API key may be invalid or you may be rate limited on YouTube's search service.\\nCheck the YouTube API key again and follow the instructions at `{prefix}audioset youtubeapi`."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1871
#, docstring
msgid "Playlist configuration options."
msgstr ""
-#: redbot/cogs/audio/audio.py:1002
+#: redbot/cogs/audio/audio.py:1876
#, docstring
-msgid "Add a track URL, playlist link, or quick search to a playlist.\n\n"
-" The track(s) will be appended to the end of the playlist.\n"
-" "
+msgid "Add a track URL, playlist link, or quick search to a playlist.\\n\\n The track(s) will be appended to the end of the playlist.\\n "
msgstr ""
-#: redbot/cogs/audio/audio.py:1014 redbot/cogs/audio/audio.py:1078
-#: redbot/cogs/audio/audio.py:1228
+#: redbot/cogs/audio/audio.py:1888 redbot/cogs/audio/audio.py:2028
+#: redbot/cogs/audio/audio.py:2241
msgid "You are not the author of that playlist."
msgstr ""
-#: redbot/cogs/audio/audio.py:1024
+#: redbot/cogs/audio/audio.py:1898
msgid "{track} is already in {playlist}."
msgstr ""
-#: redbot/cogs/audio/audio.py:1033 redbot/cogs/audio/audio.py:1082
-#: redbot/cogs/audio/audio.py:1092 redbot/cogs/audio/audio.py:1231
+#: redbot/cogs/audio/audio.py:1907 redbot/cogs/audio/audio.py:2032
+#: redbot/cogs/audio/audio.py:2081 redbot/cogs/audio/audio.py:2244
msgid "No playlist with that name."
msgstr ""
-#: redbot/cogs/audio/audio.py:1040
+#: redbot/cogs/audio/audio.py:1914
msgid "{track} appended to {playlist}."
msgstr ""
-#: redbot/cogs/audio/audio.py:1046
+#: redbot/cogs/audio/audio.py:1920
msgid "{num} tracks appended to {playlist}."
msgstr ""
-#: redbot/cogs/audio/audio.py:1053
+#: redbot/cogs/audio/audio.py:1928
+#, docstring
+msgid "Copy a playlist from one server to another."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1932
+msgid "Invalid server ID for source server."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1934
+msgid "Invalid server ID for target server."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1939
+msgid "No playlist with that name in {from_guild_name}."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1950
+msgid "Playlist {name} copied from {from_guild_name} to {to_guild_name}."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1962
+msgid "A playlist with that name already exists in {to_guild_name}.\\nPlease enter a new name for this playlist."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1975
+msgid "Try the playlist copy command again with a shorter name."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1980
+msgid "Playlist name already exists in {to_guild_name}, try the playlist copy command again with a different name."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1986 redbot/cogs/audio/audio.py:2220
+msgid "No playlist name entered, try again later."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:1991
+msgid "Playlist {name} copied from {from_guild_name} to {to_guild_name}.\\nNew playlist name on {to_guild_name}: {new_name}"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2003
#, docstring
msgid "Create an empty playlist."
msgstr ""
-#: redbot/cogs/audio/audio.py:1057 redbot/cogs/audio/audio.py:1172
+#: redbot/cogs/audio/audio.py:2007 redbot/cogs/audio/audio.py:2183
msgid "You need the DJ role to save playlists."
msgstr ""
-#: redbot/cogs/audio/audio.py:1061 redbot/cogs/audio/audio.py:1176
-#: redbot/cogs/audio/audio.py:1204
+#: redbot/cogs/audio/audio.py:2011 redbot/cogs/audio/audio.py:2187
+#: redbot/cogs/audio/audio.py:2217
msgid "Playlist name already exists, try again with a different name."
msgstr ""
-#: redbot/cogs/audio/audio.py:1067
+#: redbot/cogs/audio/audio.py:2017
msgid "Empty playlist {name} created."
msgstr ""
-#: redbot/cogs/audio/audio.py:1071
+#: redbot/cogs/audio/audio.py:2021
#, docstring
msgid "Delete a saved playlist."
msgstr ""
-#: redbot/cogs/audio/audio.py:1083
+#: redbot/cogs/audio/audio.py:2033
msgid "{name} playlist deleted."
msgstr ""
-#: redbot/cogs/audio/audio.py:1087
+#: redbot/cogs/audio/audio.py:2039
+#, docstring
+msgid "Download a copy of a playlist.\\n\\n These files can be used with the [p]playlist upload command.\\n Red v2-compatible playlists can be generated by passing True\\n for the v2 variable."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2061
+msgid "That playlist has no tracks."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2063 redbot/cogs/audio/audio.py:2331
+msgid "That playlist doesn't exist."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2076
#, docstring
msgid "Retrieve information from a saved playlist."
msgstr ""
-#: redbot/cogs/audio/audio.py:1100
-msgid "**Custom playlist.**"
+#: redbot/cogs/audio/audio.py:2101
+msgid "Playlist info for {playlist_name}:\\n"
msgstr ""
-#: redbot/cogs/audio/audio.py:1102
-msgid "URL: <{url}>"
+#: redbot/cogs/audio/audio.py:2105
+msgid "Playlist info for {playlist_name}:\\nURL: {url}"
msgstr ""
-#: redbot/cogs/audio/audio.py:1105
-msgid "Playlist info for {playlist_name}:"
+#: redbot/cogs/audio/audio.py:2116
+msgid "Author: {author_name} | {num} track(s)"
msgstr ""
-#: redbot/cogs/audio/audio.py:1106
-msgid "Author: **{author_name}**\n"
-"{url}"
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:1110
-msgid "{num} track(s)"
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:1115
+#: redbot/cogs/audio/audio.py:2126
#, docstring
msgid "List saved playlists."
msgstr ""
-#: redbot/cogs/audio/audio.py:1118
+#: redbot/cogs/audio/audio.py:2129
msgid "No saved playlists."
msgstr ""
-#: redbot/cogs/audio/audio.py:1130
+#: redbot/cogs/audio/audio.py:2141
msgid "Tracks: {num}"
msgstr ""
-#: redbot/cogs/audio/audio.py:1131
-msgid "Author: {name}\n"
+#: redbot/cogs/audio/audio.py:2142
+msgid "Author: {name}\\n"
msgstr ""
-#: redbot/cogs/audio/audio.py:1155
+#: redbot/cogs/audio/audio.py:2166
msgid "Playlists for {server_name}:"
msgstr ""
-#: redbot/cogs/audio/audio.py:1159
+#: redbot/cogs/audio/audio.py:2170
msgid "Page {page_num}/{total_pages} | {num} playlists"
msgstr ""
-#: redbot/cogs/audio/audio.py:1168
+#: redbot/cogs/audio/audio.py:2179
#, docstring
msgid "Save the queue to a playlist."
msgstr ""
-#: redbot/cogs/audio/audio.py:1189
+#: redbot/cogs/audio/audio.py:2193 redbot/cogs/audio/audio.py:2590
+#: redbot/cogs/audio/audio.py:2593 redbot/cogs/audio/audio.py:2613
+#: redbot/cogs/audio/audio.py:2756 redbot/cogs/audio/audio.py:2759
+#: redbot/cogs/audio/audio.py:2775 redbot/cogs/audio/audio.py:2778
+#: redbot/cogs/audio/audio.py:2810 redbot/cogs/audio/audio.py:2812
+#: redbot/cogs/audio/audio.py:3418 redbot/cogs/audio/audio.py:3422
+#: redbot/cogs/audio/audio.py:3429
+msgid "There's nothing in the queue."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2202
msgid "Please enter a name for this playlist."
msgstr ""
-#: redbot/cogs/audio/audio.py:1200
-msgid "Try the command again with a shorter name."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:1207
-msgid "No playlist name entered, try again later."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:1214
+#: redbot/cogs/audio/audio.py:2227
msgid "Playlist {name} saved from current queue: {num} tracks added."
msgstr ""
-#: redbot/cogs/audio/audio.py:1221
+#: redbot/cogs/audio/audio.py:2234
#, docstring
msgid "Remove a track from a playlist by url."
msgstr ""
-#: redbot/cogs/audio/audio.py:1235
+#: redbot/cogs/audio/audio.py:2248
msgid "URL not in playlist."
msgstr ""
-#: redbot/cogs/audio/audio.py:1239
+#: redbot/cogs/audio/audio.py:2252
msgid "No tracks left, removing playlist."
msgstr ""
-#: redbot/cogs/audio/audio.py:1246
+#: redbot/cogs/audio/audio.py:2259
msgid "{num} entries have been removed from the {playlist_name} playlist."
msgstr ""
-#: redbot/cogs/audio/audio.py:1253
+#: redbot/cogs/audio/audio.py:2266
msgid "The track has been removed from the {playlist_name} playlist."
msgstr ""
-#: redbot/cogs/audio/audio.py:1260
+#: redbot/cogs/audio/audio.py:2273
#, docstring
msgid "Save a playlist from a url."
msgstr ""
-#: redbot/cogs/audio/audio.py:1272
+#: redbot/cogs/audio/audio.py:2285
msgid "Playlist {name} saved: {num} tracks added."
msgstr ""
-#: redbot/cogs/audio/audio.py:1279
+#: redbot/cogs/audio/audio.py:2292
#, docstring
msgid "Load a playlist into the queue."
msgstr ""
-#: redbot/cogs/audio/audio.py:1304
-msgid "That playlist doesn't exist."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:1309
+#: redbot/cogs/audio/audio.py:2336
#, docstring
msgid "Convert a Red v2 playlist file to a playlist."
msgstr ""
-#: redbot/cogs/audio/audio.py:1315
+#: redbot/cogs/audio/audio.py:2342
msgid "Please upload the playlist file. Any other message will cancel this operation."
msgstr ""
-#: redbot/cogs/audio/audio.py:1323
+#: redbot/cogs/audio/audio.py:2350
msgid "No file detected, try again later."
msgstr ""
-#: redbot/cogs/audio/audio.py:1327
+#: redbot/cogs/audio/audio.py:2354
msgid "Upload cancelled."
msgstr ""
-#: redbot/cogs/audio/audio.py:1331
+#: redbot/cogs/audio/audio.py:2358
msgid "Only playlist files can be uploaded."
msgstr ""
-#: redbot/cogs/audio/audio.py:1336
+#: redbot/cogs/audio/audio.py:2363
msgid "Not a valid playlist file."
msgstr ""
-#: redbot/cogs/audio/audio.py:1352
+#: redbot/cogs/audio/audio.py:2379
msgid "A playlist already exists with this name."
msgstr ""
-#: redbot/cogs/audio/audio.py:1357
-msgid "Please wait, adding tracks..."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:1371
-msgid "Loading track {num}/{total}..."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:1377
+#: redbot/cogs/audio/audio.py:2407
msgid "No tracks found."
msgstr ""
-#: redbot/cogs/audio/audio.py:1383
+#: redbot/cogs/audio/audio.py:2413
msgid "Added {num} tracks from the {playlist_name} playlist. {num_bad} track(s) could not be loaded."
msgstr ""
-#: redbot/cogs/audio/audio.py:1388
+#: redbot/cogs/audio/audio.py:2418
msgid "Added {num} tracks from the {playlist_name} playlist."
msgstr ""
-#: redbot/cogs/audio/audio.py:1392
+#: redbot/cogs/audio/audio.py:2422
msgid "Playlist Saved"
msgstr ""
-#: redbot/cogs/audio/audio.py:1403
+#: redbot/cogs/audio/audio.py:2433
msgid "You need the DJ role to use playlists."
msgstr ""
-#: redbot/cogs/audio/audio.py:1432
+#: redbot/cogs/audio/audio.py:2471
msgid "You must be in the voice channel to use the playlist command."
msgstr ""
-#: redbot/cogs/audio/audio.py:1464
+#: redbot/cogs/audio/audio.py:2525
#, docstring
msgid "Skip to the start of the previously played track."
msgstr ""
-#: redbot/cogs/audio/audio.py:1474 redbot/cogs/audio/audio.py:2121
+#: redbot/cogs/audio/audio.py:2535 redbot/cogs/audio/audio.py:3317
msgid "You need the DJ role to skip tracks."
msgstr ""
-#: redbot/cogs/audio/audio.py:1479 redbot/cogs/audio/audio.py:2115
+#: redbot/cogs/audio/audio.py:2540 redbot/cogs/audio/audio.py:3311
msgid "You must be in the voice channel to skip the music."
msgstr ""
-#: redbot/cogs/audio/audio.py:1482
+#: redbot/cogs/audio/audio.py:2543
msgid "Turn shuffle off to use this command."
msgstr ""
-#: redbot/cogs/audio/audio.py:1484
+#: redbot/cogs/audio/audio.py:2545
msgid "No previous track."
msgstr ""
-#: redbot/cogs/audio/audio.py:1501
+#: redbot/cogs/audio/audio.py:2562
msgid "Replaying Track"
msgstr ""
-#: redbot/cogs/audio/audio.py:1509
+#: redbot/cogs/audio/audio.py:2571
#, docstring
-msgid "List the queue.\n\n"
-" Use [p]queue search to search the queue.\n"
-" "
+msgid "List the songs in the queue."
msgstr ""
-#: redbot/cogs/audio/audio.py:1514 redbot/cogs/audio/audio.py:1517
-#: redbot/cogs/audio/audio.py:1544 redbot/cogs/audio/audio.py:2221
-#: redbot/cogs/audio/audio.py:2225 redbot/cogs/audio/audio.py:2232
-msgid "There's nothing in the queue."
-msgstr ""
-
-#: redbot/cogs/audio/audio.py:1553
+#: redbot/cogs/audio/audio.py:2622
msgid "**Currently livestreaming:**"
msgstr ""
-#: redbot/cogs/audio/audio.py:1559 redbot/cogs/audio/audio.py:1569
-#: redbot/cogs/audio/audio.py:1575
+#: redbot/cogs/audio/audio.py:2628 redbot/cogs/audio/audio.py:2638
+#: redbot/cogs/audio/audio.py:2644
msgid "Playing: "
msgstr ""
-#: redbot/cogs/audio/audio.py:1562 redbot/cogs/audio/audio.py:1570
-msgid "Requested by: **{user}**\n"
+#: redbot/cogs/audio/audio.py:2631
+msgid "Requested by: **{user}**\\n"
msgstr ""
-#: redbot/cogs/audio/audio.py:1577
+#: redbot/cogs/audio/audio.py:2639
+msgid "Requested by: **{user}**\\n"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2646
msgid "Requested by: **{user}**"
msgstr ""
-#: redbot/cogs/audio/audio.py:1595 redbot/cogs/audio/audio.py:1599
-#: redbot/cogs/audio/audio.py:1604
-msgid "requested by **{user}**\n"
+#: redbot/cogs/audio/audio.py:2664
+msgid "requested by **{user}**\\n"
msgstr ""
-#: redbot/cogs/audio/audio.py:1615
+#: redbot/cogs/audio/audio.py:2668
+msgid "requested by **{user}**\\n"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2673
+msgid "requested by **{user}**\\n"
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2684
msgid "Page {page_num}/{total_pages} | {num_tracks} tracks, {num_remaining} remaining"
msgstr ""
-#: redbot/cogs/audio/audio.py:1624
+#: redbot/cogs/audio/audio.py:2693
msgid "Repeat"
msgstr ""
-#: redbot/cogs/audio/audio.py:1626
+#: redbot/cogs/audio/audio.py:2695
msgid "Shuffle"
msgstr ""
-#: redbot/cogs/audio/audio.py:1683
+#: redbot/cogs/audio/audio.py:2740
msgid "Matching Tracks:"
msgstr ""
-#: redbot/cogs/audio/audio.py:1686 redbot/cogs/audio/audio.py:2010
+#: redbot/cogs/audio/audio.py:2743 redbot/cogs/audio/audio.py:3182
msgid "Page {page_num}/{total_pages}"
msgstr ""
-#: redbot/cogs/audio/audio.py:1695
+#: redbot/cogs/audio/audio.py:2752
+#, docstring
+msgid "Clears the queue."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2764
+msgid "You need the DJ role to clear the queue."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2766
+msgid "The queue has been cleared."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2771
+#, docstring
+msgid "Removes songs from the queue if the requester is not in the voice channel."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2783
+msgid "You need the DJ role to clean the queue."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2794
+msgid "Removed 0 tracks."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2798
+msgid "Removed {removed_tracks} tracks queued by members outside of the voice channel."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2806
+#, docstring
+msgid "Search the queue."
+msgstr ""
+
+#: redbot/cogs/audio/audio.py:2829
#, docstring
msgid "Toggle repeat."
msgstr ""
-#: redbot/cogs/audio/audio.py:1701
+#: redbot/cogs/audio/audio.py:2835
msgid "You need the DJ role to toggle repeat."
msgstr ""
-#: redbot/cogs/audio/audio.py:1712
+#: redbot/cogs/audio/audio.py:2843
msgid "You must be in the voice channel to toggle repeat."
msgstr ""
-#: redbot/cogs/audio/audio.py:1715
+#: redbot/cogs/audio/audio.py:2849
msgid "Repeat tracks: {true_or_false}."
msgstr ""
-#: redbot/cogs/audio/audio.py:1721
+#: redbot/cogs/audio/audio.py:2857
#, docstring
msgid "Remove a specific track number from the queue."
msgstr ""
-#: redbot/cogs/audio/audio.py:1727
+#: redbot/cogs/audio/audio.py:2863
msgid "Nothing queued."
msgstr ""
-#: redbot/cogs/audio/audio.py:1730
+#: redbot/cogs/audio/audio.py:2866
msgid "You need the DJ role to remove tracks."
msgstr ""
-#: redbot/cogs/audio/audio.py:1735
+#: redbot/cogs/audio/audio.py:2871
msgid "You must be in the voice channel to manage the queue."
msgstr ""
-#: redbot/cogs/audio/audio.py:1751
+#: redbot/cogs/audio/audio.py:2887
msgid "Removed {track} from the queue."
msgstr ""
-#: redbot/cogs/audio/audio.py:1757
+#: redbot/cogs/audio/audio.py:2894
#, docstring
-msgid "Pick a track with a search.\n\n"
-" Use `[p]search list ` to queue all tracks found\n"
-" on YouTube. `[p]search sc ` will search SoundCloud\n"
-" instead of YouTube.\n"
-" "
+msgid "Pick a track with a search.\\n\\n Use `[p]search list