Compare commits

...

29 Commits

Author SHA1 Message Date
palmtree5
efdf69552f [V3] Beta 12 release (#1525)
* [V3] update translations from Crowdin

* [V3] bump version to 3.0.0b12
2018-04-16 19:05:21 -08:00
Michael H
38531bf95c [V3 Tunnel utils] Better handling of tunnel instances (#1538)
* Better handling of tunnel instances

* docs
2018-04-16 19:02:38 -08:00
Wyn
6d714db928 [V3 Audio] Add Lavalink Jar build to settings (#1430)
* [V3 Audio] Add Lavalink Jar build to settings

Added Lavalink Jar build to Lavalink settings since build number now stored in config.

* Forgot import

Added import

* Left align

K im done for real this time
2018-04-16 18:57:17 -08:00
Michael H
f8e7497695 [V3] Remove old usage of type tuples with config (#1518) 2018-04-16 21:41:13 -04:00
TheFixed
d6ef812704 [V3 Admin] fix typo (#1537)
it's -> it is or it has
its -> possessive form of it
2018-04-16 17:36:38 -08:00
Will
4f81bc9621 [V3 CogManager] Fix duplicate paths/reorderpath not working (#1501)
* Fix duplicate paths/reorderpath not working

* Make remove path use the visible paths not the internals.
2018-04-16 21:21:31 -04:00
aikaterna
59276ce2a5 [V3 Audio] External lavalink server settings, playlist saving & recall, bugfixes (#1528)
* Add settings for external lavalink servers

* Add external lavalink server to settings display

* Add simple error handling

* Remove future permissions conflict

Assuming base Red permissions will be accessed with the 'p' command in the future

* Update prev to set requester to user instead of id

* Various fixes

Jukebox: Plebs not in a channel will not have the song cost deducted before the warning to join a channel first.
DJ role: Finer grained permissions for plebs that are alone: they can use prev (if shuffle is off), skip, pause, resume

* Update permissions

* Add track number to footer when queueing

* Add basic playlist saving

More subcommands to come later

* Check if user is not in voice

* Restrict playlist deletion to author and mods

* Add playlist info command
2018-04-17 00:42:32 +02:00
Michael H
96791bd72b [V3] supress pynacl warning (#1508)
* supress pynacl warning

* move the supression to __init__.py

* ..

* Revert "move the supression to __init__.py"

This reverts commit ee7ba9c968.

Doesn't properly work here

* Changes are fine in __init__.py

Needs a module level import in __main__.py or the console scripts generated by pip setup don't ever run the code in __init__

* supress pynacl warning

* puts the changes back again to avoid duplicate module import warning
2018-04-16 14:32:05 -08:00
Michael H
8756b22f5a [V3] Report Tool (#1281)
* Okay, let's fix the issues here hopefully.

* This is working now

* Unfinished, and needs a lot of testing.

* more work

* working

* minor thing to remove

* improve i18n and usage feedback
2018-04-16 13:56:14 -08:00
Wyn
487d256f46 [V3 Docs] Added Arch Installation guide (#1504)
* Added Arch Installation guide

For prereqs:
python-pip pulls python which pulls required packages libffi and openssl
Removed ffmpeg for Java replacement

* index

Adding the guide to the index sounds like a smart idea...

* Removed libsodium

Not needed after all

* added --user flag to installs for pip
2018-04-16 23:45:53 +02:00
Pier-Angelo Gaetani
fe0b6aaba4 [V3 Docs] Systemd guide + extras (#1505)
* Documentation extras

Added links to each distro's user add functions
Added systemd service guide
Added --user operator to pip install commands

* Update autostart_systemd.rst

Added no-prompt flag
2018-04-16 23:44:08 +02:00
retke
017c8a6900 [V3 Mod] Denying add_reactions permission to muted users (#1495)
* denied permission of adding reactions to muted users

* Track both send_messages and add_reactions perms
2018-04-16 12:17:03 -08:00
Michael H
afe4af0dc2 [V3 Launcher] fix issue with instance removal via launcher (#1535)
* handle issue

* or it would have if I had put it on the right line

* no more making patches from my phone
2018-04-16 11:57:57 -08:00
bobloy
fb8e4430ac [V3] Fix Cleanup loop (#1533)
* prevent infinite loop

* pep8 updates

Assorted pep8 updates to retrigger Travis

* Revert "pep8 updates"

This reverts commit d0c7f8b808.
2018-04-16 11:51:01 -08:00
Bakersbakebread
7499f5dbfa [V3 Mod utils] Beihnd -> behind typo (#1531)
Fixed typo
2018-04-16 11:41:11 -08:00
bobloy
c7b58aa65b [V3 Economy] guild -> server in [p]bank reset (#1530) 2018-04-16 11:37:29 -08:00
bobloy
705d9b8238 [V3] guild->server (#1529)
Mostly string renames
customcom now recognized {guild} and {server}
2018-04-16 11:32:51 -08:00
bobloy
1bc650b0f9 [V3] Mod.py guild -> server (#1522)
* mod guild->server naming

* typo
2018-04-16 10:13:26 +02:00
palmtree5
580aeea4e2 [V3 Instance setup] fix an issue getting credentials to convert Mongo to JSON (#1514)
* [V3 Instance setup] fix an issue getting credentials to convert Mongo to JSON

* Attempt a fix at data conversion issues
2018-04-16 10:03:21 +02:00
palmtree5
8495824843 [V3 Core] unhide [p]embedset (#1523) 2018-04-16 09:59:34 +02:00
aikaterna
18bb3611fa [V3 Economy] Add credits name to payday (#1496) 2018-04-15 15:23:09 -08:00
bobloy
9f7bf8d1a2 [V3 Launcher] don't get cli flags if no instances are found (#1497)
Don't get cli flags unless there is an instance to get
2018-04-15 15:20:59 -08:00
Michael H
82146eda3d [V3/docs] New Audio, remove old reqs... (#1503)
* typo fix

* update docs with up to date reqs (remove old) and reccommend venv usage

* remove youtube_dl from reqs

* adding the mac doc update after verifying correctness

* venv installation required for py3.5 ...

* remove venv stuff, that can be handled on a unified page in a later PR
2018-04-15 14:44:16 -08:00
Sebass13
d75881e1a3 [V3 Economy] Add per-role payouts (#1488) 2018-04-15 14:40:32 -08:00
Will
5be967e8c5 [V3 Audio] Harden Lavalink boot sequence (#1498)
* Do a bit of hardening

* Loop not asyncio

* Don't use new asyncio coolness

* I hate you all

* Muck up everything

* Fix version comparisons
2018-04-15 14:01:56 -08:00
Kowlin
d9fa875d84 [V3] Splitted deployment stage into their own stages. (#1524)
* Splitted deplyoment stages into their own stage.

* Updated Codeowners to reflect meta files.
2018-04-13 13:16:36 -08:00
rngesus-wept
04f93c98d2 [V3] Add .pytest_cache to .gitignore (#1520) 2018-04-11 14:45:53 -08:00
palmtree5
402f6c19e7 [V3 Core] fix some issues with [p]set and [p]set nickname (#1494)
* [V3 Core] fix AttributeError in [p]set

* Fix [p]set nickname

* Make the nickname param on [p]set nickname optional
2018-04-04 12:42:10 +02:00
Michael H
84b0df0437 [V3 Data Converter] Python3.5 compatibility issue patch (#1491)
* python3.5 patch

* urf -> utf
2018-04-02 22:17:40 -04:00
457 changed files with 11245 additions and 5898 deletions

7
.github/CODEOWNERS vendored
View File

@@ -22,6 +22,8 @@ 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 redbot/core/utils/data_converter.py @mikeshardmind
redbot/core/utils/antispam.py @mikeshardmind
redbot/core/utils/tunnel.py @mikeshardmind
# Cogs # Cogs
redbot/cogs/admin/* @tekulvw redbot/cogs/admin/* @tekulvw
@@ -40,6 +42,7 @@ 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 redbot/cogs/dataconverter/* @mikeshardmind
redbot/cogs/reports/* @mikeshardmind
# Docs # Docs
docs/* @tekulvw @palmtree5 docs/* @tekulvw @palmtree5
@@ -49,3 +52,7 @@ setup.py @tekulvw
redbot/__init__.py @tekulvw redbot/__init__.py @tekulvw
redbot/__main__.py @tekulvw redbot/__main__.py @tekulvw
redbot/setup.py @tekulvw redbot/setup.py @tekulvw
# Others
.travis.yml @Kowlin
crowdin.yml @Kowlin

2
.gitignore vendored
View File

@@ -156,3 +156,5 @@ ENV/
# mypy # mypy
.mypy_cache/ .mypy_cache/
# pytest
.pytest_cache/

View File

@@ -17,16 +17,11 @@ script:
jobs: jobs:
include: include:
- stage: Deployment - stage: PyPi Deployment
if: tag IS present if: tag IS present
python: 3.5.3 python: 3.5.3
env: env:
- DEPLOYING=true - DEPLOYING=true
before_deployment:
- curl https://artifacts.crowdin.com/repo/GPG-KEY-crowdin | sudo apt-key add -
- echo "deb https://artifacts.crowdin.com/repo/deb/ /" | sudo tee -a /etc/apt/sources.list
- sudo apt-get update -qq
- sudo apt-get install -y crowdin
deploy: deploy:
- provider: pypi - provider: pypi
user: Red-DiscordBot user: Red-DiscordBot
@@ -38,6 +33,17 @@ jobs:
branch: V3/develop branch: V3/develop
python: 3.5.3 python: 3.5.3
tags: true tags: true
- stage: Crowdin Deployment
if: tag IS present
python: 3.5.3
env:
- DEPLOYING=true
before_deployment:
- curl https://artifacts.crowdin.com/repo/GPG-KEY-crowdin | sudo apt-key add -
- echo "deb https://artifacts.crowdin.com/repo/deb/ /" | sudo tee -a /etc/apt/sources.list
- sudo apt-get update -qq
- sudo apt-get install -y crowdin
deploy:
- provider: script - provider: script
script: python3 ./generate_strings.py script: python3 ./generate_strings.py
skip_cleanup: true skip_cleanup: true

View File

@@ -0,0 +1,48 @@
.. systemd service guide
==========================
Setting up auto-restart using systemd on Linux
==========================
---------------------------
Creating the service file
---------------------------
Create the new service file:
:code:`sudo nano /etc/systemd/system/red@.service`
Paste the following and replace all instances of :code:`username` with the username your bot is running under (hopefully not root):
.. code-block:: none
[Unit]
Description=%I redbot
After=multi-user.target
[Service]
ExecStart=/home/username/.local/bin/redbot %I --no-prompt
User=username
Group=username
Type=idle
Restart=always
RestartSec=15
[Install]
WantedBy=multi-user.target
Save and exit :code:`ctrl + O; enter; ctrl + x`
---------------------------
Starting and enabling the service
---------------------------
To start the bot, run the service and add the instance name after the **@**:
:code:`sudo systemctl start red@instancename`
To set the bot to start on boot, you must enable the service, again adding the instance name after the **@**:
:code:`sudo systemctl enable red@instancename`
.. note:: This same file can be used to start as many instances of the bot as you wish, without creating more service files, just start and enable more services and add any bot instance name after the **@**

View File

@@ -62,10 +62,11 @@ author = 'Cog Creators'
# |version| and |release|, also used in various other places throughout the # |version| and |release|, also used in various other places throughout the
# built documents. # built documents.
# #
from redbot.core import __version__
# The short X.Y version. # The short X.Y version.
version = '3.0.0b11' version = __version__
# The full version, including alpha/beta/rc tags. # The full version, including alpha/beta/rc tags.
release = '3.0.0b11' release = __version__
# 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.

View File

@@ -27,3 +27,9 @@ V2 Data Conversion
.. automodule:: redbot.core.utils.data_converter .. automodule:: redbot.core.utils.data_converter
:members: DataConverter :members: DataConverter
Tunnel
======
.. automodule:: redbot.core.utils.tunnel
:members: Tunnel

View File

@@ -82,7 +82,7 @@ Here's an example of that in use:
need to be awaited need to be awaited
""" """
# First we give the converter out cog's Config instance. # First we give the converter our cog's Config instance.
converter = dc(self.config) converter = dc(self.config)
# next we design a way to get all of the data into Config's internal # next we design a way to get all of the data into Config's internal

View File

@@ -15,8 +15,10 @@ Welcome to Red - Discord Bot's documentation!
install_ubuntu install_ubuntu
install_debian install_debian
install_centos install_centos
install_arch
install_raspbian install_raspbian
cog_dataconverter cog_dataconverter
autostart_systemd
.. toctree:: .. toctree::
:maxdepth: 2 :maxdepth: 2

55
docs/install_arch.rst Normal file
View File

@@ -0,0 +1,55 @@
.. arch install guide
==============================
Installing Red on Arch Linux
==============================
.. warning:: For safety reasons, DO NOT install Red with a root user. Instead, make a new one.
:code:`https://wiki.archlinux.org/index.php/Users_and_groups`
-------------------------------
Installing the pre-requirements
-------------------------------
.. code-block:: none
sudo pacman -Sy python-pip git base-devel jre8-openjdk
------------------
Installing the bot
------------------
To install without audio:
:code:`pip3 install -U --process-dependency-links red-discordbot --user`
To install with audio:
:code:`pip3 install -U --process-dependency-links red-discordbot[voice] --user`
To install the development version (without audio):
:code:`pip3 install -U --process-dependency-links git+https://github.com/Cog-Creators/Red-DiscordBot@V3/develop#egg=red-discordbot --user`
To install the development version (with audio):
:code:`pip3 install -U --process-dependency-links git+https://github.com/Cog-Creators/Red-DiscordBot@V3/develop#egg=red-discordbot[voice] --user`
------------------------
Setting up your instance
------------------------
Run :code:`redbot-setup` and follow the prompts. It will ask first for where you want to
store the data (the default is :code:`~/.local/share/Red-DiscordBot`) and will then ask
for confirmation of that selection. Next, it will ask you to choose your storage backend
(the default here is JSON). It will then ask for a name for your instance. This can be
anything as long as it does not contain spaces; however, keep in mind that this is the
name you will use to run your bot, and so it should be something you can remember.
-----------
Running Red
-----------
Run :code:`redbot <your instance name>` and run through the initial setup. This will ask for
your token and a prefix.

View File

@@ -4,6 +4,8 @@
Installing Red on CentOS 7 Installing Red on CentOS 7
========================== ==========================
.. warning:: For safety reasons, DO NOT install Red with a root user. Instead, `make a new one <https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/4/html/Step_by_Step_Guide/s1-starting-create-account.html>`_.
--------------------------- ---------------------------
Installing pre-requirements Installing pre-requirements
--------------------------- ---------------------------
@@ -12,7 +14,7 @@ Installing pre-requirements
yum -y groupinstall development yum -y groupinstall development
yum -y install https://centos7.iuscommunity.org/ius-release.rpm yum -y install https://centos7.iuscommunity.org/ius-release.rpm
yum -y install yum-utils wget which python35u python35u-pip python35u-devel openssl-devel libffi-devel git opus-devel java-1.8.0-openjdk yum -y install yum-utils wget which python35u python35u-pip python35u-devel openssl-devel libffi-devel git java-1.8.0-openjdk
sh -c "$(wget https://gist.githubusercontent.com/mustafaturan/7053900/raw/27f4c8bad3ee2bb0027a1a52dc8501bf1e53b270/latest-ffmpeg-centos6.sh -O -)" sh -c "$(wget https://gist.githubusercontent.com/mustafaturan/7053900/raw/27f4c8bad3ee2bb0027a1a52dc8501bf1e53b270/latest-ffmpeg-centos6.sh -O -)"
-------------- --------------
@@ -21,19 +23,19 @@ Installing Red
Without audio: Without audio:
:code:`pip3 install -U --process-dependency-links red-discordbot` :code:`pip3 install -U --process-dependency-links red-discordbot --user`
With audio: With audio:
:code:`pip3 install -U --process-dependency-links red-discordbot[voice]` :code:`pip3 install -U --process-dependency-links red-discordbot[voice] --user`
To install the development version (without audio): To install the development version (without audio):
:code:`pip3 install -U --process-dependency-links git+https://github.com/Cog-Creators/Red-DiscordBot@V3/develop#egg=red-discordbot` :code:`pip3 install -U --process-dependency-links git+https://github.com/Cog-Creators/Red-DiscordBot@V3/develop#egg=red-discordbot --user`
To install the development version (with audio): To install the development version (with audio):
:code:`pip3 install -U --process-dependency-links git+https://github.com/Cog-Creators/Red-DiscordBot@V3/develop#egg=red-discordbot[voice]` :code:`pip3 install -U --process-dependency-links git+https://github.com/Cog-Creators/Red-DiscordBot@V3/develop#egg=red-discordbot[voice] --user`
---------------------- ----------------------
Setting up an instance Setting up an instance

View File

@@ -4,7 +4,7 @@
Installing Red on Debian Stretch Installing Red on Debian Stretch
================================ ================================
.. warning:: For safety reasons, DO NOT install Red with a root user. Instead, make a new one. .. warning:: For safety reasons, DO NOT install Red with a root user. Instead, `make a new one <https://manpages.debian.org/stretch/adduser/adduser.8.en.html>`_.
--------------------------- ---------------------------
Installing pre-requirements Installing pre-requirements
@@ -14,7 +14,7 @@ Installing pre-requirements
echo "deb http://httpredir.debian.org/debian stretch-backports main contrib non-free" >> /etc/apt/sources.list echo "deb http://httpredir.debian.org/debian stretch-backports main contrib non-free" >> /etc/apt/sources.list
apt-get update apt-get update
apt-get install python3.5-dev python3-pip build-essential libssl-dev libffi-dev git ffmpeg libopus-dev unzip default-jre -y apt-get install python3.5-dev python3-pip build-essential libssl-dev libffi-dev git unzip default-jre -y
------------------ ------------------
Installing the bot Installing the bot

View File

@@ -15,8 +15,6 @@ Installing pre-requirements
* After the installation, install the required packages by pasting the commands and pressing enter, one-by-one: * After the installation, install the required packages by pasting the commands and pressing enter, one-by-one:
* :code:`brew install python3 --with-brewed-openssl` * :code:`brew install python3 --with-brewed-openssl`
* :code:`brew install git` * :code:`brew install git`
* :code:`brew install ffmpeg --with-ffplay`
* :code:`brew install opus`
* :code:`brew tap caskroom/versions` * :code:`brew tap caskroom/versions`
* :code:`brew cask install java8` * :code:`brew cask install java8`

View File

@@ -4,13 +4,16 @@
Installing Red on Raspbian Stretch Installing Red on Raspbian Stretch
================================== ==================================
.. warning:: For safety reasons, DO NOT install Red with a root user. Instead, `make a new one <https://www.raspberrypi.org/documentation/linux/usage/users.md>`_.
--------------------------- ---------------------------
Installing pre-requirements Installing pre-requirements
--------------------------- ---------------------------
.. code-block:: none .. code-block:: none
sudo apt-get install python3.5-dev python3-pip build-essential libssl-dev libffi-dev git libav-tools libopus-dev unzip default-jre -y sudo apt-get install python3.5-dev python3-pip build-essential libssl-dev libffi-dev git unzip default-jre -y
-------------- --------------
Installing Red Installing Red
@@ -18,19 +21,19 @@ Installing Red
Without audio: Without audio:
:code:`pip3 install -U --process-dependency-links red-discordbot` :code:`pip3 install -U --process-dependency-links red-discordbot --user`
With audio: With audio:
:code:`pip3 install -U --process-dependency-links red-discordbot[voice]` :code:`pip3 install -U --process-dependency-links red-discordbot[voice] --user`
To install the development version (without audio): To install the development version (without audio):
:code:`pip3 install -U --process-dependency-links git+https://github.com/Cog-Creators/Red-DiscordBot@V3/develop#egg=red-discordbot` :code:`pip3 install -U --process-dependency-links git+https://github.com/Cog-Creators/Red-DiscordBot@V3/develop#egg=red-discordbot --user`
To install the development version (with audio): To install the development version (with audio):
:code:`pip3 install -U --process-dependency-links git+https://github.com/Cog-Creators/Red-DiscordBot@V3/develop#egg=red-discordbot[voice]` :code:`pip3 install -U --process-dependency-links git+https://github.com/Cog-Creators/Red-DiscordBot@V3/develop#egg=red-discordbot[voice] --user`
---------------------- ----------------------
Setting up an instance Setting up an instance

View File

@@ -4,7 +4,7 @@
Installing Red on Ubuntu 16.04 Installing Red on Ubuntu 16.04
============================== ==============================
.. warning:: For safety reasons, DO NOT install Red with a root user. Instead, make a new one. .. warning:: For safety reasons, DO NOT install Red with a root user. Instead, `make a new one <http://manpages.ubuntu.com/manpages/artful/man8/adduser.8.html>`_.
------------------------------- -------------------------------
Installing the pre-requirements Installing the pre-requirements
@@ -12,7 +12,8 @@ Installing the pre-requirements
.. code-block:: none .. code-block:: none
sudo apt install python3.5-dev python3-pip build-essential libssl-dev libffi-dev git ffmpeg libopus-dev unzip default-jre -y sudo apt install python3.5-dev python3-pip build-essential libssl-dev libffi-dev git unzip default-jre -y
------------------ ------------------
Installing the bot Installing the bot
@@ -20,19 +21,19 @@ Installing the bot
To install without audio: To install without audio:
:code:`pip3 install -U --process-dependency-links red-discordbot` :code:`pip3 install -U --process-dependency-links red-discordbot --user`
To install with audio: To install with audio:
:code:`pip3 install -U --process-dependency-links red-discordbot[voice]` :code:`pip3 install -U --process-dependency-links red-discordbot[voice] --user`
To install the development version (without audio): To install the development version (without audio):
:code:`pip3 install -U --process-dependency-links git+https://github.com/Cog-Creators/Red-DiscordBot@V3/develop#egg=red-discordbot` :code:`pip3 install -U --process-dependency-links git+https://github.com/Cog-Creators/Red-DiscordBot@V3/develop#egg=red-discordbot --user`
To install the development version (with audio): To install the development version (with audio):
:code:`pip3 install -U --process-dependency-links git+https://github.com/Cog-Creators/Red-DiscordBot@V3/develop#egg=red-discordbot[voice]` :code:`pip3 install -U --process-dependency-links git+https://github.com/Cog-Creators/Red-DiscordBot@V3/develop#egg=red-discordbot[voice] --user`
------------------------ ------------------------
Setting up your instance Setting up your instance

View File

@@ -375,7 +375,7 @@ class Admin:
@checks.is_owner() @checks.is_owner()
async def serverlock(self, ctx: commands.Context): async def serverlock(self, ctx: commands.Context):
""" """
Locks a bot to it's current servers only. Locks a bot to its current servers only.
""" """
serverlocked = await self.conf.serverlocked() serverlocked = await self.conf.serverlocked()
await self.conf.serverlocked.set(not serverlocked) await self.conf.serverlocked.set(not serverlocked)

View File

@@ -65,7 +65,7 @@ class Announcer:
try: try:
await channel.send(self.message) await channel.send(self.message)
except discord.Forbidden: except discord.Forbidden:
await bot_owner.send("I could not announce to guild: {}".format( await bot_owner.send("I could not announce to server: {}".format(
g.id g.id
)) ))
await asyncio.sleep(0.5) await asyncio.sleep(0.5)

View File

@@ -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:32-0500\n" "PO-Revision-Date: 2018-04-15 16:41-0400\n"
"Last-Translator: Kowlin <boxedpp@gmail.com>\n" "Last-Translator: Kowlin <boxedpp@gmail.com>\n"
"Language-Team: Arabic\n" "Language-Team: Arabic\n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"

View File

@@ -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-15 16:42-0400\n"
"Last-Translator: Kowlin <boxedpp@gmail.com>\n" "Last-Translator: Kowlin <boxedpp@gmail.com>\n"
"Language-Team: Bulgarian\n" "Language-Team: Bulgarian\n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"

View File

@@ -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-15 16:42-0400\n"
"Last-Translator: Kowlin <boxedpp@gmail.com>\n" "Last-Translator: Kowlin <boxedpp@gmail.com>\n"
"Language-Team: Danish\n" "Language-Team: Danish\n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"

View File

@@ -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-27 01:49-0500\n" "PO-Revision-Date: 2018-04-15 16:42-0400\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"

View File

@@ -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-15 16:42-0400\n"
"Last-Translator: Kowlin <boxedpp@gmail.com>\n" "Last-Translator: Kowlin <boxedpp@gmail.com>\n"
"Language-Team: Greek\n" "Language-Team: Greek\n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"

View File

@@ -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-04-02 19:27-0400\n" "PO-Revision-Date: 2018-04-15 16:43-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"

View File

@@ -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:32-0500\n" "PO-Revision-Date: 2018-04-15 16:41-0400\n"
"Last-Translator: Kowlin <boxedpp@gmail.com>\n" "Last-Translator: Kowlin <boxedpp@gmail.com>\n"
"Language-Team: Spanish\n" "Language-Team: Spanish\n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"

View File

@@ -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-15 16:42-0400\n"
"Last-Translator: Kowlin <boxedpp@gmail.com>\n" "Last-Translator: Kowlin <boxedpp@gmail.com>\n"
"Language-Team: Finnish\n" "Language-Team: Finnish\n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"

View File

@@ -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:32-0500\n" "PO-Revision-Date: 2018-04-15 16:41-0400\n"
"Last-Translator: Kowlin <boxedpp@gmail.com>\n" "Last-Translator: Kowlin <boxedpp@gmail.com>\n"
"Language-Team: French\n" "Language-Team: French\n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"

View File

@@ -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-15 16:42-0400\n"
"Last-Translator: Kowlin <boxedpp@gmail.com>\n" "Last-Translator: Kowlin <boxedpp@gmail.com>\n"
"Language-Team: Hungarian\n" "Language-Team: Hungarian\n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"

View File

@@ -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-04-02 19:27-0400\n" "PO-Revision-Date: 2018-04-15 16:43-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"

View File

@@ -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-15 16:42-0400\n"
"Last-Translator: Kowlin <boxedpp@gmail.com>\n" "Last-Translator: Kowlin <boxedpp@gmail.com>\n"
"Language-Team: Italian\n" "Language-Team: Italian\n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"

View File

@@ -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-15 16:42-0400\n"
"Last-Translator: Kowlin <boxedpp@gmail.com>\n" "Last-Translator: Kowlin <boxedpp@gmail.com>\n"
"Language-Team: Japanese\n" "Language-Team: Japanese\n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"

View File

@@ -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-04-02 19:26-0400\n" "PO-Revision-Date: 2018-04-15 16:42-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"

View File

@@ -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-15 16:43-0400\n"
"Last-Translator: Kowlin <boxedpp@gmail.com>\n" "Last-Translator: Kowlin <boxedpp@gmail.com>\n"
"Language-Team: LOLCAT\n" "Language-Team: LOLCAT\n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"

View File

@@ -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-04-02 19:27-0400\n" "PO-Revision-Date: 2018-04-15 16:42-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"

View File

@@ -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-15 16:42-0400\n"
"Last-Translator: Kowlin <boxedpp@gmail.com>\n" "Last-Translator: Kowlin <boxedpp@gmail.com>\n"
"Language-Team: Norwegian\n" "Language-Team: Norwegian\n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"

View File

@@ -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-15 16:43-0400\n"
"Last-Translator: Kowlin <boxedpp@gmail.com>\n" "Last-Translator: Kowlin <boxedpp@gmail.com>\n"
"Language-Team: Polish\n" "Language-Team: Polish\n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"

View File

@@ -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-15 16:43-0400\n"
"Last-Translator: Kowlin <boxedpp@gmail.com>\n" "Last-Translator: Kowlin <boxedpp@gmail.com>\n"
"Language-Team: Portuguese, Brazilian\n" "Language-Team: Portuguese, Brazilian\n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"

View File

@@ -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-15 16:43-0400\n"
"Last-Translator: Kowlin <boxedpp@gmail.com>\n" "Last-Translator: Kowlin <boxedpp@gmail.com>\n"
"Language-Team: Portuguese\n" "Language-Team: Portuguese\n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"

View File

@@ -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-04-02 19:27-0400\n" "PO-Revision-Date: 2018-04-15 16:43-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"

View File

@@ -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-15 16:43-0400\n"
"Last-Translator: Kowlin <boxedpp@gmail.com>\n" "Last-Translator: Kowlin <boxedpp@gmail.com>\n"
"Language-Team: Swedish\n" "Language-Team: Swedish\n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"

View File

@@ -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-15 16:43-0400\n"
"Last-Translator: Kowlin <boxedpp@gmail.com>\n" "Last-Translator: Kowlin <boxedpp@gmail.com>\n"
"Language-Team: Chinese Simplified\n" "Language-Team: Chinese Simplified\n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"

View File

@@ -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:32-0500\n" "PO-Revision-Date: 2018-04-15 16:41-0400\n"
"Last-Translator: Kowlin <boxedpp@gmail.com>\n" "Last-Translator: Kowlin <boxedpp@gmail.com>\n"
"Language-Team: Arabic\n" "Language-Team: Arabic\n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"

View File

@@ -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-15 16:42-0400\n"
"Last-Translator: Kowlin <boxedpp@gmail.com>\n" "Last-Translator: Kowlin <boxedpp@gmail.com>\n"
"Language-Team: Bulgarian\n" "Language-Team: Bulgarian\n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"

View File

@@ -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-15 16:42-0400\n"
"Last-Translator: Kowlin <boxedpp@gmail.com>\n" "Last-Translator: Kowlin <boxedpp@gmail.com>\n"
"Language-Team: Danish\n" "Language-Team: Danish\n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"

View File

@@ -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-27 01:49-0500\n" "PO-Revision-Date: 2018-04-15 16:42-0400\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"

View File

@@ -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-15 16:42-0400\n"
"Last-Translator: Kowlin <boxedpp@gmail.com>\n" "Last-Translator: Kowlin <boxedpp@gmail.com>\n"
"Language-Team: Greek\n" "Language-Team: Greek\n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"

View File

@@ -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-04-02 19:27-0400\n" "PO-Revision-Date: 2018-04-15 16:43-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"

View File

@@ -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:32-0500\n" "PO-Revision-Date: 2018-04-15 16:41-0400\n"
"Last-Translator: Kowlin <boxedpp@gmail.com>\n" "Last-Translator: Kowlin <boxedpp@gmail.com>\n"
"Language-Team: Spanish\n" "Language-Team: Spanish\n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"

View File

@@ -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-15 16:42-0400\n"
"Last-Translator: Kowlin <boxedpp@gmail.com>\n" "Last-Translator: Kowlin <boxedpp@gmail.com>\n"
"Language-Team: Finnish\n" "Language-Team: Finnish\n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"

View File

@@ -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:32-0500\n" "PO-Revision-Date: 2018-04-15 16:41-0400\n"
"Last-Translator: Kowlin <boxedpp@gmail.com>\n" "Last-Translator: Kowlin <boxedpp@gmail.com>\n"
"Language-Team: French\n" "Language-Team: French\n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"

View File

@@ -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-15 16:42-0400\n"
"Last-Translator: Kowlin <boxedpp@gmail.com>\n" "Last-Translator: Kowlin <boxedpp@gmail.com>\n"
"Language-Team: Hungarian\n" "Language-Team: Hungarian\n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"

View File

@@ -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-04-02 19:27-0400\n" "PO-Revision-Date: 2018-04-15 16:43-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"

View File

@@ -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-15 16:42-0400\n"
"Last-Translator: Kowlin <boxedpp@gmail.com>\n" "Last-Translator: Kowlin <boxedpp@gmail.com>\n"
"Language-Team: Italian\n" "Language-Team: Italian\n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"

View File

@@ -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-15 16:42-0400\n"
"Last-Translator: Kowlin <boxedpp@gmail.com>\n" "Last-Translator: Kowlin <boxedpp@gmail.com>\n"
"Language-Team: Japanese\n" "Language-Team: Japanese\n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"

View File

@@ -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-04-02 19:26-0400\n" "PO-Revision-Date: 2018-04-15 16:42-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"

View File

@@ -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-15 16:43-0400\n"
"Last-Translator: Kowlin <boxedpp@gmail.com>\n" "Last-Translator: Kowlin <boxedpp@gmail.com>\n"
"Language-Team: LOLCAT\n" "Language-Team: LOLCAT\n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"

View File

@@ -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-04-02 19:27-0400\n" "PO-Revision-Date: 2018-04-15 16:42-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"

View File

@@ -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-15 16:42-0400\n"
"Last-Translator: Kowlin <boxedpp@gmail.com>\n" "Last-Translator: Kowlin <boxedpp@gmail.com>\n"
"Language-Team: Norwegian\n" "Language-Team: Norwegian\n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"

View File

@@ -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-15 16:43-0400\n"
"Last-Translator: Kowlin <boxedpp@gmail.com>\n" "Last-Translator: Kowlin <boxedpp@gmail.com>\n"
"Language-Team: Polish\n" "Language-Team: Polish\n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"

View File

@@ -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-15 16:43-0400\n"
"Last-Translator: Kowlin <boxedpp@gmail.com>\n" "Last-Translator: Kowlin <boxedpp@gmail.com>\n"
"Language-Team: Portuguese, Brazilian\n" "Language-Team: Portuguese, Brazilian\n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"

View File

@@ -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-15 16:43-0400\n"
"Last-Translator: Kowlin <boxedpp@gmail.com>\n" "Last-Translator: Kowlin <boxedpp@gmail.com>\n"
"Language-Team: Portuguese\n" "Language-Team: Portuguese\n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"

View File

@@ -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-04-02 19:27-0400\n" "PO-Revision-Date: 2018-04-15 16:43-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"

View File

@@ -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-15 16:43-0400\n"
"Last-Translator: Kowlin <boxedpp@gmail.com>\n" "Last-Translator: Kowlin <boxedpp@gmail.com>\n"
"Language-Team: Swedish\n" "Language-Team: Swedish\n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"

View File

@@ -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-15 16:43-0400\n"
"Last-Translator: Kowlin <boxedpp@gmail.com>\n" "Last-Translator: Kowlin <boxedpp@gmail.com>\n"
"Language-Team: Chinese Simplified\n" "Language-Team: Chinese Simplified\n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"

View File

@@ -1,18 +1,17 @@
from pathlib import Path from pathlib import Path
from aiohttp import ClientSession from aiohttp import ClientSession
import shutil import shutil
import asyncio
from .audio import Audio from .audio import Audio
from .manager import start_lavalink_server from .manager import start_lavalink_server
from discord.ext import commands from discord.ext import commands
from redbot.core.data_manager import cog_data_path from redbot.core.data_manager import cog_data_path
import redbot.core
LAVALINK_BUILD = 3112 LAVALINK_DOWNLOAD_URL = (
LAVALINK_BUILD_URL = ( "https://github.com/Cog-Creators/Red-DiscordBot/"
"https://ci.fredboat.com/repository/download/" "releases/download/{}/Lavalink.jar"
"Lavalink_Build/{}:id/Lavalink.jar?guest=1" ).format(redbot.core.__version__)
).format(LAVALINK_BUILD)
LAVALINK_DOWNLOAD_DIR = cog_data_path(raw_name="Audio") LAVALINK_DOWNLOAD_DIR = cog_data_path(raw_name="Audio")
LAVALINK_JAR_FILE = LAVALINK_DOWNLOAD_DIR / "Lavalink.jar" LAVALINK_JAR_FILE = LAVALINK_DOWNLOAD_DIR / "Lavalink.jar"
@@ -23,7 +22,7 @@ BUNDLED_APP_YML_FILE = Path(__file__).parent / "application.yml"
async def download_lavalink(session): async def download_lavalink(session):
with LAVALINK_JAR_FILE.open(mode='wb') as f: with LAVALINK_JAR_FILE.open(mode='wb') as f:
async with session.get(LAVALINK_BUILD_URL) as resp: async with session.get(LAVALINK_DOWNLOAD_URL) as resp:
while True: while True:
chunk = await resp.content.read(512) chunk = await resp.content.read(512)
if not chunk: if not chunk:
@@ -33,24 +32,25 @@ async def download_lavalink(session):
async def maybe_download_lavalink(loop, cog): async def maybe_download_lavalink(loop, cog):
jar_exists = LAVALINK_JAR_FILE.exists() jar_exists = LAVALINK_JAR_FILE.exists()
current_build = await cog.config.current_build() current_build = redbot.core.VersionInfo(*await cog.config.current_build())
if not jar_exists or current_build < LAVALINK_BUILD: session = ClientSession(loop=loop)
if not jar_exists or current_build < redbot.core.version_info:
LAVALINK_DOWNLOAD_DIR.mkdir(parents=True, exist_ok=True) LAVALINK_DOWNLOAD_DIR.mkdir(parents=True, exist_ok=True)
with ClientSession(loop=loop) as session:
await download_lavalink(session) await download_lavalink(session)
await cog.config.current_build.set(LAVALINK_BUILD) await cog.config.current_build.set(redbot.core.version_info.to_json())
session.close()
shutil.copyfile(str(BUNDLED_APP_YML_FILE), str(APP_YML_FILE)) shutil.copyfile(str(BUNDLED_APP_YML_FILE), str(APP_YML_FILE))
async def setup(bot: commands.Bot): async def setup(bot: commands.Bot):
cog = Audio(bot) cog = Audio(bot)
if not await cog.config.use_external_lavalink():
await maybe_download_lavalink(bot.loop, cog) await maybe_download_lavalink(bot.loop, cog)
await start_lavalink_server(bot.loop) await start_lavalink_server(bot.loop)
async def _finish():
await cog.init_config()
bot.add_cog(cog) bot.add_cog(cog)
bot.loop.create_task(cog.init_config())
bot.loop.create_task(_finish())

View File

@@ -4,19 +4,20 @@ import discord
import heapq import heapq
import lavalink import lavalink
import math import math
import redbot.core
from discord.ext import commands from discord.ext import commands
from redbot.core import Config, checks, bank from redbot.core import Config, checks, bank
from .manager import shutdown_lavalink_server from .manager import shutdown_lavalink_server
__version__ = "0.0.4" __version__ = "0.0.5"
__author__ = ["aikaterna", "billy/bollo/ati"] __author__ = ["aikaterna", "billy/bollo/ati"]
class Audio: class Audio:
def __init__(self, bot): def __init__(self, bot):
self.bot = bot self.bot = bot
self.config = Config.get_conf(self, 2711759128, force_registration=True) self.config = Config.get_conf(self, 2711759130, force_registration=True)
default_global = { default_global = {
"host": 'localhost', "host": 'localhost',
@@ -24,7 +25,8 @@ class Audio:
"ws_port": '2332', "ws_port": '2332',
"password": 'youshallnotpass', "password": 'youshallnotpass',
"status": False, "status": False,
"current_build": 0 "current_build": [3, 0, 0, 'alpha', 0],
"use_external_lavalink": False
} }
default_guild = { default_guild = {
@@ -32,6 +34,7 @@ class Audio:
"dj_role": None, "dj_role": None,
"jukebox": False, "jukebox": False,
"jukebox_price": 0, "jukebox_price": 0,
"playlists": {},
"notify": False, "notify": False,
"repeat": False, "repeat": False,
"shuffle": False, "shuffle": False,
@@ -115,6 +118,17 @@ class Audio:
await self.bot.change_presence(activity=discord.Activity(name='music in {} servers'.format(playing_servers), await self.bot.change_presence(activity=discord.Activity(name='music in {} servers'.format(playing_servers),
type=discord.ActivityType.playing)) type=discord.ActivityType.playing))
if event_type == lavalink.LavalinkEvents.TRACK_EXCEPTION:
message_channel = player.fetch('channel')
if message_channel:
message_channel = self.bot.get_channel(message_channel)
embed = discord.Embed(colour=message_channel.guild.me.top_role.colour, title='Track Error',
description='{}\n**[{}]({})**'.format(extra, player.current.title,
player.current.uri))
embed.set_footer(text='Skipping...')
await message_channel.send(embed=embed)
await player.skip()
@commands.group() @commands.group()
@commands.guild_only() @commands.guild_only()
async def audioset(self, ctx): async def audioset(self, ctx):
@@ -185,14 +199,16 @@ class Audio:
async def settings(self, ctx): async def settings(self, ctx):
"""Show the current settings.""" """Show the current settings."""
data = await self.config.guild(ctx.guild).all() data = await self.config.guild(ctx.guild).all()
global_data = await self.config.all()
dj_role_obj = discord.utils.get(ctx.guild.roles, id=data['dj_role']) dj_role_obj = discord.utils.get(ctx.guild.roles, id=data['dj_role'])
dj_enabled = data['dj_enabled'] dj_enabled = data['dj_enabled']
jukebox = data['jukebox'] jukebox = data['jukebox']
jukebox_price = data['jukebox_price'] jukebox_price = data['jukebox_price']
status = await self.config.status() jarbuild = redbot.core.__version__
vote_percent = data['vote_percent'] vote_percent = data['vote_percent']
msg = ('```ini\n' msg = ('```ini\n'
'----Guild Settings----\n') '----Server Settings----\n')
if dj_enabled: if dj_enabled:
msg += 'DJ Role: [{}]\n'.format(dj_role_obj.name) msg += 'DJ Role: [{}]\n'.format(dj_role_obj.name)
if jukebox: if jukebox:
@@ -201,12 +217,14 @@ class Audio:
msg += ('Repeat: [{repeat}]\n' msg += ('Repeat: [{repeat}]\n'
'Shuffle: [{shuffle}]\n' 'Shuffle: [{shuffle}]\n'
'Song notify msgs: [{notify}]\n' 'Song notify msgs: [{notify}]\n'
'Songs as status: [{0}]\n'.format(status, **data)) 'Songs as status: [{status}]\n'.format(**global_data, **data))
if vote_percent > 0: if vote_percent > 0:
msg += ('Vote skip: [{vote_enabled}]\n' msg += ('Vote skip: [{vote_enabled}]\n'
'Skip percentage: [{vote_percent}%]\n').format(**data) 'Skip percentage: [{vote_percent}%]\n').format(**data)
msg += ('---Lavalink Settings---\n' msg += ('---Lavalink Settings---\n'
'Cog version: {}\n```'.format(__version__)) 'Cog version: [{}]\n'
'Jar build: [{}]\n'
'External server: [{use_external_lavalink}]```').format(__version__, jarbuild, **global_data)
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)
@@ -290,7 +308,7 @@ class Audio:
if dj_enabled: if dj_enabled:
if 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 disconnect.') return await self._embed_msg(ctx, 'You need the DJ role to disconnect.')
if not await self._can_instaskip(ctx, ctx.author): if not await self._can_instaskip(ctx, ctx.author) and not await self._is_alone(ctx, ctx.author):
return await self._embed_msg(ctx, 'There are other people listening to music.') return await self._embed_msg(ctx, 'There are other people listening to music.')
else: else:
await lavalink.get_player(ctx.guild.id).stop() await lavalink.get_player(ctx.guild.id).stop()
@@ -336,7 +354,7 @@ class Audio:
dj_enabled = await self.config.guild(ctx.guild).dj_enabled() dj_enabled = await self.config.guild(ctx.guild).dj_enabled()
vote_enabled = await self.config.guild(ctx.guild).vote_enabled() vote_enabled = await self.config.guild(ctx.guild).vote_enabled()
if dj_enabled or vote_enabled: if dj_enabled or vote_enabled:
if not await self._can_instaskip(ctx, ctx.author): if not await self._can_instaskip(ctx, ctx.author) and not await self._is_alone(ctx, ctx.author):
return return
if player.current: if player.current:
@@ -375,11 +393,11 @@ class Audio:
await self._can_instaskip(ctx, ctx.author)): 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 dj_enabled:
if not await self._can_instaskip(ctx, ctx.author): if not await self._can_instaskip(ctx, ctx.author) and not await self._is_alone(ctx, ctx.author):
return await self._embed_msg(ctx, 'You need the DJ role to pause songs.') return await self._embed_msg(ctx, 'You need the DJ role to pause songs.')
command = ctx.invoked_with command = ctx.invoked_with
if player.current and not player.paused and command == 'pause': if player.current and not player.paused and command != 'resume':
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',
@@ -390,7 +408,7 @@ class Audio:
) )
return await ctx.send(embed=embed) return await ctx.send(embed=embed)
if player.paused and command == 'resume': if player.paused and command != 'pause':
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,
@@ -448,7 +466,7 @@ class Audio:
description=queue_user_list) description=queue_user_list)
await ctx.send(embed=embed) await ctx.send(embed=embed)
@commands.command(aliases=['p']) @commands.command()
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."""
dj_enabled = await self.config.guild(ctx.guild).dj_enabled() dj_enabled = await self.config.guild(ctx.guild).dj_enabled()
@@ -464,8 +482,6 @@ class Audio:
if dj_enabled: if dj_enabled:
if 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 queue songs.') 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 = 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)
@@ -473,6 +489,8 @@ class Audio:
if ((not ctx.author.voice or ctx.author.voice.channel != player.channel) and not if ((not ctx.author.voice or ctx.author.voice.channel != player.channel) and not
await self._can_instaskip(ctx, ctx.author)): 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.') return await self._embed_msg(ctx, 'You must be in the voice channel to use the play command.')
if not await self._currency_check(ctx, jukebox_price):
return
query = query.strip('<>') query = query.strip('<>')
if not query.startswith('http'): if not query.startswith('http'):
@@ -484,6 +502,7 @@ class Audio:
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)
before_queue_length = len(player.queue) + 1
if 'list' in query and 'ytsearch:' not in query: if 'list' in query and 'ytsearch:' not in query:
for track in tracks: for track in tracks:
@@ -491,7 +510,7 @@ class Audio:
embed = discord.Embed(colour=ctx.guild.me.top_role.colour, title='Playlist Enqueued', embed = discord.Embed(colour=ctx.guild.me.top_role.colour, title='Playlist Enqueued',
description='Added {} tracks to the queue.'.format(len(tracks))) description='Added {} tracks to the queue.'.format(len(tracks)))
if not shuffle and queue_duration > 0: if not shuffle and queue_duration > 0:
embed.set_footer(text='{} until start of playlist playback'.format(queue_total_duration)) embed.set_footer(text='{} until start of playlist playback: starts at #{} in queue'.format(queue_total_duration, before_queue_length))
if not player.current: if not player.current:
await player.play() await player.play()
else: else:
@@ -500,11 +519,181 @@ class Audio:
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(single_track.title, single_track.uri)) description='**[{}]({})**'.format(single_track.title, single_track.uri))
if not shuffle and queue_duration > 0: if not shuffle and queue_duration > 0:
embed.set_footer(text='{} until track playback'.format(queue_total_duration)) embed.set_footer(text='{} until track playback: #{} in queue'.format(queue_total_duration, before_queue_length))
if not player.current: if not player.current:
await player.play() await player.play()
await ctx.send(embed=embed) await ctx.send(embed=embed)
@commands.group()
@commands.guild_only()
async def playlist(self, ctx):
"""Playlist configuration options."""
if ctx.invoked_subcommand is None:
await ctx.send_help()
@playlist.command(name='delete')
async def _playlist_delete(self, ctx, playlist_name):
"""Delete a saved playlist."""
async with self.config.guild(ctx.guild).playlists() as playlists:
try:
if playlists[playlist_name]['author'] != ctx.author.id and not await self._can_instaskip(ctx, ctx.author):
return await self._embed_msg(ctx, 'You are not the author of that playlist.')
del playlists[playlist_name]
except KeyError:
return await self._embed_msg(ctx, 'No playlist with that name.')
await self._embed_msg(ctx, '{} playlist removed.'.format(playlist_name))
@playlist.command(name='info')
async def _playlist_info(self, ctx, playlist_name):
"""Retrieve information from a saved playlist."""
playlists = await self.config.guild(ctx.guild).playlists.get_raw()
try:
author_id = playlists[playlist_name]['author']
except KeyError:
return await self._embed_msg(ctx, 'No playlist with that name.')
author_obj = self.bot.get_user(author_id)
playlist_url = playlists[playlist_name]['playlist_url']
try:
track_len = len(playlists[playlist_name]['tracks'])
except TypeError:
track_len = 1
if playlist_url is None:
playlist_url = '**Not generated from a URL.**'
else:
playlist_url = 'URL: <{}>'.format(playlist_url)
embed = discord.Embed(colour=ctx.guild.me.top_role.colour, title='Playlist info for {}:'.format(playlist_name),
description='Author: **{}**\n{}'.format(author_obj,
playlist_url))
if track_len > 1:
embed.set_footer(text='{} tracks'.format(track_len))
if track_len == 1:
embed.set_footer(text='{} track'.format(track_len))
await ctx.send(embed=embed)
@playlist.command(name='list')
async def _playlist_list(self, ctx):
"""List saved playlists."""
playlists = await self.config.guild(ctx.guild).playlists.get_raw()
playlist_list = []
for playlist_name in playlists:
playlist_list.append(playlist_name)
abc_names = sorted(playlist_list, key=str.lower)
all_playlists = ', '.join(abc_names)
embed = discord.Embed(colour=ctx.guild.me.top_role.colour, title='Playlists for {}:'.format(ctx.guild.name),
description=all_playlists)
await ctx.send(embed=embed)
@playlist.command(name='queue')
async def _playlist_queue(self, ctx, playlist_name=None):
"""Save the queue to a playlist."""
dj_enabled = await self.config.guild(ctx.guild).dj_enabled()
if dj_enabled:
if not await self._can_instaskip(ctx, ctx.author):
return await self._embed_msg(ctx, 'You need the DJ role to save playlists.')
async with self.config.guild(ctx.guild).playlists() as playlists:
if playlist_name in playlists:
return await self._embed_msg(ctx, 'Playlist name already exists, try again with a different name.')
if not self._player_check(ctx):
return await self._embed_msg(ctx, 'Nothing playing.')
player = lavalink.get_player(ctx.guild.id)
tracklist = []
np_song = self._track_creator(ctx, player, 'np', None)
tracklist.append(np_song)
for track in player.queue:
queue_idx = player.queue.index(track)
track_obj = self._track_creator(ctx, player, queue_idx, None)
tracklist.append(track_obj)
if not playlist_name:
await self._embed_msg(ctx, 'Please enter a name for this playlist.')
def check(m):
return m.author == ctx.author
try:
playlist_name_msg = await ctx.bot.wait_for('message', timeout=15.0, check=check)
playlist_name = str(playlist_name_msg.content)
if len(playlist_name) > 20:
return await self._embed_msg(ctx, 'Try the command again with a shorter name.')
if playlist_name in playlists:
return await self._embed_msg(ctx, 'Playlist name already exists, try again with a different name.')
except asyncio.TimeoutError:
return await self._embed_msg(ctx, 'No playlist name entered, try again later.')
playlist_list = self._to_json(ctx, None, tracklist, playlist_name)
async with self.config.guild(ctx.guild).playlists() as playlists:
playlists[playlist_name] = playlist_list
await self._embed_msg(ctx, 'Playlist {} saved from current queue: {} tracks added.'.format(playlist_name, len(tracklist)))
@playlist.command(name='save')
async def _playlist_save(self, ctx, playlist_name, playlist_url):
"""Save a playlist from a url."""
if not await self._playlist_check(ctx):
return
player = lavalink.get_player(ctx.guild.id)
tracks = await player.get_tracks(playlist_url)
if not tracks:
return await self._embed_msg(ctx, 'Nothing found.')
tracklist = []
for track in tracks:
track_obj = self._track_creator(ctx, player, None, track)
tracklist.append(track_obj)
playlist_list = self._to_json(ctx, playlist_url, tracklist, playlist_name)
async with self.config.guild(ctx.guild).playlists() as playlists:
playlists[playlist_name] = playlist_list
return await self._embed_msg(ctx, 'Playlist {} saved: {} tracks added.'.format(playlist_name, len(tracks)))
@playlist.command(name='start')
async def _playlist_start(self, ctx, playlist_name=None):
"""Load a playlist into the queue."""
if not await self._playlist_check(ctx):
return
playlists = await self.config.guild(ctx.guild).playlists.get_raw()
try:
author_id = playlists[playlist_name]["author"]
except KeyError:
return await self._embed_msg(ctx, 'That playlist doesn\'t exist.')
author_obj = self.bot.get_user(author_id)
track_count = 0
try:
playlist_len = len(playlists[playlist_name]["tracks"])
player = lavalink.get_player(ctx.guild.id)
for track in playlists[playlist_name]["tracks"]:
player.add(author_obj, lavalink.rest_api.Track(data=track))
track_count = track_count + 1
embed = discord.Embed(colour=ctx.guild.me.top_role.colour, title='Playlist Enqueued',
description='Added {} tracks to the queue.'.format(track_count))
await ctx.send(embed=embed)
if not player.current:
await player.play()
except TypeError:
await ctx.invoke(self.play, query=playlists[playlist_name]["playlist_url"])
async def _playlist_check(self, ctx):
dj_enabled = await self.config.guild(ctx.guild).dj_enabled()
jukebox_price = await self.config.guild(ctx.guild).jukebox_price()
if dj_enabled:
if not await self._can_instaskip(ctx, ctx.author):
await self._embed_msg(ctx, 'You need the DJ role to use playlists.')
return False
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:
await self._embed_msg(ctx, 'Connect to a voice channel first.')
return False
player = lavalink.get_player(ctx.guild.id)
player.store('channel', ctx.channel.id)
player.store('guild', ctx.guild.id)
if ((not ctx.author.voice or ctx.author.voice.channel != player.channel) and not
await self._can_instaskip(ctx, ctx.author)):
await self._embed_msg(ctx, 'You must be in the voice channel to use the playlist command.')
return False
if not await self._currency_check(ctx, jukebox_price):
return False
await self._data_check(ctx)
return True
@commands.command() @commands.command()
async def prev(self, ctx): async def prev(self, ctx):
"""Skips to the start of the previously played track.""" """Skips to the start of the previously played track."""
@@ -514,7 +703,7 @@ class Audio:
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 dj_enabled: if dj_enabled:
if not await self._can_instaskip(ctx, ctx.author): if not await self._can_instaskip(ctx, ctx.author) and not await self._is_alone(ctx, ctx.author):
return await self._embed_msg(ctx, 'You need the DJ role to skip songs.') 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 if ((not ctx.author.voice or ctx.author.voice.channel != player.channel) and not
await self._can_instaskip(ctx, ctx.author)): await self._can_instaskip(ctx, ctx.author)):
@@ -525,7 +714,7 @@ class Audio:
return await self._embed_msg(ctx, 'No previous track.') return await self._embed_msg(ctx, 'No previous track.')
else: else:
last_track = await player.get_tracks(player.fetch('prev_song')) last_track = await player.get_tracks(player.fetch('prev_song'))
player.add(player.fetch('prev_requester').id, last_track[0]) player.add(player.fetch('prev_requester'), last_track[0])
queue_len = len(player.queue) queue_len = len(player.queue)
bump_song = player.queue[-1] bump_song = player.queue[-1]
player.queue.insert(0, bump_song) player.queue.insert(0, bump_song)
@@ -556,7 +745,10 @@ class Audio:
end = start + items_per_page end = start + items_per_page
queue_list = '' queue_list = ''
try:
arrow = await self._draw_time(ctx) arrow = await self._draw_time(ctx)
except AttributeError:
return await self._embed_msg(ctx, 'There\'s nothing in the queue.')
pos = lavalink.utils.format_time(player.position) pos = lavalink.utils.format_time(player.position)
if player.current.is_stream: if player.current.is_stream:
@@ -714,7 +906,7 @@ class Audio:
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)
if not shuffle and queue_duration > 0: if not shuffle and queue_duration > 0:
songembed.set_footer(text='{} until start of search playback'.format(queue_total_duration)) songembed.set_footer(text='{} until start of search playback: starts at #{} in queue'.format(queue_total_duration, (len(player.queue) + 1)))
for track in tracks: for track in tracks:
player.add(ctx.author, track) player.add(ctx.author, track)
if not player.current: if not player.current:
@@ -734,7 +926,7 @@ class Audio:
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)
if not shuffle and queue_duration > 0: if not shuffle and queue_duration > 0:
embed.set_footer(text='{} until track playback'.format(queue_total_duration)) embed.set_footer(text='{} until track playback: #{} in queue'.format(queue_total_duration, (len(player.queue) + 1)))
player.add(ctx.author, search_choice) player.add(ctx.author, search_choice)
if not player.current: if not player.current:
await player.play() await player.play()
@@ -751,7 +943,7 @@ class Audio:
await self._can_instaskip(ctx, ctx.author)): 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 dj_enabled:
if not await self._can_instaskip(ctx, ctx.author): if not await self._can_instaskip(ctx, ctx.author) and not await self._is_alone(ctx, ctx.author):
return await self._embed_msg(ctx, 'You need the DJ role to use seek.') 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:
@@ -797,7 +989,7 @@ class Audio:
dj_enabled = await self.config.guild(ctx.guild).dj_enabled() dj_enabled = await self.config.guild(ctx.guild).dj_enabled()
vote_enabled = await self.config.guild(ctx.guild).vote_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 dj_enabled and not vote_enabled and not await self._can_instaskip(ctx, ctx.author):
if not await self._can_instaskip(ctx, ctx.author): if not await self._is_alone(ctx, ctx.author):
return await self._embed_msg(ctx, 'You need the DJ role to skip songs.') return await self._embed_msg(ctx, 'You need the DJ role to skip songs.')
if vote_enabled: if vote_enabled:
if not await self._can_instaskip(ctx, ctx.author): if not await self._can_instaskip(ctx, ctx.author):
@@ -845,18 +1037,26 @@ class Audio:
is_admin = discord.utils.get(ctx.guild.get_member(member.id).roles, id=admin_role) is not None 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_mod = discord.utils.get(ctx.guild.get_member(member.id).roles, id=mod_role) is not None
is_bot = member.bot is True is_bot = member.bot is True
return is_active_dj or is_owner or is_server_owner or is_coowner or is_admin or is_mod or is_bot
async def _is_alone(self, ctx, member):
try: try:
nonbots = sum(not m.bot for m in ctx.guild.get_member(member.id).voice.channel.members) user_voice = ctx.guild.get_member(member.id).voice
bot_voice = ctx.guild.get_member(self.bot.user.id).voice
nonbots = sum(not m.bot for m in user_voice.channel.members)
if user_voice.channel != bot_voice.channel:
nonbots = nonbots + 1
except AttributeError: except AttributeError:
if ctx.guild.get_member(self.bot.user.id).voice is not None: 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) nonbots = sum(not m.bot for m in ctx.guild.get_member(self.bot.user.id).voice.channel.members)
if nonbots == 1: if nonbots == 1:
nonbots = 2 nonbots = 2
else: else:
nonbots = 2 if ctx.guild.get_member(member.id).voice.channel.members == 1:
nonbots = 1
alone = nonbots <= 1 alone = nonbots <= 1
return alone
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): async def _has_dj_role(self, ctx, member):
dj_role_id = await self.config.guild(ctx.guild).dj_role() dj_role_id = await self.config.guild(ctx.guild).dj_role()
@@ -901,7 +1101,7 @@ class Audio:
await self._can_instaskip(ctx, ctx.author)): 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 vote_enabled or vote_enabled and dj_enabled:
if not await self._can_instaskip(ctx, ctx.author): if not await self._can_instaskip(ctx, ctx.author) and not await self._is_alone(ctx, ctx.author):
return await self._embed_msg(ctx, 'There are other people listening - vote to skip instead.') return await self._embed_msg(ctx, 'There are other people listening - vote to skip instead.')
if dj_enabled and not vote_enabled: if dj_enabled and not vote_enabled:
if not await self._can_instaskip(ctx, ctx.author): if not await self._can_instaskip(ctx, ctx.author):
@@ -955,30 +1155,74 @@ class Audio:
if ctx.invoked_subcommand is None: if ctx.invoked_subcommand is None:
await ctx.send_help() await ctx.send_help()
@llsetup.command()
async def external(self, ctx):
"""Toggles using external lavalink servers."""
external = await self.config.use_external_lavalink()
await self.config.use_external_lavalink.set(not external)
if external:
await self.config.host.set('localhost')
await self.config.password.set('youshallnotpass')
await self.config.rest_port.set(2333)
await self.config.ws_port.set(2332)
embed = discord.Embed(colour=ctx.guild.me.top_role.colour, title='External lavalink server: {}.'.format(not external))
embed.set_footer(text='Defaults reset.')
return await ctx.send(embed=embed)
else:
await self._embed_msg(ctx, 'External lavalink server: {}.'.format(not external))
@llsetup.command() @llsetup.command()
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)
if await self._check_external():
embed = discord.Embed(colour=ctx.guild.me.top_role.colour, title='Host set to {}.'.format(host))
embed.set_footer(text='External lavalink server set to True.')
await ctx.send(embed=embed)
else:
await self._embed_msg(ctx, 'Host set to {}.'.format(host)) await self._embed_msg(ctx, 'Host set to {}.'.format(host))
@llsetup.command() @llsetup.command()
async def password(self, ctx, passw): async def password(self, ctx, password):
"""Set the lavalink server password.""" """Set the lavalink server password."""
await self.config.passw.set(str(passw)) await self.config.password.set(str(password))
await self._embed_msg(ctx, 'Server password set to {}.'.format(passw)) if await self._check_external():
embed = discord.Embed(colour=ctx.guild.me.top_role.colour, title='Server password set to {}.'.format(password))
embed.set_footer(text='External lavalink server set to True.')
await ctx.send(embed=embed)
else:
await self._embed_msg(ctx, 'Server password set to {}.'.format(password))
@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(rest_port)
if await self._check_external():
embed = discord.Embed(colour=ctx.guild.me.top_role.colour, title='REST port set to {}.'.format(rest_port))
embed.set_footer(text='External lavalink server set to True.')
await ctx.send(embed=embed)
else:
await self._embed_msg(ctx, 'REST port set to {}.'.format(rest_port)) await self._embed_msg(ctx, 'REST port set to {}.'.format(rest_port))
@llsetup.command() @llsetup.command()
async def wsport(self, ctx, rest_port): async def wsport(self, ctx, ws_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.rest_port.set(ws_port)
if await self._check_external():
embed = discord.Embed(colour=ctx.guild.me.top_role.colour, title='Websocket port set to {}.'.format(ws_port))
embed.set_footer(text='External lavalink server set to True.')
await ctx.send(embed=embed)
else:
await self._embed_msg(ctx, 'Websocket port set to {}.'.format(ws_port)) await self._embed_msg(ctx, 'Websocket port set to {}.'.format(ws_port))
async def _check_external(self):
external = await self.config.use_external_lavalink()
if not external:
await self.config.use_external_lavalink.set(True)
return True
else:
return False
@staticmethod @staticmethod
async def _clear_react(message): async def _clear_react(message):
try: try:
@@ -1089,6 +1333,30 @@ class Audio:
except KeyError: except KeyError:
return False return False
def _to_json(self, ctx, playlist_url, tracklist, playlist_name):
playlist = {"author": ctx.author.id, "playlist_url": playlist_url, "tracks": tracklist}
return playlist
def _track_creator(self, ctx, player, position, other_track=None):
if position == 'np':
queued_track = player.current
elif position == None:
queued_track = other_track
else:
queued_track = player.queue[position]
track_keys = queued_track._info.keys()
track_values = queued_track._info.values()
track_id = queued_track.track_identifier
track_info = {}
for k, v in zip(track_keys, track_values):
track_info[k] = v
keys = ['track', 'info']
values = [track_id, track_info]
track_obj = {}
for key, value in zip(keys, values):
track_obj[key] = value
return track_obj
async def on_voice_state_update(self, member, before, after): async def on_voice_state_update(self, member, before, after):
if after.channel != before.channel: if after.channel != before.channel:
try: try:

View File

@@ -1,8 +1,8 @@
msgid "" 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-04-02 17:36+AKDT\n"
"PO-Revision-Date: 2018-02-25 21:32-0500\n" "PO-Revision-Date: 2018-04-15 16:41-0400\n"
"Last-Translator: Kowlin <boxedpp@gmail.com>\n" "Last-Translator: Kowlin <boxedpp@gmail.com>\n"
"Language-Team: Arabic\n" "Language-Team: Arabic\n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
@@ -16,27 +16,3 @@ msgstr ""
"X-Crowdin-File: /cogs/audio/locales/messages.pot\n" "X-Crowdin-File: /cogs/audio/locales/messages.pot\n"
"Language: ar_SA\n" "Language: ar_SA\n"
#: ../audio.py:25 ../audio.py:45
msgid "Join a voice channel first!"
msgstr ""
#: ../audio.py:33
msgid "Let's play a file that exists pls"
msgstr ""
#: ../audio.py:38 ../audio.py:58
msgid "{} is playing a song..."
msgstr ""
#: ../audio.py:48
msgid "Youtube links pls"
msgstr ""
#: ../audio.py:67 ../audio.py:77 ../audio.py:87 ../audio.py:97
msgid "I'm not even connected to a voice channel!"
msgstr ""
#: ../audio.py:95
msgid "Volume set."
msgstr ""

View File

@@ -1,8 +1,8 @@
msgid "" 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-04-02 17:36+AKDT\n"
"PO-Revision-Date: 2018-02-25 21:33-0500\n" "PO-Revision-Date: 2018-04-15 16:42-0400\n"
"Last-Translator: Kowlin <boxedpp@gmail.com>\n" "Last-Translator: Kowlin <boxedpp@gmail.com>\n"
"Language-Team: Bulgarian\n" "Language-Team: Bulgarian\n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
@@ -16,27 +16,3 @@ msgstr ""
"X-Crowdin-File: /cogs/audio/locales/messages.pot\n" "X-Crowdin-File: /cogs/audio/locales/messages.pot\n"
"Language: bg_BG\n" "Language: bg_BG\n"
#: ../audio.py:25 ../audio.py:45
msgid "Join a voice channel first!"
msgstr ""
#: ../audio.py:33
msgid "Let's play a file that exists pls"
msgstr ""
#: ../audio.py:38 ../audio.py:58
msgid "{} is playing a song..."
msgstr ""
#: ../audio.py:48
msgid "Youtube links pls"
msgstr ""
#: ../audio.py:67 ../audio.py:77 ../audio.py:87 ../audio.py:97
msgid "I'm not even connected to a voice channel!"
msgstr ""
#: ../audio.py:95
msgid "Volume set."
msgstr ""

View File

@@ -1,8 +1,8 @@
msgid "" 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-04-02 17:36+AKDT\n"
"PO-Revision-Date: 2018-02-25 21:33-0500\n" "PO-Revision-Date: 2018-04-15 16:42-0400\n"
"Last-Translator: Kowlin <boxedpp@gmail.com>\n" "Last-Translator: Kowlin <boxedpp@gmail.com>\n"
"Language-Team: Danish\n" "Language-Team: Danish\n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
@@ -16,27 +16,3 @@ msgstr ""
"X-Crowdin-File: /cogs/audio/locales/messages.pot\n" "X-Crowdin-File: /cogs/audio/locales/messages.pot\n"
"Language: da_DK\n" "Language: da_DK\n"
#: ../audio.py:25 ../audio.py:45
msgid "Join a voice channel first!"
msgstr ""
#: ../audio.py:33
msgid "Let's play a file that exists pls"
msgstr ""
#: ../audio.py:38 ../audio.py:58
msgid "{} is playing a song..."
msgstr ""
#: ../audio.py:48
msgid "Youtube links pls"
msgstr ""
#: ../audio.py:67 ../audio.py:77 ../audio.py:87 ../audio.py:97
msgid "I'm not even connected to a voice channel!"
msgstr ""
#: ../audio.py:95
msgid "Volume set."
msgstr ""

View File

@@ -1,8 +1,8 @@
msgid "" 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-04-02 17:36+AKDT\n"
"PO-Revision-Date: 2018-02-27 01:49-0500\n" "PO-Revision-Date: 2018-04-15 16:42-0400\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"
@@ -16,27 +16,3 @@ msgstr ""
"X-Crowdin-File: /cogs/audio/locales/messages.pot\n" "X-Crowdin-File: /cogs/audio/locales/messages.pot\n"
"Language: de_DE\n" "Language: de_DE\n"
#: ../audio.py:25 ../audio.py:45
msgid "Join a voice channel first!"
msgstr "Tritt zuerst einem Sprachkanal bei!"
#: ../audio.py:33
msgid "Let's play a file that exists pls"
msgstr "Lass uns eine Datei abspielen, die vorhanden ist"
#: ../audio.py:38 ../audio.py:58
msgid "{} is playing a song..."
msgstr "{} spielt ein Lied..."
#: ../audio.py:48
msgid "Youtube links pls"
msgstr "YouTube Links bitte"
#: ../audio.py:67 ../audio.py:77 ../audio.py:87 ../audio.py:97
msgid "I'm not even connected to a voice channel!"
msgstr "Ich bin noch nicht einmal mit einem Sprachkanal verbunden!"
#: ../audio.py:95
msgid "Volume set."
msgstr "Lautstärke einstellen."

View File

@@ -1,8 +1,8 @@
msgid "" 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-04-02 17:36+AKDT\n"
"PO-Revision-Date: 2018-02-25 21:33-0500\n" "PO-Revision-Date: 2018-04-15 16:42-0400\n"
"Last-Translator: Kowlin <boxedpp@gmail.com>\n" "Last-Translator: Kowlin <boxedpp@gmail.com>\n"
"Language-Team: Greek\n" "Language-Team: Greek\n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
@@ -16,27 +16,3 @@ msgstr ""
"X-Crowdin-File: /cogs/audio/locales/messages.pot\n" "X-Crowdin-File: /cogs/audio/locales/messages.pot\n"
"Language: el_GR\n" "Language: el_GR\n"
#: ../audio.py:25 ../audio.py:45
msgid "Join a voice channel first!"
msgstr ""
#: ../audio.py:33
msgid "Let's play a file that exists pls"
msgstr ""
#: ../audio.py:38 ../audio.py:58
msgid "{} is playing a song..."
msgstr ""
#: ../audio.py:48
msgid "Youtube links pls"
msgstr ""
#: ../audio.py:67 ../audio.py:77 ../audio.py:87 ../audio.py:97
msgid "I'm not even connected to a voice channel!"
msgstr ""
#: ../audio.py:95
msgid "Volume set."
msgstr ""

View File

@@ -1,8 +1,8 @@
msgid "" 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-04-02 17:36+AKDT\n"
"PO-Revision-Date: 2018-04-02 19:27-0400\n" "PO-Revision-Date: 2018-04-15 16:43-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"
@@ -16,27 +16,3 @@ msgstr ""
"X-Crowdin-File: /cogs/audio/locales/messages.pot\n" "X-Crowdin-File: /cogs/audio/locales/messages.pot\n"
"Language: en_PT\n" "Language: en_PT\n"
#: ../audio.py:25 ../audio.py:45
msgid "Join a voice channel first!"
msgstr "Aye! Ye need to sail y'ur ship first!"
#: ../audio.py:33
msgid "Let's play a file that exists pls"
msgstr ""
#: ../audio.py:38 ../audio.py:58
msgid "{} is playing a song..."
msgstr "{} be dancing to Shanty..."
#: ../audio.py:48
msgid "Youtube links pls"
msgstr "Aye! A rope to youtube is required!"
#: ../audio.py:67 ../audio.py:77 ../audio.py:87 ../audio.py:97
msgid "I'm not even connected to a voice channel!"
msgstr "Aye! I never boarded ye ship!"
#: ../audio.py:95
msgid "Volume set."
msgstr "Aye, shouting voice changed."

View File

@@ -1,8 +1,8 @@
msgid "" 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-04-02 17:36+AKDT\n"
"PO-Revision-Date: 2018-02-25 21:32-0500\n" "PO-Revision-Date: 2018-04-15 16:41-0400\n"
"Last-Translator: Kowlin <boxedpp@gmail.com>\n" "Last-Translator: Kowlin <boxedpp@gmail.com>\n"
"Language-Team: Spanish\n" "Language-Team: Spanish\n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
@@ -16,27 +16,3 @@ msgstr ""
"X-Crowdin-File: /cogs/audio/locales/messages.pot\n" "X-Crowdin-File: /cogs/audio/locales/messages.pot\n"
"Language: es_ES\n" "Language: es_ES\n"
#: ../audio.py:25 ../audio.py:45
msgid "Join a voice channel first!"
msgstr ""
#: ../audio.py:33
msgid "Let's play a file that exists pls"
msgstr ""
#: ../audio.py:38 ../audio.py:58
msgid "{} is playing a song..."
msgstr ""
#: ../audio.py:48
msgid "Youtube links pls"
msgstr ""
#: ../audio.py:67 ../audio.py:77 ../audio.py:87 ../audio.py:97
msgid "I'm not even connected to a voice channel!"
msgstr ""
#: ../audio.py:95
msgid "Volume set."
msgstr ""

View File

@@ -1,8 +1,8 @@
msgid "" 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-04-02 17:36+AKDT\n"
"PO-Revision-Date: 2018-02-25 21:33-0500\n" "PO-Revision-Date: 2018-04-15 16:42-0400\n"
"Last-Translator: Kowlin <boxedpp@gmail.com>\n" "Last-Translator: Kowlin <boxedpp@gmail.com>\n"
"Language-Team: Finnish\n" "Language-Team: Finnish\n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
@@ -16,27 +16,3 @@ msgstr ""
"X-Crowdin-File: /cogs/audio/locales/messages.pot\n" "X-Crowdin-File: /cogs/audio/locales/messages.pot\n"
"Language: fi_FI\n" "Language: fi_FI\n"
#: ../audio.py:25 ../audio.py:45
msgid "Join a voice channel first!"
msgstr ""
#: ../audio.py:33
msgid "Let's play a file that exists pls"
msgstr ""
#: ../audio.py:38 ../audio.py:58
msgid "{} is playing a song..."
msgstr ""
#: ../audio.py:48
msgid "Youtube links pls"
msgstr ""
#: ../audio.py:67 ../audio.py:77 ../audio.py:87 ../audio.py:97
msgid "I'm not even connected to a voice channel!"
msgstr ""
#: ../audio.py:95
msgid "Volume set."
msgstr ""

View File

@@ -1,8 +1,8 @@
msgid "" 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-04-02 17:36+AKDT\n"
"PO-Revision-Date: 2018-02-25 21:32-0500\n" "PO-Revision-Date: 2018-04-15 16:41-0400\n"
"Last-Translator: Kowlin <boxedpp@gmail.com>\n" "Last-Translator: Kowlin <boxedpp@gmail.com>\n"
"Language-Team: French\n" "Language-Team: French\n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
@@ -16,27 +16,3 @@ msgstr ""
"X-Crowdin-File: /cogs/audio/locales/messages.pot\n" "X-Crowdin-File: /cogs/audio/locales/messages.pot\n"
"Language: fr_FR\n" "Language: fr_FR\n"
#: ../audio.py:25 ../audio.py:45
msgid "Join a voice channel first!"
msgstr "Rejoignez un salon vocal d'abord!"
#: ../audio.py:33
msgid "Let's play a file that exists pls"
msgstr "Veuillez faire jouer un fichier qui existe"
#: ../audio.py:38 ../audio.py:58
msgid "{} is playing a song..."
msgstr "{} joue une chanson..."
#: ../audio.py:48
msgid "Youtube links pls"
msgstr "Veuillez entrer des liens YouTube"
#: ../audio.py:67 ../audio.py:77 ../audio.py:87 ../audio.py:97
msgid "I'm not even connected to a voice channel!"
msgstr "Je ne suis pas connecté à un salon vocal!"
#: ../audio.py:95
msgid "Volume set."
msgstr "Volume changé."

View File

@@ -1,8 +1,8 @@
msgid "" 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-04-02 17:36+AKDT\n"
"PO-Revision-Date: 2018-02-25 21:33-0500\n" "PO-Revision-Date: 2018-04-15 16:42-0400\n"
"Last-Translator: Kowlin <boxedpp@gmail.com>\n" "Last-Translator: Kowlin <boxedpp@gmail.com>\n"
"Language-Team: Hungarian\n" "Language-Team: Hungarian\n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
@@ -16,27 +16,3 @@ msgstr ""
"X-Crowdin-File: /cogs/audio/locales/messages.pot\n" "X-Crowdin-File: /cogs/audio/locales/messages.pot\n"
"Language: hu_HU\n" "Language: hu_HU\n"
#: ../audio.py:25 ../audio.py:45
msgid "Join a voice channel first!"
msgstr ""
#: ../audio.py:33
msgid "Let's play a file that exists pls"
msgstr ""
#: ../audio.py:38 ../audio.py:58
msgid "{} is playing a song..."
msgstr ""
#: ../audio.py:48
msgid "Youtube links pls"
msgstr ""
#: ../audio.py:67 ../audio.py:77 ../audio.py:87 ../audio.py:97
msgid "I'm not even connected to a voice channel!"
msgstr ""
#: ../audio.py:95
msgid "Volume set."
msgstr ""

View File

@@ -1,8 +1,8 @@
msgid "" 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-04-02 17:36+AKDT\n"
"PO-Revision-Date: 2018-04-02 19:27-0400\n" "PO-Revision-Date: 2018-04-15 16:43-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"
@@ -16,27 +16,3 @@ msgstr ""
"X-Crowdin-File: /cogs/audio/locales/messages.pot\n" "X-Crowdin-File: /cogs/audio/locales/messages.pot\n"
"Language: id_ID\n" "Language: id_ID\n"
#: ../audio.py:25 ../audio.py:45
msgid "Join a voice channel first!"
msgstr "Bergabung dengan channel suara dulu!"
#: ../audio.py:33
msgid "Let's play a file that exists pls"
msgstr "Tolong memutar file yang ada"
#: ../audio.py:38 ../audio.py:58
msgid "{} is playing a song..."
msgstr "{} sedang memainkan sebuah lagu..."
#: ../audio.py:48
msgid "Youtube links pls"
msgstr "Link YouTube"
#: ../audio.py:67 ../audio.py:77 ../audio.py:87 ../audio.py:97
msgid "I'm not even connected to a voice channel!"
msgstr "Saya belum memasuki channel suara!"
#: ../audio.py:95
msgid "Volume set."
msgstr "Suara telah di atur."

View File

@@ -1,8 +1,8 @@
msgid "" 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-04-02 17:36+AKDT\n"
"PO-Revision-Date: 2018-02-25 21:33-0500\n" "PO-Revision-Date: 2018-04-15 16:42-0400\n"
"Last-Translator: Kowlin <boxedpp@gmail.com>\n" "Last-Translator: Kowlin <boxedpp@gmail.com>\n"
"Language-Team: Italian\n" "Language-Team: Italian\n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
@@ -16,27 +16,3 @@ msgstr ""
"X-Crowdin-File: /cogs/audio/locales/messages.pot\n" "X-Crowdin-File: /cogs/audio/locales/messages.pot\n"
"Language: it_IT\n" "Language: it_IT\n"
#: ../audio.py:25 ../audio.py:45
msgid "Join a voice channel first!"
msgstr ""
#: ../audio.py:33
msgid "Let's play a file that exists pls"
msgstr ""
#: ../audio.py:38 ../audio.py:58
msgid "{} is playing a song..."
msgstr ""
#: ../audio.py:48
msgid "Youtube links pls"
msgstr ""
#: ../audio.py:67 ../audio.py:77 ../audio.py:87 ../audio.py:97
msgid "I'm not even connected to a voice channel!"
msgstr ""
#: ../audio.py:95
msgid "Volume set."
msgstr ""

View File

@@ -1,8 +1,8 @@
msgid "" 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-04-02 17:36+AKDT\n"
"PO-Revision-Date: 2018-02-25 21:33-0500\n" "PO-Revision-Date: 2018-04-15 16:42-0400\n"
"Last-Translator: Kowlin <boxedpp@gmail.com>\n" "Last-Translator: Kowlin <boxedpp@gmail.com>\n"
"Language-Team: Japanese\n" "Language-Team: Japanese\n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
@@ -16,27 +16,3 @@ msgstr ""
"X-Crowdin-File: /cogs/audio/locales/messages.pot\n" "X-Crowdin-File: /cogs/audio/locales/messages.pot\n"
"Language: ja_JP\n" "Language: ja_JP\n"
#: ../audio.py:25 ../audio.py:45
msgid "Join a voice channel first!"
msgstr ""
#: ../audio.py:33
msgid "Let's play a file that exists pls"
msgstr ""
#: ../audio.py:38 ../audio.py:58
msgid "{} is playing a song..."
msgstr ""
#: ../audio.py:48
msgid "Youtube links pls"
msgstr ""
#: ../audio.py:67 ../audio.py:77 ../audio.py:87 ../audio.py:97
msgid "I'm not even connected to a voice channel!"
msgstr ""
#: ../audio.py:95
msgid "Volume set."
msgstr ""

View File

@@ -1,8 +1,8 @@
msgid "" 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-04-02 17:36+AKDT\n"
"PO-Revision-Date: 2018-04-02 19:26-0400\n" "PO-Revision-Date: 2018-04-15 16:42-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"
@@ -16,27 +16,3 @@ msgstr ""
"X-Crowdin-File: /cogs/audio/locales/messages.pot\n" "X-Crowdin-File: /cogs/audio/locales/messages.pot\n"
"Language: ko_KR\n" "Language: ko_KR\n"
#: ../audio.py:25 ../audio.py:45
msgid "Join a voice channel first!"
msgstr "커맨드를 사용하기 전에 음성 채널에 접속해야 해요!"
#: ../audio.py:33
msgid "Let's play a file that exists pls"
msgstr "파일을 재생해볼게요!"
#: ../audio.py:38 ../audio.py:58
msgid "{} is playing a song..."
msgstr "{}이(가) 음악을 재생하는 중..."
#: ../audio.py:48
msgid "Youtube links pls"
msgstr "유튜브 링크를 부탁해요!"
#: ../audio.py:67 ../audio.py:77 ../audio.py:87 ../audio.py:97
msgid "I'm not even connected to a voice channel!"
msgstr "제가 음성 채널에 접속할 수 없어요!"
#: ../audio.py:95
msgid "Volume set."
msgstr "음량이 변경됐어요."

View File

@@ -1,8 +1,8 @@
msgid "" 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-04-02 17:36+AKDT\n"
"PO-Revision-Date: 2018-02-25 21:34-0500\n" "PO-Revision-Date: 2018-04-15 16:43-0400\n"
"Last-Translator: Kowlin <boxedpp@gmail.com>\n" "Last-Translator: Kowlin <boxedpp@gmail.com>\n"
"Language-Team: LOLCAT\n" "Language-Team: LOLCAT\n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
@@ -16,27 +16,3 @@ msgstr ""
"X-Crowdin-File: /cogs/audio/locales/messages.pot\n" "X-Crowdin-File: /cogs/audio/locales/messages.pot\n"
"Language: lol_US\n" "Language: lol_US\n"
#: ../audio.py:25 ../audio.py:45
msgid "Join a voice channel first!"
msgstr ""
#: ../audio.py:33
msgid "Let's play a file that exists pls"
msgstr ""
#: ../audio.py:38 ../audio.py:58
msgid "{} is playing a song..."
msgstr ""
#: ../audio.py:48
msgid "Youtube links pls"
msgstr ""
#: ../audio.py:67 ../audio.py:77 ../audio.py:87 ../audio.py:97
msgid "I'm not even connected to a voice channel!"
msgstr ""
#: ../audio.py:95
msgid "Volume set."
msgstr ""

View File

@@ -1,8 +1,8 @@
msgid "" 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-04-02 17:36+AKDT\n"
"PO-Revision-Date: 2018-04-02 19:27-0400\n" "PO-Revision-Date: 2018-04-15 16:42-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"
@@ -16,27 +16,3 @@ msgstr ""
"X-Crowdin-File: /cogs/audio/locales/messages.pot\n" "X-Crowdin-File: /cogs/audio/locales/messages.pot\n"
"Language: nl_NL\n" "Language: nl_NL\n"
#: ../audio.py:25 ../audio.py:45
msgid "Join a voice channel first!"
msgstr ""
#: ../audio.py:33
msgid "Let's play a file that exists pls"
msgstr ""
#: ../audio.py:38 ../audio.py:58
msgid "{} is playing a song..."
msgstr ""
#: ../audio.py:48
msgid "Youtube links pls"
msgstr ""
#: ../audio.py:67 ../audio.py:77 ../audio.py:87 ../audio.py:97
msgid "I'm not even connected to a voice channel!"
msgstr ""
#: ../audio.py:95
msgid "Volume set."
msgstr ""

View File

@@ -1,8 +1,8 @@
msgid "" 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-04-02 17:36+AKDT\n"
"PO-Revision-Date: 2018-02-25 21:33-0500\n" "PO-Revision-Date: 2018-04-15 16:42-0400\n"
"Last-Translator: Kowlin <boxedpp@gmail.com>\n" "Last-Translator: Kowlin <boxedpp@gmail.com>\n"
"Language-Team: Norwegian\n" "Language-Team: Norwegian\n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
@@ -16,27 +16,3 @@ msgstr ""
"X-Crowdin-File: /cogs/audio/locales/messages.pot\n" "X-Crowdin-File: /cogs/audio/locales/messages.pot\n"
"Language: no_NO\n" "Language: no_NO\n"
#: ../audio.py:25 ../audio.py:45
msgid "Join a voice channel first!"
msgstr ""
#: ../audio.py:33
msgid "Let's play a file that exists pls"
msgstr ""
#: ../audio.py:38 ../audio.py:58
msgid "{} is playing a song..."
msgstr ""
#: ../audio.py:48
msgid "Youtube links pls"
msgstr ""
#: ../audio.py:67 ../audio.py:77 ../audio.py:87 ../audio.py:97
msgid "I'm not even connected to a voice channel!"
msgstr ""
#: ../audio.py:95
msgid "Volume set."
msgstr ""

View File

@@ -1,8 +1,8 @@
msgid "" 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-04-02 17:36+AKDT\n"
"PO-Revision-Date: 2018-02-25 21:33-0500\n" "PO-Revision-Date: 2018-04-15 16:43-0400\n"
"Last-Translator: Kowlin <boxedpp@gmail.com>\n" "Last-Translator: Kowlin <boxedpp@gmail.com>\n"
"Language-Team: Polish\n" "Language-Team: Polish\n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
@@ -16,27 +16,3 @@ msgstr ""
"X-Crowdin-File: /cogs/audio/locales/messages.pot\n" "X-Crowdin-File: /cogs/audio/locales/messages.pot\n"
"Language: pl_PL\n" "Language: pl_PL\n"
#: ../audio.py:25 ../audio.py:45
msgid "Join a voice channel first!"
msgstr ""
#: ../audio.py:33
msgid "Let's play a file that exists pls"
msgstr ""
#: ../audio.py:38 ../audio.py:58
msgid "{} is playing a song..."
msgstr ""
#: ../audio.py:48
msgid "Youtube links pls"
msgstr ""
#: ../audio.py:67 ../audio.py:77 ../audio.py:87 ../audio.py:97
msgid "I'm not even connected to a voice channel!"
msgstr ""
#: ../audio.py:95
msgid "Volume set."
msgstr ""

View File

@@ -1,8 +1,8 @@
msgid "" 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-04-02 17:36+AKDT\n"
"PO-Revision-Date: 2018-02-25 21:34-0500\n" "PO-Revision-Date: 2018-04-15 16:43-0400\n"
"Last-Translator: Kowlin <boxedpp@gmail.com>\n" "Last-Translator: Kowlin <boxedpp@gmail.com>\n"
"Language-Team: Portuguese, Brazilian\n" "Language-Team: Portuguese, Brazilian\n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
@@ -16,27 +16,3 @@ msgstr ""
"X-Crowdin-File: /cogs/audio/locales/messages.pot\n" "X-Crowdin-File: /cogs/audio/locales/messages.pot\n"
"Language: pt_BR\n" "Language: pt_BR\n"
#: ../audio.py:25 ../audio.py:45
msgid "Join a voice channel first!"
msgstr ""
#: ../audio.py:33
msgid "Let's play a file that exists pls"
msgstr ""
#: ../audio.py:38 ../audio.py:58
msgid "{} is playing a song..."
msgstr ""
#: ../audio.py:48
msgid "Youtube links pls"
msgstr ""
#: ../audio.py:67 ../audio.py:77 ../audio.py:87 ../audio.py:97
msgid "I'm not even connected to a voice channel!"
msgstr ""
#: ../audio.py:95
msgid "Volume set."
msgstr ""

View File

@@ -1,8 +1,8 @@
msgid "" 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-04-02 17:36+AKDT\n"
"PO-Revision-Date: 2018-02-25 21:33-0500\n" "PO-Revision-Date: 2018-04-15 16:43-0400\n"
"Last-Translator: Kowlin <boxedpp@gmail.com>\n" "Last-Translator: Kowlin <boxedpp@gmail.com>\n"
"Language-Team: Portuguese\n" "Language-Team: Portuguese\n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
@@ -16,27 +16,3 @@ msgstr ""
"X-Crowdin-File: /cogs/audio/locales/messages.pot\n" "X-Crowdin-File: /cogs/audio/locales/messages.pot\n"
"Language: pt_PT\n" "Language: pt_PT\n"
#: ../audio.py:25 ../audio.py:45
msgid "Join a voice channel first!"
msgstr ""
#: ../audio.py:33
msgid "Let's play a file that exists pls"
msgstr ""
#: ../audio.py:38 ../audio.py:58
msgid "{} is playing a song..."
msgstr ""
#: ../audio.py:48
msgid "Youtube links pls"
msgstr ""
#: ../audio.py:67 ../audio.py:77 ../audio.py:87 ../audio.py:97
msgid "I'm not even connected to a voice channel!"
msgstr ""
#: ../audio.py:95
msgid "Volume set."
msgstr ""

View File

@@ -1,8 +1,8 @@
msgid "" 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-04-02 17:36+AKDT\n"
"PO-Revision-Date: 2018-04-02 19:27-0400\n" "PO-Revision-Date: 2018-04-15 16:43-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"
@@ -16,27 +16,3 @@ msgstr ""
"X-Crowdin-File: /cogs/audio/locales/messages.pot\n" "X-Crowdin-File: /cogs/audio/locales/messages.pot\n"
"Language: ru_RU\n" "Language: ru_RU\n"
#: ../audio.py:25 ../audio.py:45
msgid "Join a voice channel first!"
msgstr ""
#: ../audio.py:33
msgid "Let's play a file that exists pls"
msgstr ""
#: ../audio.py:38 ../audio.py:58
msgid "{} is playing a song..."
msgstr ""
#: ../audio.py:48
msgid "Youtube links pls"
msgstr ""
#: ../audio.py:67 ../audio.py:77 ../audio.py:87 ../audio.py:97
msgid "I'm not even connected to a voice channel!"
msgstr ""
#: ../audio.py:95
msgid "Volume set."
msgstr ""

View File

@@ -1,8 +1,8 @@
msgid "" 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-04-02 17:36+AKDT\n"
"PO-Revision-Date: 2018-02-25 21:34-0500\n" "PO-Revision-Date: 2018-04-15 16:43-0400\n"
"Last-Translator: Kowlin <boxedpp@gmail.com>\n" "Last-Translator: Kowlin <boxedpp@gmail.com>\n"
"Language-Team: Swedish\n" "Language-Team: Swedish\n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
@@ -16,27 +16,3 @@ msgstr ""
"X-Crowdin-File: /cogs/audio/locales/messages.pot\n" "X-Crowdin-File: /cogs/audio/locales/messages.pot\n"
"Language: sv_SE\n" "Language: sv_SE\n"
#: ../audio.py:25 ../audio.py:45
msgid "Join a voice channel first!"
msgstr "Hoppa in i en röstkanal först!"
#: ../audio.py:33
msgid "Let's play a file that exists pls"
msgstr "Spela en fil som finns tack"
#: ../audio.py:38 ../audio.py:58
msgid "{} is playing a song..."
msgstr "{} spelar en låt..."
#: ../audio.py:48
msgid "Youtube links pls"
msgstr "Youtube länkar tack"
#: ../audio.py:67 ../audio.py:77 ../audio.py:87 ../audio.py:97
msgid "I'm not even connected to a voice channel!"
msgstr "Jag är inte ens ansluten till en röstkanal!"
#: ../audio.py:95
msgid "Volume set."
msgstr "Volymnivån inställd."

View File

@@ -1,8 +1,8 @@
msgid "" 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-04-02 17:36+AKDT\n"
"PO-Revision-Date: 2018-02-25 21:34-0500\n" "PO-Revision-Date: 2018-04-15 16:43-0400\n"
"Last-Translator: Kowlin <boxedpp@gmail.com>\n" "Last-Translator: Kowlin <boxedpp@gmail.com>\n"
"Language-Team: Chinese Simplified\n" "Language-Team: Chinese Simplified\n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
@@ -16,27 +16,3 @@ msgstr ""
"X-Crowdin-File: /cogs/audio/locales/messages.pot\n" "X-Crowdin-File: /cogs/audio/locales/messages.pot\n"
"Language: zh_CN\n" "Language: zh_CN\n"
#: ../audio.py:25 ../audio.py:45
msgid "Join a voice channel first!"
msgstr ""
#: ../audio.py:33
msgid "Let's play a file that exists pls"
msgstr ""
#: ../audio.py:38 ../audio.py:58
msgid "{} is playing a song..."
msgstr ""
#: ../audio.py:48
msgid "Youtube links pls"
msgstr ""
#: ../audio.py:67 ../audio.py:77 ../audio.py:87 ../audio.py:97
msgid "I'm not even connected to a voice channel!"
msgstr ""
#: ../audio.py:95
msgid "Volume set."
msgstr ""

View File

@@ -1,12 +1,22 @@
import shlex import shlex
import shutil
import asyncio import asyncio
from subprocess import Popen, DEVNULL from subprocess import Popen, DEVNULL, PIPE
import os import os
import logging
log = logging.getLogger('red.audio.manager')
proc = None proc = None
SHUTDOWN = asyncio.Event() SHUTDOWN = asyncio.Event()
def has_java_error(pid):
from . import LAVALINK_DOWNLOAD_DIR
poss_error_file = LAVALINK_DOWNLOAD_DIR / 'hs_err_pid{}.log'.format(pid)
return poss_error_file.exists()
async def monitor_lavalink_server(loop): async def monitor_lavalink_server(loop):
while not SHUTDOWN.is_set(): while not SHUTDOWN.is_set():
if proc.poll() is not None: if proc.poll() is not None:
@@ -14,13 +24,55 @@ async def monitor_lavalink_server(loop):
await asyncio.sleep(0.5) await asyncio.sleep(0.5)
if not SHUTDOWN.is_set(): if not SHUTDOWN.is_set():
print("Lavalink jar shutdown, restarting.") log.info("Lavalink jar shutdown.")
if not has_java_error(proc.pid):
log.info("Restarting Lavalink jar.")
await start_lavalink_server(loop) await start_lavalink_server(loop)
else:
log.error("Your Java is borked. Please find the hs_err_pid{}.log file"
" in the Audio data folder and report this issue.".format(
proc.pid
))
async def has_java(loop):
java_available = shutil.which('java') is not None
if not java_available:
return False
version = await get_java_version(loop)
return version >= (1, 8), version
async def get_java_version(loop):
"""
This assumes we've already checked that java exists.
"""
proc = Popen(
shlex.split("java -version", posix=os.name == 'posix'),
stdout=PIPE, stderr=PIPE
)
_, err = proc.communicate()
version_info = str(err, encoding='utf-8')
version_line = version_info.split('\n')[0]
version_start = version_line.find('"')
version_string = version_line[version_start + 1:-1]
major, minor = version_string.split('.')[:2]
return int(major), int(minor)
async def start_lavalink_server(loop): async def start_lavalink_server(loop):
java_available, java_version = await has_java(loop)
if not java_available:
raise RuntimeError("You must install Java 1.8+ for Lavalink to run.")
extra_flags = ""
if java_version == (1, 8):
extra_flags = "-Dsun.zip.disableMemoryMapping=true"
from . import LAVALINK_DOWNLOAD_DIR, LAVALINK_JAR_FILE from . import LAVALINK_DOWNLOAD_DIR, LAVALINK_JAR_FILE
start_cmd = "java -jar {}".format(LAVALINK_JAR_FILE.resolve()) start_cmd = "java {} -jar {}".format(extra_flags, LAVALINK_JAR_FILE.resolve())
global proc global proc
proc = Popen( proc = Popen(
@@ -29,13 +81,15 @@ async def start_lavalink_server(loop):
stdout=DEVNULL, stderr=DEVNULL stdout=DEVNULL, stderr=DEVNULL
) )
print("Lavalink jar started. PID: {}".format(proc.pid)) log.info("Lavalink jar started. PID: {}".format(proc.pid))
loop.create_task(monitor_lavalink_server(loop)) loop.create_task(monitor_lavalink_server(loop))
def shutdown_lavalink_server(): def shutdown_lavalink_server():
print("Shutting down lavalink server.") log.info("Shutting down lavalink server.")
SHUTDOWN.set() SHUTDOWN.set()
global proc
if proc is not None: if proc is not None:
proc.terminate() proc.terminate()
proc = None

View File

@@ -87,11 +87,11 @@ class Bank:
@checks.is_owner() @checks.is_owner()
async def bankset_toggleglobal(self, ctx: commands.Context, confirm: bool=False): async def bankset_toggleglobal(self, ctx: commands.Context, confirm: bool=False):
"""Toggles whether the bank is global or not """Toggles whether the bank is global or not
If the bank is global, it will become per-guild If the bank is global, it will become per-server
If the bank is per-guild, it will become global""" If the bank is per-server, it will become global"""
cur_setting = await bank.is_global() cur_setting = await bank.is_global()
word = _("per-guild") if cur_setting else _("global") word = _("per-server") if cur_setting else _("global")
if confirm is False: if confirm is False:
await ctx.send( await ctx.send(
_("This will toggle the bank to be {}, deleting all accounts " _("This will toggle the bank to be {}, deleting all accounts "

View File

@@ -1,8 +1,8 @@
msgid "" 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-04-02 17:36+AKDT\n"
"PO-Revision-Date: 2018-02-25 21:32-0500\n" "PO-Revision-Date: 2018-04-15 16:41-0400\n"
"Last-Translator: Kowlin <boxedpp@gmail.com>\n" "Last-Translator: Kowlin <boxedpp@gmail.com>\n"
"Language-Team: Arabic\n" "Language-Team: Arabic\n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
@@ -16,23 +16,34 @@ msgstr ""
"X-Crowdin-File: /cogs/bank/locales/messages.pot\n" "X-Crowdin-File: /cogs/bank/locales/messages.pot\n"
"Language: ar_SA\n" "Language: ar_SA\n"
#: ../bank.py:68 #: ../bank.py:76
msgid "Bank settings:\n\n"
"Bank name: {}\n"
"Currency: {}\n"
"Default balance: {}"
msgstr ""
#: ../bank.py:94
msgid "global" msgid "global"
msgstr "" msgstr ""
#: ../bank.py:68 #: ../bank.py:94
msgid "per-guild" msgid "per-guild"
msgstr "" msgstr ""
#: ../bank.py:70 #: ../bank.py:97
msgid "This will toggle the bank to be {}, deleting all accounts in the process! If you're sure, type `{}`"
msgstr ""
#: ../bank.py:104
msgid "The bank is now {}." msgid "The bank is now {}."
msgstr "" msgstr ""
#: ../bank.py:77 #: ../bank.py:111
msgid "Bank's name has been set to {}" msgid "Bank's name has been set to {}"
msgstr "" msgstr ""
#: ../bank.py:84 #: ../bank.py:118
msgid "Currency name has been set to {}" msgid "Currency name has been set to {}"
msgstr "" msgstr ""

View File

@@ -1,8 +1,8 @@
msgid "" 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-04-02 17:36+AKDT\n"
"PO-Revision-Date: 2018-02-25 21:33-0500\n" "PO-Revision-Date: 2018-04-15 16:42-0400\n"
"Last-Translator: Kowlin <boxedpp@gmail.com>\n" "Last-Translator: Kowlin <boxedpp@gmail.com>\n"
"Language-Team: Bulgarian\n" "Language-Team: Bulgarian\n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
@@ -16,23 +16,34 @@ msgstr ""
"X-Crowdin-File: /cogs/bank/locales/messages.pot\n" "X-Crowdin-File: /cogs/bank/locales/messages.pot\n"
"Language: bg_BG\n" "Language: bg_BG\n"
#: ../bank.py:68 #: ../bank.py:76
msgid "Bank settings:\n\n"
"Bank name: {}\n"
"Currency: {}\n"
"Default balance: {}"
msgstr ""
#: ../bank.py:94
msgid "global" msgid "global"
msgstr "глобален" msgstr "глобален"
#: ../bank.py:68 #: ../bank.py:94
msgid "per-guild" msgid "per-guild"
msgstr "по гилдиево" msgstr "по гилдиево"
#: ../bank.py:70 #: ../bank.py:97
msgid "This will toggle the bank to be {}, deleting all accounts in the process! If you're sure, type `{}`"
msgstr ""
#: ../bank.py:104
msgid "The bank is now {}." msgid "The bank is now {}."
msgstr "Банката вече е {}." msgstr "Банката вече е {}."
#: ../bank.py:77 #: ../bank.py:111
msgid "Bank's name has been set to {}" msgid "Bank's name has been set to {}"
msgstr "Името на банката е настроено на {}" msgstr "Името на банката е настроено на {}"
#: ../bank.py:84 #: ../bank.py:118
msgid "Currency name has been set to {}" msgid "Currency name has been set to {}"
msgstr "Името на валутата е настроено на {}" msgstr "Името на валутата е настроено на {}"

View File

@@ -1,8 +1,8 @@
msgid "" 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-04-02 17:36+AKDT\n"
"PO-Revision-Date: 2018-02-25 21:33-0500\n" "PO-Revision-Date: 2018-04-15 16:42-0400\n"
"Last-Translator: Kowlin <boxedpp@gmail.com>\n" "Last-Translator: Kowlin <boxedpp@gmail.com>\n"
"Language-Team: Danish\n" "Language-Team: Danish\n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
@@ -16,23 +16,34 @@ msgstr ""
"X-Crowdin-File: /cogs/bank/locales/messages.pot\n" "X-Crowdin-File: /cogs/bank/locales/messages.pot\n"
"Language: da_DK\n" "Language: da_DK\n"
#: ../bank.py:68 #: ../bank.py:76
msgid "Bank settings:\n\n"
"Bank name: {}\n"
"Currency: {}\n"
"Default balance: {}"
msgstr ""
#: ../bank.py:94
msgid "global" msgid "global"
msgstr "" msgstr ""
#: ../bank.py:68 #: ../bank.py:94
msgid "per-guild" msgid "per-guild"
msgstr "" msgstr ""
#: ../bank.py:70 #: ../bank.py:97
msgid "This will toggle the bank to be {}, deleting all accounts in the process! If you're sure, type `{}`"
msgstr ""
#: ../bank.py:104
msgid "The bank is now {}." msgid "The bank is now {}."
msgstr "" msgstr ""
#: ../bank.py:77 #: ../bank.py:111
msgid "Bank's name has been set to {}" msgid "Bank's name has been set to {}"
msgstr "" msgstr ""
#: ../bank.py:84 #: ../bank.py:118
msgid "Currency name has been set to {}" msgid "Currency name has been set to {}"
msgstr "" msgstr ""

View File

@@ -1,8 +1,8 @@
msgid "" 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-04-02 17:36+AKDT\n"
"PO-Revision-Date: 2018-02-27 01:49-0500\n" "PO-Revision-Date: 2018-04-15 16:42-0400\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"
@@ -16,23 +16,37 @@ msgstr ""
"X-Crowdin-File: /cogs/bank/locales/messages.pot\n" "X-Crowdin-File: /cogs/bank/locales/messages.pot\n"
"Language: de_DE\n" "Language: de_DE\n"
#: ../bank.py:68 #: ../bank.py:76
msgid "Bank settings:\n\n"
"Bank name: {}\n"
"Currency: {}\n"
"Default balance: {}"
msgstr "Bank Einstellungen:\n\n"
"Bank Name: {}\n"
"Währung: {}\n"
"Standartguthaben: {}"
#: ../bank.py:94
msgid "global" msgid "global"
msgstr "Global" msgstr "Global"
#: ../bank.py:68 #: ../bank.py:94
msgid "per-guild" msgid "per-guild"
msgstr "Per Server" msgstr "Per Server"
#: ../bank.py:70 #: ../bank.py:97
msgid "This will toggle the bank to be {}, deleting all accounts in the process! If you're sure, type `{}`"
msgstr "Dies schaltet die Bank auf {} um und löscht dabei alle Konten! Wenn Sie sicher sind, geben Sie `{}` ein"
#: ../bank.py:104
msgid "The bank is now {}." msgid "The bank is now {}."
msgstr "Die Bank ist nun {}." msgstr "Die Bank ist nun {}."
#: ../bank.py:77 #: ../bank.py:111
msgid "Bank's name has been set to {}" msgid "Bank's name has been set to {}"
msgstr "Der Bank Name wurde geändert zu {}" msgstr "Der Bank Name wurde geändert zu {}"
#: ../bank.py:84 #: ../bank.py:118
msgid "Currency name has been set to {}" msgid "Currency name has been set to {}"
msgstr "Der Währungsname wurde geändert zu {}" msgstr "Der Währungsname wurde geändert zu {}"

View File

@@ -1,8 +1,8 @@
msgid "" 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-04-02 17:36+AKDT\n"
"PO-Revision-Date: 2018-02-25 21:33-0500\n" "PO-Revision-Date: 2018-04-15 16:42-0400\n"
"Last-Translator: Kowlin <boxedpp@gmail.com>\n" "Last-Translator: Kowlin <boxedpp@gmail.com>\n"
"Language-Team: Greek\n" "Language-Team: Greek\n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
@@ -16,23 +16,34 @@ msgstr ""
"X-Crowdin-File: /cogs/bank/locales/messages.pot\n" "X-Crowdin-File: /cogs/bank/locales/messages.pot\n"
"Language: el_GR\n" "Language: el_GR\n"
#: ../bank.py:68 #: ../bank.py:76
msgid "Bank settings:\n\n"
"Bank name: {}\n"
"Currency: {}\n"
"Default balance: {}"
msgstr ""
#: ../bank.py:94
msgid "global" msgid "global"
msgstr "" msgstr ""
#: ../bank.py:68 #: ../bank.py:94
msgid "per-guild" msgid "per-guild"
msgstr "" msgstr ""
#: ../bank.py:70 #: ../bank.py:97
msgid "This will toggle the bank to be {}, deleting all accounts in the process! If you're sure, type `{}`"
msgstr ""
#: ../bank.py:104
msgid "The bank is now {}." msgid "The bank is now {}."
msgstr "" msgstr ""
#: ../bank.py:77 #: ../bank.py:111
msgid "Bank's name has been set to {}" msgid "Bank's name has been set to {}"
msgstr "" msgstr ""
#: ../bank.py:84 #: ../bank.py:118
msgid "Currency name has been set to {}" msgid "Currency name has been set to {}"
msgstr "" msgstr ""

View File

@@ -1,8 +1,8 @@
msgid "" 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-04-02 17:36+AKDT\n"
"PO-Revision-Date: 2018-04-02 19:27-0400\n" "PO-Revision-Date: 2018-04-15 16:43-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"
@@ -16,23 +16,34 @@ msgstr ""
"X-Crowdin-File: /cogs/bank/locales/messages.pot\n" "X-Crowdin-File: /cogs/bank/locales/messages.pot\n"
"Language: en_PT\n" "Language: en_PT\n"
#: ../bank.py:68 #: ../bank.py:76
msgid "Bank settings:\n\n"
"Bank name: {}\n"
"Currency: {}\n"
"Default balance: {}"
msgstr ""
#: ../bank.py:94
msgid "global" msgid "global"
msgstr "global" msgstr "global"
#: ../bank.py:68 #: ../bank.py:94
msgid "per-guild" msgid "per-guild"
msgstr "per-guild" msgstr "per-guild"
#: ../bank.py:70 #: ../bank.py:97
msgid "This will toggle the bank to be {}, deleting all accounts in the process! If you're sure, type `{}`"
msgstr ""
#: ../bank.py:104
msgid "The bank is now {}." msgid "The bank is now {}."
msgstr "Thee treasure chest is now {}." msgstr "Thee treasure chest is now {}."
#: ../bank.py:77 #: ../bank.py:111
msgid "Bank's name has been set to {}" msgid "Bank's name has been set to {}"
msgstr "Yar Treasure chest's name has been set to {}" msgstr "Yar Treasure chest's name has been set to {}"
#: ../bank.py:84 #: ../bank.py:118
msgid "Currency name has been set to {}" msgid "Currency name has been set to {}"
msgstr "Yar Currency name has been set to {}" msgstr "Yar Currency name has been set to {}"

View File

@@ -1,8 +1,8 @@
msgid "" 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-04-02 17:36+AKDT\n"
"PO-Revision-Date: 2018-02-25 21:32-0500\n" "PO-Revision-Date: 2018-04-15 16:41-0400\n"
"Last-Translator: Kowlin <boxedpp@gmail.com>\n" "Last-Translator: Kowlin <boxedpp@gmail.com>\n"
"Language-Team: Spanish\n" "Language-Team: Spanish\n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
@@ -16,23 +16,37 @@ msgstr ""
"X-Crowdin-File: /cogs/bank/locales/messages.pot\n" "X-Crowdin-File: /cogs/bank/locales/messages.pot\n"
"Language: es_ES\n" "Language: es_ES\n"
#: ../bank.py:68 #: ../bank.py:76
msgid "global" msgid "Bank settings:\n\n"
msgstr "global" "Bank name: {}\n"
"Currency: {}\n"
"Default balance: {}"
msgstr "Configuración del banco:\n\n"
"Nombre del banco: {}\n"
"Moneda: {}\n"
"Balance predeterminado: {}"
#: ../bank.py:68 #: ../bank.py:94
msgid "global"
msgstr "general"
#: ../bank.py:94
msgid "per-guild" msgid "per-guild"
msgstr "por-servidor" msgstr "por-servidor"
#: ../bank.py:70 #: ../bank.py:97
msgid "This will toggle the bank to be {}, deleting all accounts in the process! If you're sure, type `{}`"
msgstr "Esto hará que el banco pase a ser {}, eliminando todas las cuentas en el proceso! Sí estas seguro de esto, escribe `{}`"
#: ../bank.py:104
msgid "The bank is now {}." msgid "The bank is now {}."
msgstr "El Banco ahora es {}." msgstr "El Banco ahora es {}."
#: ../bank.py:77 #: ../bank.py:111
msgid "Bank's name has been set to {}" msgid "Bank's name has been set to {}"
msgstr "Nombre del Banco ha sido ajustado a {}" msgstr "El nombre del banco ha sido ajustado a {}"
#: ../bank.py:84 #: ../bank.py:118
msgid "Currency name has been set to {}" msgid "Currency name has been set to {}"
msgstr "Nombre de la moneda ha sido ajustada a {}" msgstr "El nombre de la moneda ha sido ajustado a {}"

View File

@@ -1,8 +1,8 @@
msgid "" 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-04-02 17:36+AKDT\n"
"PO-Revision-Date: 2018-02-25 21:33-0500\n" "PO-Revision-Date: 2018-04-15 16:42-0400\n"
"Last-Translator: Kowlin <boxedpp@gmail.com>\n" "Last-Translator: Kowlin <boxedpp@gmail.com>\n"
"Language-Team: Finnish\n" "Language-Team: Finnish\n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
@@ -16,23 +16,34 @@ msgstr ""
"X-Crowdin-File: /cogs/bank/locales/messages.pot\n" "X-Crowdin-File: /cogs/bank/locales/messages.pot\n"
"Language: fi_FI\n" "Language: fi_FI\n"
#: ../bank.py:68 #: ../bank.py:76
msgid "Bank settings:\n\n"
"Bank name: {}\n"
"Currency: {}\n"
"Default balance: {}"
msgstr ""
#: ../bank.py:94
msgid "global" msgid "global"
msgstr "" msgstr ""
#: ../bank.py:68 #: ../bank.py:94
msgid "per-guild" msgid "per-guild"
msgstr "" msgstr ""
#: ../bank.py:70 #: ../bank.py:97
msgid "This will toggle the bank to be {}, deleting all accounts in the process! If you're sure, type `{}`"
msgstr ""
#: ../bank.py:104
msgid "The bank is now {}." msgid "The bank is now {}."
msgstr "" msgstr ""
#: ../bank.py:77 #: ../bank.py:111
msgid "Bank's name has been set to {}" msgid "Bank's name has been set to {}"
msgstr "" msgstr ""
#: ../bank.py:84 #: ../bank.py:118
msgid "Currency name has been set to {}" msgid "Currency name has been set to {}"
msgstr "" msgstr ""

View File

@@ -1,8 +1,8 @@
msgid "" 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-04-02 17:36+AKDT\n"
"PO-Revision-Date: 2018-02-25 21:32-0500\n" "PO-Revision-Date: 2018-04-15 16:41-0400\n"
"Last-Translator: Kowlin <boxedpp@gmail.com>\n" "Last-Translator: Kowlin <boxedpp@gmail.com>\n"
"Language-Team: French\n" "Language-Team: French\n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
@@ -16,23 +16,34 @@ msgstr ""
"X-Crowdin-File: /cogs/bank/locales/messages.pot\n" "X-Crowdin-File: /cogs/bank/locales/messages.pot\n"
"Language: fr_FR\n" "Language: fr_FR\n"
#: ../bank.py:68 #: ../bank.py:76
msgid "Bank settings:\n\n"
"Bank name: {}\n"
"Currency: {}\n"
"Default balance: {}"
msgstr ""
#: ../bank.py:94
msgid "global" msgid "global"
msgstr "global" msgstr "global"
#: ../bank.py:68 #: ../bank.py:94
msgid "per-guild" msgid "per-guild"
msgstr "par guilde" msgstr "par guilde"
#: ../bank.py:70 #: ../bank.py:97
msgid "This will toggle the bank to be {}, deleting all accounts in the process! If you're sure, type `{}`"
msgstr ""
#: ../bank.py:104
msgid "The bank is now {}." msgid "The bank is now {}."
msgstr "La banque est désormais {}." msgstr "La banque est désormais {}."
#: ../bank.py:77 #: ../bank.py:111
msgid "Bank's name has been set to {}" msgid "Bank's name has been set to {}"
msgstr "Le nom de la banque est maintenant {}" msgstr "Le nom de la banque est maintenant {}"
#: ../bank.py:84 #: ../bank.py:118
msgid "Currency name has been set to {}" msgid "Currency name has been set to {}"
msgstr "Le nom de la devise est maintenant {}" msgstr "Le nom de la devise est maintenant {}"

View File

@@ -1,8 +1,8 @@
msgid "" 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-04-02 17:36+AKDT\n"
"PO-Revision-Date: 2018-02-25 21:33-0500\n" "PO-Revision-Date: 2018-04-15 16:42-0400\n"
"Last-Translator: Kowlin <boxedpp@gmail.com>\n" "Last-Translator: Kowlin <boxedpp@gmail.com>\n"
"Language-Team: Hungarian\n" "Language-Team: Hungarian\n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
@@ -16,23 +16,34 @@ msgstr ""
"X-Crowdin-File: /cogs/bank/locales/messages.pot\n" "X-Crowdin-File: /cogs/bank/locales/messages.pot\n"
"Language: hu_HU\n" "Language: hu_HU\n"
#: ../bank.py:68 #: ../bank.py:76
msgid "Bank settings:\n\n"
"Bank name: {}\n"
"Currency: {}\n"
"Default balance: {}"
msgstr ""
#: ../bank.py:94
msgid "global" msgid "global"
msgstr "globális" msgstr "globális"
#: ../bank.py:68 #: ../bank.py:94
msgid "per-guild" msgid "per-guild"
msgstr "szerverenként" msgstr "szerverenként"
#: ../bank.py:70 #: ../bank.py:97
msgid "This will toggle the bank to be {}, deleting all accounts in the process! If you're sure, type `{}`"
msgstr ""
#: ../bank.py:104
msgid "The bank is now {}." msgid "The bank is now {}."
msgstr "A bank mostantól {}." msgstr "A bank mostantól {}."
#: ../bank.py:77 #: ../bank.py:111
msgid "Bank's name has been set to {}" msgid "Bank's name has been set to {}"
msgstr "A Bank neve mostantól {}" msgstr "A Bank neve mostantól {}"
#: ../bank.py:84 #: ../bank.py:118
msgid "Currency name has been set to {}" msgid "Currency name has been set to {}"
msgstr "Pénznem neve mostantól {}" msgstr "Pénznem neve mostantól {}"

View File

@@ -1,8 +1,8 @@
msgid "" 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-04-02 17:36+AKDT\n"
"PO-Revision-Date: 2018-04-02 19:27-0400\n" "PO-Revision-Date: 2018-04-15 16:43-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"
@@ -16,23 +16,34 @@ msgstr ""
"X-Crowdin-File: /cogs/bank/locales/messages.pot\n" "X-Crowdin-File: /cogs/bank/locales/messages.pot\n"
"Language: id_ID\n" "Language: id_ID\n"
#: ../bank.py:68 #: ../bank.py:76
msgid "Bank settings:\n\n"
"Bank name: {}\n"
"Currency: {}\n"
"Default balance: {}"
msgstr ""
#: ../bank.py:94
msgid "global" msgid "global"
msgstr "global" msgstr "global"
#: ../bank.py:68 #: ../bank.py:94
msgid "per-guild" msgid "per-guild"
msgstr "per-guild" msgstr "per-guild"
#: ../bank.py:70 #: ../bank.py:97
msgid "This will toggle the bank to be {}, deleting all accounts in the process! If you're sure, type `{}`"
msgstr ""
#: ../bank.py:104
msgid "The bank is now {}." msgid "The bank is now {}."
msgstr "Bank sekarang adalah {}." msgstr "Bank sekarang adalah {}."
#: ../bank.py:77 #: ../bank.py:111
msgid "Bank's name has been set to {}" msgid "Bank's name has been set to {}"
msgstr "Nama Bank telah ditetapkan menjadi {}" msgstr "Nama Bank telah ditetapkan menjadi {}"
#: ../bank.py:84 #: ../bank.py:118
msgid "Currency name has been set to {}" msgid "Currency name has been set to {}"
msgstr "Nama mata uang telah ditetapkan menjadi {}" msgstr "Nama mata uang telah ditetapkan menjadi {}"

Some files were not shown because too many files have changed in this diff Show More