mirror of
https://github.com/Cog-Creators/Red-DiscordBot.git
synced 2025-12-06 09:22:31 -05:00
Compare commits
27 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
9f4a7f7623 | ||
|
|
10012c1e16 | ||
|
|
d65f8856f4 | ||
|
|
d79d8fbbea | ||
|
|
772590c41c | ||
|
|
d9c71bddb8 | ||
|
|
29ce2401ca | ||
|
|
720ef38886 | ||
|
|
728ab6c8c1 | ||
|
|
935028addc | ||
|
|
e70e22d557 | ||
|
|
f3db4b5cb0 | ||
|
|
d60fc06379 | ||
|
|
a813260717 | ||
|
|
10d01df7dd | ||
|
|
8eb075fa86 | ||
|
|
c2e7bfa641 | ||
|
|
2f23244937 | ||
|
|
9ecea9e1d5 | ||
|
|
61b34e835e | ||
|
|
4e2b83c052 | ||
|
|
45ee4755a6 | ||
|
|
59281afe90 | ||
|
|
cf5a63a5d5 | ||
|
|
96869074c3 | ||
|
|
c107d5fa7f | ||
|
|
bed56e8891 |
2
.github/CODEOWNERS
vendored
2
.github/CODEOWNERS
vendored
@@ -21,6 +21,7 @@ redbot/core/rpc.py @tekulvw
|
|||||||
redbot/core/sentry_setup.py @Kowlin @tekulvw
|
redbot/core/sentry_setup.py @Kowlin @tekulvw
|
||||||
redbot/core/utils/chat_formatting.py @tekulvw
|
redbot/core/utils/chat_formatting.py @tekulvw
|
||||||
redbot/core/utils/mod.py @palmtree5
|
redbot/core/utils/mod.py @palmtree5
|
||||||
|
redbot/core/utils/data_converter.py @mikeshardmind
|
||||||
|
|
||||||
# Cogs
|
# Cogs
|
||||||
redbot/cogs/admin/* @tekulvw
|
redbot/cogs/admin/* @tekulvw
|
||||||
@@ -38,6 +39,7 @@ redbot/cogs/mod/* @palmtree5
|
|||||||
redbot/cogs/modlog/* @palmtree5
|
redbot/cogs/modlog/* @palmtree5
|
||||||
redbot/cogs/streams/* @Twentysix26 @palmtree5
|
redbot/cogs/streams/* @Twentysix26 @palmtree5
|
||||||
redbot/cogs/trivia/* @Tobotimus
|
redbot/cogs/trivia/* @Tobotimus
|
||||||
|
redbot/cogs/dataconverter/* @mikeshardmind
|
||||||
|
|
||||||
# Docs
|
# Docs
|
||||||
docs/* @tekulvw @palmtree5
|
docs/* @tekulvw @palmtree5
|
||||||
|
|||||||
14
.readthedocs.yml
Normal file
14
.readthedocs.yml
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
formats:
|
||||||
|
- pdf
|
||||||
|
|
||||||
|
build:
|
||||||
|
image: latest
|
||||||
|
|
||||||
|
requirements_file: docs/requirements.txt
|
||||||
|
|
||||||
|
python:
|
||||||
|
version: 3.6
|
||||||
|
pip_install: true
|
||||||
|
extra_requirements:
|
||||||
|
- docs
|
||||||
|
- mongo
|
||||||
62
docs/cog_dataconverter.rst
Normal file
62
docs/cog_dataconverter.rst
Normal file
@@ -0,0 +1,62 @@
|
|||||||
|
.. Importing data from a V2 install
|
||||||
|
|
||||||
|
================================
|
||||||
|
Importing data from a V2 install
|
||||||
|
================================
|
||||||
|
|
||||||
|
----------------
|
||||||
|
What you'll need
|
||||||
|
----------------
|
||||||
|
|
||||||
|
1. A Running V3 bot
|
||||||
|
2. The path where your V2 bot is installed
|
||||||
|
|
||||||
|
--------------
|
||||||
|
Importing data
|
||||||
|
--------------
|
||||||
|
|
||||||
|
.. important::
|
||||||
|
|
||||||
|
Unless otherwise specified, the V2 data will take priority over V3 data for the same entires
|
||||||
|
|
||||||
|
.. important::
|
||||||
|
|
||||||
|
For the purposes of this guide, your prefix will be denoted as
|
||||||
|
[p]
|
||||||
|
|
||||||
|
You should swap whatever you made your prefix in for this.
|
||||||
|
All of the below are commands to be entered in discord where the bot can
|
||||||
|
see them.
|
||||||
|
|
||||||
|
The dataconverter cog is not loaded by default. To start, load it with
|
||||||
|
|
||||||
|
.. code-block:: none
|
||||||
|
|
||||||
|
[p]load dataconverter
|
||||||
|
|
||||||
|
Next, you'll need to give it the path where your V2 install is.
|
||||||
|
|
||||||
|
On linux and OSX, it may look something like:
|
||||||
|
|
||||||
|
.. code-block:: none
|
||||||
|
|
||||||
|
/home/username/Red-DiscordBot/
|
||||||
|
|
||||||
|
On Windows it will look something like:
|
||||||
|
|
||||||
|
.. code-block:: none
|
||||||
|
|
||||||
|
C:\Users\yourusername\Red-DiscordBot
|
||||||
|
|
||||||
|
Once you have that path, give it to the bot with the following command
|
||||||
|
(make sure to swap your own path in)
|
||||||
|
|
||||||
|
.. code-block:: none
|
||||||
|
|
||||||
|
[p]convertdata /home/username/Red-DiscordBot/
|
||||||
|
|
||||||
|
|
||||||
|
From here, if the path is correct, you will be prompted with an interactive menu asking you
|
||||||
|
what data you would like to import
|
||||||
|
|
||||||
|
You can select an entry by number, or quit with any of 'quit', 'exit', 'q', '-1', or 'cancel'
|
||||||
@@ -55,7 +55,7 @@ master_doc = 'index'
|
|||||||
|
|
||||||
# General information about the project.
|
# General information about the project.
|
||||||
project = 'Red - Discord Bot'
|
project = 'Red - Discord Bot'
|
||||||
copyright = '2017, Cog Creators'
|
copyright = '2018, Cog Creators'
|
||||||
author = 'Cog Creators'
|
author = 'Cog Creators'
|
||||||
|
|
||||||
# The version info for the project you're documenting, acts as replacement for
|
# The version info for the project you're documenting, acts as replacement for
|
||||||
@@ -63,9 +63,9 @@ author = 'Cog Creators'
|
|||||||
# built documents.
|
# built documents.
|
||||||
#
|
#
|
||||||
# The short X.Y version.
|
# The short X.Y version.
|
||||||
version = '3.0.0a1'
|
version = '3.0.0b11'
|
||||||
# The full version, including alpha/beta/rc tags.
|
# The full version, including alpha/beta/rc tags.
|
||||||
release = '3.0.0a1'
|
release = '3.0.0b11'
|
||||||
|
|
||||||
# The language for content autogenerated by Sphinx. Refer to documentation
|
# The language for content autogenerated by Sphinx. Refer to documentation
|
||||||
# for a list of supported languages.
|
# for a list of supported languages.
|
||||||
|
|||||||
19
docs/framework_bot.rst
Normal file
19
docs/framework_bot.rst
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
.. bot module docs
|
||||||
|
|
||||||
|
===
|
||||||
|
Bot
|
||||||
|
===
|
||||||
|
|
||||||
|
.. automodule:: redbot.core.bot
|
||||||
|
|
||||||
|
RedBase
|
||||||
|
^^^^^^^
|
||||||
|
|
||||||
|
.. autoclass:: RedBase
|
||||||
|
:members:
|
||||||
|
|
||||||
|
Red
|
||||||
|
^^^
|
||||||
|
|
||||||
|
.. autoclass:: Red
|
||||||
|
:members:
|
||||||
8
docs/framework_rpc.rst
Normal file
8
docs/framework_rpc.rst
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
.. rpc docs
|
||||||
|
|
||||||
|
===
|
||||||
|
RPC
|
||||||
|
===
|
||||||
|
|
||||||
|
.. automodule:: redbot.core.rpc
|
||||||
|
:members:
|
||||||
@@ -10,8 +10,20 @@ Chat Formatting
|
|||||||
.. automodule:: redbot.core.utils.chat_formatting
|
.. automodule:: redbot.core.utils.chat_formatting
|
||||||
:members:
|
:members:
|
||||||
|
|
||||||
|
Embed Helpers
|
||||||
|
=============
|
||||||
|
|
||||||
|
.. automodule:: redbot.core.utils.embed
|
||||||
|
:members:
|
||||||
|
|
||||||
Mod Helpers
|
Mod Helpers
|
||||||
===========
|
===========
|
||||||
|
|
||||||
.. automodule:: redbot.core.utils.mod
|
.. automodule:: redbot.core.utils.mod
|
||||||
:members:
|
:members:
|
||||||
|
|
||||||
|
V2 Data Conversion
|
||||||
|
==================
|
||||||
|
|
||||||
|
.. automodule:: redbot.core.utils.data_converter
|
||||||
|
:members: DataConverter
|
||||||
154
docs/guide_data_conversion.rst
Normal file
154
docs/guide_data_conversion.rst
Normal file
@@ -0,0 +1,154 @@
|
|||||||
|
.. Converting Data from a V2 cog
|
||||||
|
|
||||||
|
.. role:: python(code)
|
||||||
|
:language: python
|
||||||
|
|
||||||
|
============================
|
||||||
|
Importing Data From a V2 Cog
|
||||||
|
============================
|
||||||
|
|
||||||
|
This guide serves as a tutorial on using the DataConverter class
|
||||||
|
to import settings from a V2 cog.
|
||||||
|
|
||||||
|
------------------
|
||||||
|
Things you'll need
|
||||||
|
------------------
|
||||||
|
|
||||||
|
1. The path where each file holding related settings in v2 is
|
||||||
|
2. A conversion function to take the data and transform it to conform to Config
|
||||||
|
|
||||||
|
-----------------------
|
||||||
|
Getting your file paths
|
||||||
|
-----------------------
|
||||||
|
|
||||||
|
You should probably not try to find the files manually.
|
||||||
|
Asking the user for the base install path and using a relative path to where the
|
||||||
|
data should be, then testing that the file exists there is safer. This is especially
|
||||||
|
True if your cog has multiple settings files
|
||||||
|
|
||||||
|
Example
|
||||||
|
|
||||||
|
.. code-block:: python
|
||||||
|
|
||||||
|
from discord.ext import commands
|
||||||
|
from pathlib import Path
|
||||||
|
|
||||||
|
@commands.command(name="filefinder")
|
||||||
|
async def file_finding_command(self, ctx, filepath):
|
||||||
|
"""
|
||||||
|
this finds a file based on a user provided input and a known relative path
|
||||||
|
"""
|
||||||
|
|
||||||
|
base_path = Path(filepath)
|
||||||
|
fp = base_path / 'data' / 'mycog' / 'settings.json'
|
||||||
|
if not fp.is_file():
|
||||||
|
pass
|
||||||
|
# fail, prompting user
|
||||||
|
else:
|
||||||
|
pass
|
||||||
|
# do something with the file
|
||||||
|
|
||||||
|
---------------
|
||||||
|
Converting data
|
||||||
|
---------------
|
||||||
|
|
||||||
|
Once you've gotten your v2 settings file, you'll want to be able to import it
|
||||||
|
There are a couple options available depending on how you would like to convert
|
||||||
|
the data.
|
||||||
|
|
||||||
|
The first one takes a data path, and a conversion function and does the rest for you.
|
||||||
|
This is great for simple data that just needs to quickly be imported without much
|
||||||
|
modification.
|
||||||
|
|
||||||
|
|
||||||
|
Here's an example of that in use:
|
||||||
|
|
||||||
|
.. code-block:: python
|
||||||
|
|
||||||
|
from pathlib import Path
|
||||||
|
from discord.ext import commands
|
||||||
|
|
||||||
|
from redbot.core.utils.data_converter import DataConverter as dc
|
||||||
|
from redbot.core.config import Config
|
||||||
|
|
||||||
|
...
|
||||||
|
|
||||||
|
|
||||||
|
async def import_v2(self, file_path: Path):
|
||||||
|
"""
|
||||||
|
to be called from a command limited to owner
|
||||||
|
|
||||||
|
This should be a coroutine as the convert function will
|
||||||
|
need to be awaited
|
||||||
|
"""
|
||||||
|
|
||||||
|
# First we give the converter out cog's Config instance.
|
||||||
|
converter = dc(self.config)
|
||||||
|
|
||||||
|
# next we design a way to get all of the data into Config's internal
|
||||||
|
# format. This should be a generator, but you can also return a single
|
||||||
|
# list with identical results outside of memory usage
|
||||||
|
def conversion_spec(v2data):
|
||||||
|
for guild_id in v2.data.keys():
|
||||||
|
yield {(Config.GUILD, guild_id): {('blacklisted',): True}}
|
||||||
|
# This is yielding a dictionary that is designed for config's set_raw.
|
||||||
|
# The keys should be a tuple of Config scopes + the needed Identifiers. The
|
||||||
|
# values should be another dictionary whose keys are tuples representing
|
||||||
|
# config settings, the value should be the value to set for that.
|
||||||
|
|
||||||
|
# Then we pass the file and the conversion function
|
||||||
|
await converter.convert(file_path, conversion_spec)
|
||||||
|
# From here, our data should be imported
|
||||||
|
|
||||||
|
|
||||||
|
You can also choose to convert all of your data and pass it as a single dict
|
||||||
|
This can be useful if you want finer control over the dataconversion or want to
|
||||||
|
preserve any data from v3 that may share the same entry and set it aside to prompt
|
||||||
|
a user
|
||||||
|
|
||||||
|
.. code-block:: python
|
||||||
|
|
||||||
|
from pathlib import Path
|
||||||
|
from discord.ext import commands
|
||||||
|
|
||||||
|
from redbot.core.utils.data_converter import DataConverter as dc
|
||||||
|
from redbot.core.config import Config
|
||||||
|
|
||||||
|
...
|
||||||
|
|
||||||
|
await dc(config_instance).dict_import(some_processed_dict)
|
||||||
|
|
||||||
|
|
||||||
|
The format of the items of the dict is the same as in the above example
|
||||||
|
|
||||||
|
|
||||||
|
-----------------------------------
|
||||||
|
Config Scopes and their Identifiers
|
||||||
|
-----------------------------------
|
||||||
|
|
||||||
|
This section is provided as a quick reference for the identifiers for default
|
||||||
|
scopes available in Config. This does not cover usage of custom scopes, though the
|
||||||
|
data converter is compatible with those as well.
|
||||||
|
|
||||||
|
Global::
|
||||||
|
:code:`(Config.GLOBAL,)`
|
||||||
|
Guild::
|
||||||
|
:code:`(Config.GUILD, guild_id)`
|
||||||
|
Channel::
|
||||||
|
:code:`(Config.CHANNEL, channel_id)`
|
||||||
|
User::
|
||||||
|
:code:`(Config.USER, user_id)`
|
||||||
|
Member::
|
||||||
|
:code:`(Config.MEMBER, guild_id, user_id)`
|
||||||
|
Role::
|
||||||
|
:code:`(Config.ROLE, role_id)`
|
||||||
|
|
||||||
|
|
||||||
|
-----------------------------
|
||||||
|
More information and Examples
|
||||||
|
-----------------------------
|
||||||
|
|
||||||
|
For a more in depth look at how all of these commands function
|
||||||
|
You may want to take a look at how core data is being imported
|
||||||
|
|
||||||
|
:code:`redbot/cogs/dataconverter/core_specs.py`
|
||||||
@@ -16,6 +16,7 @@ Welcome to Red - Discord Bot's documentation!
|
|||||||
install_debian
|
install_debian
|
||||||
install_centos
|
install_centos
|
||||||
install_raspbian
|
install_raspbian
|
||||||
|
cog_dataconverter
|
||||||
|
|
||||||
.. toctree::
|
.. toctree::
|
||||||
:maxdepth: 2
|
:maxdepth: 2
|
||||||
@@ -29,14 +30,18 @@ Welcome to Red - Discord Bot's documentation!
|
|||||||
|
|
||||||
guide_migration
|
guide_migration
|
||||||
guide_cog_creation
|
guide_cog_creation
|
||||||
|
guide_data_conversion
|
||||||
framework_bank
|
framework_bank
|
||||||
|
framework_bot
|
||||||
framework_cogmanager
|
framework_cogmanager
|
||||||
framework_datamanager
|
|
||||||
framework_config
|
framework_config
|
||||||
|
framework_context
|
||||||
|
framework_datamanager
|
||||||
framework_downloader
|
framework_downloader
|
||||||
|
framework_events
|
||||||
framework_i18n
|
framework_i18n
|
||||||
framework_modlog
|
framework_modlog
|
||||||
framework_context
|
framework_rpc
|
||||||
framework_utils
|
framework_utils
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
sphinx==1.6.3
|
sphinx==1.6.5
|
||||||
sphinxcontrib-asyncio
|
sphinxcontrib-asyncio
|
||||||
sphinx_rtd_theme
|
sphinx_rtd_theme
|
||||||
git+https://github.com/Rapptz/discord.py@rewrite#egg=discord.py[voice]
|
git+https://github.com/Rapptz/discord.py@rewrite#egg=discord.py[voice]
|
||||||
|
|||||||
@@ -96,15 +96,18 @@ def list_instances():
|
|||||||
|
|
||||||
|
|
||||||
def main():
|
def main():
|
||||||
|
description = "Red - Version {}".format(__version__)
|
||||||
cli_flags = parse_cli_flags(sys.argv[1:])
|
cli_flags = parse_cli_flags(sys.argv[1:])
|
||||||
if cli_flags.list_instances:
|
if cli_flags.list_instances:
|
||||||
list_instances()
|
list_instances()
|
||||||
|
elif cli_flags.version:
|
||||||
|
print(description)
|
||||||
|
sys.exit(0)
|
||||||
elif not cli_flags.instance_name:
|
elif not cli_flags.instance_name:
|
||||||
print("Error: No instance name was provided!")
|
print("Error: No instance name was provided!")
|
||||||
sys.exit(1)
|
sys.exit(1)
|
||||||
load_basic_configuration(cli_flags.instance_name)
|
load_basic_configuration(cli_flags.instance_name)
|
||||||
log, sentry_log = init_loggers(cli_flags)
|
log, sentry_log = init_loggers(cli_flags)
|
||||||
description = "Red - Version {}".format(__version__)
|
|
||||||
red = Red(cli_flags, description=description, pm_help=None)
|
red = Red(cli_flags, description=description, pm_help=None)
|
||||||
init_global_checks(red)
|
init_global_checks(red)
|
||||||
init_events(red, cli_flags)
|
init_events(red, cli_flags)
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: red-discordbot\n"
|
"Project-Id-Version: red-discordbot\n"
|
||||||
"POT-Creation-Date: 2018-02-18 14:42+AKST\n"
|
"POT-Creation-Date: 2018-02-18 14:42+AKST\n"
|
||||||
"PO-Revision-Date: 2018-02-25 21:33-0500\n"
|
"PO-Revision-Date: 2018-02-27 01:49-0500\n"
|
||||||
"Last-Translator: Kowlin <boxedpp@gmail.com>\n"
|
"Last-Translator: Kowlin <boxedpp@gmail.com>\n"
|
||||||
"Language-Team: German\n"
|
"Language-Team: German\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: red-discordbot\n"
|
"Project-Id-Version: red-discordbot\n"
|
||||||
"POT-Creation-Date: 2018-02-18 14:42+AKST\n"
|
"POT-Creation-Date: 2018-02-18 14:42+AKST\n"
|
||||||
"PO-Revision-Date: 2018-02-25 21:34-0500\n"
|
"PO-Revision-Date: 2018-04-02 19:27-0400\n"
|
||||||
"Last-Translator: Kowlin <boxedpp@gmail.com>\n"
|
"Last-Translator: Kowlin <boxedpp@gmail.com>\n"
|
||||||
"Language-Team: Pirate English\n"
|
"Language-Team: Pirate English\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: red-discordbot\n"
|
"Project-Id-Version: red-discordbot\n"
|
||||||
"POT-Creation-Date: 2018-02-18 14:42+AKST\n"
|
"POT-Creation-Date: 2018-02-18 14:42+AKST\n"
|
||||||
"PO-Revision-Date: 2018-02-25 21:34-0500\n"
|
"PO-Revision-Date: 2018-04-02 19:27-0400\n"
|
||||||
"Last-Translator: Kowlin <boxedpp@gmail.com>\n"
|
"Last-Translator: Kowlin <boxedpp@gmail.com>\n"
|
||||||
"Language-Team: Indonesian\n"
|
"Language-Team: Indonesian\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: red-discordbot\n"
|
"Project-Id-Version: red-discordbot\n"
|
||||||
"POT-Creation-Date: 2018-02-18 14:42+AKST\n"
|
"POT-Creation-Date: 2018-02-18 14:42+AKST\n"
|
||||||
"PO-Revision-Date: 2018-02-25 21:33-0500\n"
|
"PO-Revision-Date: 2018-04-02 19:26-0400\n"
|
||||||
"Last-Translator: Kowlin <boxedpp@gmail.com>\n"
|
"Last-Translator: Kowlin <boxedpp@gmail.com>\n"
|
||||||
"Language-Team: Korean\n"
|
"Language-Team: Korean\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: red-discordbot\n"
|
"Project-Id-Version: red-discordbot\n"
|
||||||
"POT-Creation-Date: 2018-02-18 14:42+AKST\n"
|
"POT-Creation-Date: 2018-02-18 14:42+AKST\n"
|
||||||
"PO-Revision-Date: 2018-02-25 21:33-0500\n"
|
"PO-Revision-Date: 2018-04-02 19:27-0400\n"
|
||||||
"Last-Translator: Kowlin <boxedpp@gmail.com>\n"
|
"Last-Translator: Kowlin <boxedpp@gmail.com>\n"
|
||||||
"Language-Team: Dutch\n"
|
"Language-Team: Dutch\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: red-discordbot\n"
|
"Project-Id-Version: red-discordbot\n"
|
||||||
"POT-Creation-Date: 2018-02-18 14:42+AKST\n"
|
"POT-Creation-Date: 2018-02-18 14:42+AKST\n"
|
||||||
"PO-Revision-Date: 2018-02-25 21:33-0500\n"
|
"PO-Revision-Date: 2018-04-02 19:27-0400\n"
|
||||||
"Last-Translator: Kowlin <boxedpp@gmail.com>\n"
|
"Last-Translator: Kowlin <boxedpp@gmail.com>\n"
|
||||||
"Language-Team: Russian\n"
|
"Language-Team: Russian\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: red-discordbot\n"
|
"Project-Id-Version: red-discordbot\n"
|
||||||
"POT-Creation-Date: 2018-02-18 14:42+AKST\n"
|
"POT-Creation-Date: 2018-02-18 14:42+AKST\n"
|
||||||
"PO-Revision-Date: 2018-02-25 21:33-0500\n"
|
"PO-Revision-Date: 2018-02-27 01:49-0500\n"
|
||||||
"Last-Translator: Kowlin <boxedpp@gmail.com>\n"
|
"Last-Translator: Kowlin <boxedpp@gmail.com>\n"
|
||||||
"Language-Team: German\n"
|
"Language-Team: German\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: red-discordbot\n"
|
"Project-Id-Version: red-discordbot\n"
|
||||||
"POT-Creation-Date: 2018-02-18 14:42+AKST\n"
|
"POT-Creation-Date: 2018-02-18 14:42+AKST\n"
|
||||||
"PO-Revision-Date: 2018-02-25 21:34-0500\n"
|
"PO-Revision-Date: 2018-04-02 19:27-0400\n"
|
||||||
"Last-Translator: Kowlin <boxedpp@gmail.com>\n"
|
"Last-Translator: Kowlin <boxedpp@gmail.com>\n"
|
||||||
"Language-Team: Pirate English\n"
|
"Language-Team: Pirate English\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
@@ -22,15 +22,15 @@ msgstr "Arrr, no prefix found capt'n!"
|
|||||||
|
|
||||||
#: ../alias.py:198
|
#: ../alias.py:198
|
||||||
msgid "You attempted to create a new alias with the name {} but that name is already a command on this bot."
|
msgid "You attempted to create a new alias with the name {} but that name is already a command on this bot."
|
||||||
msgstr ""
|
msgstr "Ye try and make a squeeky-clean alias with the name {} but 'she be taken by another order."
|
||||||
|
|
||||||
#: ../alias.py:205
|
#: ../alias.py:205
|
||||||
msgid "You attempted to create a new alias with the name {} but that alias already exists on this server."
|
msgid "You attempted to create a new alias with the name {} but that alias already exists on this server."
|
||||||
msgstr ""
|
msgstr "Ye try and make a Squeeky-clean alias with the name {} but 'she already be on the island."
|
||||||
|
|
||||||
#: ../alias.py:212
|
#: ../alias.py:212
|
||||||
msgid "You attempted to create a new alias with the name {} but that name is an invalid alias name. Alias names may not contain spaces."
|
msgid "You attempted to create a new alias with the name {} but that name is an invalid alias name. Alias names may not contain spaces."
|
||||||
msgstr ""
|
msgstr "Ye try and make a Squeeky-clean alias with the name {} but 'she walk the plank! Spaces in an alias must walk the plank."
|
||||||
|
|
||||||
#: ../alias.py:224
|
#: ../alias.py:224
|
||||||
msgid "A new alias with the trigger `{}` has been created."
|
msgid "A new alias with the trigger `{}` has been created."
|
||||||
@@ -38,15 +38,15 @@ msgstr "Arrr! A new alias with thee trigger `{}` has been created."
|
|||||||
|
|
||||||
#: ../alias.py:236
|
#: ../alias.py:236
|
||||||
msgid "You attempted to create a new global alias with the name {} but that name is already a command on this bot."
|
msgid "You attempted to create a new global alias with the name {} but that name is already a command on this bot."
|
||||||
msgstr ""
|
msgstr "Ye try and make a squeeky-clean global alias with the name {} but 'she be taken by another order."
|
||||||
|
|
||||||
#: ../alias.py:243
|
#: ../alias.py:243
|
||||||
msgid "You attempted to create a new global alias with the name {} but that alias already exists on this server."
|
msgid "You attempted to create a new global alias with the name {} but that alias already exists on this server."
|
||||||
msgstr ""
|
msgstr "Ye try and make a Squeeky-clean global alias with the name {} but 'she already be on the island."
|
||||||
|
|
||||||
#: ../alias.py:250
|
#: ../alias.py:250
|
||||||
msgid "You attempted to create a new global alias with the name {} but that name is an invalid alias name. Alias names may not contain spaces."
|
msgid "You attempted to create a new global alias with the name {} but that name is an invalid alias name. Alias names may not contain spaces."
|
||||||
msgstr ""
|
msgstr "Ye try and make a Squeeky-clean global alias with the name {} but 'she walk the plank! Spaces in an alias must walk the plank."
|
||||||
|
|
||||||
#: ../alias.py:259
|
#: ../alias.py:259
|
||||||
msgid "A new global alias with the trigger `{}` has been created."
|
msgid "A new global alias with the trigger `{}` has been created."
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: red-discordbot\n"
|
"Project-Id-Version: red-discordbot\n"
|
||||||
"POT-Creation-Date: 2018-02-18 14:42+AKST\n"
|
"POT-Creation-Date: 2018-02-18 14:42+AKST\n"
|
||||||
"PO-Revision-Date: 2018-02-25 21:34-0500\n"
|
"PO-Revision-Date: 2018-04-02 19:27-0400\n"
|
||||||
"Last-Translator: Kowlin <boxedpp@gmail.com>\n"
|
"Last-Translator: Kowlin <boxedpp@gmail.com>\n"
|
||||||
"Language-Team: Indonesian\n"
|
"Language-Team: Indonesian\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
@@ -22,15 +22,15 @@ msgstr "Awalan tidak ditemukan."
|
|||||||
|
|
||||||
#: ../alias.py:198
|
#: ../alias.py:198
|
||||||
msgid "You attempted to create a new alias with the name {} but that name is already a command on this bot."
|
msgid "You attempted to create a new alias with the name {} but that name is already a command on this bot."
|
||||||
msgstr ""
|
msgstr "Anda mencoba untuk membuat sebuah alias baru dengan nama {} tetapi nama itu sudah menjadi perintah pada bot ini."
|
||||||
|
|
||||||
#: ../alias.py:205
|
#: ../alias.py:205
|
||||||
msgid "You attempted to create a new alias with the name {} but that alias already exists on this server."
|
msgid "You attempted to create a new alias with the name {} but that alias already exists on this server."
|
||||||
msgstr ""
|
msgstr "Anda mencoba untuk membuat sebuah alias baru dengan nama {} tetapi alias itu sudah ada pada server ini."
|
||||||
|
|
||||||
#: ../alias.py:212
|
#: ../alias.py:212
|
||||||
msgid "You attempted to create a new alias with the name {} but that name is an invalid alias name. Alias names may not contain spaces."
|
msgid "You attempted to create a new alias with the name {} but that name is an invalid alias name. Alias names may not contain spaces."
|
||||||
msgstr ""
|
msgstr "Anda mencoba untuk membuat sebuah alias baru dengan nama {} tetapi nama itu adalah sebuah nama alias yang tidak berlaku. Nama alias tidak boleh berisi spasi."
|
||||||
|
|
||||||
#: ../alias.py:224
|
#: ../alias.py:224
|
||||||
msgid "A new alias with the trigger `{}` has been created."
|
msgid "A new alias with the trigger `{}` has been created."
|
||||||
@@ -38,15 +38,15 @@ msgstr "Alias baru dengan pemicu '{}' telah dibuat."
|
|||||||
|
|
||||||
#: ../alias.py:236
|
#: ../alias.py:236
|
||||||
msgid "You attempted to create a new global alias with the name {} but that name is already a command on this bot."
|
msgid "You attempted to create a new global alias with the name {} but that name is already a command on this bot."
|
||||||
msgstr ""
|
msgstr "Anda mencoba untuk membuat sebuah alias global baru dengan nama {} tetapi nama itu sudah menjadi sebuah perintah pada bot ini."
|
||||||
|
|
||||||
#: ../alias.py:243
|
#: ../alias.py:243
|
||||||
msgid "You attempted to create a new global alias with the name {} but that alias already exists on this server."
|
msgid "You attempted to create a new global alias with the name {} but that alias already exists on this server."
|
||||||
msgstr ""
|
msgstr "Anda mencoba untuk membuat sebuah alias global baru dengan nama {} tetapi alias itu sudah ada pada server ini."
|
||||||
|
|
||||||
#: ../alias.py:250
|
#: ../alias.py:250
|
||||||
msgid "You attempted to create a new global alias with the name {} but that name is an invalid alias name. Alias names may not contain spaces."
|
msgid "You attempted to create a new global alias with the name {} but that name is an invalid alias name. Alias names may not contain spaces."
|
||||||
msgstr ""
|
msgstr "Anda mencoba untuk membuat sebuah alias global baru dengan nama {} tetapi nama itu adalah sebuah nama alias yang tidak berlaku. Nama alias tidak boleh berisi spasi."
|
||||||
|
|
||||||
#: ../alias.py:259
|
#: ../alias.py:259
|
||||||
msgid "A new global alias with the trigger `{}` has been created."
|
msgid "A new global alias with the trigger `{}` has been created."
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: red-discordbot\n"
|
"Project-Id-Version: red-discordbot\n"
|
||||||
"POT-Creation-Date: 2018-02-18 14:42+AKST\n"
|
"POT-Creation-Date: 2018-02-18 14:42+AKST\n"
|
||||||
"PO-Revision-Date: 2018-02-25 21:33-0500\n"
|
"PO-Revision-Date: 2018-04-02 19:26-0400\n"
|
||||||
"Last-Translator: Kowlin <boxedpp@gmail.com>\n"
|
"Last-Translator: Kowlin <boxedpp@gmail.com>\n"
|
||||||
"Language-Team: Korean\n"
|
"Language-Team: Korean\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
@@ -18,73 +18,73 @@ msgstr ""
|
|||||||
|
|
||||||
#: ../alias.py:129
|
#: ../alias.py:129
|
||||||
msgid "No prefix found."
|
msgid "No prefix found."
|
||||||
msgstr "접두사가 발견되지 않았습니다."
|
msgstr "프리픽스를 찾을 수 없어요."
|
||||||
|
|
||||||
#: ../alias.py:198
|
#: ../alias.py:198
|
||||||
msgid "You attempted to create a new alias with the name {} but that name is already a command on this bot."
|
msgid "You attempted to create a new alias with the name {} but that name is already a command on this bot."
|
||||||
msgstr ""
|
msgstr "이름이 {} 인 바로가기를 만들려고 했지만, 이 봇의 커맨드와 중복돼요."
|
||||||
|
|
||||||
#: ../alias.py:205
|
#: ../alias.py:205
|
||||||
msgid "You attempted to create a new alias with the name {} but that alias already exists on this server."
|
msgid "You attempted to create a new alias with the name {} but that alias already exists on this server."
|
||||||
msgstr ""
|
msgstr "이름이 {} 인 바로가기를 만들려고 했지만, 해당 바로가기가 이미 이 서버에 등록되어 있어요."
|
||||||
|
|
||||||
#: ../alias.py:212
|
#: ../alias.py:212
|
||||||
msgid "You attempted to create a new alias with the name {} but that name is an invalid alias name. Alias names may not contain spaces."
|
msgid "You attempted to create a new alias with the name {} but that name is an invalid alias name. Alias names may not contain spaces."
|
||||||
msgstr ""
|
msgstr "이름이 {} 인 바로가기를 만들려고 했지만, 잘못된 바로가기 이름에요. 바로가기 이름에는 공백이 포함될 수 없어요."
|
||||||
|
|
||||||
#: ../alias.py:224
|
#: ../alias.py:224
|
||||||
msgid "A new alias with the trigger `{}` has been created."
|
msgid "A new alias with the trigger `{}` has been created."
|
||||||
msgstr "`{}`로 발동되는 바로가기가 생성되었습니다."
|
msgstr "트리거 `{}` 이(가) 포함된 별칭이 등록됐어요."
|
||||||
|
|
||||||
#: ../alias.py:236
|
#: ../alias.py:236
|
||||||
msgid "You attempted to create a new global alias with the name {} but that name is already a command on this bot."
|
msgid "You attempted to create a new global alias with the name {} but that name is already a command on this bot."
|
||||||
msgstr ""
|
msgstr "이름이 {} 인 글로벌 별칭을 만들려고 했지만, 이 봇의 커맨드와 중복돼요."
|
||||||
|
|
||||||
#: ../alias.py:243
|
#: ../alias.py:243
|
||||||
msgid "You attempted to create a new global alias with the name {} but that alias already exists on this server."
|
msgid "You attempted to create a new global alias with the name {} but that alias already exists on this server."
|
||||||
msgstr ""
|
msgstr "이름이 {} 인 글로벌 별칭을 만들려고 했지만, 해당 별칭이 이미 이 서버에 등록되어 있어요."
|
||||||
|
|
||||||
#: ../alias.py:250
|
#: ../alias.py:250
|
||||||
msgid "You attempted to create a new global alias with the name {} but that name is an invalid alias name. Alias names may not contain spaces."
|
msgid "You attempted to create a new global alias with the name {} but that name is an invalid alias name. Alias names may not contain spaces."
|
||||||
msgstr ""
|
msgstr "이름이 {} 인 글로벌 별칭을 만들려고 했지만, 잘못된 별칭 이름에요. 별칭 이름에는 공백이 포함될 수 없어요."
|
||||||
|
|
||||||
#: ../alias.py:259
|
#: ../alias.py:259
|
||||||
msgid "A new global alias with the trigger `{}` has been created."
|
msgid "A new global alias with the trigger `{}` has been created."
|
||||||
msgstr "`{}`로 발동되는 전역 바로가기가 생성 되었습니다."
|
msgstr "트리거 `{}` 이(가) 포함된 글로벌 별칭이 등록됐어요."
|
||||||
|
|
||||||
#: ../alias.py:274
|
#: ../alias.py:274
|
||||||
msgid "No such alias exists."
|
msgid "No such alias exists."
|
||||||
msgstr "해당 바로가기가 없습니다."
|
msgstr "그런 별칭은 등록되어 있지 않아요."
|
||||||
|
|
||||||
#: ../alias.py:283
|
#: ../alias.py:283
|
||||||
msgid "The `{}` alias will execute the command `{}`"
|
msgid "The `{}` alias will execute the command `{}`"
|
||||||
msgstr "바로가기 `{}`는 명령어 `{}` 를 실행 합니다."
|
msgstr "`{}` 별칭이 `{}` 커맨드를 실행했어요."
|
||||||
|
|
||||||
#: ../alias.py:286
|
#: ../alias.py:286
|
||||||
msgid "There is no alias with the name `{}`"
|
msgid "There is no alias with the name `{}`"
|
||||||
msgstr "`{}`로 지정된 바로가기가 없습니다."
|
msgstr "`{}` 이란 이름으로 등록된 별칭이 없어요."
|
||||||
|
|
||||||
#: ../alias.py:298
|
#: ../alias.py:298
|
||||||
msgid "There are no aliases on this guild."
|
msgid "There are no aliases on this guild."
|
||||||
msgstr "이 길드에는 바로가기가 없습니다."
|
msgstr "이 길드에 등록된 별칭이 없어요."
|
||||||
|
|
||||||
#: ../alias.py:302 ../alias.py:320
|
#: ../alias.py:302 ../alias.py:320
|
||||||
msgid "Alias with the name `{}` was successfully deleted."
|
msgid "Alias with the name `{}` was successfully deleted."
|
||||||
msgstr "바로가기 `{}` 가 성공적으로 삭제 되었습니다."
|
msgstr "별칭 `{}` 이(가) 성공적으로 삭제됐어요."
|
||||||
|
|
||||||
#: ../alias.py:305 ../alias.py:323
|
#: ../alias.py:305 ../alias.py:323
|
||||||
msgid "Alias with name `{}` was not found."
|
msgid "Alias with name `{}` was not found."
|
||||||
msgstr "바로가기 `{}` 가 발견되지 않았습니다."
|
msgstr "`{}` 바로가기가 등록되어 있지 않아요."
|
||||||
|
|
||||||
#: ../alias.py:316
|
#: ../alias.py:316
|
||||||
msgid "There are no aliases on this bot."
|
msgid "There are no aliases on this bot."
|
||||||
msgstr "이 봇에는 바로가기가 없습니다."
|
msgstr "이 봇에 등록된 별칭이 없어요."
|
||||||
|
|
||||||
#: ../alias.py:331 ../alias.py:342
|
#: ../alias.py:331 ../alias.py:342
|
||||||
msgid "Aliases:"
|
msgid "Aliases:"
|
||||||
msgstr "바로가기 리스트:"
|
msgstr "등록된 별칭 리스트 :"
|
||||||
|
|
||||||
#: ../alias.py:333 ../alias.py:344
|
#: ../alias.py:333 ../alias.py:344
|
||||||
msgid "There are no aliases on this server."
|
msgid "There are no aliases on this server."
|
||||||
msgstr "이 서버에는 별칭이 없습니다."
|
msgstr "이 서버에 등록된 별칭이 없어요."
|
||||||
|
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: red-discordbot\n"
|
"Project-Id-Version: red-discordbot\n"
|
||||||
"POT-Creation-Date: 2018-02-18 14:42+AKST\n"
|
"POT-Creation-Date: 2018-02-18 14:42+AKST\n"
|
||||||
"PO-Revision-Date: 2018-02-25 21:33-0500\n"
|
"PO-Revision-Date: 2018-04-02 19:27-0400\n"
|
||||||
"Last-Translator: Kowlin <boxedpp@gmail.com>\n"
|
"Last-Translator: Kowlin <boxedpp@gmail.com>\n"
|
||||||
"Language-Team: Dutch\n"
|
"Language-Team: Dutch\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: red-discordbot\n"
|
"Project-Id-Version: red-discordbot\n"
|
||||||
"POT-Creation-Date: 2018-02-18 14:42+AKST\n"
|
"POT-Creation-Date: 2018-02-18 14:42+AKST\n"
|
||||||
"PO-Revision-Date: 2018-02-25 21:33-0500\n"
|
"PO-Revision-Date: 2018-04-02 19:27-0400\n"
|
||||||
"Last-Translator: Kowlin <boxedpp@gmail.com>\n"
|
"Last-Translator: Kowlin <boxedpp@gmail.com>\n"
|
||||||
"Language-Team: Russian\n"
|
"Language-Team: Russian\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
@@ -22,15 +22,15 @@ msgstr "Префикс не найден."
|
|||||||
|
|
||||||
#: ../alias.py:198
|
#: ../alias.py:198
|
||||||
msgid "You attempted to create a new alias with the name {} but that name is already a command on this bot."
|
msgid "You attempted to create a new alias with the name {} but that name is already a command on this bot."
|
||||||
msgstr ""
|
msgstr "Вы пытались создать новый псевдоним с именем {}, но это имя используется как команда в этом боте."
|
||||||
|
|
||||||
#: ../alias.py:205
|
#: ../alias.py:205
|
||||||
msgid "You attempted to create a new alias with the name {} but that alias already exists on this server."
|
msgid "You attempted to create a new alias with the name {} but that alias already exists on this server."
|
||||||
msgstr ""
|
msgstr "Вы пытались создать новый псевдоним с именем {}, но это имя используется как команда на этом сервере."
|
||||||
|
|
||||||
#: ../alias.py:212
|
#: ../alias.py:212
|
||||||
msgid "You attempted to create a new alias with the name {} but that name is an invalid alias name. Alias names may not contain spaces."
|
msgid "You attempted to create a new alias with the name {} but that name is an invalid alias name. Alias names may not contain spaces."
|
||||||
msgstr ""
|
msgstr "Вы пытались создать новый псевдоним с именем {}, но это имя является недопустимым псевдонимом. Имена псевдонимов не могут содержать пробелы."
|
||||||
|
|
||||||
#: ../alias.py:224
|
#: ../alias.py:224
|
||||||
msgid "A new alias with the trigger `{}` has been created."
|
msgid "A new alias with the trigger `{}` has been created."
|
||||||
@@ -38,15 +38,15 @@ msgstr "Был создан новый псевдоним с триггером
|
|||||||
|
|
||||||
#: ../alias.py:236
|
#: ../alias.py:236
|
||||||
msgid "You attempted to create a new global alias with the name {} but that name is already a command on this bot."
|
msgid "You attempted to create a new global alias with the name {} but that name is already a command on this bot."
|
||||||
msgstr ""
|
msgstr "Вы пытались создать новый глобальный псевдоним с именем {}, но это имя уже используется как команда в этом боте."
|
||||||
|
|
||||||
#: ../alias.py:243
|
#: ../alias.py:243
|
||||||
msgid "You attempted to create a new global alias with the name {} but that alias already exists on this server."
|
msgid "You attempted to create a new global alias with the name {} but that alias already exists on this server."
|
||||||
msgstr ""
|
msgstr "Вы пытались создать новый глобальный псевдоним с именем {}, но это имя уже существует на этом сервере."
|
||||||
|
|
||||||
#: ../alias.py:250
|
#: ../alias.py:250
|
||||||
msgid "You attempted to create a new global alias with the name {} but that name is an invalid alias name. Alias names may not contain spaces."
|
msgid "You attempted to create a new global alias with the name {} but that name is an invalid alias name. Alias names may not contain spaces."
|
||||||
msgstr ""
|
msgstr "Вы пытались создать новый псевдоним с именем {], но это имя явлется недопустимым именем для псевдонима. Псевдонимы не могут содержать пробелы."
|
||||||
|
|
||||||
#: ../alias.py:259
|
#: ../alias.py:259
|
||||||
msgid "A new global alias with the trigger `{}` has been created."
|
msgid "A new global alias with the trigger `{}` has been created."
|
||||||
@@ -86,5 +86,5 @@ msgstr "Алиасы:"
|
|||||||
|
|
||||||
#: ../alias.py:333 ../alias.py:344
|
#: ../alias.py:333 ../alias.py:344
|
||||||
msgid "There are no aliases on this server."
|
msgid "There are no aliases on this server."
|
||||||
msgstr "На этом сервере еще нет алиасов."
|
msgstr "На этом сервере нет псевдонимов."
|
||||||
|
|
||||||
|
|||||||
@@ -50,7 +50,6 @@ async def setup(bot: commands.Bot):
|
|||||||
await start_lavalink_server(bot.loop)
|
await start_lavalink_server(bot.loop)
|
||||||
|
|
||||||
async def _finish():
|
async def _finish():
|
||||||
await asyncio.sleep(10)
|
|
||||||
await cog.init_config()
|
await cog.init_config()
|
||||||
bot.add_cog(cog)
|
bot.add_cog(cog)
|
||||||
|
|
||||||
|
|||||||
@@ -5,11 +5,11 @@ import heapq
|
|||||||
import lavalink
|
import lavalink
|
||||||
import math
|
import math
|
||||||
from discord.ext import commands
|
from discord.ext import commands
|
||||||
from redbot.core import Config, checks
|
from redbot.core import Config, checks, bank
|
||||||
|
|
||||||
from .manager import shutdown_lavalink_server
|
from .manager import shutdown_lavalink_server
|
||||||
|
|
||||||
__version__ = "0.0.3a"
|
__version__ = "0.0.4"
|
||||||
__author__ = ["aikaterna", "billy/bollo/ati"]
|
__author__ = ["aikaterna", "billy/bollo/ati"]
|
||||||
|
|
||||||
|
|
||||||
@@ -28,14 +28,21 @@ class Audio:
|
|||||||
}
|
}
|
||||||
|
|
||||||
default_guild = {
|
default_guild = {
|
||||||
|
"dj_enabled": False,
|
||||||
|
"dj_role": None,
|
||||||
|
"jukebox": False,
|
||||||
|
"jukebox_price": 0,
|
||||||
"notify": False,
|
"notify": False,
|
||||||
"repeat": False,
|
"repeat": False,
|
||||||
"shuffle": False,
|
"shuffle": False,
|
||||||
"volume": 100
|
"volume": 100,
|
||||||
|
"vote_enabled": False,
|
||||||
|
"vote_percent": 0
|
||||||
}
|
}
|
||||||
|
|
||||||
self.config.register_guild(**default_guild)
|
self.config.register_guild(**default_guild)
|
||||||
self.config.register_global(**default_global)
|
self.config.register_global(**default_global)
|
||||||
|
self.skip_votes = {}
|
||||||
|
|
||||||
async def init_config(self):
|
async def init_config(self):
|
||||||
host = await self.config.host()
|
host = await self.config.host()
|
||||||
@@ -44,7 +51,7 @@ class Audio:
|
|||||||
ws_port = await self.config.ws_port()
|
ws_port = await self.config.ws_port()
|
||||||
|
|
||||||
await lavalink.initialize(
|
await lavalink.initialize(
|
||||||
bot=self.bot, host=host, password=password, rest_port=rest_port, ws_port=ws_port
|
bot=self.bot, host=host, password=password, rest_port=rest_port, ws_port=ws_port, timeout=60
|
||||||
)
|
)
|
||||||
lavalink.register_event_listener(self.event_handler)
|
lavalink.register_event_listener(self.event_handler)
|
||||||
|
|
||||||
@@ -65,6 +72,7 @@ class Audio:
|
|||||||
player.store('prev_requester', requester)
|
player.store('prev_requester', requester)
|
||||||
player.store('playing_song', player.current.uri)
|
player.store('playing_song', player.current.uri)
|
||||||
player.store('requester', player.current.requester)
|
player.store('requester', player.current.requester)
|
||||||
|
self.skip_votes[player.channel.guild] = []
|
||||||
|
|
||||||
if event_type == lavalink.LavalinkEvents.TRACK_START and notify:
|
if event_type == lavalink.LavalinkEvents.TRACK_START and notify:
|
||||||
notify_channel = player.fetch('channel')
|
notify_channel = player.fetch('channel')
|
||||||
@@ -108,48 +116,126 @@ class Audio:
|
|||||||
type=discord.ActivityType.playing))
|
type=discord.ActivityType.playing))
|
||||||
|
|
||||||
@commands.group()
|
@commands.group()
|
||||||
@checks.is_owner()
|
@commands.guild_only()
|
||||||
async def audioset(self, ctx):
|
async def audioset(self, ctx):
|
||||||
"""Music configuration options."""
|
"""Music configuration options."""
|
||||||
if ctx.invoked_subcommand is None:
|
if ctx.invoked_subcommand is None:
|
||||||
await ctx.send_help()
|
await ctx.send_help()
|
||||||
|
|
||||||
@audioset.command()
|
@audioset.command()
|
||||||
|
@checks.admin_or_permissions(manage_roles=True)
|
||||||
|
async def dj(self, ctx):
|
||||||
|
"""Toggle DJ mode (users need a role to use audio commands)."""
|
||||||
|
dj_role_id = await self.config.guild(ctx.guild).dj_role()
|
||||||
|
if dj_role_id is None:
|
||||||
|
await self._embed_msg(ctx, 'Please set a role to use with DJ mode. Enter the role name now.')
|
||||||
|
|
||||||
|
def check(m):
|
||||||
|
return m.author == ctx.author
|
||||||
|
try:
|
||||||
|
dj_role = await ctx.bot.wait_for('message', timeout=15.0, check=check)
|
||||||
|
dj_role_obj = discord.utils.get(ctx.guild.roles, name=dj_role.content)
|
||||||
|
if dj_role_obj is None:
|
||||||
|
return await self._embed_msg(ctx, 'No role with that name.')
|
||||||
|
await ctx.invoke(self.role, dj_role_obj)
|
||||||
|
except asyncio.TimeoutError:
|
||||||
|
return await self._embed_msg(ctx, 'No role entered, try again later.')
|
||||||
|
|
||||||
|
dj_enabled = await self.config.guild(ctx.guild).dj_enabled()
|
||||||
|
await self.config.guild(ctx.guild).dj_enabled.set(not dj_enabled)
|
||||||
|
await self._embed_msg(ctx, 'DJ role enabled: {}.'.format(not dj_enabled))
|
||||||
|
|
||||||
|
@audioset.command()
|
||||||
|
@checks.admin_or_permissions(manage_roles=True)
|
||||||
|
async def role(self, ctx, role_name: discord.Role):
|
||||||
|
"""Sets the role to use for DJ mode."""
|
||||||
|
await self.config.guild(ctx.guild).dj_role.set(role_name.id)
|
||||||
|
dj_role_id = await self.config.guild(ctx.guild).dj_role()
|
||||||
|
dj_role_obj = discord.utils.get(ctx.guild.roles, id=dj_role_id)
|
||||||
|
await self._embed_msg(ctx, 'DJ role set to: {}.'.format(dj_role_obj.name))
|
||||||
|
|
||||||
|
@audioset.command()
|
||||||
|
@checks.mod_or_permissions(administrator=True)
|
||||||
|
async def jukebox(self, ctx, price: int):
|
||||||
|
"""Set a price for queueing songs for non-mods. 0 to disable."""
|
||||||
|
jukebox = await self.config.guild(ctx.guild).jukebox()
|
||||||
|
jukebox_price = await self.config.guild(ctx.guild).jukebox_price()
|
||||||
|
if price < 0:
|
||||||
|
return await self._embed_msg(ctx, 'Can\'t be less than zero.')
|
||||||
|
if price == 0:
|
||||||
|
jukebox = False
|
||||||
|
await self._embed_msg(ctx, 'Jukebox mode disabled.')
|
||||||
|
else:
|
||||||
|
jukebox = True
|
||||||
|
await self._embed_msg(ctx, 'Track queueing command price set to {} {}.'.format(
|
||||||
|
price, await bank.get_currency_name(ctx.guild)))
|
||||||
|
|
||||||
|
await self.config.guild(ctx.guild).jukebox_price.set(price)
|
||||||
|
await self.config.guild(ctx.guild).jukebox.set(jukebox)
|
||||||
|
|
||||||
|
@audioset.command()
|
||||||
|
@checks.mod_or_permissions(manage_messages=True)
|
||||||
async def notify(self, ctx):
|
async def notify(self, ctx):
|
||||||
"""Toggle song announcement and other bot messages."""
|
"""Toggle song announcement and other bot messages."""
|
||||||
notify = await self.config.guild(ctx.guild).notify()
|
notify = await self.config.guild(ctx.guild).notify()
|
||||||
await self.config.guild(ctx.guild).notify.set(not notify)
|
await self.config.guild(ctx.guild).notify.set(not notify)
|
||||||
get_notify = await self.config.guild(ctx.guild).notify()
|
await self._embed_msg(ctx, 'Verbose mode on: {}.'.format(not notify))
|
||||||
await self._embed_msg(ctx, 'Verbose mode on: {}.'.format(get_notify))
|
|
||||||
|
|
||||||
@audioset.command()
|
@audioset.command()
|
||||||
async def settings(self, ctx):
|
async def settings(self, ctx):
|
||||||
"""Show the current settings."""
|
"""Show the current settings."""
|
||||||
notify = await self.config.guild(ctx.guild).notify()
|
data = await self.config.guild(ctx.guild).all()
|
||||||
|
dj_role_obj = discord.utils.get(ctx.guild.roles, id=data['dj_role'])
|
||||||
|
dj_enabled = data['dj_enabled']
|
||||||
|
jukebox = data['jukebox']
|
||||||
|
jukebox_price = data['jukebox_price']
|
||||||
status = await self.config.status()
|
status = await self.config.status()
|
||||||
shuffle = await self.config.guild(ctx.guild).shuffle()
|
vote_percent = data['vote_percent']
|
||||||
repeat = await self.config.guild(ctx.guild).repeat()
|
msg = ('```ini\n'
|
||||||
|
'----Guild Settings----\n')
|
||||||
msg = '```ini\n'
|
if dj_enabled:
|
||||||
msg += '----Guild Settings----\n'
|
msg += 'DJ Role: [{}]\n'.format(dj_role_obj.name)
|
||||||
msg += 'audioset notify: [{}]\n'.format(notify)
|
if jukebox:
|
||||||
msg += 'audioset status: [{}]\n'.format(status)
|
msg += 'Jukebox: [{0}]\n'.format(jukebox)
|
||||||
msg += 'Repeat: [{}]\n'.format(repeat)
|
msg += 'Command price: [{0}]\n'.format(jukebox_price)
|
||||||
msg += 'Shuffle: [{}]\n'.format(shuffle)
|
msg += ('Repeat: [{repeat}]\n'
|
||||||
msg += '---Lavalink Settings---\n'
|
'Shuffle: [{shuffle}]\n'
|
||||||
msg += 'Cog version: {}\n```'.format(__version__)
|
'Song notify msgs: [{notify}]\n'
|
||||||
|
'Songs as status: [{0}]\n'.format(status, **data))
|
||||||
|
if vote_percent > 0:
|
||||||
|
msg += ('Vote skip: [{vote_enabled}]\n'
|
||||||
|
'Skip percentage: [{vote_percent}%]\n').format(**data)
|
||||||
|
msg += ('---Lavalink Settings---\n'
|
||||||
|
'Cog version: {}\n```'.format(__version__))
|
||||||
|
|
||||||
embed = discord.Embed(colour=ctx.guild.me.top_role.colour, description=msg)
|
embed = discord.Embed(colour=ctx.guild.me.top_role.colour, description=msg)
|
||||||
return await ctx.send(embed=embed)
|
return await ctx.send(embed=embed)
|
||||||
|
|
||||||
@audioset.command()
|
@audioset.command()
|
||||||
|
@checks.mod_or_permissions(administrator=True)
|
||||||
|
async def vote(self, ctx, percent: int):
|
||||||
|
"""Percentage needed for non-mods to skip songs. 0 to disable."""
|
||||||
|
if percent < 0:
|
||||||
|
return await self._embed_msg(ctx, 'Can\'t be less than zero.')
|
||||||
|
elif percent > 100:
|
||||||
|
percent = 100
|
||||||
|
if percent == 0:
|
||||||
|
enabled = False
|
||||||
|
await self._embed_msg(ctx, 'Voting disabled. All users can use queue management commands.')
|
||||||
|
else:
|
||||||
|
enabled = True
|
||||||
|
await self._embed_msg(ctx, 'Vote percentage set to {}%.'.format(percent))
|
||||||
|
|
||||||
|
await self.config.guild(ctx.guild).vote_percent.set(percent)
|
||||||
|
await self.config.guild(ctx.guild).vote_enabled.set(enabled)
|
||||||
|
|
||||||
@checks.is_owner()
|
@checks.is_owner()
|
||||||
|
@audioset.command()
|
||||||
async def status(self, ctx):
|
async def status(self, ctx):
|
||||||
"""Enables/disables songs' titles as status."""
|
"""Enables/disables songs' titles as status."""
|
||||||
status = await self.config.status()
|
status = await self.config.status()
|
||||||
await self.config.status.set(not status)
|
await self.config.status.set(not status)
|
||||||
get_status = await self.config.status()
|
await self._embed_msg(ctx, 'Song titles as status: {}.'.format(not status))
|
||||||
await self._embed_msg(ctx, 'Song titles as status: {}.'.format(get_status))
|
|
||||||
|
|
||||||
@commands.command()
|
@commands.command()
|
||||||
async def audiostats(self, ctx):
|
async def audiostats(self, ctx):
|
||||||
@@ -177,10 +263,16 @@ class Audio:
|
|||||||
@commands.command()
|
@commands.command()
|
||||||
async def bump(self, ctx, index: int):
|
async def bump(self, ctx, index: int):
|
||||||
"""Bump a song number to the top of the queue."""
|
"""Bump a song number to the top of the queue."""
|
||||||
|
dj_enabled = await self.config.guild(ctx.guild).dj_enabled()
|
||||||
if not self._player_check(ctx):
|
if not self._player_check(ctx):
|
||||||
return await self._embed_msg(ctx, 'Nothing playing.')
|
return await self._embed_msg(ctx, 'Nothing playing.')
|
||||||
|
|
||||||
player = lavalink.get_player(ctx.guild.id)
|
player = lavalink.get_player(ctx.guild.id)
|
||||||
|
if ((not ctx.author.voice or ctx.author.voice.channel != player.channel) and not
|
||||||
|
await self._can_instaskip(ctx, ctx.author)):
|
||||||
|
return await self._embed_msg(ctx, 'You must be in the voice channel to bump a song.')
|
||||||
|
if dj_enabled:
|
||||||
|
if not await self._can_instaskip(ctx, ctx.author):
|
||||||
|
return await self._embed_msg(ctx, 'You need the DJ role to bump songs.')
|
||||||
if index > len(player.queue) or index < 1:
|
if index > len(player.queue) or index < 1:
|
||||||
return await self._embed_msg(ctx, 'Song number must be greater than 1 and within the queue limit.')
|
return await self._embed_msg(ctx, 'Song number must be greater than 1 and within the queue limit.')
|
||||||
|
|
||||||
@@ -193,16 +285,23 @@ class Audio:
|
|||||||
@commands.command(aliases=['dc'])
|
@commands.command(aliases=['dc'])
|
||||||
async def disconnect(self, ctx):
|
async def disconnect(self, ctx):
|
||||||
"""Disconnect from the voice channel."""
|
"""Disconnect from the voice channel."""
|
||||||
|
dj_enabled = await self.config.guild(ctx.guild).dj_enabled()
|
||||||
if self._player_check(ctx):
|
if self._player_check(ctx):
|
||||||
await lavalink.get_player(ctx.guild.id).stop()
|
if dj_enabled:
|
||||||
await lavalink.get_player(ctx.guild.id).disconnect()
|
if not await self._can_instaskip(ctx, ctx.author):
|
||||||
|
return await self._embed_msg(ctx, 'You need the DJ role to disconnect.')
|
||||||
|
if not await self._can_instaskip(ctx, ctx.author):
|
||||||
|
return await self._embed_msg(ctx, 'There are other people listening to music.')
|
||||||
|
else:
|
||||||
|
await lavalink.get_player(ctx.guild.id).stop()
|
||||||
|
return await lavalink.get_player(ctx.guild.id).disconnect()
|
||||||
|
|
||||||
@commands.command(aliases=['np', 'n', 'song'])
|
@commands.command(aliases=['np', 'n', 'song'])
|
||||||
async def now(self, ctx):
|
async def now(self, ctx):
|
||||||
"""Now playing."""
|
"""Now playing."""
|
||||||
if not self._player_check(ctx):
|
if not self._player_check(ctx):
|
||||||
return await self._embed_msg(ctx, 'Nothing playing.')
|
return await self._embed_msg(ctx, 'Nothing playing.')
|
||||||
expected = ['⏮', '⏹', '⏸', '⏭']
|
expected = ('⏮', '⏹', '⏸', '⏭')
|
||||||
emoji = {
|
emoji = {
|
||||||
'prev': '⏮',
|
'prev': '⏮',
|
||||||
'stop': '⏹',
|
'stop': '⏹',
|
||||||
@@ -210,7 +309,6 @@ class Audio:
|
|||||||
'next': '⏭'
|
'next': '⏭'
|
||||||
}
|
}
|
||||||
player = lavalink.get_player(ctx.guild.id)
|
player = lavalink.get_player(ctx.guild.id)
|
||||||
song = 'Nothing'
|
|
||||||
if player.current:
|
if player.current:
|
||||||
arrow = await self._draw_time(ctx)
|
arrow = await self._draw_time(ctx)
|
||||||
pos = lavalink.utils.format_time(player.position)
|
pos = lavalink.utils.format_time(player.position)
|
||||||
@@ -235,20 +333,24 @@ class Audio:
|
|||||||
message = await ctx.send(embed=embed)
|
message = await ctx.send(embed=embed)
|
||||||
player.store('np_message', message)
|
player.store('np_message', message)
|
||||||
|
|
||||||
def check(r, u):
|
dj_enabled = await self.config.guild(ctx.guild).dj_enabled()
|
||||||
return r.message.id == message.id and u == ctx.message.author
|
vote_enabled = await self.config.guild(ctx.guild).vote_enabled()
|
||||||
|
if dj_enabled or vote_enabled:
|
||||||
|
if not await self._can_instaskip(ctx, ctx.author):
|
||||||
|
return
|
||||||
|
|
||||||
if player.current:
|
if player.current:
|
||||||
for i in range(4):
|
for i in range(4):
|
||||||
await message.add_reaction(expected[i])
|
await message.add_reaction(expected[i])
|
||||||
|
|
||||||
|
def check(r, u):
|
||||||
|
return r.message.id == message.id and u == ctx.message.author
|
||||||
try:
|
try:
|
||||||
(r, u) = await self.bot.wait_for('reaction_add', check=check, timeout=10.0)
|
(r, u) = await self.bot.wait_for('reaction_add', check=check, timeout=10.0)
|
||||||
except asyncio.TimeoutError:
|
except asyncio.TimeoutError:
|
||||||
return await self._clear_react(message)
|
return await self._clear_react(message)
|
||||||
|
|
||||||
reacts = {v: k for k, v in emoji.items()}
|
reacts = {v: k for k, v in emoji.items()}
|
||||||
react = reacts[r.emoji]
|
react = reacts[r.emoji]
|
||||||
|
|
||||||
if react == 'prev':
|
if react == 'prev':
|
||||||
await self._clear_react(message)
|
await self._clear_react(message)
|
||||||
await ctx.invoke(self.prev)
|
await ctx.invoke(self.prev)
|
||||||
@@ -265,13 +367,19 @@ class Audio:
|
|||||||
@commands.command(aliases=['resume'])
|
@commands.command(aliases=['resume'])
|
||||||
async def pause(self, ctx):
|
async def pause(self, ctx):
|
||||||
"""Pause and resume."""
|
"""Pause and resume."""
|
||||||
|
dj_enabled = await self.config.guild(ctx.guild).dj_enabled()
|
||||||
if not self._player_check(ctx):
|
if not self._player_check(ctx):
|
||||||
return await self._embed_msg(ctx, 'Nothing playing.')
|
return await self._embed_msg(ctx, 'Nothing playing.')
|
||||||
player = lavalink.get_player(ctx.guild.id)
|
player = lavalink.get_player(ctx.guild.id)
|
||||||
if not ctx.author.voice or ctx.author.voice.channel != player.channel:
|
if ((not ctx.author.voice or ctx.author.voice.channel != player.channel) and not
|
||||||
|
await self._can_instaskip(ctx, ctx.author)):
|
||||||
return await self._embed_msg(ctx, 'You must be in the voice channel to pause the music.')
|
return await self._embed_msg(ctx, 'You must be in the voice channel to pause the music.')
|
||||||
|
if dj_enabled:
|
||||||
|
if not await self._can_instaskip(ctx, ctx.author):
|
||||||
|
return await self._embed_msg(ctx, 'You need the DJ role to pause songs.')
|
||||||
|
|
||||||
if player.current and not player.paused:
|
command = ctx.invoked_with
|
||||||
|
if player.current and not player.paused and command == 'pause':
|
||||||
await player.pause()
|
await player.pause()
|
||||||
embed = discord.Embed(
|
embed = discord.Embed(
|
||||||
colour=ctx.guild.me.top_role.colour, title='Track Paused',
|
colour=ctx.guild.me.top_role.colour, title='Track Paused',
|
||||||
@@ -282,7 +390,7 @@ class Audio:
|
|||||||
)
|
)
|
||||||
return await ctx.send(embed=embed)
|
return await ctx.send(embed=embed)
|
||||||
|
|
||||||
if player.paused:
|
if player.paused and command == 'resume':
|
||||||
await player.pause(False)
|
await player.pause(False)
|
||||||
embed = discord.Embed(
|
embed = discord.Embed(
|
||||||
colour=ctx.guild.me.top_role.colour,
|
colour=ctx.guild.me.top_role.colour,
|
||||||
@@ -294,6 +402,10 @@ class Audio:
|
|||||||
)
|
)
|
||||||
return await ctx.send(embed=embed)
|
return await ctx.send(embed=embed)
|
||||||
|
|
||||||
|
if player.paused and command == 'pause':
|
||||||
|
return await self._embed_msg(ctx, 'Track is paused.')
|
||||||
|
if player.current and command == 'resume':
|
||||||
|
return await self._embed_msg(ctx, 'Track is playing.')
|
||||||
await self._embed_msg(ctx, 'Nothing playing.')
|
await self._embed_msg(ctx, 'Nothing playing.')
|
||||||
|
|
||||||
@commands.command()
|
@commands.command()
|
||||||
@@ -303,7 +415,6 @@ class Audio:
|
|||||||
return await self._embed_msg(ctx, 'Nothing playing.')
|
return await self._embed_msg(ctx, 'Nothing playing.')
|
||||||
player = lavalink.get_player(ctx.guild.id)
|
player = lavalink.get_player(ctx.guild.id)
|
||||||
queue_tracks = player.queue
|
queue_tracks = player.queue
|
||||||
queue_len = len(queue_tracks)
|
|
||||||
requesters = {'total': 0, 'users': {}}
|
requesters = {'total': 0, 'users': {}}
|
||||||
|
|
||||||
async def _usercount(req_username):
|
async def _usercount(req_username):
|
||||||
@@ -340,17 +451,28 @@ class Audio:
|
|||||||
@commands.command(aliases=['p'])
|
@commands.command(aliases=['p'])
|
||||||
async def play(self, ctx, *, query):
|
async def play(self, ctx, *, query):
|
||||||
"""Play a URL or search for a song."""
|
"""Play a URL or search for a song."""
|
||||||
if not ctx.author.voice:
|
dj_enabled = await self.config.guild(ctx.guild).dj_enabled()
|
||||||
return await self._embed_msg(ctx, 'You must be in the voice channel to use the play command.')
|
jukebox_price = await self.config.guild(ctx.guild).jukebox_price()
|
||||||
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())
|
|
||||||
player = lavalink.get_player(ctx.guild.id)
|
|
||||||
shuffle = await self.config.guild(ctx.guild).shuffle()
|
shuffle = await self.config.guild(ctx.guild).shuffle()
|
||||||
|
if not self._player_check(ctx):
|
||||||
|
try:
|
||||||
|
await lavalink.connect(ctx.author.voice.channel)
|
||||||
|
player = lavalink.get_player(ctx.guild.id)
|
||||||
|
player.store('connect', datetime.datetime.utcnow())
|
||||||
|
except AttributeError:
|
||||||
|
return await self._embed_msg(ctx, 'Connect to a voice channel first.')
|
||||||
|
if dj_enabled:
|
||||||
|
if not await self._can_instaskip(ctx, ctx.author):
|
||||||
|
return await self._embed_msg(ctx, 'You need the DJ role to queue songs.')
|
||||||
|
if not await self._currency_check(ctx, jukebox_price):
|
||||||
|
return
|
||||||
|
player = lavalink.get_player(ctx.guild.id)
|
||||||
player.store('channel', ctx.channel.id)
|
player.store('channel', ctx.channel.id)
|
||||||
player.store('guild', ctx.guild.id)
|
player.store('guild', ctx.guild.id)
|
||||||
await self._data_check(ctx)
|
await self._data_check(ctx)
|
||||||
|
if ((not ctx.author.voice or ctx.author.voice.channel != player.channel) and not
|
||||||
|
await self._can_instaskip(ctx, ctx.author)):
|
||||||
|
return await self._embed_msg(ctx, 'You must be in the voice channel to use the play command.')
|
||||||
|
|
||||||
query = query.strip('<>')
|
query = query.strip('<>')
|
||||||
if not query.startswith('http'):
|
if not query.startswith('http'):
|
||||||
@@ -388,9 +510,14 @@ class Audio:
|
|||||||
"""Skips to the start of the previously played track."""
|
"""Skips to the start of the previously played track."""
|
||||||
if not self._player_check(ctx):
|
if not self._player_check(ctx):
|
||||||
return await self._embed_msg(ctx, 'Nothing playing.')
|
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)
|
player = lavalink.get_player(ctx.guild.id)
|
||||||
shuffle = await self.config.guild(ctx.guild).shuffle()
|
shuffle = await self.config.guild(ctx.guild).shuffle()
|
||||||
if not ctx.author.voice or ctx.author.voice.channel != player.channel:
|
if dj_enabled:
|
||||||
|
if not await self._can_instaskip(ctx, ctx.author):
|
||||||
|
return await self._embed_msg(ctx, 'You need the DJ role to skip songs.')
|
||||||
|
if ((not ctx.author.voice or ctx.author.voice.channel != player.channel) and not
|
||||||
|
await self._can_instaskip(ctx, ctx.author)):
|
||||||
return await self._embed_msg(ctx, 'You must be in the voice channel to skip the music.')
|
return await self._embed_msg(ctx, 'You must be in the voice channel to skip the music.')
|
||||||
if shuffle:
|
if shuffle:
|
||||||
return await self._embed_msg(ctx, 'Turn shuffle off to use this command.')
|
return await self._embed_msg(ctx, 'Turn shuffle off to use this command.')
|
||||||
@@ -459,7 +586,6 @@ class Audio:
|
|||||||
|
|
||||||
embed = discord.Embed(colour=ctx.guild.me.top_role.colour, title='Queue for ' + ctx.guild.name,
|
embed = discord.Embed(colour=ctx.guild.me.top_role.colour, title='Queue for ' + ctx.guild.name,
|
||||||
description=queue_list)
|
description=queue_list)
|
||||||
|
|
||||||
queue_duration = await self._queue_duration(ctx)
|
queue_duration = await self._queue_duration(ctx)
|
||||||
queue_total_duration = lavalink.utils.format_time(queue_duration)
|
queue_total_duration = lavalink.utils.format_time(queue_duration)
|
||||||
text = 'Page {}/{} | {} tracks, {} remaining'.format(page, pages, len(player.queue) + 1, queue_total_duration)
|
text = 'Page {}/{} | {} tracks, {} remaining'.format(page, pages, len(player.queue) + 1, queue_total_duration)
|
||||||
@@ -473,29 +599,36 @@ class Audio:
|
|||||||
@commands.command()
|
@commands.command()
|
||||||
async def repeat(self, ctx):
|
async def repeat(self, ctx):
|
||||||
"""Toggles repeat."""
|
"""Toggles repeat."""
|
||||||
repeat_msg = 'You must be in the voice channel to toggle repeat.'
|
dj_enabled = await self.config.guild(ctx.guild).dj_enabled()
|
||||||
if not ctx.author.voice:
|
if dj_enabled:
|
||||||
return await self._embed_msg(ctx, repeat_msg)
|
if not await self._can_instaskip(ctx, ctx.author) and not await self._has_dj_role(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()
|
repeat = await self.config.guild(ctx.guild).repeat()
|
||||||
await self.config.guild(ctx.guild).repeat.set(not repeat)
|
await self.config.guild(ctx.guild).repeat.set(not repeat)
|
||||||
repeat = await self.config.guild(ctx.guild).repeat()
|
repeat = await self.config.guild(ctx.guild).repeat()
|
||||||
await self._embed_msg(ctx, 'Repeat songs: {}.'.format(repeat))
|
|
||||||
|
|
||||||
if self._player_check(ctx):
|
if self._player_check(ctx):
|
||||||
await self._data_check(ctx)
|
await self._data_check(ctx)
|
||||||
player = lavalink.get_player(ctx.guild.id)
|
player = lavalink.get_player(ctx.guild.id)
|
||||||
if ctx.author.voice.channel != player.channel:
|
if ((not ctx.author.voice or ctx.author.voice.channel != player.channel) and not
|
||||||
return await self._embed_msg(ctx, repeat_msg)
|
await self._can_instaskip(ctx, ctx.author)):
|
||||||
|
return await self._embed_msg(ctx, 'You must be in the voice channel to toggle repeat.')
|
||||||
|
await self._embed_msg(ctx, 'Repeat songs: {}.'.format(repeat))
|
||||||
|
|
||||||
@commands.command()
|
@commands.command()
|
||||||
async def remove(self, ctx, index: int):
|
async def remove(self, ctx, index: int):
|
||||||
"""Remove a specific song number from the queue."""
|
"""Remove a specific song number from the queue."""
|
||||||
|
dj_enabled = await self.config.guild(ctx.guild).dj_enabled()
|
||||||
if not self._player_check(ctx):
|
if not self._player_check(ctx):
|
||||||
return await self._embed_msg(ctx, 'Nothing playing.')
|
return await self._embed_msg(ctx, 'Nothing playing.')
|
||||||
player = lavalink.get_player(ctx.guild.id)
|
player = lavalink.get_player(ctx.guild.id)
|
||||||
if not player.queue:
|
if not player.queue:
|
||||||
return await self._embed_msg(ctx, 'Nothing queued.')
|
return await self._embed_msg(ctx, 'Nothing queued.')
|
||||||
|
if dj_enabled:
|
||||||
|
if not await self._can_instaskip(ctx, ctx.author):
|
||||||
|
return await self._embed_msg(ctx, 'You need the DJ role to remove songs.')
|
||||||
|
if ((not ctx.author.voice or ctx.author.voice.channel != player.channel) and not
|
||||||
|
await self._can_instaskip(ctx, ctx.author)):
|
||||||
|
return await self._embed_msg(ctx, 'You must be in the voice channel to manage the queue.')
|
||||||
if index > len(player.queue) or index < 1:
|
if index > len(player.queue) or index < 1:
|
||||||
return await self._embed_msg(ctx, 'Song number must be greater than 1 and within the queue limit.')
|
return await self._embed_msg(ctx, 'Song number must be greater than 1 and within the queue limit.')
|
||||||
index -= 1
|
index -= 1
|
||||||
@@ -507,7 +640,7 @@ class Audio:
|
|||||||
"""Pick a song with a search.
|
"""Pick a song with a search.
|
||||||
Use [p]search list <search term> to queue all songs.
|
Use [p]search list <search term> to queue all songs.
|
||||||
"""
|
"""
|
||||||
expected = ["1⃣", "2⃣", "3⃣", "4⃣", "5⃣"]
|
expected = ("1⃣", "2⃣", "3⃣", "4⃣", "5⃣")
|
||||||
emoji = {
|
emoji = {
|
||||||
"one": "1⃣",
|
"one": "1⃣",
|
||||||
"two": "2⃣",
|
"two": "2⃣",
|
||||||
@@ -515,17 +648,19 @@ class Audio:
|
|||||||
"four": "4⃣",
|
"four": "4⃣",
|
||||||
"five": "5⃣"
|
"five": "5⃣"
|
||||||
}
|
}
|
||||||
if not ctx.author.voice:
|
|
||||||
return await self._embed_msg(ctx, 'You must be in the voice channel to enqueue songs.')
|
|
||||||
if not self._player_check(ctx):
|
if not self._player_check(ctx):
|
||||||
await lavalink.connect(ctx.author.voice.channel)
|
try:
|
||||||
player = lavalink.get_player(ctx.guild.id)
|
await lavalink.connect(ctx.author.voice.channel)
|
||||||
player.store('connect', datetime.datetime.utcnow())
|
player = lavalink.get_player(ctx.guild.id)
|
||||||
|
player.store('connect', datetime.datetime.utcnow())
|
||||||
|
except AttributeError:
|
||||||
|
return await self._embed_msg(ctx, 'Connect to a voice channel first.')
|
||||||
player = lavalink.get_player(ctx.guild.id)
|
player = lavalink.get_player(ctx.guild.id)
|
||||||
shuffle = await self.config.guild(ctx.guild).shuffle()
|
shuffle = await self.config.guild(ctx.guild).shuffle()
|
||||||
player.store('channel', ctx.channel.id)
|
player.store('channel', ctx.channel.id)
|
||||||
player.store('guild', ctx.guild.id)
|
player.store('guild', ctx.guild.id)
|
||||||
if ctx.author.voice.channel != player.channel:
|
if ((not ctx.author.voice or ctx.author.voice.channel != player.channel) and not
|
||||||
|
await self._can_instaskip(ctx, ctx.author)):
|
||||||
return await self._embed_msg(ctx, 'You must be in the voice channel to enqueue songs.')
|
return await self._embed_msg(ctx, 'You must be in the voice channel to enqueue songs.')
|
||||||
|
|
||||||
query = query.strip('<>')
|
query = query.strip('<>')
|
||||||
@@ -552,6 +687,10 @@ class Audio:
|
|||||||
embed = discord.Embed(colour=ctx.guild.me.top_role.colour, title='Tracks Found:', description=search_list)
|
embed = discord.Embed(colour=ctx.guild.me.top_role.colour, title='Tracks Found:', description=search_list)
|
||||||
embed.set_footer(text='Page {}/{} | {} search results'.format(page, pages, len(tracks)))
|
embed.set_footer(text='Page {}/{} | {} search results'.format(page, pages, len(tracks)))
|
||||||
message = await ctx.send(embed=embed)
|
message = await ctx.send(embed=embed)
|
||||||
|
dj_enabled = await self.config.guild(ctx.guild).dj_enabled()
|
||||||
|
if dj_enabled:
|
||||||
|
if not await self._can_instaskip(ctx, ctx.author):
|
||||||
|
return
|
||||||
|
|
||||||
def check(r, u):
|
def check(r, u):
|
||||||
return r.message.id == message.id and u == ctx.message.author
|
return r.message.id == message.id and u == ctx.message.author
|
||||||
@@ -584,8 +723,11 @@ class Audio:
|
|||||||
|
|
||||||
async def _search_button(self, ctx, message, tracks, entry: int):
|
async def _search_button(self, ctx, message, tracks, entry: int):
|
||||||
player = lavalink.get_player(ctx.guild.id)
|
player = lavalink.get_player(ctx.guild.id)
|
||||||
|
jukebox_price = await self.config.guild(ctx.guild).jukebox_price()
|
||||||
shuffle = await self.config.guild(ctx.guild).shuffle()
|
shuffle = await self.config.guild(ctx.guild).shuffle()
|
||||||
await self._clear_react(message)
|
await self._clear_react(message)
|
||||||
|
if not await self._currency_check(ctx, jukebox_price):
|
||||||
|
return
|
||||||
search_choice = tracks[entry]
|
search_choice = tracks[entry]
|
||||||
embed = discord.Embed(colour=ctx.guild.me.top_role.colour, title='Track Enqueued',
|
embed = discord.Embed(colour=ctx.guild.me.top_role.colour, title='Track Enqueued',
|
||||||
description='**[{}]({})**'.format(search_choice.title, search_choice.uri))
|
description='**[{}]({})**'.format(search_choice.title, search_choice.uri))
|
||||||
@@ -601,11 +743,16 @@ class Audio:
|
|||||||
@commands.command()
|
@commands.command()
|
||||||
async def seek(self, ctx, seconds: int=30):
|
async def seek(self, ctx, seconds: int=30):
|
||||||
"""Seeks ahead or behind on a track by seconds."""
|
"""Seeks ahead or behind on a track by seconds."""
|
||||||
|
dj_enabled = await self.config.guild(ctx.guild).dj_enabled()
|
||||||
if not self._player_check(ctx):
|
if not self._player_check(ctx):
|
||||||
return await self._embed_msg(ctx, 'Nothing playing.')
|
return await self._embed_msg(ctx, 'Nothing playing.')
|
||||||
player = lavalink.get_player(ctx.guild.id)
|
player = lavalink.get_player(ctx.guild.id)
|
||||||
if not ctx.author.voice or ctx.author.voice.channel != player.channel:
|
if ((not ctx.author.voice or ctx.author.voice.channel != player.channel) and not
|
||||||
|
await self._can_instaskip(ctx, ctx.author)):
|
||||||
return await self._embed_msg(ctx, 'You must be in the voice channel to use seek.')
|
return await self._embed_msg(ctx, 'You must be in the voice channel to use seek.')
|
||||||
|
if dj_enabled:
|
||||||
|
if not await self._can_instaskip(ctx, ctx.author):
|
||||||
|
return await self._embed_msg(ctx, 'You need the DJ role to use seek.')
|
||||||
if player.current:
|
if player.current:
|
||||||
if player.current.is_stream:
|
if player.current.is_stream:
|
||||||
return await self._embed_msg(ctx, 'Can\'t seek on a stream.')
|
return await self._embed_msg(ctx, 'Can\'t seek on a stream.')
|
||||||
@@ -618,37 +765,110 @@ class Audio:
|
|||||||
await self._embed_msg(ctx, 'Moved {}s to {}'.format(seconds, lavalink.utils.format_time(seek)))
|
await self._embed_msg(ctx, 'Moved {}s to {}'.format(seconds, lavalink.utils.format_time(seek)))
|
||||||
return await player.seek(seek)
|
return await player.seek(seek)
|
||||||
else:
|
else:
|
||||||
await self._embed_msg(ctx, 'Nothing playing.')
|
await self._embed_msg(ctx, 'Nothing playing.')
|
||||||
|
|
||||||
@commands.command()
|
@commands.command()
|
||||||
async def shuffle(self, ctx):
|
async def shuffle(self, ctx):
|
||||||
"""Toggles shuffle."""
|
"""Toggles shuffle."""
|
||||||
shuffle_msg = 'You must be in the voice channel to toggle shuffle.'
|
dj_enabled = await self.config.guild(ctx.guild).dj_enabled()
|
||||||
if not ctx.author.voice:
|
if dj_enabled:
|
||||||
return await self._embed_msg(ctx, shuffle_msg)
|
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()
|
shuffle = await self.config.guild(ctx.guild).shuffle()
|
||||||
await self.config.guild(ctx.guild).shuffle.set(not shuffle)
|
await self.config.guild(ctx.guild).shuffle.set(not shuffle)
|
||||||
shuffle = await self.config.guild(ctx.guild).shuffle()
|
shuffle = await self.config.guild(ctx.guild).shuffle()
|
||||||
await self._embed_msg(ctx, 'Shuffle songs: {}.'.format(shuffle))
|
|
||||||
|
|
||||||
if self._player_check(ctx):
|
if self._player_check(ctx):
|
||||||
await self._data_check(ctx)
|
await self._data_check(ctx)
|
||||||
player = lavalink.get_player(ctx.guild.id)
|
player = lavalink.get_player(ctx.guild.id)
|
||||||
if ctx.author.voice.channel != player.channel:
|
if ((not ctx.author.voice or ctx.author.voice.channel != player.channel) and not
|
||||||
return await self._embed_msg(ctx, shuffle_msg)
|
await self._can_instaskip(ctx, ctx.author)):
|
||||||
|
return await self._embed_msg(ctx, 'You must be in the voice channel to toggle shuffle.')
|
||||||
|
await self._embed_msg(ctx, 'Shuffle songs: {}.'.format(shuffle))
|
||||||
|
|
||||||
@commands.command(aliases=['forceskip', 'fs'])
|
@commands.command(aliases=['forceskip', 'fs'])
|
||||||
async def skip(self, ctx):
|
async def skip(self, ctx):
|
||||||
"""Skips to the next track."""
|
"""Skips to the next track."""
|
||||||
if not self._player_check(ctx):
|
if not self._player_check(ctx):
|
||||||
return await self._embed_msg(ctx, 'Nothing playing.')
|
return await self._embed_msg(ctx, 'Nothing playing.')
|
||||||
|
player = lavalink.get_player(ctx.guild.id)
|
||||||
|
if ((not ctx.author.voice or ctx.author.voice.channel != player.channel) and not
|
||||||
|
await self._can_instaskip(ctx, ctx.author)):
|
||||||
|
return await self._embed_msg(ctx, 'You must be in the voice channel to skip the music.')
|
||||||
|
dj_enabled = await self.config.guild(ctx.guild).dj_enabled()
|
||||||
|
vote_enabled = await self.config.guild(ctx.guild).vote_enabled()
|
||||||
|
if dj_enabled and not vote_enabled and not await self._can_instaskip(ctx, ctx.author):
|
||||||
|
if not await self._can_instaskip(ctx, ctx.author):
|
||||||
|
return await self._embed_msg(ctx, 'You need the DJ role to skip songs.')
|
||||||
|
if vote_enabled:
|
||||||
|
if not await self._can_instaskip(ctx, ctx.author):
|
||||||
|
if ctx.author.id in self.skip_votes[ctx.message.guild]:
|
||||||
|
self.skip_votes[ctx.message.guild].remove(ctx.author.id)
|
||||||
|
reply = "I removed your vote to skip."
|
||||||
|
else:
|
||||||
|
self.skip_votes[ctx.message.guild].append(ctx.author.id)
|
||||||
|
reply = "You voted to skip."
|
||||||
|
|
||||||
|
num_votes = len(self.skip_votes[ctx.message.guild])
|
||||||
|
vote_mods = []
|
||||||
|
for member in player.channel.members:
|
||||||
|
can_skip = await self._can_instaskip(ctx, member)
|
||||||
|
if can_skip:
|
||||||
|
vote_mods.append(member)
|
||||||
|
num_members = len(player.channel.members) - len(vote_mods)
|
||||||
|
vote = int(100 * num_votes / num_members)
|
||||||
|
percent = await self.config.guild(ctx.guild).vote_percent()
|
||||||
|
if vote >= percent:
|
||||||
|
self.skip_votes[ctx.message.guild] = []
|
||||||
|
await self._embed_msg(ctx, "Vote threshold met.")
|
||||||
|
return await self._skip_action(ctx)
|
||||||
|
else:
|
||||||
|
reply += " Votes: %d/%d" % (num_votes, num_members)
|
||||||
|
reply += " (%d%% out of %d%% needed)" % (vote, percent)
|
||||||
|
return await self._embed_msg(ctx, reply)
|
||||||
|
else:
|
||||||
|
return await self._skip_action(ctx)
|
||||||
else:
|
else:
|
||||||
player = lavalink.get_player(ctx.guild.id)
|
return await self._skip_action(ctx)
|
||||||
|
|
||||||
if not player.current:
|
async def _can_instaskip(self, ctx, member):
|
||||||
return await self._embed_msg(ctx, 'There\'s nothing in the queue.')
|
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
|
||||||
|
try:
|
||||||
|
nonbots = sum(not m.bot for m in ctx.guild.get_member(member.id).voice.channel.members)
|
||||||
|
except AttributeError:
|
||||||
|
if ctx.guild.get_member(self.bot.user.id).voice is not None:
|
||||||
|
nonbots = sum(not m.bot for m in ctx.guild.get_member(self.bot.user.id).voice.channel.members)
|
||||||
|
if nonbots == 1:
|
||||||
|
nonbots = 2
|
||||||
|
else:
|
||||||
|
nonbots = 2
|
||||||
|
alone = nonbots <= 1
|
||||||
|
|
||||||
|
return is_active_dj or is_owner or is_server_owner or is_coowner or is_admin or is_mod or is_bot or alone
|
||||||
|
|
||||||
|
async def _has_dj_role(self, ctx, member):
|
||||||
|
dj_role_id = await self.config.guild(ctx.guild).dj_role()
|
||||||
|
dj_role_obj = discord.utils.get(ctx.guild.roles, id=dj_role_id)
|
||||||
|
if dj_role_obj in ctx.guild.get_member(member.id).roles:
|
||||||
|
return True
|
||||||
|
else:
|
||||||
|
return False
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
async def _skip_action(ctx):
|
||||||
|
player = lavalink.get_player(ctx.guild.id)
|
||||||
if not player.queue:
|
if not player.queue:
|
||||||
pos, dur = player.position, player.current.length
|
pos, dur = player.position, player.current.length
|
||||||
time_remain = lavalink.utils.format_time(dur - pos)
|
time_remain = lavalink.utils.format_time(dur - pos)
|
||||||
@@ -660,9 +880,6 @@ class Audio:
|
|||||||
embed.set_footer(text='{} left on {}'.format(time_remain, player.current.title))
|
embed.set_footer(text='{} left on {}'.format(time_remain, player.current.title))
|
||||||
return await ctx.send(embed=embed)
|
return await ctx.send(embed=embed)
|
||||||
|
|
||||||
if not ctx.author.voice or ctx.author.voice.channel != player.channel:
|
|
||||||
return await self._embed_msg(ctx, 'You must be in the voice channel to skip the music.')
|
|
||||||
|
|
||||||
embed = discord.Embed(
|
embed = discord.Embed(
|
||||||
colour=ctx.guild.me.top_role.colour, title='Track Skipped',
|
colour=ctx.guild.me.top_role.colour, title='Track Skipped',
|
||||||
description='**[{}]({})**'.format(
|
description='**[{}]({})**'.format(
|
||||||
@@ -670,17 +887,25 @@ class Audio:
|
|||||||
)
|
)
|
||||||
)
|
)
|
||||||
await ctx.send(embed=embed)
|
await ctx.send(embed=embed)
|
||||||
|
|
||||||
await player.skip()
|
await player.skip()
|
||||||
|
|
||||||
@commands.command(aliases=['s'])
|
@commands.command(aliases=['s'])
|
||||||
async def stop(self, ctx):
|
async def stop(self, ctx):
|
||||||
"""Stops playback and clears the queue."""
|
"""Stops playback and clears the queue."""
|
||||||
|
dj_enabled = await self.config.guild(ctx.guild).dj_enabled()
|
||||||
|
vote_enabled = await self.config.guild(ctx.guild).vote_enabled()
|
||||||
if not self._player_check(ctx):
|
if not self._player_check(ctx):
|
||||||
return await self._embed_msg(ctx, 'Nothing playing.')
|
return await self._embed_msg(ctx, 'Nothing playing.')
|
||||||
player = lavalink.get_player(ctx.guild.id)
|
player = lavalink.get_player(ctx.guild.id)
|
||||||
if not ctx.author.voice or ctx.author.voice.channel != player.channel:
|
if ((not ctx.author.voice or ctx.author.voice.channel != player.channel) and not
|
||||||
|
await self._can_instaskip(ctx, ctx.author)):
|
||||||
return await self._embed_msg(ctx, 'You must be in the voice channel to stop the music.')
|
return await self._embed_msg(ctx, 'You must be in the voice channel to stop the music.')
|
||||||
|
if vote_enabled or vote_enabled and dj_enabled:
|
||||||
|
if not await self._can_instaskip(ctx, ctx.author):
|
||||||
|
return await self._embed_msg(ctx, 'There are other people listening - vote to skip instead.')
|
||||||
|
if dj_enabled and not vote_enabled:
|
||||||
|
if not await self._can_instaskip(ctx, ctx.author):
|
||||||
|
return await self._embed_msg(ctx, 'You need the DJ role to stop the music.')
|
||||||
if player.is_playing:
|
if player.is_playing:
|
||||||
await self._embed_msg(ctx, 'Stopping...')
|
await self._embed_msg(ctx, 'Stopping...')
|
||||||
await player.stop()
|
await player.stop()
|
||||||
@@ -692,6 +917,7 @@ class Audio:
|
|||||||
@commands.command()
|
@commands.command()
|
||||||
async def volume(self, ctx, vol: int=None):
|
async def volume(self, ctx, vol: int=None):
|
||||||
"""Sets the volume, 1% - 150%."""
|
"""Sets the volume, 1% - 150%."""
|
||||||
|
dj_enabled = await self.config.guild(ctx.guild).dj_enabled()
|
||||||
if not vol:
|
if not vol:
|
||||||
vol = await self.config.guild(ctx.guild).volume()
|
vol = await self.config.guild(ctx.guild).volume()
|
||||||
embed = discord.Embed(colour=ctx.guild.me.top_role.colour, title='Current Volume:',
|
embed = discord.Embed(colour=ctx.guild.me.top_role.colour, title='Current Volume:',
|
||||||
@@ -699,14 +925,22 @@ class Audio:
|
|||||||
if not self._player_check(ctx):
|
if not self._player_check(ctx):
|
||||||
embed.set_footer(text='Nothing playing.')
|
embed.set_footer(text='Nothing playing.')
|
||||||
return await ctx.send(embed=embed)
|
return await ctx.send(embed=embed)
|
||||||
|
if self._player_check(ctx):
|
||||||
|
player = lavalink.get_player(ctx.guild.id)
|
||||||
|
if ((not ctx.author.voice or ctx.author.voice.channel != player.channel) and not
|
||||||
|
await self._can_instaskip(ctx, ctx.author)):
|
||||||
|
return await self._embed_msg(ctx, 'You must be in the voice channel to change the volume.')
|
||||||
|
if dj_enabled:
|
||||||
|
if not await self._can_instaskip(ctx, ctx.author) and not await self._has_dj_role(ctx, ctx.author):
|
||||||
|
return await self._embed_msg(ctx, 'You need the DJ role to change the volume.')
|
||||||
if vol > 150:
|
if vol > 150:
|
||||||
vol = 150
|
vol = 150
|
||||||
await self.config.guild(ctx.guild).volume.set(vol)
|
await self.config.guild(ctx.guild).volume.set(vol)
|
||||||
if self._player_check:
|
if self._player_check(ctx):
|
||||||
await lavalink.get_player(ctx.guild.id).set_volume(vol)
|
await lavalink.get_player(ctx.guild.id).set_volume(vol)
|
||||||
else:
|
else:
|
||||||
await self.config.guild(ctx.guild).volume.set(vol)
|
await self.config.guild(ctx.guild).volume.set(vol)
|
||||||
if self._player_check:
|
if self._player_check(ctx):
|
||||||
await lavalink.get_player(ctx.guild.id).set_volume(vol)
|
await lavalink.get_player(ctx.guild.id).set_volume(vol)
|
||||||
embed = discord.Embed(colour=ctx.guild.me.top_role.colour, title='Volume:',
|
embed = discord.Embed(colour=ctx.guild.me.top_role.colour, title='Volume:',
|
||||||
description=str(vol) + '%')
|
description=str(vol) + '%')
|
||||||
@@ -725,36 +959,46 @@ class Audio:
|
|||||||
async def host(self, ctx, host):
|
async def host(self, ctx, host):
|
||||||
"""Set the lavalink server host."""
|
"""Set the lavalink server host."""
|
||||||
await self.config.host.set(host)
|
await self.config.host.set(host)
|
||||||
get_host = await self.config.host()
|
await self._embed_msg(ctx, 'Host set to {}.'.format(host))
|
||||||
await self._embed_msg(ctx, 'Host set to {}.'.format(get_host))
|
|
||||||
|
|
||||||
@llsetup.command()
|
@llsetup.command()
|
||||||
async def password(self, ctx, passw):
|
async def password(self, ctx, passw):
|
||||||
"""Set the lavalink server password."""
|
"""Set the lavalink server password."""
|
||||||
await self.config.passw.set(str(passw))
|
await self.config.passw.set(str(passw))
|
||||||
get_passw = await self.config.passw()
|
await self._embed_msg(ctx, 'Server password set to {}.'.format(passw))
|
||||||
await self._embed_msg(ctx, 'Server password set to {}.'.format(get_passw))
|
|
||||||
|
|
||||||
@llsetup.command()
|
@llsetup.command()
|
||||||
async def restport(self, ctx, rest_port):
|
async def restport(self, ctx, rest_port):
|
||||||
"""Set the lavalink REST server port."""
|
"""Set the lavalink REST server port."""
|
||||||
await self.config.rest_port.set(str(rest_port))
|
await self.config.rest_port.set(str(rest_port))
|
||||||
get_rest_port = await self.config.rest_port()
|
await self._embed_msg(ctx, 'REST port set to {}.'.format(rest_port))
|
||||||
await self._embed_msg(ctx, 'REST port set to {}.'.format(get_rest_port))
|
|
||||||
|
|
||||||
@llsetup.command()
|
@llsetup.command()
|
||||||
async def wsport(self, ctx, rest_port):
|
async def wsport(self, ctx, rest_port):
|
||||||
"""Set the lavalink websocket server port."""
|
"""Set the lavalink websocket server port."""
|
||||||
await self.config.ws_port.set(str(ws_port))
|
await self.config.ws_port.set(str(ws_port))
|
||||||
get_rest_port = await self.config.ws_port()
|
await self._embed_msg(ctx, 'Websocket port set to {}.'.format(ws_port))
|
||||||
await self._embed_msg(ctx, 'Websocket port set to {}.'.format(get_ws_port))
|
|
||||||
|
|
||||||
async def _clear_react(self, message):
|
@staticmethod
|
||||||
|
async def _clear_react(message):
|
||||||
try:
|
try:
|
||||||
await message.clear_reactions()
|
await message.clear_reactions()
|
||||||
except:
|
except (discord.Forbidden, discord.HTTPException):
|
||||||
return
|
return
|
||||||
|
|
||||||
|
async def _currency_check(self, ctx, jukebox_price: int):
|
||||||
|
jukebox = await self.config.guild(ctx.guild).jukebox()
|
||||||
|
if jukebox and not await self._can_instaskip(ctx, ctx.author):
|
||||||
|
try:
|
||||||
|
await bank.withdraw_credits(ctx.author, jukebox_price)
|
||||||
|
return True
|
||||||
|
except ValueError:
|
||||||
|
credits_name = await bank.get_currency_name(ctx.guild)
|
||||||
|
await self._embed_msg(ctx, 'Not enough {} ({} required).'.format(credits_name, jukebox_price))
|
||||||
|
return False
|
||||||
|
else:
|
||||||
|
return True
|
||||||
|
|
||||||
async def _data_check(self, ctx):
|
async def _data_check(self, ctx):
|
||||||
player = lavalink.get_player(ctx.guild.id)
|
player = lavalink.get_player(ctx.guild.id)
|
||||||
shuffle = await self.config.guild(ctx.guild).shuffle()
|
shuffle = await self.config.guild(ctx.guild).shuffle()
|
||||||
@@ -787,7 +1031,8 @@ class Audio:
|
|||||||
msg += bar
|
msg += bar
|
||||||
return msg
|
return msg
|
||||||
|
|
||||||
def _dynamic_time(self, time):
|
@staticmethod
|
||||||
|
def _dynamic_time(time):
|
||||||
m, s = divmod(time, 60)
|
m, s = divmod(time, 60)
|
||||||
h, m = divmod(m, 60)
|
h, m = divmod(m, 60)
|
||||||
d, h = divmod(h, 24)
|
d, h = divmod(h, 24)
|
||||||
@@ -800,9 +1045,12 @@ class Audio:
|
|||||||
msg = "{2}m {3}s"
|
msg = "{2}m {3}s"
|
||||||
elif d == 0 and h == 0 and m == 0 and s > 0:
|
elif d == 0 and h == 0 and m == 0 and s > 0:
|
||||||
msg = "{3}s"
|
msg = "{3}s"
|
||||||
|
else:
|
||||||
|
msg = ""
|
||||||
return msg.format(d, h, m, s)
|
return msg.format(d, h, m, s)
|
||||||
|
|
||||||
async def _embed_msg(self, ctx, title):
|
@staticmethod
|
||||||
|
async def _embed_msg(ctx, title):
|
||||||
embed = discord.Embed(colour=ctx.guild.me.top_role.colour, title=title)
|
embed = discord.Embed(colour=ctx.guild.me.top_role.colour, title=title)
|
||||||
await ctx.send(embed=embed)
|
await ctx.send(embed=embed)
|
||||||
|
|
||||||
@@ -813,14 +1061,15 @@ class Audio:
|
|||||||
else:
|
else:
|
||||||
return 0
|
return 0
|
||||||
|
|
||||||
async def _queue_duration(self, ctx):
|
@staticmethod
|
||||||
|
async def _queue_duration(ctx):
|
||||||
player = lavalink.get_player(ctx.guild.id)
|
player = lavalink.get_player(ctx.guild.id)
|
||||||
duration = []
|
duration = []
|
||||||
for i in range(len(player.queue)):
|
for i in range(len(player.queue)):
|
||||||
if not player.queue[i].is_stream:
|
if not player.queue[i].is_stream:
|
||||||
duration.append(player.queue[i].length)
|
duration.append(player.queue[i].length)
|
||||||
queue_duration = sum(duration)
|
queue_duration = sum(duration)
|
||||||
if player.queue == []:
|
if not player.queue:
|
||||||
queue_duration = 0
|
queue_duration = 0
|
||||||
try:
|
try:
|
||||||
if not player.current.is_stream:
|
if not player.current.is_stream:
|
||||||
@@ -832,13 +1081,21 @@ class Audio:
|
|||||||
queue_total_duration = remain + queue_duration
|
queue_total_duration = remain + queue_duration
|
||||||
return queue_total_duration
|
return queue_total_duration
|
||||||
|
|
||||||
def _player_check(self, ctx):
|
@staticmethod
|
||||||
|
def _player_check(ctx):
|
||||||
try:
|
try:
|
||||||
lavalink.get_player(ctx.guild.id)
|
lavalink.get_player(ctx.guild.id)
|
||||||
return True
|
return True
|
||||||
except KeyError:
|
except KeyError:
|
||||||
return False
|
return False
|
||||||
|
|
||||||
|
async def on_voice_state_update(self, member, before, after):
|
||||||
|
if after.channel != before.channel:
|
||||||
|
try:
|
||||||
|
self.skip_votes[before.channel.guild].remove(member.id)
|
||||||
|
except (ValueError, KeyError, AttributeError):
|
||||||
|
pass
|
||||||
|
|
||||||
def __unload(self):
|
def __unload(self):
|
||||||
lavalink.unregister_event_listener(self.event_handler)
|
lavalink.unregister_event_listener(self.event_handler)
|
||||||
self.bot.loop.create_task(lavalink.close())
|
self.bot.loop.create_task(lavalink.close())
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: red-discordbot\n"
|
"Project-Id-Version: red-discordbot\n"
|
||||||
"POT-Creation-Date: 2018-02-18 14:42+AKST\n"
|
"POT-Creation-Date: 2018-02-18 14:42+AKST\n"
|
||||||
"PO-Revision-Date: 2018-02-25 21:33-0500\n"
|
"PO-Revision-Date: 2018-02-27 01:49-0500\n"
|
||||||
"Last-Translator: Kowlin <boxedpp@gmail.com>\n"
|
"Last-Translator: Kowlin <boxedpp@gmail.com>\n"
|
||||||
"Language-Team: German\n"
|
"Language-Team: German\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
@@ -18,11 +18,11 @@ msgstr ""
|
|||||||
|
|
||||||
#: ../audio.py:25 ../audio.py:45
|
#: ../audio.py:25 ../audio.py:45
|
||||||
msgid "Join a voice channel first!"
|
msgid "Join a voice channel first!"
|
||||||
msgstr "Du musst zuerst einem Sprach Kanal beitreten!"
|
msgstr "Tritt zuerst einem Sprachkanal bei!"
|
||||||
|
|
||||||
#: ../audio.py:33
|
#: ../audio.py:33
|
||||||
msgid "Let's play a file that exists pls"
|
msgid "Let's play a file that exists pls"
|
||||||
msgstr "Lassen Sie uns eine Datei spielen, die es gibt"
|
msgstr "Lass uns eine Datei abspielen, die vorhanden ist"
|
||||||
|
|
||||||
#: ../audio.py:38 ../audio.py:58
|
#: ../audio.py:38 ../audio.py:58
|
||||||
msgid "{} is playing a song..."
|
msgid "{} is playing a song..."
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: red-discordbot\n"
|
"Project-Id-Version: red-discordbot\n"
|
||||||
"POT-Creation-Date: 2018-02-18 14:42+AKST\n"
|
"POT-Creation-Date: 2018-02-18 14:42+AKST\n"
|
||||||
"PO-Revision-Date: 2018-02-25 21:34-0500\n"
|
"PO-Revision-Date: 2018-04-02 19:27-0400\n"
|
||||||
"Last-Translator: Kowlin <boxedpp@gmail.com>\n"
|
"Last-Translator: Kowlin <boxedpp@gmail.com>\n"
|
||||||
"Language-Team: Pirate English\n"
|
"Language-Team: Pirate English\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
@@ -18,7 +18,7 @@ msgstr ""
|
|||||||
|
|
||||||
#: ../audio.py:25 ../audio.py:45
|
#: ../audio.py:25 ../audio.py:45
|
||||||
msgid "Join a voice channel first!"
|
msgid "Join a voice channel first!"
|
||||||
msgstr ""
|
msgstr "Aye! Ye need to sail y'ur ship first!"
|
||||||
|
|
||||||
#: ../audio.py:33
|
#: ../audio.py:33
|
||||||
msgid "Let's play a file that exists pls"
|
msgid "Let's play a file that exists pls"
|
||||||
@@ -26,17 +26,17 @@ msgstr ""
|
|||||||
|
|
||||||
#: ../audio.py:38 ../audio.py:58
|
#: ../audio.py:38 ../audio.py:58
|
||||||
msgid "{} is playing a song..."
|
msgid "{} is playing a song..."
|
||||||
msgstr ""
|
msgstr "{} be dancing to Shanty..."
|
||||||
|
|
||||||
#: ../audio.py:48
|
#: ../audio.py:48
|
||||||
msgid "Youtube links pls"
|
msgid "Youtube links pls"
|
||||||
msgstr ""
|
msgstr "Aye! A rope to youtube is required!"
|
||||||
|
|
||||||
#: ../audio.py:67 ../audio.py:77 ../audio.py:87 ../audio.py:97
|
#: ../audio.py:67 ../audio.py:77 ../audio.py:87 ../audio.py:97
|
||||||
msgid "I'm not even connected to a voice channel!"
|
msgid "I'm not even connected to a voice channel!"
|
||||||
msgstr ""
|
msgstr "Aye! I never boarded ye ship!"
|
||||||
|
|
||||||
#: ../audio.py:95
|
#: ../audio.py:95
|
||||||
msgid "Volume set."
|
msgid "Volume set."
|
||||||
msgstr ""
|
msgstr "Aye, shouting voice changed."
|
||||||
|
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: red-discordbot\n"
|
"Project-Id-Version: red-discordbot\n"
|
||||||
"POT-Creation-Date: 2018-02-18 14:42+AKST\n"
|
"POT-Creation-Date: 2018-02-18 14:42+AKST\n"
|
||||||
"PO-Revision-Date: 2018-02-25 21:34-0500\n"
|
"PO-Revision-Date: 2018-04-02 19:27-0400\n"
|
||||||
"Last-Translator: Kowlin <boxedpp@gmail.com>\n"
|
"Last-Translator: Kowlin <boxedpp@gmail.com>\n"
|
||||||
"Language-Team: Indonesian\n"
|
"Language-Team: Indonesian\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
@@ -18,25 +18,25 @@ msgstr ""
|
|||||||
|
|
||||||
#: ../audio.py:25 ../audio.py:45
|
#: ../audio.py:25 ../audio.py:45
|
||||||
msgid "Join a voice channel first!"
|
msgid "Join a voice channel first!"
|
||||||
msgstr ""
|
msgstr "Bergabung dengan channel suara dulu!"
|
||||||
|
|
||||||
#: ../audio.py:33
|
#: ../audio.py:33
|
||||||
msgid "Let's play a file that exists pls"
|
msgid "Let's play a file that exists pls"
|
||||||
msgstr ""
|
msgstr "Tolong memutar file yang ada"
|
||||||
|
|
||||||
#: ../audio.py:38 ../audio.py:58
|
#: ../audio.py:38 ../audio.py:58
|
||||||
msgid "{} is playing a song..."
|
msgid "{} is playing a song..."
|
||||||
msgstr ""
|
msgstr "{} sedang memainkan sebuah lagu..."
|
||||||
|
|
||||||
#: ../audio.py:48
|
#: ../audio.py:48
|
||||||
msgid "Youtube links pls"
|
msgid "Youtube links pls"
|
||||||
msgstr ""
|
msgstr "Link YouTube"
|
||||||
|
|
||||||
#: ../audio.py:67 ../audio.py:77 ../audio.py:87 ../audio.py:97
|
#: ../audio.py:67 ../audio.py:77 ../audio.py:87 ../audio.py:97
|
||||||
msgid "I'm not even connected to a voice channel!"
|
msgid "I'm not even connected to a voice channel!"
|
||||||
msgstr ""
|
msgstr "Saya belum memasuki channel suara!"
|
||||||
|
|
||||||
#: ../audio.py:95
|
#: ../audio.py:95
|
||||||
msgid "Volume set."
|
msgid "Volume set."
|
||||||
msgstr ""
|
msgstr "Suara telah di atur."
|
||||||
|
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: red-discordbot\n"
|
"Project-Id-Version: red-discordbot\n"
|
||||||
"POT-Creation-Date: 2018-02-18 14:42+AKST\n"
|
"POT-Creation-Date: 2018-02-18 14:42+AKST\n"
|
||||||
"PO-Revision-Date: 2018-02-25 21:33-0500\n"
|
"PO-Revision-Date: 2018-04-02 19:26-0400\n"
|
||||||
"Last-Translator: Kowlin <boxedpp@gmail.com>\n"
|
"Last-Translator: Kowlin <boxedpp@gmail.com>\n"
|
||||||
"Language-Team: Korean\n"
|
"Language-Team: Korean\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
@@ -18,25 +18,25 @@ msgstr ""
|
|||||||
|
|
||||||
#: ../audio.py:25 ../audio.py:45
|
#: ../audio.py:25 ../audio.py:45
|
||||||
msgid "Join a voice channel first!"
|
msgid "Join a voice channel first!"
|
||||||
msgstr ""
|
msgstr "커맨드를 사용하기 전에 음성 채널에 접속해야 해요!"
|
||||||
|
|
||||||
#: ../audio.py:33
|
#: ../audio.py:33
|
||||||
msgid "Let's play a file that exists pls"
|
msgid "Let's play a file that exists pls"
|
||||||
msgstr ""
|
msgstr "파일을 재생해볼게요!"
|
||||||
|
|
||||||
#: ../audio.py:38 ../audio.py:58
|
#: ../audio.py:38 ../audio.py:58
|
||||||
msgid "{} is playing a song..."
|
msgid "{} is playing a song..."
|
||||||
msgstr ""
|
msgstr "{}이(가) 음악을 재생하는 중..."
|
||||||
|
|
||||||
#: ../audio.py:48
|
#: ../audio.py:48
|
||||||
msgid "Youtube links pls"
|
msgid "Youtube links pls"
|
||||||
msgstr ""
|
msgstr "유튜브 링크를 부탁해요!"
|
||||||
|
|
||||||
#: ../audio.py:67 ../audio.py:77 ../audio.py:87 ../audio.py:97
|
#: ../audio.py:67 ../audio.py:77 ../audio.py:87 ../audio.py:97
|
||||||
msgid "I'm not even connected to a voice channel!"
|
msgid "I'm not even connected to a voice channel!"
|
||||||
msgstr ""
|
msgstr "제가 음성 채널에 접속할 수 없어요!"
|
||||||
|
|
||||||
#: ../audio.py:95
|
#: ../audio.py:95
|
||||||
msgid "Volume set."
|
msgid "Volume set."
|
||||||
msgstr ""
|
msgstr "음량이 변경됐어요."
|
||||||
|
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: red-discordbot\n"
|
"Project-Id-Version: red-discordbot\n"
|
||||||
"POT-Creation-Date: 2018-02-18 14:42+AKST\n"
|
"POT-Creation-Date: 2018-02-18 14:42+AKST\n"
|
||||||
"PO-Revision-Date: 2018-02-25 21:33-0500\n"
|
"PO-Revision-Date: 2018-04-02 19:27-0400\n"
|
||||||
"Last-Translator: Kowlin <boxedpp@gmail.com>\n"
|
"Last-Translator: Kowlin <boxedpp@gmail.com>\n"
|
||||||
"Language-Team: Dutch\n"
|
"Language-Team: Dutch\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: red-discordbot\n"
|
"Project-Id-Version: red-discordbot\n"
|
||||||
"POT-Creation-Date: 2018-02-18 14:42+AKST\n"
|
"POT-Creation-Date: 2018-02-18 14:42+AKST\n"
|
||||||
"PO-Revision-Date: 2018-02-25 21:33-0500\n"
|
"PO-Revision-Date: 2018-04-02 19:27-0400\n"
|
||||||
"Last-Translator: Kowlin <boxedpp@gmail.com>\n"
|
"Last-Translator: Kowlin <boxedpp@gmail.com>\n"
|
||||||
"Language-Team: Russian\n"
|
"Language-Team: Russian\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
import discord
|
import discord
|
||||||
|
from redbot.core.utils.chat_formatting import box
|
||||||
|
|
||||||
from redbot.core import checks, bank
|
from redbot.core import checks, bank
|
||||||
from redbot.core.i18n import CogI18n
|
from redbot.core.i18n import CogI18n
|
||||||
@@ -60,6 +61,26 @@ class Bank:
|
|||||||
async def bankset(self, ctx: commands.Context):
|
async def bankset(self, ctx: commands.Context):
|
||||||
"""Base command for bank settings"""
|
"""Base command for bank settings"""
|
||||||
if ctx.invoked_subcommand is None:
|
if ctx.invoked_subcommand is None:
|
||||||
|
if await bank.is_global():
|
||||||
|
bank_name = await bank._conf.bank_name()
|
||||||
|
currency_name = await bank._conf.currency()
|
||||||
|
default_balance = await bank._conf.default_balance()
|
||||||
|
else:
|
||||||
|
if not ctx.guild:
|
||||||
|
await ctx.send_help()
|
||||||
|
return
|
||||||
|
bank_name = await bank._conf.guild(ctx.guild).bank_name()
|
||||||
|
currency_name = await bank._conf.guild(ctx.guild).currency()
|
||||||
|
default_balance = await bank._conf.guild(ctx.guild).default_balance()
|
||||||
|
|
||||||
|
settings = (_(
|
||||||
|
"Bank settings:\n\n"
|
||||||
|
"Bank name: {}\n"
|
||||||
|
"Currency: {}\n"
|
||||||
|
"Default balance: {}"
|
||||||
|
"").format(bank_name, currency_name, default_balance)
|
||||||
|
)
|
||||||
|
await ctx.send(box(settings))
|
||||||
await ctx.send_help()
|
await ctx.send_help()
|
||||||
|
|
||||||
@bankset.command(name="toggleglobal")
|
@bankset.command(name="toggleglobal")
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: red-discordbot\n"
|
"Project-Id-Version: red-discordbot\n"
|
||||||
"POT-Creation-Date: 2018-02-18 14:42+AKST\n"
|
"POT-Creation-Date: 2018-02-18 14:42+AKST\n"
|
||||||
"PO-Revision-Date: 2018-02-25 21:33-0500\n"
|
"PO-Revision-Date: 2018-02-27 01:49-0500\n"
|
||||||
"Last-Translator: Kowlin <boxedpp@gmail.com>\n"
|
"Last-Translator: Kowlin <boxedpp@gmail.com>\n"
|
||||||
"Language-Team: German\n"
|
"Language-Team: German\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: red-discordbot\n"
|
"Project-Id-Version: red-discordbot\n"
|
||||||
"POT-Creation-Date: 2018-02-18 14:42+AKST\n"
|
"POT-Creation-Date: 2018-02-18 14:42+AKST\n"
|
||||||
"PO-Revision-Date: 2018-02-25 21:34-0500\n"
|
"PO-Revision-Date: 2018-04-02 19:27-0400\n"
|
||||||
"Last-Translator: Kowlin <boxedpp@gmail.com>\n"
|
"Last-Translator: Kowlin <boxedpp@gmail.com>\n"
|
||||||
"Language-Team: Pirate English\n"
|
"Language-Team: Pirate English\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: red-discordbot\n"
|
"Project-Id-Version: red-discordbot\n"
|
||||||
"POT-Creation-Date: 2018-02-18 14:42+AKST\n"
|
"POT-Creation-Date: 2018-02-18 14:42+AKST\n"
|
||||||
"PO-Revision-Date: 2018-02-25 21:34-0500\n"
|
"PO-Revision-Date: 2018-04-02 19:27-0400\n"
|
||||||
"Last-Translator: Kowlin <boxedpp@gmail.com>\n"
|
"Last-Translator: Kowlin <boxedpp@gmail.com>\n"
|
||||||
"Language-Team: Indonesian\n"
|
"Language-Team: Indonesian\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: red-discordbot\n"
|
"Project-Id-Version: red-discordbot\n"
|
||||||
"POT-Creation-Date: 2018-02-18 14:42+AKST\n"
|
"POT-Creation-Date: 2018-02-18 14:42+AKST\n"
|
||||||
"PO-Revision-Date: 2018-02-25 21:33-0500\n"
|
"PO-Revision-Date: 2018-04-02 19:26-0400\n"
|
||||||
"Last-Translator: Kowlin <boxedpp@gmail.com>\n"
|
"Last-Translator: Kowlin <boxedpp@gmail.com>\n"
|
||||||
"Language-Team: Korean\n"
|
"Language-Team: Korean\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
@@ -22,17 +22,17 @@ msgstr "글로벌"
|
|||||||
|
|
||||||
#: ../bank.py:68
|
#: ../bank.py:68
|
||||||
msgid "per-guild"
|
msgid "per-guild"
|
||||||
msgstr "길드마다"
|
msgstr "각 길드마다"
|
||||||
|
|
||||||
#: ../bank.py:70
|
#: ../bank.py:70
|
||||||
msgid "The bank is now {}."
|
msgid "The bank is now {}."
|
||||||
msgstr "은행 잔고는 `{}`입니다."
|
msgstr "은행은 이제 {} 이에요."
|
||||||
|
|
||||||
#: ../bank.py:77
|
#: ../bank.py:77
|
||||||
msgid "Bank's name has been set to {}"
|
msgid "Bank's name has been set to {}"
|
||||||
msgstr "계좌 이름이 {} 로 설정 되었습니다."
|
msgstr "은행 이름이 {} 으로 설정됐어요."
|
||||||
|
|
||||||
#: ../bank.py:84
|
#: ../bank.py:84
|
||||||
msgid "Currency name has been set to {}"
|
msgid "Currency name has been set to {}"
|
||||||
msgstr "통화 이름이 {} 로 설정 되었습니다."
|
msgstr "화폐 이름이 {} 으로 설정됐어요."
|
||||||
|
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: red-discordbot\n"
|
"Project-Id-Version: red-discordbot\n"
|
||||||
"POT-Creation-Date: 2018-02-18 14:42+AKST\n"
|
"POT-Creation-Date: 2018-02-18 14:42+AKST\n"
|
||||||
"PO-Revision-Date: 2018-02-25 21:33-0500\n"
|
"PO-Revision-Date: 2018-04-02 19:27-0400\n"
|
||||||
"Last-Translator: Kowlin <boxedpp@gmail.com>\n"
|
"Last-Translator: Kowlin <boxedpp@gmail.com>\n"
|
||||||
"Language-Team: Dutch\n"
|
"Language-Team: Dutch\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: red-discordbot\n"
|
"Project-Id-Version: red-discordbot\n"
|
||||||
"POT-Creation-Date: 2018-02-18 14:42+AKST\n"
|
"POT-Creation-Date: 2018-02-18 14:42+AKST\n"
|
||||||
"PO-Revision-Date: 2018-02-25 21:33-0500\n"
|
"PO-Revision-Date: 2018-04-02 19:27-0400\n"
|
||||||
"Last-Translator: Kowlin <boxedpp@gmail.com>\n"
|
"Last-Translator: Kowlin <boxedpp@gmail.com>\n"
|
||||||
"Language-Team: Russian\n"
|
"Language-Team: Russian\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: red-discordbot\n"
|
"Project-Id-Version: red-discordbot\n"
|
||||||
"POT-Creation-Date: 2018-02-19 03:59+UTC\n"
|
"POT-Creation-Date: 2018-02-19 03:59+UTC\n"
|
||||||
"PO-Revision-Date: 2018-02-25 21:33-0500\n"
|
"PO-Revision-Date: 2018-02-27 01:49-0500\n"
|
||||||
"Last-Translator: Kowlin <boxedpp@gmail.com>\n"
|
"Last-Translator: Kowlin <boxedpp@gmail.com>\n"
|
||||||
"Language-Team: German\n"
|
"Language-Team: German\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: red-discordbot\n"
|
"Project-Id-Version: red-discordbot\n"
|
||||||
"POT-Creation-Date: 2018-02-19 03:59+UTC\n"
|
"POT-Creation-Date: 2018-02-19 03:59+UTC\n"
|
||||||
"PO-Revision-Date: 2018-02-25 21:34-0500\n"
|
"PO-Revision-Date: 2018-04-02 19:27-0400\n"
|
||||||
"Last-Translator: Kowlin <boxedpp@gmail.com>\n"
|
"Last-Translator: Kowlin <boxedpp@gmail.com>\n"
|
||||||
"Language-Team: Pirate English\n"
|
"Language-Team: Pirate English\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: red-discordbot\n"
|
"Project-Id-Version: red-discordbot\n"
|
||||||
"POT-Creation-Date: 2018-02-19 03:59+UTC\n"
|
"POT-Creation-Date: 2018-02-19 03:59+UTC\n"
|
||||||
"PO-Revision-Date: 2018-02-25 21:34-0500\n"
|
"PO-Revision-Date: 2018-04-02 19:27-0400\n"
|
||||||
"Last-Translator: Kowlin <boxedpp@gmail.com>\n"
|
"Last-Translator: Kowlin <boxedpp@gmail.com>\n"
|
||||||
"Language-Team: Indonesian\n"
|
"Language-Team: Indonesian\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
@@ -18,9 +18,9 @@ msgstr ""
|
|||||||
|
|
||||||
#: ../cleanup.py:176
|
#: ../cleanup.py:176
|
||||||
msgid "This command can only be used on bots with bot accounts."
|
msgid "This command can only be used on bots with bot accounts."
|
||||||
msgstr ""
|
msgstr "Perintah ini hanya bisa di gunakan kepada bot dengan akun bot."
|
||||||
|
|
||||||
#: ../cleanup.py:183
|
#: ../cleanup.py:183
|
||||||
msgid "Message not found."
|
msgid "Message not found."
|
||||||
msgstr ""
|
msgstr "Pesan tidak ditemukan."
|
||||||
|
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: red-discordbot\n"
|
"Project-Id-Version: red-discordbot\n"
|
||||||
"POT-Creation-Date: 2018-02-19 03:59+UTC\n"
|
"POT-Creation-Date: 2018-02-19 03:59+UTC\n"
|
||||||
"PO-Revision-Date: 2018-02-25 21:33-0500\n"
|
"PO-Revision-Date: 2018-04-02 19:26-0400\n"
|
||||||
"Last-Translator: Kowlin <boxedpp@gmail.com>\n"
|
"Last-Translator: Kowlin <boxedpp@gmail.com>\n"
|
||||||
"Language-Team: Korean\n"
|
"Language-Team: Korean\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
@@ -18,9 +18,9 @@ msgstr ""
|
|||||||
|
|
||||||
#: ../cleanup.py:176
|
#: ../cleanup.py:176
|
||||||
msgid "This command can only be used on bots with bot accounts."
|
msgid "This command can only be used on bots with bot accounts."
|
||||||
msgstr ""
|
msgstr "이 커맨드는 봇 계정이 있는 봇만 사용할 수 있어요."
|
||||||
|
|
||||||
#: ../cleanup.py:183
|
#: ../cleanup.py:183
|
||||||
msgid "Message not found."
|
msgid "Message not found."
|
||||||
msgstr ""
|
msgstr "메세지를 찾을 수 없어요."
|
||||||
|
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: red-discordbot\n"
|
"Project-Id-Version: red-discordbot\n"
|
||||||
"POT-Creation-Date: 2018-02-19 03:59+UTC\n"
|
"POT-Creation-Date: 2018-02-19 03:59+UTC\n"
|
||||||
"PO-Revision-Date: 2018-02-25 21:33-0500\n"
|
"PO-Revision-Date: 2018-04-02 19:27-0400\n"
|
||||||
"Last-Translator: Kowlin <boxedpp@gmail.com>\n"
|
"Last-Translator: Kowlin <boxedpp@gmail.com>\n"
|
||||||
"Language-Team: Dutch\n"
|
"Language-Team: Dutch\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
@@ -22,5 +22,5 @@ msgstr ""
|
|||||||
|
|
||||||
#: ../cleanup.py:183
|
#: ../cleanup.py:183
|
||||||
msgid "Message not found."
|
msgid "Message not found."
|
||||||
msgstr ""
|
msgstr "Bericht niet gevonden."
|
||||||
|
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: red-discordbot\n"
|
"Project-Id-Version: red-discordbot\n"
|
||||||
"POT-Creation-Date: 2018-02-19 03:59+UTC\n"
|
"POT-Creation-Date: 2018-02-19 03:59+UTC\n"
|
||||||
"PO-Revision-Date: 2018-02-25 21:33-0500\n"
|
"PO-Revision-Date: 2018-04-02 19:27-0400\n"
|
||||||
"Last-Translator: Kowlin <boxedpp@gmail.com>\n"
|
"Last-Translator: Kowlin <boxedpp@gmail.com>\n"
|
||||||
"Language-Team: Russian\n"
|
"Language-Team: Russian\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: red-discordbot\n"
|
"Project-Id-Version: red-discordbot\n"
|
||||||
"POT-Creation-Date: 2018-02-18 14:42+AKST\n"
|
"POT-Creation-Date: 2018-02-18 14:42+AKST\n"
|
||||||
"PO-Revision-Date: 2018-02-25 21:33-0500\n"
|
"PO-Revision-Date: 2018-02-27 01:49-0500\n"
|
||||||
"Last-Translator: Kowlin <boxedpp@gmail.com>\n"
|
"Last-Translator: Kowlin <boxedpp@gmail.com>\n"
|
||||||
"Language-Team: German\n"
|
"Language-Team: German\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: red-discordbot\n"
|
"Project-Id-Version: red-discordbot\n"
|
||||||
"POT-Creation-Date: 2018-02-18 14:42+AKST\n"
|
"POT-Creation-Date: 2018-02-18 14:42+AKST\n"
|
||||||
"PO-Revision-Date: 2018-02-25 21:34-0500\n"
|
"PO-Revision-Date: 2018-04-02 19:27-0400\n"
|
||||||
"Last-Translator: Kowlin <boxedpp@gmail.com>\n"
|
"Last-Translator: Kowlin <boxedpp@gmail.com>\n"
|
||||||
"Language-Team: Pirate English\n"
|
"Language-Team: Pirate English\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: red-discordbot\n"
|
"Project-Id-Version: red-discordbot\n"
|
||||||
"POT-Creation-Date: 2018-02-18 14:42+AKST\n"
|
"POT-Creation-Date: 2018-02-18 14:42+AKST\n"
|
||||||
"PO-Revision-Date: 2018-02-25 21:34-0500\n"
|
"PO-Revision-Date: 2018-04-02 19:27-0400\n"
|
||||||
"Last-Translator: Kowlin <boxedpp@gmail.com>\n"
|
"Last-Translator: Kowlin <boxedpp@gmail.com>\n"
|
||||||
"Language-Team: Indonesian\n"
|
"Language-Team: Indonesian\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
@@ -19,49 +19,50 @@ msgstr ""
|
|||||||
#: ../customcom.py:44
|
#: ../customcom.py:44
|
||||||
msgid "Welcome to the interactive random {} maker!\n"
|
msgid "Welcome to the interactive random {} maker!\n"
|
||||||
"Every message you send will be added as one of the random response to choose from once this {} is triggered. To exit this interactive menu, type `{}`"
|
"Every message you send will be added as one of the random response to choose from once this {} is triggered. To exit this interactive menu, type `{}`"
|
||||||
msgstr ""
|
msgstr "Selamat datang di pembuat interaktif {} acak!\n"
|
||||||
|
"Setiap pesan yang anda kirim akan ditambahkan sebagai salah satu respon acak untuk dipilih setelah ini {} dipicu. Untuk keluar dari menu interaktif ini, ketik `{}`"
|
||||||
|
|
||||||
#: ../customcom.py:56
|
#: ../customcom.py:56
|
||||||
msgid "Add a random response:"
|
msgid "Add a random response:"
|
||||||
msgstr ""
|
msgstr "Tambahkan tanggapan acak:"
|
||||||
|
|
||||||
#: ../customcom.py:119
|
#: ../customcom.py:119
|
||||||
msgid "Do you want to create a 'randomized' cc? {}"
|
msgid "Do you want to create a 'randomized' cc? {}"
|
||||||
msgstr ""
|
msgstr "Apakah Anda ingin membuat cc 'acak'? {}"
|
||||||
|
|
||||||
#: ../customcom.py:126
|
#: ../customcom.py:126
|
||||||
msgid "What response do you want?"
|
msgid "What response do you want?"
|
||||||
msgstr ""
|
msgstr "Tanggapan apa yang anda inginkan?"
|
||||||
|
|
||||||
#: ../customcom.py:205 ../customcom.py:235
|
#: ../customcom.py:205 ../customcom.py:235
|
||||||
msgid "Custom command successfully added."
|
msgid "Custom command successfully added."
|
||||||
msgstr ""
|
msgstr "Perintah kustom berhasil ditambahkan."
|
||||||
|
|
||||||
#: ../customcom.py:207 ../customcom.py:237
|
#: ../customcom.py:207 ../customcom.py:237
|
||||||
msgid "This command already exists. Use `{}` to edit it."
|
msgid "This command already exists. Use `{}` to edit it."
|
||||||
msgstr ""
|
msgstr "Perintah ini sudah ada. Gunakan '{}' untuk mengeditnya."
|
||||||
|
|
||||||
#: ../customcom.py:229
|
#: ../customcom.py:229
|
||||||
msgid "That command is already a standard command."
|
msgid "That command is already a standard command."
|
||||||
msgstr ""
|
msgstr "Perintah ini sudah perintah standar."
|
||||||
|
|
||||||
#: ../customcom.py:261
|
#: ../customcom.py:261
|
||||||
msgid "Custom command successfully edited."
|
msgid "Custom command successfully edited."
|
||||||
msgstr ""
|
msgstr "Perintah kustom berhasil diubah."
|
||||||
|
|
||||||
#: ../customcom.py:263
|
#: ../customcom.py:263
|
||||||
msgid "That command doesn't exist. Use `{}` to add it."
|
msgid "That command doesn't exist. Use `{}` to add it."
|
||||||
msgstr ""
|
msgstr "Perintah ini tidak tersedia. Gunakan '{}' untuk menambahkannya."
|
||||||
|
|
||||||
#: ../customcom.py:282
|
#: ../customcom.py:282
|
||||||
msgid "Custom command successfully deleted."
|
msgid "Custom command successfully deleted."
|
||||||
msgstr ""
|
msgstr "Perintah kustom berhasil dihapus."
|
||||||
|
|
||||||
#: ../customcom.py:284
|
#: ../customcom.py:284
|
||||||
msgid "That command doesn't exist."
|
msgid "That command doesn't exist."
|
||||||
msgstr ""
|
msgstr "Perintah tersebut tidak ada."
|
||||||
|
|
||||||
#: ../customcom.py:294
|
#: ../customcom.py:294
|
||||||
msgid "There are no custom commands in this guild. Use `{}` to start adding some."
|
msgid "There are no custom commands in this guild. Use `{}` to start adding some."
|
||||||
msgstr ""
|
msgstr "Tidak ada perintah kustom dalam server ini. Gunakan '{}' untuk mulai menambahkannya."
|
||||||
|
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: red-discordbot\n"
|
"Project-Id-Version: red-discordbot\n"
|
||||||
"POT-Creation-Date: 2018-02-18 14:42+AKST\n"
|
"POT-Creation-Date: 2018-02-18 14:42+AKST\n"
|
||||||
"PO-Revision-Date: 2018-02-25 21:33-0500\n"
|
"PO-Revision-Date: 2018-04-02 19:26-0400\n"
|
||||||
"Last-Translator: Kowlin <boxedpp@gmail.com>\n"
|
"Last-Translator: Kowlin <boxedpp@gmail.com>\n"
|
||||||
"Language-Team: Korean\n"
|
"Language-Team: Korean\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
@@ -19,49 +19,50 @@ msgstr ""
|
|||||||
#: ../customcom.py:44
|
#: ../customcom.py:44
|
||||||
msgid "Welcome to the interactive random {} maker!\n"
|
msgid "Welcome to the interactive random {} maker!\n"
|
||||||
"Every message you send will be added as one of the random response to choose from once this {} is triggered. To exit this interactive menu, type `{}`"
|
"Every message you send will be added as one of the random response to choose from once this {} is triggered. To exit this interactive menu, type `{}`"
|
||||||
msgstr ""
|
msgstr "대화형 랜덤 {} 메이커에 오신 것을 환영해요!\n"
|
||||||
|
"사용자님이 보내는 모든 메시지에 {} 이(가) 트리거 되면 선택할 임의의 대답 중 하나로 추가됍니다. 이 대화형 메뉴를 종료하려면 `{}` 을 입력해야 해요."
|
||||||
|
|
||||||
#: ../customcom.py:56
|
#: ../customcom.py:56
|
||||||
msgid "Add a random response:"
|
msgid "Add a random response:"
|
||||||
msgstr ""
|
msgstr "등록된 랜덤 대답 리스트 :"
|
||||||
|
|
||||||
#: ../customcom.py:119
|
#: ../customcom.py:119
|
||||||
msgid "Do you want to create a 'randomized' cc? {}"
|
msgid "Do you want to create a 'randomized' cc? {}"
|
||||||
msgstr ""
|
msgstr "'임의' CC를 생성할까요?"
|
||||||
|
|
||||||
#: ../customcom.py:126
|
#: ../customcom.py:126
|
||||||
msgid "What response do you want?"
|
msgid "What response do you want?"
|
||||||
msgstr ""
|
msgstr "어떤 대답을 원해요?"
|
||||||
|
|
||||||
#: ../customcom.py:205 ../customcom.py:235
|
#: ../customcom.py:205 ../customcom.py:235
|
||||||
msgid "Custom command successfully added."
|
msgid "Custom command successfully added."
|
||||||
msgstr ""
|
msgstr "커스텀 커맨드가 성공적으로 추가됐어요."
|
||||||
|
|
||||||
#: ../customcom.py:207 ../customcom.py:237
|
#: ../customcom.py:207 ../customcom.py:237
|
||||||
msgid "This command already exists. Use `{}` to edit it."
|
msgid "This command already exists. Use `{}` to edit it."
|
||||||
msgstr ""
|
msgstr "이 커맨드는 이미 추가되어 있어요. 편집하려면 `{}` 을(를) 사용해보세요."
|
||||||
|
|
||||||
#: ../customcom.py:229
|
#: ../customcom.py:229
|
||||||
msgid "That command is already a standard command."
|
msgid "That command is already a standard command."
|
||||||
msgstr ""
|
msgstr "해당 커맨드는 봇의 커맨드예요."
|
||||||
|
|
||||||
#: ../customcom.py:261
|
#: ../customcom.py:261
|
||||||
msgid "Custom command successfully edited."
|
msgid "Custom command successfully edited."
|
||||||
msgstr ""
|
msgstr "커스텀 커맨드가 성공적으로 수정됐어요."
|
||||||
|
|
||||||
#: ../customcom.py:263
|
#: ../customcom.py:263
|
||||||
msgid "That command doesn't exist. Use `{}` to add it."
|
msgid "That command doesn't exist. Use `{}` to add it."
|
||||||
msgstr ""
|
msgstr "해당 커맨드는 추가되어 있지 않아요. 추가하려면 `{}` 을(를) 사용해보세요."
|
||||||
|
|
||||||
#: ../customcom.py:282
|
#: ../customcom.py:282
|
||||||
msgid "Custom command successfully deleted."
|
msgid "Custom command successfully deleted."
|
||||||
msgstr ""
|
msgstr "커스텀 커맨드가 성공적으로 삭제됐어요."
|
||||||
|
|
||||||
#: ../customcom.py:284
|
#: ../customcom.py:284
|
||||||
msgid "That command doesn't exist."
|
msgid "That command doesn't exist."
|
||||||
msgstr ""
|
msgstr "해당 커맨드는 추가되어 있지 않아요."
|
||||||
|
|
||||||
#: ../customcom.py:294
|
#: ../customcom.py:294
|
||||||
msgid "There are no custom commands in this guild. Use `{}` to start adding some."
|
msgid "There are no custom commands in this guild. Use `{}` to start adding some."
|
||||||
msgstr ""
|
msgstr "이 길드에 등록된 커스텀 커맨드가 없어요. 추가하려면 `{}` 을(를) 사용해보세요."
|
||||||
|
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: red-discordbot\n"
|
"Project-Id-Version: red-discordbot\n"
|
||||||
"POT-Creation-Date: 2018-02-18 14:42+AKST\n"
|
"POT-Creation-Date: 2018-02-18 14:42+AKST\n"
|
||||||
"PO-Revision-Date: 2018-02-25 21:33-0500\n"
|
"PO-Revision-Date: 2018-04-02 19:27-0400\n"
|
||||||
"Last-Translator: Kowlin <boxedpp@gmail.com>\n"
|
"Last-Translator: Kowlin <boxedpp@gmail.com>\n"
|
||||||
"Language-Team: Dutch\n"
|
"Language-Team: Dutch\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: red-discordbot\n"
|
"Project-Id-Version: red-discordbot\n"
|
||||||
"POT-Creation-Date: 2018-02-18 14:42+AKST\n"
|
"POT-Creation-Date: 2018-02-18 14:42+AKST\n"
|
||||||
"PO-Revision-Date: 2018-02-25 21:33-0500\n"
|
"PO-Revision-Date: 2018-04-02 19:27-0400\n"
|
||||||
"Last-Translator: Kowlin <boxedpp@gmail.com>\n"
|
"Last-Translator: Kowlin <boxedpp@gmail.com>\n"
|
||||||
"Language-Team: Russian\n"
|
"Language-Team: Russian\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
|
|||||||
6
redbot/cogs/dataconverter/__init__.py
Normal file
6
redbot/cogs/dataconverter/__init__.py
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
from redbot.core.bot import Red
|
||||||
|
from .dataconverter import DataConverter
|
||||||
|
|
||||||
|
|
||||||
|
def setup(bot: Red):
|
||||||
|
bot.add_cog(DataConverter(bot))
|
||||||
184
redbot/cogs/dataconverter/core_specs.py
Normal file
184
redbot/cogs/dataconverter/core_specs.py
Normal file
@@ -0,0 +1,184 @@
|
|||||||
|
from itertools import chain, starmap
|
||||||
|
from pathlib import Path
|
||||||
|
from datetime import datetime
|
||||||
|
|
||||||
|
from redbot.core.bot import Red
|
||||||
|
from redbot.core.utils.data_converter import DataConverter as dc
|
||||||
|
from redbot.core.config import Config
|
||||||
|
|
||||||
|
|
||||||
|
class SpecResolver(object):
|
||||||
|
"""
|
||||||
|
Resolves Certain things for DataConverter
|
||||||
|
"""
|
||||||
|
|
||||||
|
def __init__(self, path: Path):
|
||||||
|
self.v2path = path
|
||||||
|
self.resolved = set()
|
||||||
|
self.available_core_conversions = {
|
||||||
|
'Bank Accounts': {
|
||||||
|
'cfg': ('Bank', None, 384734293238749),
|
||||||
|
'file': self.v2path / 'data' / 'economy' / 'bank.json',
|
||||||
|
'converter': self.bank_accounts_conv_spec
|
||||||
|
},
|
||||||
|
'Economy Settings': {
|
||||||
|
'cfg': ('Economy', 'config', 1256844281),
|
||||||
|
'file': self.v2path / 'data' / 'economy' / 'settings.json',
|
||||||
|
'converter': self.economy_conv_spec
|
||||||
|
},
|
||||||
|
'Mod Log Cases': {
|
||||||
|
'cfg': ('ModLog', None, 1354799444),
|
||||||
|
'file': self.v2path / 'data' / 'mod' / 'modlog.json',
|
||||||
|
'converter': None # prevents from showing as available
|
||||||
|
},
|
||||||
|
'Filter': {
|
||||||
|
'cfg': ('Filter', 'settings', 4766951341),
|
||||||
|
'file': self.v2path / 'data' / 'mod' / 'filter.json',
|
||||||
|
'converter': self.filter_conv_spec
|
||||||
|
},
|
||||||
|
'Past Names': {
|
||||||
|
'cfg': ('Mod', 'settings', 4961522000),
|
||||||
|
'file': self.v2path / 'data' / 'mod' / 'past_names.json',
|
||||||
|
'converter': self.past_names_conv_spec
|
||||||
|
},
|
||||||
|
'Past Nicknames': {
|
||||||
|
'cfg': ('Mod', 'settings', 4961522000),
|
||||||
|
'file': self.v2path / 'data' / 'mod' / 'past_nicknames.json',
|
||||||
|
'converter': self.past_nicknames_conv_spec
|
||||||
|
},
|
||||||
|
'Custom Commands': {
|
||||||
|
'cfg': ('CustomCommands', 'config', 414589031223512),
|
||||||
|
'file': self.v2path / 'data' / 'customcom' / 'commands.json',
|
||||||
|
'converter': self.customcom_conv_spec
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@property
|
||||||
|
def available(self):
|
||||||
|
return sorted(
|
||||||
|
k for k, v in self.available_core_conversions.items()
|
||||||
|
if v['file'].is_file() and v['converter'] is not None
|
||||||
|
and k not in self.resolved
|
||||||
|
)
|
||||||
|
|
||||||
|
def unpack(self, parent_key, parent_value):
|
||||||
|
"""Unpack one level of nesting in a dictionary"""
|
||||||
|
try:
|
||||||
|
items = parent_value.items()
|
||||||
|
except AttributeError:
|
||||||
|
yield (parent_key, parent_value)
|
||||||
|
else:
|
||||||
|
for key, value in items:
|
||||||
|
yield (parent_key + (key,), value)
|
||||||
|
|
||||||
|
def flatten_dict(self, dictionary: dict):
|
||||||
|
"""Flatten a nested dictionary structure"""
|
||||||
|
dictionary = {(key,): value for key, value in dictionary.items()}
|
||||||
|
while True:
|
||||||
|
dictionary = dict(
|
||||||
|
chain.from_iterable(
|
||||||
|
starmap(self.unpack, dictionary.items())
|
||||||
|
)
|
||||||
|
)
|
||||||
|
if not any(
|
||||||
|
isinstance(value, dict)
|
||||||
|
for value in dictionary.values()
|
||||||
|
):
|
||||||
|
break
|
||||||
|
return dictionary
|
||||||
|
|
||||||
|
def apply_scope(self, scope: str, data: dict):
|
||||||
|
return {(scope,) + k: v for k, v in data.items()}
|
||||||
|
|
||||||
|
def bank_accounts_conv_spec(self, data: dict):
|
||||||
|
flatscoped = self.apply_scope(Config.MEMBER, self.flatten_dict(data))
|
||||||
|
ret = {}
|
||||||
|
for k, v in flatscoped.items():
|
||||||
|
outerkey, innerkey = tuple(k[:-1]), (k[-1],)
|
||||||
|
if outerkey not in ret:
|
||||||
|
ret[outerkey] = {}
|
||||||
|
if innerkey[0] == 'created_at':
|
||||||
|
x = int(
|
||||||
|
datetime.strptime(
|
||||||
|
v, "%Y-%m-%d %H:%M:%S").timestamp()
|
||||||
|
)
|
||||||
|
ret[outerkey].update({innerkey: x})
|
||||||
|
else:
|
||||||
|
ret[outerkey].update({innerkey: v})
|
||||||
|
return ret
|
||||||
|
|
||||||
|
def economy_conv_spec(self, data: dict):
|
||||||
|
flatscoped = self.apply_scope(Config.GUILD, self.flatten_dict(data))
|
||||||
|
ret = {}
|
||||||
|
for k, v in flatscoped.items():
|
||||||
|
outerkey, innerkey = (*k[:-1],), (k[-1],)
|
||||||
|
if outerkey not in ret:
|
||||||
|
ret[outerkey] = {}
|
||||||
|
ret[outerkey].update({innerkey: v})
|
||||||
|
return ret
|
||||||
|
|
||||||
|
def mod_log_cases(self, data: dict):
|
||||||
|
raise NotImplementedError("This one isn't ready yet")
|
||||||
|
|
||||||
|
def filter_conv_spec(self, data: dict):
|
||||||
|
return {
|
||||||
|
(Config.GUILD, k): {('filter',): v}
|
||||||
|
for k, v in data.items()
|
||||||
|
}
|
||||||
|
|
||||||
|
def past_names_conv_spec(self, data: dict):
|
||||||
|
return {
|
||||||
|
(Config.USER, k): {('past_names',): v}
|
||||||
|
for k, v in data.items()
|
||||||
|
}
|
||||||
|
|
||||||
|
def past_nicknames_conv_spec(self, data: dict):
|
||||||
|
flatscoped = self.apply_scope(Config.MEMBER, self.flatten_dict(data))
|
||||||
|
ret = {}
|
||||||
|
for k, v in flatscoped.items():
|
||||||
|
outerkey, innerkey = (*k[:-1],), (k[-1],)
|
||||||
|
if outerkey not in ret:
|
||||||
|
ret[outerkey] = {}
|
||||||
|
ret[outerkey].update({innerkey: v})
|
||||||
|
return ret
|
||||||
|
|
||||||
|
def customcom_conv_spec(self, data: dict):
|
||||||
|
flatscoped = self.apply_scope(Config.GUILD, self.flatten_dict(data))
|
||||||
|
ret = {}
|
||||||
|
for k, v in flatscoped.items():
|
||||||
|
outerkey, innerkey = (*k[:-1],), ('commands', k[-1])
|
||||||
|
if outerkey not in ret:
|
||||||
|
ret[outerkey] = {}
|
||||||
|
|
||||||
|
ccinfo = {
|
||||||
|
'author': {
|
||||||
|
'id': 42,
|
||||||
|
'name': 'Converted from a v2 instance'
|
||||||
|
},
|
||||||
|
'command': k[-1],
|
||||||
|
'created_at': '{:%d/%m/%Y %H:%M:%S}'.format(datetime.utcnow()),
|
||||||
|
'editors': [],
|
||||||
|
'response': v
|
||||||
|
}
|
||||||
|
ret[outerkey].update({innerkey: ccinfo})
|
||||||
|
return ret
|
||||||
|
|
||||||
|
async def convert(self, bot: Red, prettyname: str):
|
||||||
|
if prettyname not in self.available:
|
||||||
|
raise NotImplementedError("No Conversion Specs for this")
|
||||||
|
|
||||||
|
info = self.available_core_conversions[prettyname]
|
||||||
|
filepath, converter = info['file'], info['converter']
|
||||||
|
(cogname, attr, _id) = info['cfg']
|
||||||
|
try:
|
||||||
|
config = getattr(bot.get_cog(cogname), attr)
|
||||||
|
except (TypeError, AttributeError):
|
||||||
|
config = Config.get_conf(cogname, _id)
|
||||||
|
|
||||||
|
try:
|
||||||
|
items = converter(dc.json_load(filepath))
|
||||||
|
await dc(config).dict_import(items)
|
||||||
|
except Exception:
|
||||||
|
raise
|
||||||
|
else:
|
||||||
|
self.resolved.add(prettyname)
|
||||||
82
redbot/cogs/dataconverter/dataconverter.py
Normal file
82
redbot/cogs/dataconverter/dataconverter.py
Normal file
@@ -0,0 +1,82 @@
|
|||||||
|
from pathlib import Path
|
||||||
|
import asyncio
|
||||||
|
|
||||||
|
from discord.ext import commands
|
||||||
|
|
||||||
|
from redbot.core import checks, RedContext
|
||||||
|
from redbot.core.bot import Red
|
||||||
|
from redbot.core.i18n import CogI18n
|
||||||
|
from redbot.cogs.dataconverter.core_specs import SpecResolver
|
||||||
|
from redbot.core.utils.chat_formatting import box
|
||||||
|
|
||||||
|
_ = CogI18n('DataConverter', __file__)
|
||||||
|
|
||||||
|
|
||||||
|
class DataConverter:
|
||||||
|
"""
|
||||||
|
Cog for importing Red v2 Data
|
||||||
|
"""
|
||||||
|
|
||||||
|
def __init__(self, bot: Red):
|
||||||
|
self.bot = bot
|
||||||
|
|
||||||
|
@checks.is_owner()
|
||||||
|
@commands.command(name="convertdata")
|
||||||
|
async def dataconversioncommand(self, ctx: RedContext, v2path: str):
|
||||||
|
"""
|
||||||
|
Interactive prompt for importing data from Red v2
|
||||||
|
|
||||||
|
Takes the path where the v2 install is
|
||||||
|
|
||||||
|
Overwrites values which have entries in both v2 and v3,
|
||||||
|
use with caution.
|
||||||
|
"""
|
||||||
|
resolver = SpecResolver(Path(v2path.strip()))
|
||||||
|
|
||||||
|
if not resolver.available:
|
||||||
|
return await ctx.send(
|
||||||
|
_("There don't seem to be any data files I know how to "
|
||||||
|
"handle here. Are you sure you gave me the base "
|
||||||
|
"installation path?")
|
||||||
|
)
|
||||||
|
while resolver.available:
|
||||||
|
menu = _("Please select a set of data to import by number"
|
||||||
|
", or 'exit' to exit")
|
||||||
|
for index, entry in enumerate(resolver.available, 1):
|
||||||
|
menu += "\n{}. {}".format(index, entry)
|
||||||
|
|
||||||
|
menu_message = await ctx.send(box(menu))
|
||||||
|
|
||||||
|
def pred(m):
|
||||||
|
return m.channel == ctx.channel and m.author == ctx.author
|
||||||
|
|
||||||
|
try:
|
||||||
|
message = await self.bot.wait_for(
|
||||||
|
'message', check=pred, timeout=60
|
||||||
|
)
|
||||||
|
except asyncio.TimeoutError:
|
||||||
|
return await ctx.send(
|
||||||
|
_('Try this again when you are more ready'))
|
||||||
|
else:
|
||||||
|
if message.content.strip().lower() in [
|
||||||
|
'quit', 'exit', '-1', 'q', 'cancel'
|
||||||
|
]:
|
||||||
|
return await ctx.tick()
|
||||||
|
try:
|
||||||
|
message = int(message.content.strip())
|
||||||
|
to_conv = resolver.available[message - 1]
|
||||||
|
except (ValueError, IndexError):
|
||||||
|
await ctx.send(
|
||||||
|
_("That wasn't a valid choice.")
|
||||||
|
)
|
||||||
|
continue
|
||||||
|
else:
|
||||||
|
async with ctx.typing():
|
||||||
|
await resolver.convert(self.bot, to_conv)
|
||||||
|
await ctx.send(_("{} converted.").format(to_conv))
|
||||||
|
await menu_message.delete()
|
||||||
|
else:
|
||||||
|
return await ctx.send(
|
||||||
|
_("There isn't anything else I know how to convert here."
|
||||||
|
"\nThere might be more things I can convert in the future.")
|
||||||
|
)
|
||||||
43
redbot/cogs/dataconverter/locales/messages.pot
Normal file
43
redbot/cogs/dataconverter/locales/messages.pot
Normal file
@@ -0,0 +1,43 @@
|
|||||||
|
# SOME DESCRIPTIVE TITLE.
|
||||||
|
# Copyright (C) YEAR ORGANIZATION
|
||||||
|
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
|
||||||
|
#
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Project-Id-Version: PACKAGE VERSION\n"
|
||||||
|
"POT-Creation-Date: 2018-03-12 04:35+EDT\n"
|
||||||
|
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||||
|
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||||
|
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||||
|
"MIME-Version: 1.0\n"
|
||||||
|
"Content-Type: text/plain; charset=CHARSET\n"
|
||||||
|
"Content-Transfer-Encoding: ENCODING\n"
|
||||||
|
"Generated-By: pygettext.py 1.5\n"
|
||||||
|
|
||||||
|
|
||||||
|
#: ../dataconverter.py:38
|
||||||
|
msgid "There don't seem to be any data files I know how to handle here. Are you sure you gave me the base installation path?"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: ../dataconverter.py:43
|
||||||
|
msgid "Please select a set of data to import by number, or 'exit' to exit"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: ../dataconverter.py:59
|
||||||
|
msgid "Try this again when you are more ready"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: ../dataconverter.py:70
|
||||||
|
msgid "That wasn't a valid choice."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: ../dataconverter.py:76
|
||||||
|
msgid "{} converted."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: ../dataconverter.py:80
|
||||||
|
msgid ""
|
||||||
|
"There isn't anything else I know how to convert here.\n"
|
||||||
|
"There might be more things I can convert in the future."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
15
redbot/cogs/dataconverter/locales/regen_messages.py
Normal file
15
redbot/cogs/dataconverter/locales/regen_messages.py
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
import subprocess
|
||||||
|
|
||||||
|
TO_TRANSLATE = [
|
||||||
|
'../dataconverter.py'
|
||||||
|
]
|
||||||
|
|
||||||
|
|
||||||
|
def regen_messages():
|
||||||
|
subprocess.run(
|
||||||
|
['pygettext', '-n'] + TO_TRANSLATE
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
regen_messages()
|
||||||
@@ -5,6 +5,8 @@ from sys import path as syspath
|
|||||||
from typing import Tuple, Union
|
from typing import Tuple, Union
|
||||||
|
|
||||||
import discord
|
import discord
|
||||||
|
import sys
|
||||||
|
|
||||||
from redbot.core import Config
|
from redbot.core import Config
|
||||||
from redbot.core import checks
|
from redbot.core import checks
|
||||||
from redbot.core.data_manager import cog_data_path
|
from redbot.core.data_manager import cog_data_path
|
||||||
@@ -220,7 +222,7 @@ class Downloader:
|
|||||||
"""
|
"""
|
||||||
try:
|
try:
|
||||||
# noinspection PyTypeChecker
|
# noinspection PyTypeChecker
|
||||||
await self._repo_manager.add_repo(
|
repo = await self._repo_manager.add_repo(
|
||||||
name=name,
|
name=name,
|
||||||
url=repo_url,
|
url=repo_url,
|
||||||
branch=branch
|
branch=branch
|
||||||
@@ -232,6 +234,8 @@ class Downloader:
|
|||||||
log.exception(_("Something went wrong during the cloning process."))
|
log.exception(_("Something went wrong during the cloning process."))
|
||||||
else:
|
else:
|
||||||
await ctx.send(_("Repo `{}` successfully added.").format(name))
|
await ctx.send(_("Repo `{}` successfully added.").format(name))
|
||||||
|
if repo.install_msg is not None:
|
||||||
|
await ctx.send(repo.install_msg)
|
||||||
|
|
||||||
@repo.command(name="delete")
|
@repo.command(name="delete")
|
||||||
async def _repo_del(self, ctx, repo_name: Repo):
|
async def _repo_del(self, ctx, repo_name: Repo):
|
||||||
@@ -268,11 +272,18 @@ class Downloader:
|
|||||||
"""
|
"""
|
||||||
Installs a cog from the given repo.
|
Installs a cog from the given repo.
|
||||||
"""
|
"""
|
||||||
cog = discord.utils.get(repo_name.available_cogs, name=cog_name)
|
cog = discord.utils.get(repo_name.available_cogs, name=cog_name) # type: Installable
|
||||||
if cog is None:
|
if cog is None:
|
||||||
await ctx.send(_("Error, there is no cog by the name of"
|
await ctx.send(_("Error, there is no cog by the name of"
|
||||||
" `{}` in the `{}` repo.").format(cog_name, repo_name.name))
|
" `{}` in the `{}` repo.").format(cog_name, repo_name.name))
|
||||||
return
|
return
|
||||||
|
elif cog.min_python_version > sys.version_info:
|
||||||
|
await ctx.send(_(
|
||||||
|
"This cog requires at least python version {}, aborting install.".format(
|
||||||
|
'.'.join([str(n) for n in cog.min_python_version])
|
||||||
|
)
|
||||||
|
))
|
||||||
|
return
|
||||||
|
|
||||||
if not await repo_name.install_requirements(cog, self.LIB_PATH):
|
if not await repo_name.install_requirements(cog, self.LIB_PATH):
|
||||||
await ctx.send(_("Failed to install the required libraries for"
|
await ctx.send(_("Failed to install the required libraries for"
|
||||||
@@ -286,6 +297,8 @@ class Downloader:
|
|||||||
await repo_name.install_libraries(self.SHAREDLIB_PATH)
|
await repo_name.install_libraries(self.SHAREDLIB_PATH)
|
||||||
|
|
||||||
await ctx.send(_("`{}` cog successfully installed.").format(cog_name))
|
await ctx.send(_("`{}` cog successfully installed.").format(cog_name))
|
||||||
|
if cog.install_msg is not None:
|
||||||
|
await ctx.send(cog.install_msg)
|
||||||
|
|
||||||
@cog.command(name="uninstall")
|
@cog.command(name="uninstall")
|
||||||
async def _cog_uninstall(self, ctx, cog_name: InstalledCog):
|
async def _cog_uninstall(self, ctx, cog_name: InstalledCog):
|
||||||
|
|||||||
@@ -38,6 +38,9 @@ class Installable(RepoJSONMixin):
|
|||||||
bot_version : `tuple` of `int`
|
bot_version : `tuple` of `int`
|
||||||
The minimum bot version required for this installation. Right now
|
The minimum bot version required for this installation. Right now
|
||||||
this is always :code:`3.0.0`.
|
this is always :code:`3.0.0`.
|
||||||
|
min_python_version : `tuple` of `int`
|
||||||
|
The minimum python version required for this cog. This field will not
|
||||||
|
apply to repo info.json's.
|
||||||
hidden : `bool`
|
hidden : `bool`
|
||||||
Whether or not this cog will be hidden from the user when they use
|
Whether or not this cog will be hidden from the user when they use
|
||||||
`Downloader`'s commands.
|
`Downloader`'s commands.
|
||||||
@@ -70,6 +73,7 @@ class Installable(RepoJSONMixin):
|
|||||||
|
|
||||||
self.author = ()
|
self.author = ()
|
||||||
self.bot_version = (3, 0, 0)
|
self.bot_version = (3, 0, 0)
|
||||||
|
self.min_python_version = (3, 5, 1)
|
||||||
self.hidden = False
|
self.hidden = False
|
||||||
self.required_cogs = {} # Cog name -> repo URL
|
self.required_cogs = {} # Cog name -> repo URL
|
||||||
self.requirements = ()
|
self.requirements = ()
|
||||||
@@ -159,9 +163,15 @@ class Installable(RepoJSONMixin):
|
|||||||
try:
|
try:
|
||||||
bot_version = tuple(info.get("bot_version", [3, 0, 0]))
|
bot_version = tuple(info.get("bot_version", [3, 0, 0]))
|
||||||
except ValueError:
|
except ValueError:
|
||||||
bot_version = 2
|
bot_version = self.bot_version
|
||||||
self.bot_version = bot_version
|
self.bot_version = bot_version
|
||||||
|
|
||||||
|
try:
|
||||||
|
min_python_version = tuple(info.get('min_python_version', [3, 5, 1]))
|
||||||
|
except ValueError:
|
||||||
|
min_python_version = self.min_python_version
|
||||||
|
self.min_python_version = min_python_version
|
||||||
|
|
||||||
try:
|
try:
|
||||||
hidden = bool(info.get("hidden", False))
|
hidden = bool(info.get("hidden", False))
|
||||||
except ValueError:
|
except ValueError:
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: red-discordbot\n"
|
"Project-Id-Version: red-discordbot\n"
|
||||||
"POT-Creation-Date: 2018-02-19 03:59+UTC\n"
|
"POT-Creation-Date: 2018-02-19 03:59+UTC\n"
|
||||||
"PO-Revision-Date: 2018-02-25 21:33-0500\n"
|
"PO-Revision-Date: 2018-02-27 01:49-0500\n"
|
||||||
"Last-Translator: Kowlin <boxedpp@gmail.com>\n"
|
"Last-Translator: Kowlin <boxedpp@gmail.com>\n"
|
||||||
"Language-Team: German\n"
|
"Language-Team: German\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: red-discordbot\n"
|
"Project-Id-Version: red-discordbot\n"
|
||||||
"POT-Creation-Date: 2018-02-19 03:59+UTC\n"
|
"POT-Creation-Date: 2018-02-19 03:59+UTC\n"
|
||||||
"PO-Revision-Date: 2018-02-25 21:34-0500\n"
|
"PO-Revision-Date: 2018-04-02 19:27-0400\n"
|
||||||
"Last-Translator: Kowlin <boxedpp@gmail.com>\n"
|
"Last-Translator: Kowlin <boxedpp@gmail.com>\n"
|
||||||
"Language-Team: Pirate English\n"
|
"Language-Team: Pirate English\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: red-discordbot\n"
|
"Project-Id-Version: red-discordbot\n"
|
||||||
"POT-Creation-Date: 2018-02-19 03:59+UTC\n"
|
"POT-Creation-Date: 2018-02-19 03:59+UTC\n"
|
||||||
"PO-Revision-Date: 2018-02-25 21:34-0500\n"
|
"PO-Revision-Date: 2018-04-02 19:27-0400\n"
|
||||||
"Last-Translator: Kowlin <boxedpp@gmail.com>\n"
|
"Last-Translator: Kowlin <boxedpp@gmail.com>\n"
|
||||||
"Language-Team: Indonesian\n"
|
"Language-Team: Indonesian\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: red-discordbot\n"
|
"Project-Id-Version: red-discordbot\n"
|
||||||
"POT-Creation-Date: 2018-02-19 03:59+UTC\n"
|
"POT-Creation-Date: 2018-02-19 03:59+UTC\n"
|
||||||
"PO-Revision-Date: 2018-02-25 21:33-0500\n"
|
"PO-Revision-Date: 2018-04-02 19:26-0400\n"
|
||||||
"Last-Translator: Kowlin <boxedpp@gmail.com>\n"
|
"Last-Translator: Kowlin <boxedpp@gmail.com>\n"
|
||||||
"Language-Team: Korean\n"
|
"Language-Team: Korean\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
@@ -18,77 +18,77 @@ msgstr ""
|
|||||||
|
|
||||||
#: ../downloader.py:215
|
#: ../downloader.py:215
|
||||||
msgid "That git repo has already been added under another name."
|
msgid "That git repo has already been added under another name."
|
||||||
msgstr "해당 git 저장소는 이미 다른 이름으로 저장 되어 있습니다."
|
msgstr "해당 git 저장소는 이미 다른 이름으로 저장되어 있어요."
|
||||||
|
|
||||||
#: ../downloader.py:217 ../downloader.py:218
|
#: ../downloader.py:217 ../downloader.py:218
|
||||||
msgid "Something went wrong during the cloning process."
|
msgid "Something went wrong during the cloning process."
|
||||||
msgstr "복제 작업중 에러가 발생했습니다."
|
msgstr "복제하는 과정에서 뭔가 잘못됐어요."
|
||||||
|
|
||||||
#: ../downloader.py:220
|
#: ../downloader.py:220
|
||||||
msgid "Repo `{}` successfully added."
|
msgid "Repo `{}` successfully added."
|
||||||
msgstr "저장소 `{}` 가 성공적으로 추가 되었습니다."
|
msgstr "저장소 `{}` 이(가) 성공적으로 추가됐어요."
|
||||||
|
|
||||||
#: ../downloader.py:229
|
#: ../downloader.py:229
|
||||||
msgid "The repo `{}` has been deleted successfully."
|
msgid "The repo `{}` has been deleted successfully."
|
||||||
msgstr "저장소 `{}` 가 성공적으로 삭제 되었습니다."
|
msgstr "저장소 `{}` 이(가) 성공적으로 삭제됐어요."
|
||||||
|
|
||||||
#: ../downloader.py:237
|
#: ../downloader.py:237
|
||||||
msgid "Installed Repos:\n"
|
msgid "Installed Repos:\n"
|
||||||
msgstr "설치된 저장소 리스트:\n"
|
msgstr "설치된 저장소 리스트 :"
|
||||||
|
|
||||||
#: ../downloader.py:258
|
#: ../downloader.py:258
|
||||||
msgid "Error, there is no cog by the name of `{}` in the `{}` repo."
|
msgid "Error, there is no cog by the name of `{}` in the `{}` repo."
|
||||||
msgstr "에러, `{}` 저장소에 `{}` 로 해당된 cog가 없습니다."
|
msgstr "에러, `{}` 저장소에 `{}` 으로 해당된 cog가 없어요."
|
||||||
|
|
||||||
#: ../downloader.py:263
|
#: ../downloader.py:263
|
||||||
msgid "Failed to install the required libraries for `{}`: `{}`"
|
msgid "Failed to install the required libraries for `{}`: `{}`"
|
||||||
msgstr "`{}`에 필요한 라이브러리를 설치 실패 햇습니다: `{}`"
|
msgstr "`{}` 에 필요한 라이브러리 설치를 실패했어요 : `{}`"
|
||||||
|
|
||||||
#: ../downloader.py:273
|
#: ../downloader.py:273
|
||||||
msgid "`{}` cog successfully installed."
|
msgid "`{}` cog successfully installed."
|
||||||
msgstr "`{}` cog가 성공적으로 설치 되었습니다."
|
msgstr "`{}` cog가 성공적으로 설치됐어요."
|
||||||
|
|
||||||
#: ../downloader.py:289
|
#: ../downloader.py:289
|
||||||
msgid "`{}` was successfully removed."
|
msgid "`{}` was successfully removed."
|
||||||
msgstr "`{}` 가 성공적으로 제거되었습니다."
|
msgstr "`{}` 이(가) 성공적으로 제거됐어요."
|
||||||
|
|
||||||
#: ../downloader.py:291
|
#: ../downloader.py:291
|
||||||
msgid "That cog was installed but can no longer be located. You may need to remove it's files manually if it is still usable."
|
msgid "That cog was installed but can no longer be located. You may need to remove it's files manually if it is still usable."
|
||||||
msgstr "해당 cog가 설치되었지만 위치를 찾을수 없습니다. 만약 해당 cog가 사용 가능하다면 유저가 직접 파일들을 지워야 합니다."
|
msgstr "해당 cog가 설치되었지만 더 이상 찾을 수 없어요. 그래도 사용할 수 있는 경우 수동으로 파일을 제거해야 해요."
|
||||||
|
|
||||||
#: ../downloader.py:323
|
#: ../downloader.py:323
|
||||||
msgid "Cog update completed successfully."
|
msgid "Cog update completed successfully."
|
||||||
msgstr "Cog가 성공적으로 업데이트 되었습니다."
|
msgstr "Cog가 성공적으로 업데이트됐어요."
|
||||||
|
|
||||||
#: ../downloader.py:331
|
#: ../downloader.py:331
|
||||||
msgid "Available Cogs:\n"
|
msgid "Available Cogs:\n"
|
||||||
msgstr "사용가능한 Cogs:\n"
|
msgstr "사용 가능한 Cogs :\n"
|
||||||
|
|
||||||
#: ../downloader.py:343
|
#: ../downloader.py:343
|
||||||
msgid "There is no cog `{}` in the repo `{}`"
|
msgid "There is no cog `{}` in the repo `{}`"
|
||||||
msgstr "저장소 `{}` 에 `{}`로 된 Cog가 없습니다."
|
msgstr "저장소 `{}` 에 `{}` 으로 된 Cog가 없어요."
|
||||||
|
|
||||||
#: ../downloader.py:348
|
#: ../downloader.py:348
|
||||||
msgid "Information on {}:\n"
|
msgid "Information on {}:\n"
|
||||||
"{}"
|
"{}"
|
||||||
msgstr "`{}`에 대한 정보:\n"
|
msgstr "`{}` 에 대한 정보 :\n"
|
||||||
"{}"
|
"{}"
|
||||||
|
|
||||||
#: ../downloader.py:389
|
#: ../downloader.py:389
|
||||||
msgid "Missing from info.json"
|
msgid "Missing from info.json"
|
||||||
msgstr "Info.json에 정보가 없습니다."
|
msgstr "Info.json 파일에서 누락됐어요."
|
||||||
|
|
||||||
#: ../downloader.py:398
|
#: ../downloader.py:398
|
||||||
msgid "Command: {}\n"
|
msgid "Command: {}\n"
|
||||||
"Made by: {}\n"
|
"Made by: {}\n"
|
||||||
"Repo: {}\n"
|
"Repo: {}\n"
|
||||||
"Cog name: {}"
|
"Cog name: {}"
|
||||||
msgstr "명령어: {}\n"
|
msgstr "커맨드 : {}\n"
|
||||||
"작성자: {}\n"
|
"작성자 : {}\n"
|
||||||
"저장소: {}\n"
|
"저장소 : {}\n"
|
||||||
"Cog 이름: {}"
|
"Cog 이름 : {}"
|
||||||
|
|
||||||
#: ../downloader.py:430
|
#: ../downloader.py:430
|
||||||
msgid "That command doesn't seem to exist."
|
msgid "That command doesn't seem to exist."
|
||||||
msgstr "해당 명령어가 존재하지 않습니다."
|
msgstr "해당 커맨드가 등록되어 있지 않아요."
|
||||||
|
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: red-discordbot\n"
|
"Project-Id-Version: red-discordbot\n"
|
||||||
"POT-Creation-Date: 2018-02-19 03:59+UTC\n"
|
"POT-Creation-Date: 2018-02-19 03:59+UTC\n"
|
||||||
"PO-Revision-Date: 2018-02-25 21:33-0500\n"
|
"PO-Revision-Date: 2018-04-02 19:27-0400\n"
|
||||||
"Last-Translator: Kowlin <boxedpp@gmail.com>\n"
|
"Last-Translator: Kowlin <boxedpp@gmail.com>\n"
|
||||||
"Language-Team: Dutch\n"
|
"Language-Team: Dutch\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: red-discordbot\n"
|
"Project-Id-Version: red-discordbot\n"
|
||||||
"POT-Creation-Date: 2018-02-19 03:59+UTC\n"
|
"POT-Creation-Date: 2018-02-19 03:59+UTC\n"
|
||||||
"PO-Revision-Date: 2018-02-25 21:33-0500\n"
|
"PO-Revision-Date: 2018-04-02 19:27-0400\n"
|
||||||
"Last-Translator: Kowlin <boxedpp@gmail.com>\n"
|
"Last-Translator: Kowlin <boxedpp@gmail.com>\n"
|
||||||
"Language-Team: Russian\n"
|
"Language-Team: Russian\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: red-discordbot\n"
|
"Project-Id-Version: red-discordbot\n"
|
||||||
"POT-Creation-Date: 2018-02-18 14:42+AKST\n"
|
"POT-Creation-Date: 2018-02-18 14:42+AKST\n"
|
||||||
"PO-Revision-Date: 2018-02-25 21:33-0500\n"
|
"PO-Revision-Date: 2018-02-27 01:49-0500\n"
|
||||||
"Last-Translator: Kowlin <boxedpp@gmail.com>\n"
|
"Last-Translator: Kowlin <boxedpp@gmail.com>\n"
|
||||||
"Language-Team: German\n"
|
"Language-Team: German\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: red-discordbot\n"
|
"Project-Id-Version: red-discordbot\n"
|
||||||
"POT-Creation-Date: 2018-02-18 14:42+AKST\n"
|
"POT-Creation-Date: 2018-02-18 14:42+AKST\n"
|
||||||
"PO-Revision-Date: 2018-02-25 21:34-0500\n"
|
"PO-Revision-Date: 2018-04-02 19:27-0400\n"
|
||||||
"Last-Translator: Kowlin <boxedpp@gmail.com>\n"
|
"Last-Translator: Kowlin <boxedpp@gmail.com>\n"
|
||||||
"Language-Team: Pirate English\n"
|
"Language-Team: Pirate English\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: red-discordbot\n"
|
"Project-Id-Version: red-discordbot\n"
|
||||||
"POT-Creation-Date: 2018-02-18 14:42+AKST\n"
|
"POT-Creation-Date: 2018-02-18 14:42+AKST\n"
|
||||||
"PO-Revision-Date: 2018-02-25 21:34-0500\n"
|
"PO-Revision-Date: 2018-04-02 19:27-0400\n"
|
||||||
"Last-Translator: Kowlin <boxedpp@gmail.com>\n"
|
"Last-Translator: Kowlin <boxedpp@gmail.com>\n"
|
||||||
"Language-Team: Indonesian\n"
|
"Language-Team: Indonesian\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
@@ -85,7 +85,8 @@ msgstr "{} setel akun {} ke {} {}."
|
|||||||
#: ../economy.py:212
|
#: ../economy.py:212
|
||||||
msgid "This will delete all bank accounts for {}.\n"
|
msgid "This will delete all bank accounts for {}.\n"
|
||||||
"If you're sure, type `{}bank reset yes`"
|
"If you're sure, type `{}bank reset yes`"
|
||||||
msgstr ""
|
msgstr "Ini akan menghapus semua akunbank untuk {}.\n"
|
||||||
|
"Jika anda telah yakin, ketik {} reset bank ya`"
|
||||||
|
|
||||||
#: ../economy.py:229
|
#: ../economy.py:229
|
||||||
msgid "All bank accounts of this guild have been deleted."
|
msgid "All bank accounts of this guild have been deleted."
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: red-discordbot\n"
|
"Project-Id-Version: red-discordbot\n"
|
||||||
"POT-Creation-Date: 2018-02-18 14:42+AKST\n"
|
"POT-Creation-Date: 2018-02-18 14:42+AKST\n"
|
||||||
"PO-Revision-Date: 2018-02-25 21:33-0500\n"
|
"PO-Revision-Date: 2018-04-02 19:26-0400\n"
|
||||||
"Last-Translator: Kowlin <boxedpp@gmail.com>\n"
|
"Last-Translator: Kowlin <boxedpp@gmail.com>\n"
|
||||||
"Language-Team: Korean\n"
|
"Language-Team: Korean\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
@@ -18,31 +18,31 @@ msgstr ""
|
|||||||
|
|
||||||
#: ../economy.py:40
|
#: ../economy.py:40
|
||||||
msgid "JACKPOT! 226! Your bid has been multiplied * 2500!"
|
msgid "JACKPOT! 226! Your bid has been multiplied * 2500!"
|
||||||
msgstr ""
|
msgstr "대박이야! 226! 사용자님의 입찰 가격이 2,500을 넘었어요!"
|
||||||
|
|
||||||
#: ../economy.py:44
|
#: ../economy.py:44
|
||||||
msgid "4LC! +1000!"
|
msgid "4LC! +1000!"
|
||||||
msgstr ""
|
msgstr "포 클로버! + 1000!"
|
||||||
|
|
||||||
#: ../economy.py:48
|
#: ../economy.py:48
|
||||||
msgid "Three cherries! +800!"
|
msgid "Three cherries! +800!"
|
||||||
msgstr ""
|
msgstr "체리 셋! +800!"
|
||||||
|
|
||||||
#: ../economy.py:52
|
#: ../economy.py:52
|
||||||
msgid "2 6! Your bid has been multiplied * 4!"
|
msgid "2 6! Your bid has been multiplied * 4!"
|
||||||
msgstr ""
|
msgstr "2 6! 사용자님의 입찰 가격이 4배로 늘었어요!"
|
||||||
|
|
||||||
#: ../economy.py:56
|
#: ../economy.py:56
|
||||||
msgid "Two cherries! Your bid has been multiplied * 3!"
|
msgid "Two cherries! Your bid has been multiplied * 3!"
|
||||||
msgstr ""
|
msgstr "체리 두 개! 사용자님의 입찰 가격이 3배로 올랐어요!"
|
||||||
|
|
||||||
#: ../economy.py:60
|
#: ../economy.py:60
|
||||||
msgid "Three symbols! +500!"
|
msgid "Three symbols! +500!"
|
||||||
msgstr ""
|
msgstr "3개의 심볼! +500!"
|
||||||
|
|
||||||
#: ../economy.py:64
|
#: ../economy.py:64
|
||||||
msgid "Two consecutive symbols! Your bid has been multiplied * 2!"
|
msgid "Two consecutive symbols! Your bid has been multiplied * 2!"
|
||||||
msgstr ""
|
msgstr "2연속 심볼! 당신의 입찰 가격이 2배로 늘었어요!"
|
||||||
|
|
||||||
#: ../economy.py:68
|
#: ../economy.py:68
|
||||||
msgid "Slot machine payouts:\n"
|
msgid "Slot machine payouts:\n"
|
||||||
@@ -53,74 +53,86 @@ msgid "Slot machine payouts:\n"
|
|||||||
"{cherries.value} {cherries.value} Bet * 3\n\n"
|
"{cherries.value} {cherries.value} Bet * 3\n\n"
|
||||||
"Three symbols: +500\n"
|
"Three symbols: +500\n"
|
||||||
"Two symbols: Bet * 2"
|
"Two symbols: Bet * 2"
|
||||||
msgstr ""
|
msgstr "슬롯 머신 지불금 :\n"
|
||||||
|
"{two.value} {two.value} {six.value} 베팅 * 2500\n"
|
||||||
|
"{flc.value} {flc.value} {flc.value} +1000\n"
|
||||||
|
"{cherries.value} {cherries.value} {cherries.value} +800\n"
|
||||||
|
"{two.value} {six.value} 베팅 * 4\n"
|
||||||
|
"{cherries.value} {cherries.value} 베팅 * 3"
|
||||||
|
|
||||||
#: ../economy.py:157
|
#: ../economy.py:157
|
||||||
msgid "{}'s balance is {} {}"
|
msgid "{}'s balance is {} {}"
|
||||||
msgstr ""
|
msgstr "{}의 잔액은 {} {} 이에요."
|
||||||
|
|
||||||
#: ../economy.py:171
|
#: ../economy.py:171
|
||||||
msgid "{} transferred {} {} to {}"
|
msgid "{} transferred {} {} to {}"
|
||||||
msgstr ""
|
msgstr "{1} 이(가) {2} {3} {4} 으로 전송됐어요."
|
||||||
|
|
||||||
#: ../economy.py:191
|
#: ../economy.py:191
|
||||||
msgid "{} added {} {} to {}'s account."
|
msgid "{} added {} {} to {}'s account."
|
||||||
msgstr ""
|
msgstr "{1} 이(가) {4}의 계정에 {2} {3} 을(를) 추가했어요."
|
||||||
|
|
||||||
#: ../economy.py:196
|
#: ../economy.py:196
|
||||||
msgid "{} removed {} {} from {}'s account."
|
msgid "{} removed {} {} from {}'s account."
|
||||||
msgstr ""
|
msgstr "{1} 이(가) {4}의 계정에서 {3} {4} 을(를) 제거했어요."
|
||||||
|
|
||||||
#: ../economy.py:201
|
#: ../economy.py:201
|
||||||
msgid "{} set {}'s account to {} {}."
|
msgid "{} set {}'s account to {} {}."
|
||||||
msgstr ""
|
msgstr "{1} 이(가) {4}의 계정을 {2} {3} (으)로 설정했어요."
|
||||||
|
|
||||||
#: ../economy.py:212
|
#: ../economy.py:212
|
||||||
msgid "This will delete all bank accounts for {}.\n"
|
msgid "This will delete all bank accounts for {}.\n"
|
||||||
"If you're sure, type `{}bank reset yes`"
|
"If you're sure, type `{}bank reset yes`"
|
||||||
msgstr ""
|
msgstr "{} 에 대한 모든 은행 계정이 삭제될 거예요.\n"
|
||||||
|
"확실한 경우 `{}bank reset yes` 를 입력해야 해요."
|
||||||
|
|
||||||
#: ../economy.py:229
|
#: ../economy.py:229
|
||||||
msgid "All bank accounts of this guild have been deleted."
|
msgid "All bank accounts of this guild have been deleted."
|
||||||
msgstr ""
|
msgstr "이 길드의 모든 은행 계정이 삭제됐어요."
|
||||||
|
|
||||||
#: ../economy.py:248 ../economy.py:268
|
#: ../economy.py:248 ../economy.py:268
|
||||||
msgid "{} Here, take some {}. Enjoy! (+{} {}!)"
|
msgid "{} Here, take some {}. Enjoy! (+{} {}!)"
|
||||||
msgstr ""
|
msgstr "{} 여기요, 조금의 {} 을(를) 받아요. 즐겨요! (+{} {}!)"
|
||||||
|
|
||||||
#: ../economy.py:258 ../economy.py:276
|
#: ../economy.py:258 ../economy.py:276
|
||||||
msgid "{} Too soon. For your next payday you have to wait {}."
|
msgid "{} Too soon. For your next payday you have to wait {}."
|
||||||
msgstr ""
|
msgstr "{} 너무 일러요. 다음 월급날을 위해서 {} 을(를) 기다려야 해요."
|
||||||
|
|
||||||
#: ../economy.py:313
|
#: ../economy.py:313
|
||||||
msgid "There are no accounts in the bank."
|
msgid "There are no accounts in the bank."
|
||||||
msgstr ""
|
msgstr "은행에 등록된 계좌가 없어요."
|
||||||
|
|
||||||
#: ../economy.py:339
|
#: ../economy.py:339
|
||||||
msgid "You're on cooldown, try again in a bit."
|
msgid "You're on cooldown, try again in a bit."
|
||||||
msgstr ""
|
msgstr "사용자님은 지금 쿨타임이에요. 잠시 후에 다시 시도해보세요."
|
||||||
|
|
||||||
#: ../economy.py:342
|
#: ../economy.py:342
|
||||||
msgid "That's an invalid bid amount, sorry :/"
|
msgid "That's an invalid bid amount, sorry :/"
|
||||||
msgstr ""
|
msgstr "잘못된 입찰 금액이에요, 죄송해요. ;/"
|
||||||
|
|
||||||
#: ../economy.py:345
|
#: ../economy.py:345
|
||||||
msgid "You ain't got enough money, friend."
|
msgid "You ain't got enough money, friend."
|
||||||
msgstr ""
|
msgstr "동작 그만, 밑장빼기냐? 돈이 없잖아."
|
||||||
|
|
||||||
#: ../economy.py:391
|
#: ../economy.py:391
|
||||||
msgid "{}\n"
|
msgid "{}\n"
|
||||||
"{} {}\n\n"
|
"{} {}\n\n"
|
||||||
"Your bid: {}\n"
|
"Your bid: {}\n"
|
||||||
"{} → {}!"
|
"{} → {}!"
|
||||||
msgstr ""
|
msgstr "{}\n"
|
||||||
|
"{} {}\n\n"
|
||||||
|
"사용자님의 입찰 금액 : {}\n"
|
||||||
|
"{} → {}!"
|
||||||
|
|
||||||
#: ../economy.py:398
|
#: ../economy.py:398
|
||||||
msgid "{}\n"
|
msgid "{}\n"
|
||||||
"{} Nothing!\n"
|
"{} Nothing!\n"
|
||||||
"Your bid: {}\n"
|
"Your bid: {}\n"
|
||||||
"{} → {}!"
|
"{} → {}!"
|
||||||
msgstr ""
|
msgstr "{}\n"
|
||||||
|
"{} 읎어요!\n"
|
||||||
|
"사용자님의 입찰 금액 : {}\n"
|
||||||
|
"{} → {}!"
|
||||||
|
|
||||||
#: ../economy.py:423
|
#: ../economy.py:423
|
||||||
msgid "Minimum slot bid: {}\n"
|
msgid "Minimum slot bid: {}\n"
|
||||||
@@ -129,65 +141,70 @@ msgid "Minimum slot bid: {}\n"
|
|||||||
"Payday amount: {}\n"
|
"Payday amount: {}\n"
|
||||||
"Payday cooldown: {}\n"
|
"Payday cooldown: {}\n"
|
||||||
"Amount given at account registration: {}"
|
"Amount given at account registration: {}"
|
||||||
msgstr ""
|
msgstr "최소 슬롯 입찰 수 : {}\n"
|
||||||
|
"최대 슬롯 입찰 수 : {}\n"
|
||||||
|
"슬롯 쿨타임 : {}\n"
|
||||||
|
"급여 금액 : {}\n"
|
||||||
|
"급여의 재사용 가능 시간 : {}\n"
|
||||||
|
"계좌 등록 시 지급된 금액 : {}"
|
||||||
|
|
||||||
#: ../economy.py:433
|
#: ../economy.py:433
|
||||||
msgid "Current Economy settings:"
|
msgid "Current Economy settings:"
|
||||||
msgstr ""
|
msgstr "현재 이코노미 설정 :"
|
||||||
|
|
||||||
#: ../economy.py:441
|
#: ../economy.py:441
|
||||||
msgid "Invalid min bid amount."
|
msgid "Invalid min bid amount."
|
||||||
msgstr ""
|
msgstr "최소 입찰 금액이 잘못됐어요."
|
||||||
|
|
||||||
#: ../economy.py:449
|
#: ../economy.py:449
|
||||||
msgid "Minimum bid is now {} {}."
|
msgid "Minimum bid is now {} {}."
|
||||||
msgstr ""
|
msgstr "이제 최소 입찰가는 {} {} 이에요."
|
||||||
|
|
||||||
#: ../economy.py:456
|
#: ../economy.py:456
|
||||||
msgid "Invalid slotmax bid amount. Must be greater than slotmin."
|
msgid "Invalid slotmax bid amount. Must be greater than slotmin."
|
||||||
msgstr ""
|
msgstr "슬롯 최대 입찰 금액이 잘못됐어요. 슬롯 최솟값보다 커야 해요."
|
||||||
|
|
||||||
#: ../economy.py:465
|
#: ../economy.py:465
|
||||||
msgid "Maximum bid is now {} {}."
|
msgid "Maximum bid is now {} {}."
|
||||||
msgstr ""
|
msgstr "이제 최대 입찰가는 {} {} 이에요."
|
||||||
|
|
||||||
#: ../economy.py:475
|
#: ../economy.py:475
|
||||||
msgid "Cooldown is now {} seconds."
|
msgid "Cooldown is now {} seconds."
|
||||||
msgstr ""
|
msgstr "이제 쿨타임은 {} 초예요."
|
||||||
|
|
||||||
#: ../economy.py:485
|
#: ../economy.py:485
|
||||||
msgid "Value modified. At least {} seconds must pass between each payday."
|
msgid "Value modified. At least {} seconds must pass between each payday."
|
||||||
msgstr ""
|
msgstr "값이 수정됐어요. 각각의 월급날 사이에 적어도 {} 초가 지나야 해요."
|
||||||
|
|
||||||
#: ../economy.py:494
|
#: ../economy.py:494
|
||||||
msgid "Har har so funny."
|
msgid "Har har so funny."
|
||||||
msgstr ""
|
msgstr "ㅋㅋㅋ 개 재밌다."
|
||||||
|
|
||||||
#: ../economy.py:500
|
#: ../economy.py:500
|
||||||
msgid "Every payday will now give {} {}."
|
msgid "Every payday will now give {} {}."
|
||||||
msgstr ""
|
msgstr "이제 월급날 때마다 {} {} 을(를) 줄 거예요."
|
||||||
|
|
||||||
#: ../economy.py:511
|
#: ../economy.py:511
|
||||||
msgid "Registering an account will now give {} {}."
|
msgid "Registering an account will now give {} {}."
|
||||||
msgstr ""
|
msgstr "이제 계정을 등록하면 {} {} 이(가) 지급돼요."
|
||||||
|
|
||||||
#: ../economy.py:517
|
#: ../economy.py:517
|
||||||
msgid "weeks"
|
msgid "weeks"
|
||||||
msgstr ""
|
msgstr "주"
|
||||||
|
|
||||||
#: ../economy.py:518
|
#: ../economy.py:518
|
||||||
msgid "days"
|
msgid "days"
|
||||||
msgstr ""
|
msgstr "날"
|
||||||
|
|
||||||
#: ../economy.py:519
|
#: ../economy.py:519
|
||||||
msgid "hours"
|
msgid "hours"
|
||||||
msgstr ""
|
msgstr "시간"
|
||||||
|
|
||||||
#: ../economy.py:520
|
#: ../economy.py:520
|
||||||
msgid "minutes"
|
msgid "minutes"
|
||||||
msgstr ""
|
msgstr "분"
|
||||||
|
|
||||||
#: ../economy.py:521
|
#: ../economy.py:521
|
||||||
msgid "seconds"
|
msgid "seconds"
|
||||||
msgstr ""
|
msgstr "초"
|
||||||
|
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: red-discordbot\n"
|
"Project-Id-Version: red-discordbot\n"
|
||||||
"POT-Creation-Date: 2018-02-18 14:42+AKST\n"
|
"POT-Creation-Date: 2018-02-18 14:42+AKST\n"
|
||||||
"PO-Revision-Date: 2018-02-25 21:33-0500\n"
|
"PO-Revision-Date: 2018-04-02 19:27-0400\n"
|
||||||
"Last-Translator: Kowlin <boxedpp@gmail.com>\n"
|
"Last-Translator: Kowlin <boxedpp@gmail.com>\n"
|
||||||
"Language-Team: Dutch\n"
|
"Language-Team: Dutch\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: red-discordbot\n"
|
"Project-Id-Version: red-discordbot\n"
|
||||||
"POT-Creation-Date: 2018-02-18 14:42+AKST\n"
|
"POT-Creation-Date: 2018-02-18 14:42+AKST\n"
|
||||||
"PO-Revision-Date: 2018-02-25 21:33-0500\n"
|
"PO-Revision-Date: 2018-04-02 19:27-0400\n"
|
||||||
"Last-Translator: Kowlin <boxedpp@gmail.com>\n"
|
"Last-Translator: Kowlin <boxedpp@gmail.com>\n"
|
||||||
"Language-Team: Russian\n"
|
"Language-Team: Russian\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
|
|||||||
@@ -240,8 +240,8 @@ class Filter:
|
|||||||
pass
|
pass
|
||||||
else:
|
else:
|
||||||
await modlog.create_case(
|
await modlog.create_case(
|
||||||
server, message.created_at, "filterban",
|
self.bot, server, message.created_at,
|
||||||
author, server.me, reason
|
"filterban", author, server.me, reason
|
||||||
)
|
)
|
||||||
|
|
||||||
async def on_message(self, message: discord.Message):
|
async def on_message(self, message: discord.Message):
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: red-discordbot\n"
|
"Project-Id-Version: red-discordbot\n"
|
||||||
"POT-Creation-Date: 2018-02-18 14:42+AKST\n"
|
"POT-Creation-Date: 2018-02-18 14:42+AKST\n"
|
||||||
"PO-Revision-Date: 2018-02-25 21:33-0500\n"
|
"PO-Revision-Date: 2018-02-27 01:49-0500\n"
|
||||||
"Last-Translator: Kowlin <boxedpp@gmail.com>\n"
|
"Last-Translator: Kowlin <boxedpp@gmail.com>\n"
|
||||||
"Language-Team: German\n"
|
"Language-Team: German\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: red-discordbot\n"
|
"Project-Id-Version: red-discordbot\n"
|
||||||
"POT-Creation-Date: 2018-02-18 14:42+AKST\n"
|
"POT-Creation-Date: 2018-02-18 14:42+AKST\n"
|
||||||
"PO-Revision-Date: 2018-02-25 21:34-0500\n"
|
"PO-Revision-Date: 2018-04-02 19:27-0400\n"
|
||||||
"Last-Translator: Kowlin <boxedpp@gmail.com>\n"
|
"Last-Translator: Kowlin <boxedpp@gmail.com>\n"
|
||||||
"Language-Team: Pirate English\n"
|
"Language-Team: Pirate English\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: red-discordbot\n"
|
"Project-Id-Version: red-discordbot\n"
|
||||||
"POT-Creation-Date: 2018-02-18 14:42+AKST\n"
|
"POT-Creation-Date: 2018-02-18 14:42+AKST\n"
|
||||||
"PO-Revision-Date: 2018-02-25 21:34-0500\n"
|
"PO-Revision-Date: 2018-04-02 19:27-0400\n"
|
||||||
"Last-Translator: Kowlin <boxedpp@gmail.com>\n"
|
"Last-Translator: Kowlin <boxedpp@gmail.com>\n"
|
||||||
"Language-Team: Indonesian\n"
|
"Language-Team: Indonesian\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
@@ -18,49 +18,49 @@ msgstr ""
|
|||||||
|
|
||||||
#: ../filter.py:62
|
#: ../filter.py:62
|
||||||
msgid "Filtered in this server:"
|
msgid "Filtered in this server:"
|
||||||
msgstr ""
|
msgstr "Disaring pada server ini:"
|
||||||
|
|
||||||
#: ../filter.py:67
|
#: ../filter.py:67
|
||||||
msgid "I can't send direct messages to you."
|
msgid "I can't send direct messages to you."
|
||||||
msgstr ""
|
msgstr "Saya tidak dapat mengirim pesan langsung kepada Anda."
|
||||||
|
|
||||||
#: ../filter.py:96
|
#: ../filter.py:96
|
||||||
msgid "Words added to filter."
|
msgid "Words added to filter."
|
||||||
msgstr ""
|
msgstr "Kata-kata yang ditambahkan untuk disaring."
|
||||||
|
|
||||||
#: ../filter.py:98
|
#: ../filter.py:98
|
||||||
msgid "Words already in the filter."
|
msgid "Words already in the filter."
|
||||||
msgstr ""
|
msgstr "Kata-kata yang sudah di disaring."
|
||||||
|
|
||||||
#: ../filter.py:127
|
#: ../filter.py:127
|
||||||
msgid "Words removed from filter."
|
msgid "Words removed from filter."
|
||||||
msgstr ""
|
msgstr "Kata-kata dihapus dari penyaring."
|
||||||
|
|
||||||
#: ../filter.py:129
|
#: ../filter.py:129
|
||||||
msgid "Those words weren't in the filter."
|
msgid "Those words weren't in the filter."
|
||||||
msgstr ""
|
msgstr "Kata-kata tidak dalam penyaring."
|
||||||
|
|
||||||
#: ../filter.py:142
|
#: ../filter.py:142
|
||||||
msgid "Names and nicknames will no longer be checked against the filter"
|
msgid "Names and nicknames will no longer be checked against the filter"
|
||||||
msgstr ""
|
msgstr "Nama dan julukan tidak lagi dapat diperiksa terhadap penyaring"
|
||||||
|
|
||||||
#: ../filter.py:147
|
#: ../filter.py:147
|
||||||
msgid "Names and nicknames will now be checked against the filter"
|
msgid "Names and nicknames will now be checked against the filter"
|
||||||
msgstr ""
|
msgstr "Nama dan julukan akan di periksa terhadap penyaring"
|
||||||
|
|
||||||
#: ../filter.py:160
|
#: ../filter.py:160
|
||||||
msgid "The name to use on filtered names has been set"
|
msgid "The name to use on filtered names has been set"
|
||||||
msgstr ""
|
msgstr "Nama yang digunakan untuk penyaring telah ditetapkan"
|
||||||
|
|
||||||
#: ../filter.py:171
|
#: ../filter.py:171
|
||||||
msgid "Count and timeframe either both need to be 0 or both need to be greater than 0!"
|
msgid "Count and timeframe either both need to be 0 or both need to be greater than 0!"
|
||||||
msgstr ""
|
msgstr "Count dan jangka waktu keduanya harus 0 atau keduanya harus lebih besar dari 0!"
|
||||||
|
|
||||||
#: ../filter.py:179
|
#: ../filter.py:179
|
||||||
msgid "Autoban disabled."
|
msgid "Autoban disabled."
|
||||||
msgstr ""
|
msgstr "Autoban dimatikan."
|
||||||
|
|
||||||
#: ../filter.py:183
|
#: ../filter.py:183
|
||||||
msgid "Count and time have been set."
|
msgid "Count and time have been set."
|
||||||
msgstr ""
|
msgstr "Jumlah dan waktu telah ditetapkan."
|
||||||
|
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: red-discordbot\n"
|
"Project-Id-Version: red-discordbot\n"
|
||||||
"POT-Creation-Date: 2018-02-18 14:42+AKST\n"
|
"POT-Creation-Date: 2018-02-18 14:42+AKST\n"
|
||||||
"PO-Revision-Date: 2018-02-25 21:33-0500\n"
|
"PO-Revision-Date: 2018-04-02 19:26-0400\n"
|
||||||
"Last-Translator: Kowlin <boxedpp@gmail.com>\n"
|
"Last-Translator: Kowlin <boxedpp@gmail.com>\n"
|
||||||
"Language-Team: Korean\n"
|
"Language-Team: Korean\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
@@ -18,49 +18,49 @@ msgstr ""
|
|||||||
|
|
||||||
#: ../filter.py:62
|
#: ../filter.py:62
|
||||||
msgid "Filtered in this server:"
|
msgid "Filtered in this server:"
|
||||||
msgstr ""
|
msgstr "이 서버에서 필터링 된 항목 :"
|
||||||
|
|
||||||
#: ../filter.py:67
|
#: ../filter.py:67
|
||||||
msgid "I can't send direct messages to you."
|
msgid "I can't send direct messages to you."
|
||||||
msgstr ""
|
msgstr "사용자님에게 직접 메시지를 보낼 수 없어요."
|
||||||
|
|
||||||
#: ../filter.py:96
|
#: ../filter.py:96
|
||||||
msgid "Words added to filter."
|
msgid "Words added to filter."
|
||||||
msgstr ""
|
msgstr "필터링에 추가된 단어예요."
|
||||||
|
|
||||||
#: ../filter.py:98
|
#: ../filter.py:98
|
||||||
msgid "Words already in the filter."
|
msgid "Words already in the filter."
|
||||||
msgstr ""
|
msgstr "필터에 이미 있는 단어예요."
|
||||||
|
|
||||||
#: ../filter.py:127
|
#: ../filter.py:127
|
||||||
msgid "Words removed from filter."
|
msgid "Words removed from filter."
|
||||||
msgstr ""
|
msgstr "필터에서 제거된 단어예요."
|
||||||
|
|
||||||
#: ../filter.py:129
|
#: ../filter.py:129
|
||||||
msgid "Those words weren't in the filter."
|
msgid "Those words weren't in the filter."
|
||||||
msgstr ""
|
msgstr "해당 단어들은 필터에 들어 있지 않아요."
|
||||||
|
|
||||||
#: ../filter.py:142
|
#: ../filter.py:142
|
||||||
msgid "Names and nicknames will no longer be checked against the filter"
|
msgid "Names and nicknames will no longer be checked against the filter"
|
||||||
msgstr ""
|
msgstr "필터에 대한 이름 및 닉네임을 더 이상 확인할 수 없어요."
|
||||||
|
|
||||||
#: ../filter.py:147
|
#: ../filter.py:147
|
||||||
msgid "Names and nicknames will now be checked against the filter"
|
msgid "Names and nicknames will now be checked against the filter"
|
||||||
msgstr ""
|
msgstr "이제 이름과 닉네임을 필터에서 개별적으로 인식해요."
|
||||||
|
|
||||||
#: ../filter.py:160
|
#: ../filter.py:160
|
||||||
msgid "The name to use on filtered names has been set"
|
msgid "The name to use on filtered names has been set"
|
||||||
msgstr ""
|
msgstr "필터링 된 이름에 사용할 이름이 설정됐어요."
|
||||||
|
|
||||||
#: ../filter.py:171
|
#: ../filter.py:171
|
||||||
msgid "Count and timeframe either both need to be 0 or both need to be greater than 0!"
|
msgid "Count and timeframe either both need to be 0 or both need to be greater than 0!"
|
||||||
msgstr ""
|
msgstr "개수와 시간은 모두 0이어야 하거나 0보다 커야 해요!"
|
||||||
|
|
||||||
#: ../filter.py:179
|
#: ../filter.py:179
|
||||||
msgid "Autoban disabled."
|
msgid "Autoban disabled."
|
||||||
msgstr ""
|
msgstr "자동 밴이 중지됐어요."
|
||||||
|
|
||||||
#: ../filter.py:183
|
#: ../filter.py:183
|
||||||
msgid "Count and time have been set."
|
msgid "Count and time have been set."
|
||||||
msgstr ""
|
msgstr "개수와 시간이 설정됐어요."
|
||||||
|
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: red-discordbot\n"
|
"Project-Id-Version: red-discordbot\n"
|
||||||
"POT-Creation-Date: 2018-02-18 14:42+AKST\n"
|
"POT-Creation-Date: 2018-02-18 14:42+AKST\n"
|
||||||
"PO-Revision-Date: 2018-02-25 21:33-0500\n"
|
"PO-Revision-Date: 2018-04-02 19:27-0400\n"
|
||||||
"Last-Translator: Kowlin <boxedpp@gmail.com>\n"
|
"Last-Translator: Kowlin <boxedpp@gmail.com>\n"
|
||||||
"Language-Team: Dutch\n"
|
"Language-Team: Dutch\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: red-discordbot\n"
|
"Project-Id-Version: red-discordbot\n"
|
||||||
"POT-Creation-Date: 2018-02-18 14:42+AKST\n"
|
"POT-Creation-Date: 2018-02-18 14:42+AKST\n"
|
||||||
"PO-Revision-Date: 2018-02-25 21:33-0500\n"
|
"PO-Revision-Date: 2018-04-02 19:27-0400\n"
|
||||||
"Last-Translator: Kowlin <boxedpp@gmail.com>\n"
|
"Last-Translator: Kowlin <boxedpp@gmail.com>\n"
|
||||||
"Language-Team: Russian\n"
|
"Language-Team: Russian\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
|
|||||||
@@ -90,7 +90,7 @@ class General:
|
|||||||
msg = ""
|
msg = ""
|
||||||
if user.id == ctx.bot.user.id:
|
if user.id == ctx.bot.user.id:
|
||||||
user = ctx.author
|
user = ctx.author
|
||||||
msg = _("Nice try. You think this is funny?"
|
msg = _("Nice try. You think this is funny?\n"
|
||||||
"How about *this* instead:\n\n")
|
"How about *this* instead:\n\n")
|
||||||
char = "abcdefghijklmnopqrstuvwxyz"
|
char = "abcdefghijklmnopqrstuvwxyz"
|
||||||
tran = "ɐqɔpǝɟƃɥᴉɾʞlɯuodbɹsʇnʌʍxʎz"
|
tran = "ɐqɔpǝɟƃɥᴉɾʞlɯuodbɹsʇnʌʍxʎz"
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: red-discordbot\n"
|
"Project-Id-Version: red-discordbot\n"
|
||||||
"POT-Creation-Date: 2018-02-18 14:42+AKST\n"
|
"POT-Creation-Date: 2018-02-18 14:42+AKST\n"
|
||||||
"PO-Revision-Date: 2018-02-25 21:33-0500\n"
|
"PO-Revision-Date: 2018-02-27 01:49-0500\n"
|
||||||
"Last-Translator: Kowlin <boxedpp@gmail.com>\n"
|
"Last-Translator: Kowlin <boxedpp@gmail.com>\n"
|
||||||
"Language-Team: German\n"
|
"Language-Team: German\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: red-discordbot\n"
|
"Project-Id-Version: red-discordbot\n"
|
||||||
"POT-Creation-Date: 2018-02-18 14:42+AKST\n"
|
"POT-Creation-Date: 2018-02-18 14:42+AKST\n"
|
||||||
"PO-Revision-Date: 2018-02-25 21:34-0500\n"
|
"PO-Revision-Date: 2018-04-02 19:27-0400\n"
|
||||||
"Last-Translator: Kowlin <boxedpp@gmail.com>\n"
|
"Last-Translator: Kowlin <boxedpp@gmail.com>\n"
|
||||||
"Language-Team: Pirate English\n"
|
"Language-Team: Pirate English\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: red-discordbot\n"
|
"Project-Id-Version: red-discordbot\n"
|
||||||
"POT-Creation-Date: 2018-02-18 14:42+AKST\n"
|
"POT-Creation-Date: 2018-02-18 14:42+AKST\n"
|
||||||
"PO-Revision-Date: 2018-02-25 21:34-0500\n"
|
"PO-Revision-Date: 2018-04-02 19:27-0400\n"
|
||||||
"Last-Translator: Kowlin <boxedpp@gmail.com>\n"
|
"Last-Translator: Kowlin <boxedpp@gmail.com>\n"
|
||||||
"Language-Team: Indonesian\n"
|
"Language-Team: Indonesian\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
@@ -30,11 +30,11 @@ msgstr "Jelas begitu"
|
|||||||
|
|
||||||
#: ../general.py:43
|
#: ../general.py:43
|
||||||
msgid "Most likely"
|
msgid "Most likely"
|
||||||
msgstr "Most likely"
|
msgstr "Sewajarnya"
|
||||||
|
|
||||||
#: ../general.py:43
|
#: ../general.py:43
|
||||||
msgid "Outlook good"
|
msgid "Outlook good"
|
||||||
msgstr "Melihat keluar bagus"
|
msgstr "Pandangan bagus"
|
||||||
|
|
||||||
#: ../general.py:43
|
#: ../general.py:43
|
||||||
msgid "Signs point to yes"
|
msgid "Signs point to yes"
|
||||||
@@ -50,7 +50,7 @@ msgstr "Ya"
|
|||||||
|
|
||||||
#: ../general.py:44
|
#: ../general.py:44
|
||||||
msgid "Yes – definitely"
|
msgid "Yes – definitely"
|
||||||
msgstr "Iya tentu saja"
|
msgstr "Iya - tentu saja"
|
||||||
|
|
||||||
#: ../general.py:44
|
#: ../general.py:44
|
||||||
msgid "You may rely on it"
|
msgid "You may rely on it"
|
||||||
@@ -163,15 +163,15 @@ msgstr "Bermain {}"
|
|||||||
|
|
||||||
#: ../general.py:225
|
#: ../general.py:225
|
||||||
msgid "Streaming [{}]({})"
|
msgid "Streaming [{}]({})"
|
||||||
msgstr ""
|
msgstr "Streaming [{}]({})"
|
||||||
|
|
||||||
#: ../general.py:227
|
#: ../general.py:227
|
||||||
msgid "Listening to {}"
|
msgid "Listening to {}"
|
||||||
msgstr ""
|
msgstr "Mendengarkan {}"
|
||||||
|
|
||||||
#: ../general.py:229
|
#: ../general.py:229
|
||||||
msgid "Watching {}"
|
msgid "Watching {}"
|
||||||
msgstr ""
|
msgstr "Menonton {}"
|
||||||
|
|
||||||
#: ../general.py:234
|
#: ../general.py:234
|
||||||
msgid "None"
|
msgid "None"
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: red-discordbot\n"
|
"Project-Id-Version: red-discordbot\n"
|
||||||
"POT-Creation-Date: 2018-02-18 14:42+AKST\n"
|
"POT-Creation-Date: 2018-02-18 14:42+AKST\n"
|
||||||
"PO-Revision-Date: 2018-02-25 21:33-0500\n"
|
"PO-Revision-Date: 2018-04-02 19:26-0400\n"
|
||||||
"Last-Translator: Kowlin <boxedpp@gmail.com>\n"
|
"Last-Translator: Kowlin <boxedpp@gmail.com>\n"
|
||||||
"Language-Team: Korean\n"
|
"Language-Team: Korean\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
@@ -18,222 +18,223 @@ msgstr ""
|
|||||||
|
|
||||||
#: ../general.py:42
|
#: ../general.py:42
|
||||||
msgid "As I see it, yes"
|
msgid "As I see it, yes"
|
||||||
msgstr ""
|
msgstr "내가 보기엔 그렇지!"
|
||||||
|
|
||||||
#: ../general.py:42
|
#: ../general.py:42
|
||||||
msgid "It is certain"
|
msgid "It is certain"
|
||||||
msgstr ""
|
msgstr "틀림없어요!"
|
||||||
|
|
||||||
#: ../general.py:42
|
#: ../general.py:42
|
||||||
msgid "It is decidedly so"
|
msgid "It is decidedly so"
|
||||||
msgstr ""
|
msgstr "그건 확실히 그렇지!"
|
||||||
|
|
||||||
#: ../general.py:43
|
#: ../general.py:43
|
||||||
msgid "Most likely"
|
msgid "Most likely"
|
||||||
msgstr ""
|
msgstr "아마도 그럴걸?"
|
||||||
|
|
||||||
#: ../general.py:43
|
#: ../general.py:43
|
||||||
msgid "Outlook good"
|
msgid "Outlook good"
|
||||||
msgstr ""
|
msgstr "오늘은 전망이 좋네요."
|
||||||
|
|
||||||
#: ../general.py:43
|
#: ../general.py:43
|
||||||
msgid "Signs point to yes"
|
msgid "Signs point to yes"
|
||||||
msgstr ""
|
msgstr "소라고둥이 말씀하셨다! \"그래\""
|
||||||
|
|
||||||
#: ../general.py:44
|
#: ../general.py:44
|
||||||
msgid "Without a doubt"
|
msgid "Without a doubt"
|
||||||
msgstr ""
|
msgstr "틀림없어!"
|
||||||
|
|
||||||
#: ../general.py:44
|
#: ../general.py:44
|
||||||
msgid "Yes"
|
msgid "Yes"
|
||||||
msgstr ""
|
msgstr "그래요!"
|
||||||
|
|
||||||
#: ../general.py:44
|
#: ../general.py:44
|
||||||
msgid "Yes – definitely"
|
msgid "Yes – definitely"
|
||||||
msgstr ""
|
msgstr "그래요, 물론이죠!"
|
||||||
|
|
||||||
#: ../general.py:44
|
#: ../general.py:44
|
||||||
msgid "You may rely on it"
|
msgid "You may rely on it"
|
||||||
msgstr ""
|
msgstr "그걸 믿어도 좋아요!"
|
||||||
|
|
||||||
#: ../general.py:45
|
#: ../general.py:45
|
||||||
msgid "Ask again later"
|
msgid "Ask again later"
|
||||||
msgstr ""
|
msgstr "나중에 다시 물어보세요!"
|
||||||
|
|
||||||
#: ../general.py:45
|
#: ../general.py:45
|
||||||
msgid "Reply hazy, try again"
|
msgid "Reply hazy, try again"
|
||||||
msgstr ""
|
msgstr "의미심장하네요, 다시 시도해보세요."
|
||||||
|
|
||||||
#: ../general.py:46
|
#: ../general.py:46
|
||||||
msgid "Better not tell you now"
|
msgid "Better not tell you now"
|
||||||
msgstr ""
|
msgstr "지금은 말해주지 않는게 좋겠어요."
|
||||||
|
|
||||||
#: ../general.py:46
|
#: ../general.py:46
|
||||||
msgid "Cannot predict now"
|
msgid "Cannot predict now"
|
||||||
msgstr ""
|
msgstr "지금은 예측할 수 없죠."
|
||||||
|
|
||||||
#: ../general.py:47
|
#: ../general.py:47
|
||||||
msgid "Concentrate and ask again"
|
msgid "Concentrate and ask again"
|
||||||
msgstr ""
|
msgstr "집중해서 다시 물어보세요."
|
||||||
|
|
||||||
#: ../general.py:47
|
#: ../general.py:47
|
||||||
msgid "Don't count on it"
|
msgid "Don't count on it"
|
||||||
msgstr ""
|
msgstr "그렇지 않을거예요."
|
||||||
|
|
||||||
#: ../general.py:47
|
#: ../general.py:47
|
||||||
msgid "My reply is no"
|
msgid "My reply is no"
|
||||||
msgstr ""
|
msgstr "제 대답은 \"아뇨\"예요."
|
||||||
|
|
||||||
#: ../general.py:48
|
#: ../general.py:48
|
||||||
msgid "My sources say no"
|
msgid "My sources say no"
|
||||||
msgstr ""
|
msgstr "제 진심이 말하길 \"아뇨\""
|
||||||
|
|
||||||
#: ../general.py:48
|
#: ../general.py:48
|
||||||
msgid "Outlook not so good"
|
msgid "Outlook not so good"
|
||||||
msgstr ""
|
msgstr "오늘은 전망이 별로 좋지 않네요."
|
||||||
|
|
||||||
#: ../general.py:48
|
#: ../general.py:48
|
||||||
msgid "Very doubtful"
|
msgid "Very doubtful"
|
||||||
msgstr ""
|
msgstr "동작 그만, 밑장빼기냐?"
|
||||||
|
|
||||||
#: ../general.py:64
|
#: ../general.py:64
|
||||||
msgid "Not enough choices to pick from."
|
msgid "Not enough choices to pick from."
|
||||||
msgstr ""
|
msgstr "선택의 폭이 좁은걸?"
|
||||||
|
|
||||||
#: ../general.py:78
|
#: ../general.py:78
|
||||||
msgid "{} :game_die: {} :game_die:"
|
msgid "{} :game_die: {} :game_die:"
|
||||||
msgstr ""
|
msgstr "{} :game_die: {} :game_die:"
|
||||||
|
|
||||||
#: ../general.py:81
|
#: ../general.py:81
|
||||||
msgid "{} Maybe higher than 1? ;P"
|
msgid "{} Maybe higher than 1? ;P"
|
||||||
msgstr ""
|
msgstr "{} 1보다 클수도 있죠? ;P"
|
||||||
|
|
||||||
#: ../general.py:93
|
#: ../general.py:93
|
||||||
msgid "Nice try. You think this is funny?How about *this* instead:\n\n"
|
msgid "Nice try. You think this is funny?How about *this* instead:\n\n"
|
||||||
msgstr ""
|
msgstr "시도는 좋았어요, 재밌을 것 같아요? 대신 *이건* 어때요? :"
|
||||||
|
|
||||||
#: ../general.py:106
|
#: ../general.py:106
|
||||||
msgid "*flips a coin and... "
|
msgid "*flips a coin and... "
|
||||||
msgstr ""
|
msgstr "*동전을 던지며..."
|
||||||
|
|
||||||
#: ../general.py:106
|
#: ../general.py:106
|
||||||
msgid "HEADS!*"
|
msgid "HEADS!*"
|
||||||
msgstr ""
|
msgstr "앞면!*"
|
||||||
|
|
||||||
#: ../general.py:106
|
#: ../general.py:106
|
||||||
msgid "TAILS!*"
|
msgid "TAILS!*"
|
||||||
msgstr ""
|
msgstr "뒷면!*"
|
||||||
|
|
||||||
#: ../general.py:130
|
#: ../general.py:130
|
||||||
msgid "{} You win {}!"
|
msgid "{} You win {}!"
|
||||||
msgstr ""
|
msgstr "{} {} 을(를) 획득했어요!"
|
||||||
|
|
||||||
#: ../general.py:134
|
#: ../general.py:134
|
||||||
msgid "{} You lose {}!"
|
msgid "{} You lose {}!"
|
||||||
msgstr ""
|
msgstr "{} {} 을(를) 잃었어요!"
|
||||||
|
|
||||||
#: ../general.py:138
|
#: ../general.py:138
|
||||||
msgid "{} We're square {}!"
|
msgid "{} We're square {}!"
|
||||||
msgstr ""
|
msgstr "{} 우리는 사각형이에요 {}!"
|
||||||
|
|
||||||
#: ../general.py:151
|
#: ../general.py:151
|
||||||
msgid "That doesn't look like a question."
|
msgid "That doesn't look like a question."
|
||||||
msgstr ""
|
msgstr "그건 질문으로 보이지 않아요."
|
||||||
|
|
||||||
#: ../general.py:159
|
#: ../general.py:159
|
||||||
msgid " Stopwatch started!"
|
msgid " Stopwatch started!"
|
||||||
msgstr ""
|
msgstr "스톱워치가 시작됐어요!"
|
||||||
|
|
||||||
#: ../general.py:163
|
#: ../general.py:163
|
||||||
msgid " Stopwatch stopped! Time: **"
|
msgid " Stopwatch stopped! Time: **"
|
||||||
msgstr ""
|
msgstr "스톱워치가 멈췄어요! 시간 : **"
|
||||||
|
|
||||||
#: ../general.py:216 ../general.py:217
|
#: ../general.py:216 ../general.py:217
|
||||||
msgid "{}\n"
|
msgid "{}\n"
|
||||||
"({} days ago)"
|
"({} days ago)"
|
||||||
msgstr ""
|
msgstr "{}\n"
|
||||||
|
"({} 일 전에)"
|
||||||
|
|
||||||
#: ../general.py:219
|
#: ../general.py:219
|
||||||
msgid "Chilling in {} status"
|
msgid "Chilling in {} status"
|
||||||
msgstr ""
|
msgstr "{} 상태로 오싹해졌어요."
|
||||||
|
|
||||||
#: ../general.py:223
|
#: ../general.py:223
|
||||||
msgid "Playing {}"
|
msgid "Playing {}"
|
||||||
msgstr ""
|
msgstr "재생 중 {}"
|
||||||
|
|
||||||
#: ../general.py:225
|
#: ../general.py:225
|
||||||
msgid "Streaming [{}]({})"
|
msgid "Streaming [{}]({})"
|
||||||
msgstr ""
|
msgstr "실시간 스트리밍 [{}]({})"
|
||||||
|
|
||||||
#: ../general.py:227
|
#: ../general.py:227
|
||||||
msgid "Listening to {}"
|
msgid "Listening to {}"
|
||||||
msgstr ""
|
msgstr "듣는 중 {}"
|
||||||
|
|
||||||
#: ../general.py:229
|
#: ../general.py:229
|
||||||
msgid "Watching {}"
|
msgid "Watching {}"
|
||||||
msgstr ""
|
msgstr "보는 중 {}"
|
||||||
|
|
||||||
#: ../general.py:234
|
#: ../general.py:234
|
||||||
msgid "None"
|
msgid "None"
|
||||||
msgstr ""
|
msgstr "읎어요."
|
||||||
|
|
||||||
#: ../general.py:237
|
#: ../general.py:237
|
||||||
msgid "Joined Discord on"
|
msgid "Joined Discord on"
|
||||||
msgstr ""
|
msgstr "가입된 디스코드 켜짐"
|
||||||
|
|
||||||
#: ../general.py:238
|
#: ../general.py:238
|
||||||
msgid "Joined this guild on"
|
msgid "Joined this guild on"
|
||||||
msgstr ""
|
msgstr "이 길드에 가입된"
|
||||||
|
|
||||||
#: ../general.py:239 ../general.py:286
|
#: ../general.py:239 ../general.py:286
|
||||||
msgid "Roles"
|
msgid "Roles"
|
||||||
msgstr ""
|
msgstr "역할"
|
||||||
|
|
||||||
#: ../general.py:240
|
#: ../general.py:240
|
||||||
msgid "Member #{} | User ID: {}"
|
msgid "Member #{} | User ID: {}"
|
||||||
msgstr ""
|
msgstr "멤버 # {} | 사용자 ID : {}"
|
||||||
|
|
||||||
#: ../general.py:257 ../general.py:299
|
#: ../general.py:257 ../general.py:299
|
||||||
msgid "I need the `Embed links` permission to send this."
|
msgid "I need the `Embed links` permission to send this."
|
||||||
msgstr ""
|
msgstr "이걸 보내려면 'Embed links' 권한이 필요해요."
|
||||||
|
|
||||||
#: ../general.py:272
|
#: ../general.py:272
|
||||||
msgid "Since {}. That's over {} days ago!"
|
msgid "Since {}. That's over {} days ago!"
|
||||||
msgstr ""
|
msgstr "{} 이후, 그건 {} 일 전의 일이에요!"
|
||||||
|
|
||||||
#: ../general.py:282
|
#: ../general.py:282
|
||||||
msgid "Region"
|
msgid "Region"
|
||||||
msgstr ""
|
msgstr "지역"
|
||||||
|
|
||||||
#: ../general.py:283
|
#: ../general.py:283
|
||||||
msgid "Users"
|
msgid "Users"
|
||||||
msgstr ""
|
msgstr "사용자"
|
||||||
|
|
||||||
#: ../general.py:284
|
#: ../general.py:284
|
||||||
msgid "Text Channels"
|
msgid "Text Channels"
|
||||||
msgstr ""
|
msgstr "텍스트 채널"
|
||||||
|
|
||||||
#: ../general.py:285
|
#: ../general.py:285
|
||||||
msgid "Voice Channels"
|
msgid "Voice Channels"
|
||||||
msgstr ""
|
msgstr "음성 채널"
|
||||||
|
|
||||||
#: ../general.py:287
|
#: ../general.py:287
|
||||||
msgid "Owner"
|
msgid "Owner"
|
||||||
msgstr ""
|
msgstr "주인님"
|
||||||
|
|
||||||
#: ../general.py:288
|
#: ../general.py:288
|
||||||
msgid "Guild ID: "
|
msgid "Guild ID: "
|
||||||
msgstr ""
|
msgstr "길드 ID :"
|
||||||
|
|
||||||
#: ../general.py:343
|
#: ../general.py:343
|
||||||
msgid "Your search terms gave no results."
|
msgid "Your search terms gave no results."
|
||||||
msgstr ""
|
msgstr "검색 조건에서 검색 결과가 없어요."
|
||||||
|
|
||||||
#: ../general.py:345
|
#: ../general.py:345
|
||||||
msgid "There is no definition #{}"
|
msgid "There is no definition #{}"
|
||||||
msgstr ""
|
msgstr "정의 #{} 이(가) 없어요."
|
||||||
|
|
||||||
#: ../general.py:347
|
#: ../general.py:347
|
||||||
msgid "Error."
|
msgid "Error."
|
||||||
msgstr ""
|
msgstr "에러."
|
||||||
|
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: red-discordbot\n"
|
"Project-Id-Version: red-discordbot\n"
|
||||||
"POT-Creation-Date: 2018-02-18 14:42+AKST\n"
|
"POT-Creation-Date: 2018-02-18 14:42+AKST\n"
|
||||||
"PO-Revision-Date: 2018-02-25 21:33-0500\n"
|
"PO-Revision-Date: 2018-04-02 19:27-0400\n"
|
||||||
"Last-Translator: Kowlin <boxedpp@gmail.com>\n"
|
"Last-Translator: Kowlin <boxedpp@gmail.com>\n"
|
||||||
"Language-Team: Dutch\n"
|
"Language-Team: Dutch\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: red-discordbot\n"
|
"Project-Id-Version: red-discordbot\n"
|
||||||
"POT-Creation-Date: 2018-02-18 14:42+AKST\n"
|
"POT-Creation-Date: 2018-02-18 14:42+AKST\n"
|
||||||
"PO-Revision-Date: 2018-02-25 21:33-0500\n"
|
"PO-Revision-Date: 2018-04-02 19:27-0400\n"
|
||||||
"Last-Translator: Kowlin <boxedpp@gmail.com>\n"
|
"Last-Translator: Kowlin <boxedpp@gmail.com>\n"
|
||||||
"Language-Team: Russian\n"
|
"Language-Team: Russian\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
|
|||||||
@@ -28,7 +28,6 @@ class Image:
|
|||||||
self.session.close()
|
self.session.close()
|
||||||
|
|
||||||
@commands.group(name="imgur")
|
@commands.group(name="imgur")
|
||||||
@commands.guild_only()
|
|
||||||
async def _imgur(self, ctx):
|
async def _imgur(self, ctx):
|
||||||
"""Retrieves pictures from imgur
|
"""Retrieves pictures from imgur
|
||||||
|
|
||||||
@@ -40,10 +39,16 @@ class Image:
|
|||||||
@_imgur.command(name="search")
|
@_imgur.command(name="search")
|
||||||
async def imgur_search(self, ctx, *, term: str):
|
async def imgur_search(self, ctx, *, term: str):
|
||||||
"""Searches Imgur for the specified term and returns up to 3 results"""
|
"""Searches Imgur for the specified term and returns up to 3 results"""
|
||||||
url = self.imgur_base_url + "time/all/0"
|
url = self.imgur_base_url + "gallery/search/time/all/0"
|
||||||
params = {"q": term}
|
params = {"q": term}
|
||||||
headers = {"Authorization": "Client-ID {}".format(await self.settings.imgur_client_id())}
|
imgur_client_id = await self.settings.imgur_client_id()
|
||||||
async with self.session.get(url, headers=headers, data=params) as search_get:
|
if not imgur_client_id:
|
||||||
|
await ctx.send(
|
||||||
|
_("A client ID has not been set! Please set one with {}").format(
|
||||||
|
"`{}imgurcreds`".format(ctx.prefix)))
|
||||||
|
return
|
||||||
|
headers = {"Authorization": "Client-ID {}".format(imgur_client_id)}
|
||||||
|
async with self.session.get(url, headers=headers, params=params) as search_get:
|
||||||
data = await search_get.json()
|
data = await search_get.json()
|
||||||
|
|
||||||
if data["success"]:
|
if data["success"]:
|
||||||
@@ -81,9 +86,16 @@ class Image:
|
|||||||
elif sort_type == "top":
|
elif sort_type == "top":
|
||||||
sort = "top"
|
sort = "top"
|
||||||
|
|
||||||
|
imgur_client_id = await self.settings.imgur_client_id()
|
||||||
|
if not imgur_client_id:
|
||||||
|
await ctx.send(
|
||||||
|
_("A client ID has not been set! Please set one with {}").format(
|
||||||
|
"`{}imgurcreds`".format(ctx.prefix)))
|
||||||
|
return
|
||||||
|
|
||||||
links = []
|
links = []
|
||||||
headers = {"Authorization": "Client-ID {}".format(await self.settings.imgur_client_id())}
|
headers = {"Authorization": "Client-ID {}".format(imgur_client_id)}
|
||||||
url = self.imgur_base_url + "r/{}/{}/{}/0".format(subreddit, sort, window)
|
url = self.imgur_base_url + "gallery/r/{}/{}/{}/0".format(subreddit, sort, window)
|
||||||
|
|
||||||
async with self.session.get(url, headers=headers) as sub_get:
|
async with self.session.get(url, headers=headers) as sub_get:
|
||||||
data = await sub_get.json()
|
data = await sub_get.json()
|
||||||
@@ -111,6 +123,7 @@ class Image:
|
|||||||
You can get these by visiting https://api.imgur.com/oauth2/addclient
|
You can get these by visiting https://api.imgur.com/oauth2/addclient
|
||||||
and filling out the form. Enter a name for the application, select
|
and filling out the form. Enter a name for the application, select
|
||||||
'Anonymous usage without user authorization' for the auth type,
|
'Anonymous usage without user authorization' for the auth type,
|
||||||
|
set the authorization callback url to 'https://localhost'
|
||||||
leave the app website blank, enter a valid email address, and
|
leave the app website blank, enter a valid email address, and
|
||||||
enter a description. Check the box for the captcha, then click Next.
|
enter a description. Check the box for the captcha, then click Next.
|
||||||
Your client ID will be on the page that loads"""
|
Your client ID will be on the page that loads"""
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: red-discordbot\n"
|
"Project-Id-Version: red-discordbot\n"
|
||||||
"POT-Creation-Date: 2018-02-18 14:42+AKST\n"
|
"POT-Creation-Date: 2018-02-18 14:42+AKST\n"
|
||||||
"PO-Revision-Date: 2018-02-25 21:33-0500\n"
|
"PO-Revision-Date: 2018-02-27 01:49-0500\n"
|
||||||
"Last-Translator: Kowlin <boxedpp@gmail.com>\n"
|
"Last-Translator: Kowlin <boxedpp@gmail.com>\n"
|
||||||
"Language-Team: German\n"
|
"Language-Team: German\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: red-discordbot\n"
|
"Project-Id-Version: red-discordbot\n"
|
||||||
"POT-Creation-Date: 2018-02-18 14:42+AKST\n"
|
"POT-Creation-Date: 2018-02-18 14:42+AKST\n"
|
||||||
"PO-Revision-Date: 2018-02-25 21:34-0500\n"
|
"PO-Revision-Date: 2018-04-02 19:27-0400\n"
|
||||||
"Last-Translator: Kowlin <boxedpp@gmail.com>\n"
|
"Last-Translator: Kowlin <boxedpp@gmail.com>\n"
|
||||||
"Language-Team: Pirate English\n"
|
"Language-Team: Pirate English\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: red-discordbot\n"
|
"Project-Id-Version: red-discordbot\n"
|
||||||
"POT-Creation-Date: 2018-02-18 14:42+AKST\n"
|
"POT-Creation-Date: 2018-02-18 14:42+AKST\n"
|
||||||
"PO-Revision-Date: 2018-02-25 21:34-0500\n"
|
"PO-Revision-Date: 2018-04-02 19:27-0400\n"
|
||||||
"Last-Translator: Kowlin <boxedpp@gmail.com>\n"
|
"Last-Translator: Kowlin <boxedpp@gmail.com>\n"
|
||||||
"Language-Team: Indonesian\n"
|
"Language-Team: Indonesian\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: red-discordbot\n"
|
"Project-Id-Version: red-discordbot\n"
|
||||||
"POT-Creation-Date: 2018-02-18 14:42+AKST\n"
|
"POT-Creation-Date: 2018-02-18 14:42+AKST\n"
|
||||||
"PO-Revision-Date: 2018-02-25 21:33-0500\n"
|
"PO-Revision-Date: 2018-04-02 19:26-0400\n"
|
||||||
"Last-Translator: Kowlin <boxedpp@gmail.com>\n"
|
"Last-Translator: Kowlin <boxedpp@gmail.com>\n"
|
||||||
"Language-Team: Korean\n"
|
"Language-Team: Korean\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
@@ -18,29 +18,29 @@ msgstr ""
|
|||||||
|
|
||||||
#: ../image.py:49
|
#: ../image.py:49
|
||||||
msgid "Your search returned no results"
|
msgid "Your search returned no results"
|
||||||
msgstr ""
|
msgstr "검색 결과가 반환되지 않았어요."
|
||||||
|
|
||||||
#: ../image.py:52
|
#: ../image.py:52
|
||||||
msgid "Search results...\n"
|
msgid "Search results...\n"
|
||||||
msgstr ""
|
msgstr "검색 중..."
|
||||||
|
|
||||||
#: ../image.py:58 ../image.py:100
|
#: ../image.py:58 ../image.py:100
|
||||||
msgid "Something went wrong. Error code is {}"
|
msgid "Something went wrong. Error code is {}"
|
||||||
msgstr ""
|
msgstr "뭔가 잘못됐어요, 오류 코드는 {} 이에요."
|
||||||
|
|
||||||
#: ../image.py:70
|
#: ../image.py:70
|
||||||
msgid "Only 'new' and 'top' are a valid sort type."
|
msgid "Only 'new' and 'top' are a valid sort type."
|
||||||
msgstr ""
|
msgstr "'new' 와 'top' 만이 사용 가능한 타입이에요."
|
||||||
|
|
||||||
#: ../image.py:98 ../image.py:135 ../image.py:157
|
#: ../image.py:98 ../image.py:135 ../image.py:157
|
||||||
msgid "No results found."
|
msgid "No results found."
|
||||||
msgstr ""
|
msgstr "결과를 찾을 수 없어요."
|
||||||
|
|
||||||
#: ../image.py:115
|
#: ../image.py:115
|
||||||
msgid "Set the imgur client id!"
|
msgid "Set the imgur client id!"
|
||||||
msgstr ""
|
msgstr "imgur 클라이언트 ID를 설정해야 해요!"
|
||||||
|
|
||||||
#: ../image.py:137 ../image.py:159
|
#: ../image.py:137 ../image.py:159
|
||||||
msgid "Error contacting the API"
|
msgid "Error contacting the API"
|
||||||
msgstr ""
|
msgstr "API에 연결하는 동안 오류가 발생했어요."
|
||||||
|
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: red-discordbot\n"
|
"Project-Id-Version: red-discordbot\n"
|
||||||
"POT-Creation-Date: 2018-02-18 14:42+AKST\n"
|
"POT-Creation-Date: 2018-02-18 14:42+AKST\n"
|
||||||
"PO-Revision-Date: 2018-02-25 21:33-0500\n"
|
"PO-Revision-Date: 2018-04-02 19:27-0400\n"
|
||||||
"Last-Translator: Kowlin <boxedpp@gmail.com>\n"
|
"Last-Translator: Kowlin <boxedpp@gmail.com>\n"
|
||||||
"Language-Team: Dutch\n"
|
"Language-Team: Dutch\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: red-discordbot\n"
|
"Project-Id-Version: red-discordbot\n"
|
||||||
"POT-Creation-Date: 2018-02-18 14:42+AKST\n"
|
"POT-Creation-Date: 2018-02-18 14:42+AKST\n"
|
||||||
"PO-Revision-Date: 2018-02-25 21:33-0500\n"
|
"PO-Revision-Date: 2018-04-02 19:27-0400\n"
|
||||||
"Last-Translator: Kowlin <boxedpp@gmail.com>\n"
|
"Last-Translator: Kowlin <boxedpp@gmail.com>\n"
|
||||||
"Language-Team: Russian\n"
|
"Language-Team: Russian\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: red-discordbot\n"
|
"Project-Id-Version: red-discordbot\n"
|
||||||
"POT-Creation-Date: 2018-02-18 14:42+AKST\n"
|
"POT-Creation-Date: 2018-02-18 14:42+AKST\n"
|
||||||
"PO-Revision-Date: 2018-02-25 21:33-0500\n"
|
"PO-Revision-Date: 2018-02-27 01:49-0500\n"
|
||||||
"Last-Translator: Kowlin <boxedpp@gmail.com>\n"
|
"Last-Translator: Kowlin <boxedpp@gmail.com>\n"
|
||||||
"Language-Team: German\n"
|
"Language-Team: German\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: red-discordbot\n"
|
"Project-Id-Version: red-discordbot\n"
|
||||||
"POT-Creation-Date: 2018-02-18 14:42+AKST\n"
|
"POT-Creation-Date: 2018-02-18 14:42+AKST\n"
|
||||||
"PO-Revision-Date: 2018-02-25 21:34-0500\n"
|
"PO-Revision-Date: 2018-04-02 19:27-0400\n"
|
||||||
"Last-Translator: Kowlin <boxedpp@gmail.com>\n"
|
"Last-Translator: Kowlin <boxedpp@gmail.com>\n"
|
||||||
"Language-Team: Pirate English\n"
|
"Language-Team: Pirate English\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: red-discordbot\n"
|
"Project-Id-Version: red-discordbot\n"
|
||||||
"POT-Creation-Date: 2018-02-18 14:42+AKST\n"
|
"POT-Creation-Date: 2018-02-18 14:42+AKST\n"
|
||||||
"PO-Revision-Date: 2018-02-25 21:34-0500\n"
|
"PO-Revision-Date: 2018-04-02 19:27-0400\n"
|
||||||
"Last-Translator: Kowlin <boxedpp@gmail.com>\n"
|
"Last-Translator: Kowlin <boxedpp@gmail.com>\n"
|
||||||
"Language-Team: Indonesian\n"
|
"Language-Team: Indonesian\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
@@ -18,266 +18,270 @@ msgstr ""
|
|||||||
|
|
||||||
#: ../mod.py:209
|
#: ../mod.py:209
|
||||||
msgid "Role hierarchy will be checked when moderation commands are issued."
|
msgid "Role hierarchy will be checked when moderation commands are issued."
|
||||||
msgstr ""
|
msgstr "Peran hirarki akan diperiksa ketika mengeluarkan perintah moderasi."
|
||||||
|
|
||||||
#: ../mod.py:213
|
#: ../mod.py:213
|
||||||
msgid "Role hierarchy will be ignored when moderation commands are issued."
|
msgid "Role hierarchy will be ignored when moderation commands are issued."
|
||||||
msgstr ""
|
msgstr "Peran hirarki akan diabaikan ketika mengeluarkan perintah moderasi."
|
||||||
|
|
||||||
#: ../mod.py:228
|
#: ../mod.py:228
|
||||||
msgid "Autoban for mention spam enabled. Anyone mentioning {} or more different people in a single message will be autobanned."
|
msgid "Autoban for mention spam enabled. Anyone mentioning {} or more different people in a single message will be autobanned."
|
||||||
msgstr ""
|
msgstr "Autoban untuk penyebutan berulang diaktifkan. Siapa pun yang menyebutkan {} atau orang-orang yang lebih berbeda dalam satu pesan akan di autobanned."
|
||||||
|
|
||||||
#: ../mod.py:239
|
#: ../mod.py:239
|
||||||
msgid "Autoban for mention spam disabled."
|
msgid "Autoban for mention spam disabled."
|
||||||
msgstr ""
|
msgstr "Autoban untuk penyebutan berulang dimatikan."
|
||||||
|
|
||||||
#: ../mod.py:249
|
#: ../mod.py:249
|
||||||
msgid "Messages repeated up to 3 times will be deleted."
|
msgid "Messages repeated up to 3 times will be deleted."
|
||||||
msgstr ""
|
msgstr "Pesan yang diulang sampai 3 kali akan dihapus."
|
||||||
|
|
||||||
#: ../mod.py:253
|
#: ../mod.py:253
|
||||||
msgid "Repeated messages will be ignored."
|
msgid "Repeated messages will be ignored."
|
||||||
msgstr ""
|
msgstr "Pesan yang diulang akan diabaikan."
|
||||||
|
|
||||||
#: ../mod.py:267
|
#: ../mod.py:267
|
||||||
msgid "Command deleting disabled."
|
msgid "Command deleting disabled."
|
||||||
msgstr ""
|
msgstr "Perintah menghapus dinonaktifkan."
|
||||||
|
|
||||||
#: ../mod.py:270
|
#: ../mod.py:270
|
||||||
msgid "Delete delay set to {} seconds."
|
msgid "Delete delay set to {} seconds."
|
||||||
msgstr ""
|
msgstr "Menghapus penundaan ditetapkan untuk {} detik."
|
||||||
|
|
||||||
#: ../mod.py:275
|
#: ../mod.py:275
|
||||||
msgid "Bot will delete command messages after {} seconds. Set this value to -1 to stop deleting messages"
|
msgid "Bot will delete command messages after {} seconds. Set this value to -1 to stop deleting messages"
|
||||||
msgstr ""
|
msgstr "Bot akan menghapus pesan perintah setelah {} detik. Set nilai ini ke-1 untuk menghentikan menghapus pesan"
|
||||||
|
|
||||||
#: ../mod.py:279
|
#: ../mod.py:279
|
||||||
msgid "I will not delete command messages."
|
msgid "I will not delete command messages."
|
||||||
msgstr ""
|
msgstr "Saya tidak akan menghapus pesan perintah."
|
||||||
|
|
||||||
#: ../mod.py:292
|
#: ../mod.py:292
|
||||||
msgid "Users unbanned with {} will be reinvited."
|
msgid "Users unbanned with {} will be reinvited."
|
||||||
msgstr ""
|
msgstr "Pengguna unbanned dengan {} akan diundang ulang."
|
||||||
|
|
||||||
#: ../mod.py:295
|
#: ../mod.py:295
|
||||||
msgid "Users unbanned with {} will not be reinvited."
|
msgid "Users unbanned with {} will not be reinvited."
|
||||||
msgstr ""
|
msgstr "Pengguna unbanned dengan {} akan tidak diundang ulang."
|
||||||
|
|
||||||
#: ../mod.py:309 ../mod.py:349 ../mod.py:506
|
#: ../mod.py:309 ../mod.py:349 ../mod.py:506
|
||||||
msgid "I cannot let you do that. Self-harm is bad {}"
|
msgid "I cannot let you do that. Self-harm is bad {}"
|
||||||
msgstr ""
|
msgstr "Saya tidak dapat membiarkan Anda melakukan itu. Merugikan diri sendiri adalah buruk {}"
|
||||||
|
|
||||||
#: ../mod.py:313 ../mod.py:353 ../mod.py:510
|
#: ../mod.py:313 ../mod.py:353 ../mod.py:510
|
||||||
msgid "I cannot let you do that. You are not higher than the user in the role hierarchy."
|
msgid "I cannot let you do that. You are not higher than the user in the role hierarchy."
|
||||||
msgstr ""
|
msgstr "Saya tidak dapat membiarkan Anda melakukan itu. Anda tidak lebih tinggi daripada pengguna dalam peran hirarki."
|
||||||
|
|
||||||
#: ../mod.py:323 ../mod.py:379 ../mod.py:570
|
#: ../mod.py:323 ../mod.py:379 ../mod.py:570
|
||||||
msgid "I'm not allowed to do that."
|
msgid "I'm not allowed to do that."
|
||||||
msgstr ""
|
msgstr "Saya tidak diizinkan untuk melakukan itu."
|
||||||
|
|
||||||
#: ../mod.py:327
|
#: ../mod.py:327
|
||||||
msgid "Done. That felt good."
|
msgid "Done. That felt good."
|
||||||
msgstr ""
|
msgstr "Selesai. Itu terasa baik."
|
||||||
|
|
||||||
#: ../mod.py:369
|
#: ../mod.py:369
|
||||||
msgid "Invalid days. Must be between 0 and 7."
|
msgid "Invalid days. Must be between 0 and 7."
|
||||||
msgstr ""
|
msgstr "Hari-hari tidak sah. Harus antara 0 dan 7."
|
||||||
|
|
||||||
#: ../mod.py:384
|
#: ../mod.py:384
|
||||||
msgid "Done. It was about time."
|
msgid "Done. It was about time."
|
||||||
msgstr ""
|
msgstr "Selesai. Itu hanya masalah waktu."
|
||||||
|
|
||||||
#: ../mod.py:413
|
#: ../mod.py:413
|
||||||
msgid "User is already banned."
|
msgid "User is already banned."
|
||||||
msgstr ""
|
msgstr "Pengguna sudah dibanned."
|
||||||
|
|
||||||
#: ../mod.py:429
|
#: ../mod.py:429
|
||||||
msgid "User not found. Have you provided the correct user ID?"
|
msgid "User not found. Have you provided the correct user ID?"
|
||||||
msgstr ""
|
msgstr "Pengguna tidak ditemukan. Sudahkah kamu memberikan ID pengguna yang benar?"
|
||||||
|
|
||||||
#: ../mod.py:433
|
#: ../mod.py:433
|
||||||
msgid "I lack the permissions to do this."
|
msgid "I lack the permissions to do this."
|
||||||
msgstr ""
|
msgstr "Saya tidak memiliki izin untuk melakukan ini."
|
||||||
|
|
||||||
#: ../mod.py:435
|
#: ../mod.py:435
|
||||||
msgid "Done. The user will not be able to join this guild."
|
msgid "Done. The user will not be able to join this guild."
|
||||||
msgstr ""
|
msgstr "Selesai. Pengguna tidak akan dapat bergabung dengan guild ini."
|
||||||
|
|
||||||
#: ../mod.py:472
|
#: ../mod.py:472
|
||||||
msgid "You have been temporarily banned from {} until {}. Here is an invite for when your ban expires: {}"
|
msgid "You have been temporarily banned from {} until {}. Here is an invite for when your ban expires: {}"
|
||||||
msgstr ""
|
msgstr "Anda telah banned untuk sementara dari {} sampai {}. Berikut adalah undangan untuk ketika ban anda berakhir: {}"
|
||||||
|
|
||||||
#: ../mod.py:481
|
#: ../mod.py:481
|
||||||
msgid "I can't do that for some reason."
|
msgid "I can't do that for some reason."
|
||||||
msgstr ""
|
msgstr "Saya tidak bisa melakukan itu untuk beberapa alasan."
|
||||||
|
|
||||||
#: ../mod.py:483
|
#: ../mod.py:483
|
||||||
msgid "Something went wrong while banning"
|
msgid "Something went wrong while banning"
|
||||||
msgstr ""
|
msgstr "Terjadi suatu kesalahan saat banning"
|
||||||
|
|
||||||
#: ../mod.py:485
|
#: ../mod.py:485
|
||||||
msgid "Done. Enough chaos for now"
|
msgid "Done. Enough chaos for now"
|
||||||
msgstr ""
|
msgstr "Selesai. Cukup kekacauan untuk sekarang"
|
||||||
|
|
||||||
#: ../mod.py:525
|
#: ../mod.py:525
|
||||||
msgid "You have been banned and then unbanned as a quick way to delete your messages.\n"
|
msgid "You have been banned and then unbanned as a quick way to delete your messages.\n"
|
||||||
"You can now join the guild again. {}"
|
"You can now join the guild again. {}"
|
||||||
msgstr ""
|
msgstr "Anda telah banned dan kemudian unbanned sebagai cara cepat untuk menghapus pesan anda.\n"
|
||||||
|
"Anda sekarang dapat bergabung dengan guild lagi. {}"
|
||||||
|
|
||||||
#: ../mod.py:537
|
#: ../mod.py:537
|
||||||
msgid "My role is not high enough to softban that user."
|
msgid "My role is not high enough to softban that user."
|
||||||
msgstr ""
|
msgstr "Hirarki saya tidak cukup tinggi untuk softban pengguna."
|
||||||
|
|
||||||
#: ../mod.py:553
|
#: ../mod.py:553
|
||||||
msgid "Done. Enough chaos."
|
msgid "Done. Enough chaos."
|
||||||
msgstr ""
|
msgstr "Selesai. Cukup kekacauan."
|
||||||
|
|
||||||
#: ../mod.py:587
|
#: ../mod.py:587
|
||||||
msgid "Couldn't find a user with that ID!"
|
msgid "Couldn't find a user with that ID!"
|
||||||
msgstr ""
|
msgstr "Tidak dapat menemukan pengguna dengan ID tersebut!"
|
||||||
|
|
||||||
#: ../mod.py:593
|
#: ../mod.py:593
|
||||||
msgid "It seems that user isn't banned!"
|
msgid "It seems that user isn't banned!"
|
||||||
msgstr ""
|
msgstr "Tampaknya bahwa pengguna tidak di banned!"
|
||||||
|
|
||||||
#: ../mod.py:601
|
#: ../mod.py:601
|
||||||
msgid "Something went wrong while attempting to unban that user"
|
msgid "Something went wrong while attempting to unban that user"
|
||||||
msgstr ""
|
msgstr "Terjadi kesalahan saat mencoba untuk mengunban pengguna"
|
||||||
|
|
||||||
#: ../mod.py:604
|
#: ../mod.py:604
|
||||||
msgid "Unbanned that user from this guild"
|
msgid "Unbanned that user from this guild"
|
||||||
msgstr ""
|
msgstr "Unbanned pengguna dari guild ini"
|
||||||
|
|
||||||
#: ../mod.py:619
|
#: ../mod.py:619
|
||||||
msgid "You've been unbanned from {}.\n"
|
msgid "You've been unbanned from {}.\n"
|
||||||
"Here is an invite for that guild: {}"
|
"Here is an invite for that guild: {}"
|
||||||
msgstr ""
|
msgstr "Anda telah di unbanned dari {}. Berikut adalah undangan untuk bergabung ke guild: {}"
|
||||||
|
|
||||||
#: ../mod.py:623
|
#: ../mod.py:623
|
||||||
msgid "I failed to send an invite to that user. Perhaps you may be able to send it for me?\n"
|
msgid "I failed to send an invite to that user. Perhaps you may be able to send it for me?\n"
|
||||||
"Here's the invite link: {}"
|
"Here's the invite link: {}"
|
||||||
msgstr ""
|
msgstr "Saya gagal untuk mengirim undangan ke pengguna. Mungkin anda dapat mengirimkannya untuk saya?\n"
|
||||||
|
"Berikut adalah link mengundang: {}"
|
||||||
|
|
||||||
#: ../mod.py:629
|
#: ../mod.py:629
|
||||||
msgid "Something went wrong when attempting to send that useran invite. Here's the link so you can try: {}"
|
msgid "Something went wrong when attempting to send that useran invite. Here's the link so you can try: {}"
|
||||||
msgstr ""
|
msgstr "Terjadi kesalah saat mencoba untuk mengirim udangan ke pengguna. Ini adalah link yang bisa anda coba: {}"
|
||||||
|
|
||||||
#: ../mod.py:673 ../mod.py:710
|
#: ../mod.py:673 ../mod.py:710
|
||||||
msgid "No voice state for that user!"
|
msgid "No voice state for that user!"
|
||||||
msgstr ""
|
msgstr "Tidak ada sasaran pengguna suara!"
|
||||||
|
|
||||||
#: ../mod.py:687
|
#: ../mod.py:687
|
||||||
msgid "That user is already muted and deafened guild-wide!"
|
msgid "That user is already muted and deafened guild-wide!"
|
||||||
msgstr ""
|
msgstr "Pengguna berhasil dibisukan dan ditulikan secara global!"
|
||||||
|
|
||||||
#: ../mod.py:690
|
#: ../mod.py:690
|
||||||
msgid "User has been banned from speaking or listening in voice channels"
|
msgid "User has been banned from speaking or listening in voice channels"
|
||||||
msgstr ""
|
msgstr "Pengguna telah di banned dari berbicara atau mendengarkan channel voice"
|
||||||
|
|
||||||
#: ../mod.py:722
|
#: ../mod.py:722
|
||||||
msgid "That user isn't muted or deafened by the guild!"
|
msgid "That user isn't muted or deafened by the guild!"
|
||||||
msgstr ""
|
msgstr "Pengguna itu bisu atau tuli dari guild!"
|
||||||
|
|
||||||
#: ../mod.py:725
|
#: ../mod.py:725
|
||||||
msgid "User is now allowed to speak and listen in voice channels"
|
msgid "User is now allowed to speak and listen in voice channels"
|
||||||
msgstr ""
|
msgstr "Pengguna diizinkan untuk berbicara dan mendengarkan di channel voice"
|
||||||
|
|
||||||
#: ../mod.py:754
|
#: ../mod.py:754
|
||||||
msgid "I cannot do that, I lack the '{}' permission."
|
msgid "I cannot do that, I lack the '{}' permission."
|
||||||
msgstr ""
|
msgstr "Saya tidak dapat melakukan itu, saya tidak mempunyai izin '{}'."
|
||||||
|
|
||||||
#: ../mod.py:783
|
#: ../mod.py:783
|
||||||
msgid "Muted {}#{} in channel {}"
|
msgid "Muted {}#{} in channel {}"
|
||||||
msgstr ""
|
msgstr "Tidak diizinkan bersuara {}#{} di channel {}"
|
||||||
|
|
||||||
#: ../mod.py:797
|
#: ../mod.py:797
|
||||||
msgid "That user is already muted in {}!"
|
msgid "That user is already muted in {}!"
|
||||||
msgstr ""
|
msgstr "Pengguna sudah dibisukan di {}!"
|
||||||
|
|
||||||
#: ../mod.py:800 ../mod.py:932
|
#: ../mod.py:800 ../mod.py:932
|
||||||
msgid "That user is not in a voice channel right now!"
|
msgid "That user is not in a voice channel right now!"
|
||||||
msgstr ""
|
msgstr "Pengguna sedang tidak di dalam channel voice!"
|
||||||
|
|
||||||
#: ../mod.py:802 ../mod.py:934
|
#: ../mod.py:802 ../mod.py:934
|
||||||
msgid "No voice state for the target!"
|
msgid "No voice state for the target!"
|
||||||
msgstr ""
|
msgstr "Tidak ada sasaran target suara!"
|
||||||
|
|
||||||
#: ../mod.py:822
|
#: ../mod.py:822
|
||||||
msgid "User has been muted in this channel."
|
msgid "User has been muted in this channel."
|
||||||
msgstr ""
|
msgstr "Pengguna telah dibisukan di channel ini."
|
||||||
|
|
||||||
#: ../mod.py:858
|
#: ../mod.py:858
|
||||||
msgid "User has been muted in this guild."
|
msgid "User has been muted in this guild."
|
||||||
msgstr ""
|
msgstr "Pengguna telah dibisukan di guild ini."
|
||||||
|
|
||||||
#: ../mod.py:919
|
#: ../mod.py:919
|
||||||
msgid "Unmuted {}#{} in channel {}"
|
msgid "Unmuted {}#{} in channel {}"
|
||||||
msgstr ""
|
msgstr "Dizinkan bersuara {}#{} di channel {}"
|
||||||
|
|
||||||
#: ../mod.py:929
|
#: ../mod.py:929
|
||||||
msgid "That user is already unmuted in {}!"
|
msgid "That user is already unmuted in {}!"
|
||||||
msgstr ""
|
msgstr "Pengguna sudah tidak dibisukan di {}!"
|
||||||
|
|
||||||
#: ../mod.py:949
|
#: ../mod.py:949
|
||||||
msgid "User unmuted in this channel."
|
msgid "User unmuted in this channel."
|
||||||
msgstr ""
|
msgstr "Pengguna diizinkan bersuara di channel ini."
|
||||||
|
|
||||||
#: ../mod.py:958
|
#: ../mod.py:958
|
||||||
msgid "Unmute failed. Reason: {}"
|
msgid "Unmute failed. Reason: {}"
|
||||||
msgstr ""
|
msgstr "Menghidupkan suara gagal. Alasan: {}"
|
||||||
|
|
||||||
#: ../mod.py:981
|
#: ../mod.py:981
|
||||||
msgid "User has been unmuted in this guild."
|
msgid "User has been unmuted in this guild."
|
||||||
msgstr ""
|
msgstr "Pengguna sudah diizinkan bersuara di guild ini."
|
||||||
|
|
||||||
#: ../mod.py:1045
|
#: ../mod.py:1045
|
||||||
msgid "Channel added to ignore list."
|
msgid "Channel added to ignore list."
|
||||||
msgstr ""
|
msgstr "Saluran ditambahkan ke daftar abaikan."
|
||||||
|
|
||||||
#: ../mod.py:1047
|
#: ../mod.py:1047
|
||||||
msgid "Channel already in ignore list."
|
msgid "Channel already in ignore list."
|
||||||
msgstr ""
|
msgstr "Saluran sudah ada didalam daftar abaikan."
|
||||||
|
|
||||||
#: ../mod.py:1055
|
#: ../mod.py:1055
|
||||||
msgid "This guild has been added to the ignore list."
|
msgid "This guild has been added to the ignore list."
|
||||||
msgstr ""
|
msgstr "Guild ini sudah di tambahkan ke dalam daftar abaikan."
|
||||||
|
|
||||||
#: ../mod.py:1057
|
#: ../mod.py:1057
|
||||||
msgid "This guild is already being ignored."
|
msgid "This guild is already being ignored."
|
||||||
msgstr ""
|
msgstr "Guild ini sudah diabaikan."
|
||||||
|
|
||||||
#: ../mod.py:1078
|
#: ../mod.py:1078
|
||||||
msgid "Channel removed from ignore list."
|
msgid "Channel removed from ignore list."
|
||||||
msgstr ""
|
msgstr "Saluran di hapus dari dalam daftar abaikan."
|
||||||
|
|
||||||
#: ../mod.py:1080
|
#: ../mod.py:1080
|
||||||
msgid "That channel is not in the ignore list."
|
msgid "That channel is not in the ignore list."
|
||||||
msgstr ""
|
msgstr "Saluran sedang tidak ada di dalam daftar abaikan."
|
||||||
|
|
||||||
#: ../mod.py:1088
|
#: ../mod.py:1088
|
||||||
msgid "This guild has been removed from the ignore list."
|
msgid "This guild has been removed from the ignore list."
|
||||||
msgstr ""
|
msgstr "Guild ini sudah di hapus dari dalam daftar abaikan."
|
||||||
|
|
||||||
#: ../mod.py:1090
|
#: ../mod.py:1090
|
||||||
msgid "This guild is not in the ignore list."
|
msgid "This guild is not in the ignore list."
|
||||||
msgstr ""
|
msgstr "Guild ini sedang tidak berada didalam daftar abaikan."
|
||||||
|
|
||||||
#: ../mod.py:1102
|
#: ../mod.py:1102
|
||||||
msgid "Currently ignoring:\n"
|
msgid "Currently ignoring:\n"
|
||||||
"{} channels\n"
|
"{} channels\n"
|
||||||
"{} guilds\n"
|
"{} guilds\n"
|
||||||
msgstr ""
|
msgstr "Saat ini mengabaikan:\n"
|
||||||
|
"{} saluran\n"
|
||||||
|
"{} guilds\n"
|
||||||
|
|
||||||
#: ../mod.py:1133
|
#: ../mod.py:1133
|
||||||
msgid "**Past 20 names**:"
|
msgid "**Past 20 names**:"
|
||||||
msgstr ""
|
msgstr "**20 nama terakhir**:"
|
||||||
|
|
||||||
#: ../mod.py:1140
|
#: ../mod.py:1140
|
||||||
msgid "**Past 20 nicknames**:"
|
msgid "**Past 20 nicknames**:"
|
||||||
msgstr ""
|
msgstr "**20 julukan terakhir**:"
|
||||||
|
|
||||||
#: ../mod.py:1146
|
#: ../mod.py:1146
|
||||||
msgid "That user doesn't have any recorded name or nickname change."
|
msgid "That user doesn't have any recorded name or nickname change."
|
||||||
msgstr ""
|
msgstr "Pengguna tidak memiliki nama yang tercatat atau nama panggilan yang berubah."
|
||||||
|
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: red-discordbot\n"
|
"Project-Id-Version: red-discordbot\n"
|
||||||
"POT-Creation-Date: 2018-02-18 14:42+AKST\n"
|
"POT-Creation-Date: 2018-02-18 14:42+AKST\n"
|
||||||
"PO-Revision-Date: 2018-02-25 21:33-0500\n"
|
"PO-Revision-Date: 2018-04-02 19:26-0400\n"
|
||||||
"Last-Translator: Kowlin <boxedpp@gmail.com>\n"
|
"Last-Translator: Kowlin <boxedpp@gmail.com>\n"
|
||||||
"Language-Team: Korean\n"
|
"Language-Team: Korean\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
@@ -18,266 +18,270 @@ msgstr ""
|
|||||||
|
|
||||||
#: ../mod.py:209
|
#: ../mod.py:209
|
||||||
msgid "Role hierarchy will be checked when moderation commands are issued."
|
msgid "Role hierarchy will be checked when moderation commands are issued."
|
||||||
msgstr ""
|
msgstr "절제 커맨드를 사용하면 역할 계층 구조가 검사돼요."
|
||||||
|
|
||||||
#: ../mod.py:213
|
#: ../mod.py:213
|
||||||
msgid "Role hierarchy will be ignored when moderation commands are issued."
|
msgid "Role hierarchy will be ignored when moderation commands are issued."
|
||||||
msgstr ""
|
msgstr "절제 커맨드를 사용하면 역할 계층은 무시될 거예요."
|
||||||
|
|
||||||
#: ../mod.py:228
|
#: ../mod.py:228
|
||||||
msgid "Autoban for mention spam enabled. Anyone mentioning {} or more different people in a single message will be autobanned."
|
msgid "Autoban for mention spam enabled. Anyone mentioning {} or more different people in a single message will be autobanned."
|
||||||
msgstr ""
|
msgstr "스팸 언급이 금지했어요. 한 메세지에서 {} 또는 그 이상의 다른 사용자를 언급하는 것이 금지됐어요."
|
||||||
|
|
||||||
#: ../mod.py:239
|
#: ../mod.py:239
|
||||||
msgid "Autoban for mention spam disabled."
|
msgid "Autoban for mention spam disabled."
|
||||||
msgstr ""
|
msgstr "스팸 언급 자동 밴 사용 안 함."
|
||||||
|
|
||||||
#: ../mod.py:249
|
#: ../mod.py:249
|
||||||
msgid "Messages repeated up to 3 times will be deleted."
|
msgid "Messages repeated up to 3 times will be deleted."
|
||||||
msgstr ""
|
msgstr "최대 3번 반복된 메세지가 삭제됐어요."
|
||||||
|
|
||||||
#: ../mod.py:253
|
#: ../mod.py:253
|
||||||
msgid "Repeated messages will be ignored."
|
msgid "Repeated messages will be ignored."
|
||||||
msgstr ""
|
msgstr "반복된 메세지는 무시됍니다."
|
||||||
|
|
||||||
#: ../mod.py:267
|
#: ../mod.py:267
|
||||||
msgid "Command deleting disabled."
|
msgid "Command deleting disabled."
|
||||||
msgstr ""
|
msgstr "커맨드 삭제 사용 안 함."
|
||||||
|
|
||||||
#: ../mod.py:270
|
#: ../mod.py:270
|
||||||
msgid "Delete delay set to {} seconds."
|
msgid "Delete delay set to {} seconds."
|
||||||
msgstr ""
|
msgstr "{} 초로 설정된 지연시간을 삭제했어요."
|
||||||
|
|
||||||
#: ../mod.py:275
|
#: ../mod.py:275
|
||||||
msgid "Bot will delete command messages after {} seconds. Set this value to -1 to stop deleting messages"
|
msgid "Bot will delete command messages after {} seconds. Set this value to -1 to stop deleting messages"
|
||||||
msgstr ""
|
msgstr "봇이 {} 초 후에 커맨드 메세지를 삭제해요. 메세지 삭제를 중지하려면 이 값을 -1로 설정해야 해요."
|
||||||
|
|
||||||
#: ../mod.py:279
|
#: ../mod.py:279
|
||||||
msgid "I will not delete command messages."
|
msgid "I will not delete command messages."
|
||||||
msgstr ""
|
msgstr "커맨드 메세지를 삭제하지 않을게요."
|
||||||
|
|
||||||
#: ../mod.py:292
|
#: ../mod.py:292
|
||||||
msgid "Users unbanned with {} will be reinvited."
|
msgid "Users unbanned with {} will be reinvited."
|
||||||
msgstr ""
|
msgstr "{} 으로 밴 처리된 사용자가 다시 초대됐어요."
|
||||||
|
|
||||||
#: ../mod.py:295
|
#: ../mod.py:295
|
||||||
msgid "Users unbanned with {} will not be reinvited."
|
msgid "Users unbanned with {} will not be reinvited."
|
||||||
msgstr ""
|
msgstr "{} 으로 밴 처리된 사용자는 다시 초대되지 않아요."
|
||||||
|
|
||||||
#: ../mod.py:309 ../mod.py:349 ../mod.py:506
|
#: ../mod.py:309 ../mod.py:349 ../mod.py:506
|
||||||
msgid "I cannot let you do that. Self-harm is bad {}"
|
msgid "I cannot let you do that. Self-harm is bad {}"
|
||||||
msgstr ""
|
msgstr "그렇게 하게 둘 수는 없어요. 자해는 나빠요. {}"
|
||||||
|
|
||||||
#: ../mod.py:313 ../mod.py:353 ../mod.py:510
|
#: ../mod.py:313 ../mod.py:353 ../mod.py:510
|
||||||
msgid "I cannot let you do that. You are not higher than the user in the role hierarchy."
|
msgid "I cannot let you do that. You are not higher than the user in the role hierarchy."
|
||||||
msgstr ""
|
msgstr "그렇게 하게 둘 수는 없어요. 역할 계층의 사용자보다 높지 않아요."
|
||||||
|
|
||||||
#: ../mod.py:323 ../mod.py:379 ../mod.py:570
|
#: ../mod.py:323 ../mod.py:379 ../mod.py:570
|
||||||
msgid "I'm not allowed to do that."
|
msgid "I'm not allowed to do that."
|
||||||
msgstr ""
|
msgstr "그렇게 하는 건 허용하지 않아요."
|
||||||
|
|
||||||
#: ../mod.py:327
|
#: ../mod.py:327
|
||||||
msgid "Done. That felt good."
|
msgid "Done. That felt good."
|
||||||
msgstr ""
|
msgstr "다 했어요. 앙 기분 좋아."
|
||||||
|
|
||||||
#: ../mod.py:369
|
#: ../mod.py:369
|
||||||
msgid "Invalid days. Must be between 0 and 7."
|
msgid "Invalid days. Must be between 0 and 7."
|
||||||
msgstr ""
|
msgstr "올바르지 않은 요일이에요. 0에서 7사이여야 해요."
|
||||||
|
|
||||||
#: ../mod.py:384
|
#: ../mod.py:384
|
||||||
msgid "Done. It was about time."
|
msgid "Done. It was about time."
|
||||||
msgstr ""
|
msgstr "다 했어요. 마피아는 고개를 들어주세요."
|
||||||
|
|
||||||
#: ../mod.py:413
|
#: ../mod.py:413
|
||||||
msgid "User is already banned."
|
msgid "User is already banned."
|
||||||
msgstr ""
|
msgstr "해당 사용자는 이미 밴 처리되어 있어요."
|
||||||
|
|
||||||
#: ../mod.py:429
|
#: ../mod.py:429
|
||||||
msgid "User not found. Have you provided the correct user ID?"
|
msgid "User not found. Have you provided the correct user ID?"
|
||||||
msgstr ""
|
msgstr "사용자를 찾을 수 없어요. 올바른 사용자 ID를 입력했나요?"
|
||||||
|
|
||||||
#: ../mod.py:433
|
#: ../mod.py:433
|
||||||
msgid "I lack the permissions to do this."
|
msgid "I lack the permissions to do this."
|
||||||
msgstr ""
|
msgstr "제게 행동할 수 있는 권한이 없어요."
|
||||||
|
|
||||||
#: ../mod.py:435
|
#: ../mod.py:435
|
||||||
msgid "Done. The user will not be able to join this guild."
|
msgid "Done. The user will not be able to join this guild."
|
||||||
msgstr ""
|
msgstr "다 했어요. 사용자는 이 길드에 가입할 수 없어요."
|
||||||
|
|
||||||
#: ../mod.py:472
|
#: ../mod.py:472
|
||||||
msgid "You have been temporarily banned from {} until {}. Here is an invite for when your ban expires: {}"
|
msgid "You have been temporarily banned from {} until {}. Here is an invite for when your ban expires: {}"
|
||||||
msgstr ""
|
msgstr "{} 부터 {} 까지 일시적으로 밴 처리됐어요. 다음은 사용자의 밴 처리가 만료되는 경우를 위한 초대예요 : {}"
|
||||||
|
|
||||||
#: ../mod.py:481
|
#: ../mod.py:481
|
||||||
msgid "I can't do that for some reason."
|
msgid "I can't do that for some reason."
|
||||||
msgstr ""
|
msgstr "왠지 모르겠어요."
|
||||||
|
|
||||||
#: ../mod.py:483
|
#: ../mod.py:483
|
||||||
msgid "Something went wrong while banning"
|
msgid "Something went wrong while banning"
|
||||||
msgstr ""
|
msgstr "밴 처리를 하는 동안 문제가 발생했어요."
|
||||||
|
|
||||||
#: ../mod.py:485
|
#: ../mod.py:485
|
||||||
msgid "Done. Enough chaos for now"
|
msgid "Done. Enough chaos for now"
|
||||||
msgstr ""
|
msgstr "다 했어요. 지금으로서는 충분히 혼란스러울 거예요."
|
||||||
|
|
||||||
#: ../mod.py:525
|
#: ../mod.py:525
|
||||||
msgid "You have been banned and then unbanned as a quick way to delete your messages.\n"
|
msgid "You have been banned and then unbanned as a quick way to delete your messages.\n"
|
||||||
"You can now join the guild again. {}"
|
"You can now join the guild again. {}"
|
||||||
msgstr ""
|
msgstr "사용자님은 밴 처리됐어요, 하지만 사용자님의 밴 처리를 해제하려면 사용자님의 메세지를 빠르게 삭제해보세요. 이제 다시 길드에 가입할 수 있어요. {}"
|
||||||
|
|
||||||
#: ../mod.py:537
|
#: ../mod.py:537
|
||||||
msgid "My role is not high enough to softban that user."
|
msgid "My role is not high enough to softban that user."
|
||||||
msgstr ""
|
msgstr "제 역할이 그 사용자를 밴 할 만큼 충분하지 않습니다."
|
||||||
|
|
||||||
#: ../mod.py:553
|
#: ../mod.py:553
|
||||||
msgid "Done. Enough chaos."
|
msgid "Done. Enough chaos."
|
||||||
msgstr ""
|
msgstr "다 했어요. 충분히 혼란스러워요."
|
||||||
|
|
||||||
#: ../mod.py:587
|
#: ../mod.py:587
|
||||||
msgid "Couldn't find a user with that ID!"
|
msgid "Couldn't find a user with that ID!"
|
||||||
msgstr ""
|
msgstr "해당 ID를 가진 사용자를 찾을 수 없어요."
|
||||||
|
|
||||||
#: ../mod.py:593
|
#: ../mod.py:593
|
||||||
msgid "It seems that user isn't banned!"
|
msgid "It seems that user isn't banned!"
|
||||||
msgstr ""
|
msgstr "사용자들이 밴 처리되지 않은 것 같아요!"
|
||||||
|
|
||||||
#: ../mod.py:601
|
#: ../mod.py:601
|
||||||
msgid "Something went wrong while attempting to unban that user"
|
msgid "Something went wrong while attempting to unban that user"
|
||||||
msgstr ""
|
msgstr "해당 사용자의 밴 처리를 해제하는 동안 문제가 발생했어요."
|
||||||
|
|
||||||
#: ../mod.py:604
|
#: ../mod.py:604
|
||||||
msgid "Unbanned that user from this guild"
|
msgid "Unbanned that user from this guild"
|
||||||
msgstr ""
|
msgstr "이 길드에서 해당 사용자의 차단이 해제됐어요."
|
||||||
|
|
||||||
#: ../mod.py:619
|
#: ../mod.py:619
|
||||||
msgid "You've been unbanned from {}.\n"
|
msgid "You've been unbanned from {}.\n"
|
||||||
"Here is an invite for that guild: {}"
|
"Here is an invite for that guild: {}"
|
||||||
msgstr ""
|
msgstr "{} 에서의 차단이 해제됬어요.\n"
|
||||||
|
"해당 길드 초대 링크 : {}"
|
||||||
|
|
||||||
#: ../mod.py:623
|
#: ../mod.py:623
|
||||||
msgid "I failed to send an invite to that user. Perhaps you may be able to send it for me?\n"
|
msgid "I failed to send an invite to that user. Perhaps you may be able to send it for me?\n"
|
||||||
"Here's the invite link: {}"
|
"Here's the invite link: {}"
|
||||||
msgstr ""
|
msgstr "해당 사용자에게 초대를 보내지 못했어요. 혹시 저를 위해 보내 주실 수 있나요?\n"
|
||||||
|
"여기 초대 링크예요 : {}"
|
||||||
|
|
||||||
#: ../mod.py:629
|
#: ../mod.py:629
|
||||||
msgid "Something went wrong when attempting to send that useran invite. Here's the link so you can try: {}"
|
msgid "Something went wrong when attempting to send that useran invite. Here's the link so you can try: {}"
|
||||||
msgstr ""
|
msgstr "사용자에게 초대를 보내려고 할 때 문제가 발생했어요. 여기 링크를 클릭하면 다시 시도할 수 있어요 : {}"
|
||||||
|
|
||||||
#: ../mod.py:673 ../mod.py:710
|
#: ../mod.py:673 ../mod.py:710
|
||||||
msgid "No voice state for that user!"
|
msgid "No voice state for that user!"
|
||||||
msgstr ""
|
msgstr "해당 사용자에 대한 음성 상태가 없어요!"
|
||||||
|
|
||||||
#: ../mod.py:687
|
#: ../mod.py:687
|
||||||
msgid "That user is already muted and deafened guild-wide!"
|
msgid "That user is already muted and deafened guild-wide!"
|
||||||
msgstr ""
|
msgstr "해당 사용자는 이미 음소거 상태이고 길드 전체가 음소거 돼서 아무것도 안 들려요!"
|
||||||
|
|
||||||
#: ../mod.py:690
|
#: ../mod.py:690
|
||||||
msgid "User has been banned from speaking or listening in voice channels"
|
msgid "User has been banned from speaking or listening in voice channels"
|
||||||
msgstr ""
|
msgstr "사용자가 음성 채널에서 말하거나 듣는 것이 금지됐어요."
|
||||||
|
|
||||||
#: ../mod.py:722
|
#: ../mod.py:722
|
||||||
msgid "That user isn't muted or deafened by the guild!"
|
msgid "That user isn't muted or deafened by the guild!"
|
||||||
msgstr ""
|
msgstr "해당 사용자는 길드에 의해 음소거 되지 않았어요."
|
||||||
|
|
||||||
#: ../mod.py:725
|
#: ../mod.py:725
|
||||||
msgid "User is now allowed to speak and listen in voice channels"
|
msgid "User is now allowed to speak and listen in voice channels"
|
||||||
msgstr ""
|
msgstr "이제 사용자가 음성 채널에서 말하고 들을 수 있어요."
|
||||||
|
|
||||||
#: ../mod.py:754
|
#: ../mod.py:754
|
||||||
msgid "I cannot do that, I lack the '{}' permission."
|
msgid "I cannot do that, I lack the '{}' permission."
|
||||||
msgstr ""
|
msgstr "제게 '{}' 권한이 없어서 그리 할 수 없어요."
|
||||||
|
|
||||||
#: ../mod.py:783
|
#: ../mod.py:783
|
||||||
msgid "Muted {}#{} in channel {}"
|
msgid "Muted {}#{} in channel {}"
|
||||||
msgstr ""
|
msgstr "{}#{} 이(가) {} 채널에서 음소거 됐어요."
|
||||||
|
|
||||||
#: ../mod.py:797
|
#: ../mod.py:797
|
||||||
msgid "That user is already muted in {}!"
|
msgid "That user is already muted in {}!"
|
||||||
msgstr ""
|
msgstr "해당 사용자가 {} 에서 이미 음소거된 상태예요!"
|
||||||
|
|
||||||
#: ../mod.py:800 ../mod.py:932
|
#: ../mod.py:800 ../mod.py:932
|
||||||
msgid "That user is not in a voice channel right now!"
|
msgid "That user is not in a voice channel right now!"
|
||||||
msgstr ""
|
msgstr "해당 사용자는 지금 음성 채널에 있지 않아요!"
|
||||||
|
|
||||||
#: ../mod.py:802 ../mod.py:934
|
#: ../mod.py:802 ../mod.py:934
|
||||||
msgid "No voice state for the target!"
|
msgid "No voice state for the target!"
|
||||||
msgstr ""
|
msgstr "대상에 대한 음성 상태가 없어요!"
|
||||||
|
|
||||||
#: ../mod.py:822
|
#: ../mod.py:822
|
||||||
msgid "User has been muted in this channel."
|
msgid "User has been muted in this channel."
|
||||||
msgstr ""
|
msgstr "사용자가 이 채널에서 음소거 됐어요."
|
||||||
|
|
||||||
#: ../mod.py:858
|
#: ../mod.py:858
|
||||||
msgid "User has been muted in this guild."
|
msgid "User has been muted in this guild."
|
||||||
msgstr ""
|
msgstr "이 길드에서 해당 사용자가 음소거 됐어요."
|
||||||
|
|
||||||
#: ../mod.py:919
|
#: ../mod.py:919
|
||||||
msgid "Unmuted {}#{} in channel {}"
|
msgid "Unmuted {}#{} in channel {}"
|
||||||
msgstr ""
|
msgstr "{}#{} 이(가) {} 채널에서 음소거 해제됐어요."
|
||||||
|
|
||||||
#: ../mod.py:929
|
#: ../mod.py:929
|
||||||
msgid "That user is already unmuted in {}!"
|
msgid "That user is already unmuted in {}!"
|
||||||
msgstr ""
|
msgstr "해당 사용자가 {} 에서 이미 음소거가 해제되어 있어요!"
|
||||||
|
|
||||||
#: ../mod.py:949
|
#: ../mod.py:949
|
||||||
msgid "User unmuted in this channel."
|
msgid "User unmuted in this channel."
|
||||||
msgstr ""
|
msgstr "사용자가 이 채널에서 음소거를 해제했어요."
|
||||||
|
|
||||||
#: ../mod.py:958
|
#: ../mod.py:958
|
||||||
msgid "Unmute failed. Reason: {}"
|
msgid "Unmute failed. Reason: {}"
|
||||||
msgstr ""
|
msgstr "음소거 해제를 실패했어요. 이유 : {}"
|
||||||
|
|
||||||
#: ../mod.py:981
|
#: ../mod.py:981
|
||||||
msgid "User has been unmuted in this guild."
|
msgid "User has been unmuted in this guild."
|
||||||
msgstr ""
|
msgstr "사용자가 이 길드에서 음소거 해제됐어요."
|
||||||
|
|
||||||
#: ../mod.py:1045
|
#: ../mod.py:1045
|
||||||
msgid "Channel added to ignore list."
|
msgid "Channel added to ignore list."
|
||||||
msgstr ""
|
msgstr "채널이 무시 목록에 추가됐어요."
|
||||||
|
|
||||||
#: ../mod.py:1047
|
#: ../mod.py:1047
|
||||||
msgid "Channel already in ignore list."
|
msgid "Channel already in ignore list."
|
||||||
msgstr ""
|
msgstr "채널이 이미 무시 목록에 포함되어 있어요."
|
||||||
|
|
||||||
#: ../mod.py:1055
|
#: ../mod.py:1055
|
||||||
msgid "This guild has been added to the ignore list."
|
msgid "This guild has been added to the ignore list."
|
||||||
msgstr ""
|
msgstr "이 길드는 무시 목록에 추가됐어요."
|
||||||
|
|
||||||
#: ../mod.py:1057
|
#: ../mod.py:1057
|
||||||
msgid "This guild is already being ignored."
|
msgid "This guild is already being ignored."
|
||||||
msgstr ""
|
msgstr "이 길드는 이미 무시되고 있어요."
|
||||||
|
|
||||||
#: ../mod.py:1078
|
#: ../mod.py:1078
|
||||||
msgid "Channel removed from ignore list."
|
msgid "Channel removed from ignore list."
|
||||||
msgstr ""
|
msgstr "채널이 무시 목록에서 제거됐어요."
|
||||||
|
|
||||||
#: ../mod.py:1080
|
#: ../mod.py:1080
|
||||||
msgid "That channel is not in the ignore list."
|
msgid "That channel is not in the ignore list."
|
||||||
msgstr ""
|
msgstr "해당 채널은 무시 목록에 없어요."
|
||||||
|
|
||||||
#: ../mod.py:1088
|
#: ../mod.py:1088
|
||||||
msgid "This guild has been removed from the ignore list."
|
msgid "This guild has been removed from the ignore list."
|
||||||
msgstr ""
|
msgstr "이 길드는 무시 목록에서 제거됐어요."
|
||||||
|
|
||||||
#: ../mod.py:1090
|
#: ../mod.py:1090
|
||||||
msgid "This guild is not in the ignore list."
|
msgid "This guild is not in the ignore list."
|
||||||
msgstr ""
|
msgstr "이 길드는 무시 목록에 포함되어 있지 않아요."
|
||||||
|
|
||||||
#: ../mod.py:1102
|
#: ../mod.py:1102
|
||||||
msgid "Currently ignoring:\n"
|
msgid "Currently ignoring:\n"
|
||||||
"{} channels\n"
|
"{} channels\n"
|
||||||
"{} guilds\n"
|
"{} guilds\n"
|
||||||
msgstr ""
|
msgstr "현재 무시 중 :\n"
|
||||||
|
"{}개의 채널\n"
|
||||||
|
"{} 길드"
|
||||||
|
|
||||||
#: ../mod.py:1133
|
#: ../mod.py:1133
|
||||||
msgid "**Past 20 names**:"
|
msgid "**Past 20 names**:"
|
||||||
msgstr ""
|
msgstr "**20개의 이름 초과** :"
|
||||||
|
|
||||||
#: ../mod.py:1140
|
#: ../mod.py:1140
|
||||||
msgid "**Past 20 nicknames**:"
|
msgid "**Past 20 nicknames**:"
|
||||||
msgstr ""
|
msgstr "**20개의 닉네임을 초과** :"
|
||||||
|
|
||||||
#: ../mod.py:1146
|
#: ../mod.py:1146
|
||||||
msgid "That user doesn't have any recorded name or nickname change."
|
msgid "That user doesn't have any recorded name or nickname change."
|
||||||
msgstr ""
|
msgstr "해당 사용자에게 기록된 이름이나 닉네임이 없어요."
|
||||||
|
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: red-discordbot\n"
|
"Project-Id-Version: red-discordbot\n"
|
||||||
"POT-Creation-Date: 2018-02-18 14:42+AKST\n"
|
"POT-Creation-Date: 2018-02-18 14:42+AKST\n"
|
||||||
"PO-Revision-Date: 2018-02-25 21:33-0500\n"
|
"PO-Revision-Date: 2018-04-02 19:27-0400\n"
|
||||||
"Last-Translator: Kowlin <boxedpp@gmail.com>\n"
|
"Last-Translator: Kowlin <boxedpp@gmail.com>\n"
|
||||||
"Language-Team: Dutch\n"
|
"Language-Team: Dutch\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: red-discordbot\n"
|
"Project-Id-Version: red-discordbot\n"
|
||||||
"POT-Creation-Date: 2018-02-18 14:42+AKST\n"
|
"POT-Creation-Date: 2018-02-18 14:42+AKST\n"
|
||||||
"PO-Revision-Date: 2018-02-25 21:33-0500\n"
|
"PO-Revision-Date: 2018-04-02 19:27-0400\n"
|
||||||
"Last-Translator: Kowlin <boxedpp@gmail.com>\n"
|
"Last-Translator: Kowlin <boxedpp@gmail.com>\n"
|
||||||
"Language-Team: Russian\n"
|
"Language-Team: Russian\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
|
|||||||
@@ -328,8 +328,8 @@ class Mod:
|
|||||||
|
|
||||||
try:
|
try:
|
||||||
await modlog.create_case(
|
await modlog.create_case(
|
||||||
guild, ctx.message.created_at, "kick", user, author,
|
self.bot, guild, ctx.message.created_at, "kick",
|
||||||
reason, until=None, channel=None
|
user, author, reason, until=None, channel=None
|
||||||
)
|
)
|
||||||
except RuntimeError as e:
|
except RuntimeError as e:
|
||||||
await ctx.send(e)
|
await ctx.send(e)
|
||||||
@@ -389,8 +389,8 @@ class Mod:
|
|||||||
|
|
||||||
try:
|
try:
|
||||||
await modlog.create_case(
|
await modlog.create_case(
|
||||||
guild, ctx.message.created_at, "ban", user, author,
|
self.bot, guild, ctx.message.created_at, "ban",
|
||||||
reason, until=None, channel=None
|
user, author, reason, until=None, channel=None
|
||||||
)
|
)
|
||||||
except RuntimeError as e:
|
except RuntimeError as e:
|
||||||
await ctx.send(e)
|
await ctx.send(e)
|
||||||
@@ -442,8 +442,8 @@ class Mod:
|
|||||||
user_info = await self.bot.get_user_info(user_id)
|
user_info = await self.bot.get_user_info(user_id)
|
||||||
try:
|
try:
|
||||||
await modlog.create_case(
|
await modlog.create_case(
|
||||||
guild, ctx.message.created_at, "hackban", user_info, author,
|
self.bot, guild, ctx.message.created_at, "hackban",
|
||||||
reason, until=None, channel=None
|
user_info, author, reason, until=None, channel=None
|
||||||
)
|
)
|
||||||
except RuntimeError as e:
|
except RuntimeError as e:
|
||||||
await ctx.send(e)
|
await ctx.send(e)
|
||||||
@@ -490,7 +490,7 @@ class Mod:
|
|||||||
|
|
||||||
try:
|
try:
|
||||||
await modlog.create_case(
|
await modlog.create_case(
|
||||||
guild, ctx.message.created_at, "tempban",
|
self.bot, guild, ctx.message.created_at, "tempban",
|
||||||
user, author, reason, unban_time
|
user, author, reason, unban_time
|
||||||
)
|
)
|
||||||
except RuntimeError as e:
|
except RuntimeError as e:
|
||||||
@@ -560,6 +560,7 @@ class Mod:
|
|||||||
user.name, user.id))
|
user.name, user.id))
|
||||||
try:
|
try:
|
||||||
await modlog.create_case(
|
await modlog.create_case(
|
||||||
|
self.bot,
|
||||||
guild,
|
guild,
|
||||||
ctx.message.created_at,
|
ctx.message.created_at,
|
||||||
"softban",
|
"softban",
|
||||||
@@ -609,8 +610,8 @@ class Mod:
|
|||||||
|
|
||||||
try:
|
try:
|
||||||
await modlog.create_case(
|
await modlog.create_case(
|
||||||
guild, ctx.message.created_at, "unban", user, author,
|
self.bot, guild, ctx.message.created_at, "unban",
|
||||||
reason, until=None, channel=None
|
user, author, reason, until=None, channel=None
|
||||||
)
|
)
|
||||||
except RuntimeError as e:
|
except RuntimeError as e:
|
||||||
await ctx.send(e)
|
await ctx.send(e)
|
||||||
@@ -697,8 +698,8 @@ class Mod:
|
|||||||
|
|
||||||
try:
|
try:
|
||||||
await modlog.create_case(
|
await modlog.create_case(
|
||||||
guild, ctx.message.created_at, "voiceban", user, author,
|
self.bot, guild, ctx.message.created_at, "voiceban",
|
||||||
reason, until=None, channel=None
|
user, author, reason, until=None, channel=None
|
||||||
)
|
)
|
||||||
except RuntimeError as e:
|
except RuntimeError as e:
|
||||||
await ctx.send(e)
|
await ctx.send(e)
|
||||||
@@ -732,8 +733,8 @@ class Mod:
|
|||||||
author = ctx.author
|
author = ctx.author
|
||||||
try:
|
try:
|
||||||
await modlog.create_case(
|
await modlog.create_case(
|
||||||
guild, ctx.message.created_at, "voiceunban", user, author,
|
self.bot, guild, ctx.message.created_at, "voiceunban",
|
||||||
reason, until=None, channel=None
|
user, author, reason, until=None, channel=None
|
||||||
)
|
)
|
||||||
except RuntimeError as e:
|
except RuntimeError as e:
|
||||||
await ctx.send(e)
|
await ctx.send(e)
|
||||||
@@ -791,8 +792,8 @@ class Mod:
|
|||||||
)
|
)
|
||||||
try:
|
try:
|
||||||
await modlog.create_case(
|
await modlog.create_case(
|
||||||
guild, ctx.message.created_at, "boicemute", user, author,
|
self.bot, guild, ctx.message.created_at, "boicemute",
|
||||||
reason, until=None, channel=channel
|
user, author, reason, until=None, channel=channel
|
||||||
)
|
)
|
||||||
except RuntimeError as e:
|
except RuntimeError as e:
|
||||||
await ctx.send(e)
|
await ctx.send(e)
|
||||||
@@ -826,8 +827,8 @@ class Mod:
|
|||||||
await channel.send(_("User has been muted in this channel."))
|
await channel.send(_("User has been muted in this channel."))
|
||||||
try:
|
try:
|
||||||
await modlog.create_case(
|
await modlog.create_case(
|
||||||
guild, ctx.message.created_at, "cmute", user, author,
|
self.bot, guild, ctx.message.created_at, "cmute",
|
||||||
reason, until=None, channel=channel
|
user, author, reason, until=None, channel=channel
|
||||||
)
|
)
|
||||||
except RuntimeError as e:
|
except RuntimeError as e:
|
||||||
await ctx.send(e)
|
await ctx.send(e)
|
||||||
@@ -862,8 +863,8 @@ class Mod:
|
|||||||
await ctx.send(_("User has been muted in this guild."))
|
await ctx.send(_("User has been muted in this guild."))
|
||||||
try:
|
try:
|
||||||
await modlog.create_case(
|
await modlog.create_case(
|
||||||
guild, ctx.message.created_at, "smute", user, author,
|
self.bot, guild, ctx.message.created_at, "smute",
|
||||||
reason, until=None, channel=None
|
user, author, reason, until=None, channel=None
|
||||||
)
|
)
|
||||||
except RuntimeError as e:
|
except RuntimeError as e:
|
||||||
await ctx.send(e)
|
await ctx.send(e)
|
||||||
@@ -924,8 +925,8 @@ class Mod:
|
|||||||
user.name, user.discriminator, channel.name))
|
user.name, user.discriminator, channel.name))
|
||||||
try:
|
try:
|
||||||
await modlog.create_case(
|
await modlog.create_case(
|
||||||
guild, ctx.message.created_at, "voiceunmute", user, author,
|
self.bot, guild, ctx.message.created_at, "voiceunmute",
|
||||||
reason, until=None, channel=channel
|
user, author, reason, until=None, channel=channel
|
||||||
)
|
)
|
||||||
except RuntimeError as e:
|
except RuntimeError as e:
|
||||||
await ctx.send(e)
|
await ctx.send(e)
|
||||||
@@ -953,8 +954,8 @@ class Mod:
|
|||||||
await ctx.send(_("User unmuted in this channel."))
|
await ctx.send(_("User unmuted in this channel."))
|
||||||
try:
|
try:
|
||||||
await modlog.create_case(
|
await modlog.create_case(
|
||||||
guild, ctx.message.created_at, "cunmute", user, author,
|
self.bot, guild, ctx.message.created_at, "cunmute",
|
||||||
reason, until=None, channel=channel
|
user, author, reason, until=None, channel=channel
|
||||||
)
|
)
|
||||||
except RuntimeError as e:
|
except RuntimeError as e:
|
||||||
await ctx.send(e)
|
await ctx.send(e)
|
||||||
@@ -985,8 +986,8 @@ class Mod:
|
|||||||
await ctx.send(_("User has been unmuted in this guild."))
|
await ctx.send(_("User has been unmuted in this guild."))
|
||||||
try:
|
try:
|
||||||
await modlog.create_case(
|
await modlog.create_case(
|
||||||
guild, ctx.message.created_at, "sunmute", user, author,
|
self.bot, guild, ctx.message.created_at, "sunmute",
|
||||||
reason, until=None, channel=channel
|
user, author, reason, until=None, channel=channel
|
||||||
)
|
)
|
||||||
except RuntimeError as e:
|
except RuntimeError as e:
|
||||||
await ctx.send(e)
|
await ctx.send(e)
|
||||||
@@ -1209,8 +1210,8 @@ class Mod:
|
|||||||
else:
|
else:
|
||||||
try:
|
try:
|
||||||
case = await modlog.create_case(
|
case = await modlog.create_case(
|
||||||
guild, message.created_at, "ban", author, guild.me,
|
self.bot, guild, message.created_at, "ban", author,
|
||||||
"Mention spam (Autoban)", until=None, channel=None
|
guild.me, "Mention spam (Autoban)", until=None, channel=None
|
||||||
)
|
)
|
||||||
except RuntimeError as e:
|
except RuntimeError as e:
|
||||||
print(e)
|
print(e)
|
||||||
@@ -1269,7 +1270,7 @@ class Mod:
|
|||||||
if date is None:
|
if date is None:
|
||||||
date = datetime.now()
|
date = datetime.now()
|
||||||
try:
|
try:
|
||||||
await modlog.create_case(guild, date,
|
await modlog.create_case(self.bot, guild, date,
|
||||||
"ban", member, mod,
|
"ban", member, mod,
|
||||||
reason if reason else None)
|
reason if reason else None)
|
||||||
except RuntimeError as e:
|
except RuntimeError as e:
|
||||||
@@ -1288,7 +1289,7 @@ class Mod:
|
|||||||
if date is None:
|
if date is None:
|
||||||
date = datetime.now()
|
date = datetime.now()
|
||||||
try:
|
try:
|
||||||
await modlog.create_case(guild, date, "unban",
|
await modlog.create_case(self.bot, guild, date, "unban",
|
||||||
user, mod, reason)
|
user, mod, reason)
|
||||||
except RuntimeError as e:
|
except RuntimeError as e:
|
||||||
print(e)
|
print(e)
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: red-discordbot\n"
|
"Project-Id-Version: red-discordbot\n"
|
||||||
"POT-Creation-Date: 2018-02-18 14:42+AKST\n"
|
"POT-Creation-Date: 2018-02-18 14:42+AKST\n"
|
||||||
"PO-Revision-Date: 2018-02-25 21:33-0500\n"
|
"PO-Revision-Date: 2018-02-27 01:49-0500\n"
|
||||||
"Last-Translator: Kowlin <boxedpp@gmail.com>\n"
|
"Last-Translator: Kowlin <boxedpp@gmail.com>\n"
|
||||||
"Language-Team: German\n"
|
"Language-Team: German\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: red-discordbot\n"
|
"Project-Id-Version: red-discordbot\n"
|
||||||
"POT-Creation-Date: 2018-02-18 14:42+AKST\n"
|
"POT-Creation-Date: 2018-02-18 14:42+AKST\n"
|
||||||
"PO-Revision-Date: 2018-02-25 21:34-0500\n"
|
"PO-Revision-Date: 2018-04-02 19:27-0400\n"
|
||||||
"Last-Translator: Kowlin <boxedpp@gmail.com>\n"
|
"Last-Translator: Kowlin <boxedpp@gmail.com>\n"
|
||||||
"Language-Team: Pirate English\n"
|
"Language-Team: Pirate English\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: red-discordbot\n"
|
"Project-Id-Version: red-discordbot\n"
|
||||||
"POT-Creation-Date: 2018-02-18 14:42+AKST\n"
|
"POT-Creation-Date: 2018-02-18 14:42+AKST\n"
|
||||||
"PO-Revision-Date: 2018-02-25 21:34-0500\n"
|
"PO-Revision-Date: 2018-04-02 19:27-0400\n"
|
||||||
"Last-Translator: Kowlin <boxedpp@gmail.com>\n"
|
"Last-Translator: Kowlin <boxedpp@gmail.com>\n"
|
||||||
"Language-Team: Indonesian\n"
|
"Language-Team: Indonesian\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
@@ -18,45 +18,45 @@ msgstr ""
|
|||||||
|
|
||||||
#: ../modlog.py:36
|
#: ../modlog.py:36
|
||||||
msgid "Mod events will be sent to {}"
|
msgid "Mod events will be sent to {}"
|
||||||
msgstr ""
|
msgstr "Peristiwa mod akan dikirim ke {}"
|
||||||
|
|
||||||
#: ../modlog.py:42
|
#: ../modlog.py:42
|
||||||
msgid "I do not have permissions to send messages in {}!"
|
msgid "I do not have permissions to send messages in {}!"
|
||||||
msgstr ""
|
msgstr "Saya tidak memiliki izin untuk mengirim pesan di {}!"
|
||||||
|
|
||||||
#: ../modlog.py:52
|
#: ../modlog.py:52
|
||||||
msgid "Mod log deactivated."
|
msgid "Mod log deactivated."
|
||||||
msgstr ""
|
msgstr "Mod log dinonaktifkan."
|
||||||
|
|
||||||
#: ../modlog.py:63
|
#: ../modlog.py:63
|
||||||
msgid "Current settings:"
|
msgid "Current settings:"
|
||||||
msgstr ""
|
msgstr "Pengaturan saat ini:"
|
||||||
|
|
||||||
#: ../modlog.py:75
|
#: ../modlog.py:75
|
||||||
msgid "That action is not registered"
|
msgid "That action is not registered"
|
||||||
msgstr ""
|
msgstr "Tindakan tersebut tidak terdaftar"
|
||||||
|
|
||||||
#: ../modlog.py:82
|
#: ../modlog.py:82
|
||||||
msgid "Case creation for {} actions is now {}."
|
msgid "Case creation for {} actions is now {}."
|
||||||
msgstr ""
|
msgstr "Penciptaan kasus untuk {} tindakan sekarang {}."
|
||||||
|
|
||||||
#: ../modlog.py:94
|
#: ../modlog.py:94
|
||||||
msgid "Cases have been reset."
|
msgid "Cases have been reset."
|
||||||
msgstr ""
|
msgstr "Kasus telah di setel ulang."
|
||||||
|
|
||||||
#: ../modlog.py:103
|
#: ../modlog.py:103
|
||||||
msgid "That case does not exist for that guild"
|
msgid "That case does not exist for that guild"
|
||||||
msgstr ""
|
msgstr "Kasus untuk guild tersebut tidak ada"
|
||||||
|
|
||||||
#: ../modlog.py:122
|
#: ../modlog.py:122
|
||||||
msgid "That case does not exist!"
|
msgid "That case does not exist!"
|
||||||
msgstr ""
|
msgstr "Kasus tersebut tidak ada!"
|
||||||
|
|
||||||
#: ../modlog.py:146
|
#: ../modlog.py:146
|
||||||
msgid "You are not authorized to modify that case!"
|
msgid "You are not authorized to modify that case!"
|
||||||
msgstr ""
|
msgstr "Anda tidak diizinkan untuk mengubah kasus tersebut!"
|
||||||
|
|
||||||
#: ../modlog.py:155
|
#: ../modlog.py:155
|
||||||
msgid "Reason has been updated."
|
msgid "Reason has been updated."
|
||||||
msgstr ""
|
msgstr "Alasan telah di perbarui."
|
||||||
|
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user