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/mod.py @palmtree5
redbot/core/utils/data_converter.py @mikeshardmind
redbot/core/utils/antispam.py @mikeshardmind
redbot/core/utils/tunnel.py @mikeshardmind
# Cogs
redbot/cogs/admin/* @tekulvw
@@ -40,6 +42,7 @@ redbot/cogs/modlog/* @palmtree5
redbot/cogs/streams/* @Twentysix26 @palmtree5
redbot/cogs/trivia/* @Tobotimus
redbot/cogs/dataconverter/* @mikeshardmind
redbot/cogs/reports/* @mikeshardmind
# Docs
docs/* @tekulvw @palmtree5
@@ -49,3 +52,7 @@ setup.py @tekulvw
redbot/__init__.py @tekulvw
redbot/__main__.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_cache/
# pytest
.pytest_cache/

View File

@@ -17,16 +17,11 @@ script:
jobs:
include:
- stage: Deployment
- stage: PyPi 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: pypi
user: Red-DiscordBot
@@ -38,11 +33,22 @@ jobs:
branch: V3/develop
python: 3.5.3
tags: true
- provider: script
script: python3 ./generate_strings.py
skip_cleanup: true
on:
repo: Cog-Creators/Red-DiscordBot
branch: V3/develop
python: 3.5.3
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
script: python3 ./generate_strings.py
skip_cleanup: true
on:
repo: Cog-Creators/Red-DiscordBot
branch: V3/develop
python: 3.5.3
tags: 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
# built documents.
#
from redbot.core import __version__
# The short X.Y version.
version = '3.0.0b11'
version = __version__
# The full version, including alpha/beta/rc tags.
release = '3.0.0b11'
release = __version__
# The language for content autogenerated by Sphinx. Refer to documentation
# for a list of supported languages.

View File

@@ -26,4 +26,10 @@ V2 Data Conversion
==================
.. 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
"""
# First we give the converter out cog's Config instance.
# First we give the converter our cog's Config instance.
converter = dc(self.config)
# 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_debian
install_centos
install_arch
install_raspbian
cog_dataconverter
autostart_systemd
.. toctree::
: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
==========================
.. 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
---------------------------
@@ -12,7 +14,7 @@ Installing pre-requirements
yum -y groupinstall development
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 -)"
--------------
@@ -21,19 +23,19 @@ Installing Red
Without audio:
:code:`pip3 install -U --process-dependency-links red-discordbot`
:code:`pip3 install -U --process-dependency-links red-discordbot --user`
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):
: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):
: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
@@ -51,4 +53,4 @@ Running Red
-----------
Run :code:`redbot <your instance name>` and run through the initial setup. This will ask for
your token and a prefix.
your token and a prefix.

View File

@@ -4,7 +4,7 @@
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
@@ -14,7 +14,7 @@ Installing pre-requirements
echo "deb http://httpredir.debian.org/debian stretch-backports main contrib non-free" >> /etc/apt/sources.list
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
@@ -52,4 +52,4 @@ Running Red
-----------
Run :code:`redbot <your instance name>` and run through the initial setup. This will ask for
your token and a prefix.
your token and a prefix.

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:
* :code:`brew install python3 --with-brewed-openssl`
* :code:`brew install git`
* :code:`brew install ffmpeg --with-ffplay`
* :code:`brew install opus`
* :code:`brew tap caskroom/versions`
* :code:`brew cask install java8`

View File

@@ -4,13 +4,16 @@
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
---------------------------
.. 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
@@ -18,19 +21,19 @@ Installing Red
Without audio:
:code:`pip3 install -U --process-dependency-links red-discordbot`
:code:`pip3 install -U --process-dependency-links red-discordbot --user`
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):
: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):
: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
@@ -50,4 +53,4 @@ Running Red
Run :code:`redbot <your instance name>` and run through the initial setup. This will ask for
your token and a prefix.
.. warning:: Audio will not work on Raspberry Pi's **below** 2B. This is a CPU problem and *cannot* be fixed.
.. warning:: Audio will not work on Raspberry Pi's **below** 2B. This is a CPU problem and *cannot* be fixed.

View File

@@ -4,7 +4,7 @@
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
@@ -12,7 +12,8 @@ Installing the pre-requirements
.. 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
@@ -20,19 +21,19 @@ Installing the bot
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:
: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):
: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):
: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
@@ -50,4 +51,4 @@ Running Red
-----------
Run :code:`redbot <your instance name>` and run through the initial setup. This will ask for
your token and a prefix.
your token and a prefix.

View File

@@ -375,7 +375,7 @@ class Admin:
@checks.is_owner()
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()
await self.conf.serverlocked.set(not serverlocked)

View File

@@ -65,7 +65,7 @@ class Announcer:
try:
await channel.send(self.message)
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
))
await asyncio.sleep(0.5)

View File

@@ -2,7 +2,7 @@ msgid ""
msgstr ""
"Project-Id-Version: red-discordbot\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"
"Language-Team: Arabic\n"
"MIME-Version: 1.0\n"

View File

@@ -2,7 +2,7 @@ msgid ""
msgstr ""
"Project-Id-Version: red-discordbot\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"
"Language-Team: Bulgarian\n"
"MIME-Version: 1.0\n"

View File

@@ -2,7 +2,7 @@ msgid ""
msgstr ""
"Project-Id-Version: red-discordbot\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"
"Language-Team: Danish\n"
"MIME-Version: 1.0\n"

View File

@@ -2,7 +2,7 @@ msgid ""
msgstr ""
"Project-Id-Version: red-discordbot\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"
"Language-Team: German\n"
"MIME-Version: 1.0\n"

View File

@@ -2,7 +2,7 @@ msgid ""
msgstr ""
"Project-Id-Version: red-discordbot\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"
"Language-Team: Greek\n"
"MIME-Version: 1.0\n"

View File

@@ -2,7 +2,7 @@ msgid ""
msgstr ""
"Project-Id-Version: red-discordbot\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"
"Language-Team: Pirate English\n"
"MIME-Version: 1.0\n"

View File

@@ -2,7 +2,7 @@ msgid ""
msgstr ""
"Project-Id-Version: red-discordbot\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"
"Language-Team: Spanish\n"
"MIME-Version: 1.0\n"

View File

@@ -2,7 +2,7 @@ msgid ""
msgstr ""
"Project-Id-Version: red-discordbot\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"
"Language-Team: Finnish\n"
"MIME-Version: 1.0\n"

View File

@@ -2,7 +2,7 @@ msgid ""
msgstr ""
"Project-Id-Version: red-discordbot\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"
"Language-Team: French\n"
"MIME-Version: 1.0\n"

View File

@@ -2,7 +2,7 @@ msgid ""
msgstr ""
"Project-Id-Version: red-discordbot\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"
"Language-Team: Hungarian\n"
"MIME-Version: 1.0\n"

View File

@@ -2,7 +2,7 @@ msgid ""
msgstr ""
"Project-Id-Version: red-discordbot\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"
"Language-Team: Indonesian\n"
"MIME-Version: 1.0\n"

View File

@@ -2,7 +2,7 @@ msgid ""
msgstr ""
"Project-Id-Version: red-discordbot\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"
"Language-Team: Italian\n"
"MIME-Version: 1.0\n"

View File

@@ -2,7 +2,7 @@ msgid ""
msgstr ""
"Project-Id-Version: red-discordbot\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"
"Language-Team: Japanese\n"
"MIME-Version: 1.0\n"

View File

@@ -2,7 +2,7 @@ msgid ""
msgstr ""
"Project-Id-Version: red-discordbot\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"
"Language-Team: Korean\n"
"MIME-Version: 1.0\n"

View File

@@ -2,7 +2,7 @@ msgid ""
msgstr ""
"Project-Id-Version: red-discordbot\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"
"Language-Team: LOLCAT\n"
"MIME-Version: 1.0\n"

View File

@@ -2,7 +2,7 @@ msgid ""
msgstr ""
"Project-Id-Version: red-discordbot\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"
"Language-Team: Dutch\n"
"MIME-Version: 1.0\n"

View File

@@ -2,7 +2,7 @@ msgid ""
msgstr ""
"Project-Id-Version: red-discordbot\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"
"Language-Team: Norwegian\n"
"MIME-Version: 1.0\n"

View File

@@ -2,7 +2,7 @@ msgid ""
msgstr ""
"Project-Id-Version: red-discordbot\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"
"Language-Team: Polish\n"
"MIME-Version: 1.0\n"

View File

@@ -2,7 +2,7 @@ msgid ""
msgstr ""
"Project-Id-Version: red-discordbot\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"
"Language-Team: Portuguese, Brazilian\n"
"MIME-Version: 1.0\n"

View File

@@ -2,7 +2,7 @@ msgid ""
msgstr ""
"Project-Id-Version: red-discordbot\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"
"Language-Team: Portuguese\n"
"MIME-Version: 1.0\n"

View File

@@ -2,7 +2,7 @@ msgid ""
msgstr ""
"Project-Id-Version: red-discordbot\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"
"Language-Team: Russian\n"
"MIME-Version: 1.0\n"

View File

@@ -2,7 +2,7 @@ msgid ""
msgstr ""
"Project-Id-Version: red-discordbot\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"
"Language-Team: Swedish\n"
"MIME-Version: 1.0\n"

View File

@@ -2,7 +2,7 @@ msgid ""
msgstr ""
"Project-Id-Version: red-discordbot\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"
"Language-Team: Chinese Simplified\n"
"MIME-Version: 1.0\n"

View File

@@ -2,7 +2,7 @@ msgid ""
msgstr ""
"Project-Id-Version: red-discordbot\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"
"Language-Team: Arabic\n"
"MIME-Version: 1.0\n"

View File

@@ -2,7 +2,7 @@ msgid ""
msgstr ""
"Project-Id-Version: red-discordbot\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"
"Language-Team: Bulgarian\n"
"MIME-Version: 1.0\n"

View File

@@ -2,7 +2,7 @@ msgid ""
msgstr ""
"Project-Id-Version: red-discordbot\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"
"Language-Team: Danish\n"
"MIME-Version: 1.0\n"

View File

@@ -2,7 +2,7 @@ msgid ""
msgstr ""
"Project-Id-Version: red-discordbot\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"
"Language-Team: German\n"
"MIME-Version: 1.0\n"

View File

@@ -2,7 +2,7 @@ msgid ""
msgstr ""
"Project-Id-Version: red-discordbot\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"
"Language-Team: Greek\n"
"MIME-Version: 1.0\n"

View File

@@ -2,7 +2,7 @@ msgid ""
msgstr ""
"Project-Id-Version: red-discordbot\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"
"Language-Team: Pirate English\n"
"MIME-Version: 1.0\n"

View File

@@ -2,7 +2,7 @@ msgid ""
msgstr ""
"Project-Id-Version: red-discordbot\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"
"Language-Team: Spanish\n"
"MIME-Version: 1.0\n"

View File

@@ -2,7 +2,7 @@ msgid ""
msgstr ""
"Project-Id-Version: red-discordbot\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"
"Language-Team: Finnish\n"
"MIME-Version: 1.0\n"

View File

@@ -2,7 +2,7 @@ msgid ""
msgstr ""
"Project-Id-Version: red-discordbot\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"
"Language-Team: French\n"
"MIME-Version: 1.0\n"

View File

@@ -2,7 +2,7 @@ msgid ""
msgstr ""
"Project-Id-Version: red-discordbot\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"
"Language-Team: Hungarian\n"
"MIME-Version: 1.0\n"

View File

@@ -2,7 +2,7 @@ msgid ""
msgstr ""
"Project-Id-Version: red-discordbot\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"
"Language-Team: Indonesian\n"
"MIME-Version: 1.0\n"

View File

@@ -2,7 +2,7 @@ msgid ""
msgstr ""
"Project-Id-Version: red-discordbot\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"
"Language-Team: Italian\n"
"MIME-Version: 1.0\n"

View File

@@ -2,7 +2,7 @@ msgid ""
msgstr ""
"Project-Id-Version: red-discordbot\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"
"Language-Team: Japanese\n"
"MIME-Version: 1.0\n"

View File

@@ -2,7 +2,7 @@ msgid ""
msgstr ""
"Project-Id-Version: red-discordbot\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"
"Language-Team: Korean\n"
"MIME-Version: 1.0\n"

View File

@@ -2,7 +2,7 @@ msgid ""
msgstr ""
"Project-Id-Version: red-discordbot\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"
"Language-Team: LOLCAT\n"
"MIME-Version: 1.0\n"

View File

@@ -2,7 +2,7 @@ msgid ""
msgstr ""
"Project-Id-Version: red-discordbot\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"
"Language-Team: Dutch\n"
"MIME-Version: 1.0\n"

View File

@@ -2,7 +2,7 @@ msgid ""
msgstr ""
"Project-Id-Version: red-discordbot\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"
"Language-Team: Norwegian\n"
"MIME-Version: 1.0\n"

View File

@@ -2,7 +2,7 @@ msgid ""
msgstr ""
"Project-Id-Version: red-discordbot\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"
"Language-Team: Polish\n"
"MIME-Version: 1.0\n"

View File

@@ -2,7 +2,7 @@ msgid ""
msgstr ""
"Project-Id-Version: red-discordbot\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"
"Language-Team: Portuguese, Brazilian\n"
"MIME-Version: 1.0\n"

View File

@@ -2,7 +2,7 @@ msgid ""
msgstr ""
"Project-Id-Version: red-discordbot\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"
"Language-Team: Portuguese\n"
"MIME-Version: 1.0\n"

View File

@@ -2,7 +2,7 @@ msgid ""
msgstr ""
"Project-Id-Version: red-discordbot\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"
"Language-Team: Russian\n"
"MIME-Version: 1.0\n"

View File

@@ -2,7 +2,7 @@ msgid ""
msgstr ""
"Project-Id-Version: red-discordbot\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"
"Language-Team: Swedish\n"
"MIME-Version: 1.0\n"

View File

@@ -2,7 +2,7 @@ msgid ""
msgstr ""
"Project-Id-Version: red-discordbot\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"
"Language-Team: Chinese Simplified\n"
"MIME-Version: 1.0\n"

View File

@@ -1,18 +1,17 @@
from pathlib import Path
from aiohttp import ClientSession
import shutil
import asyncio
from .audio import Audio
from .manager import start_lavalink_server
from discord.ext import commands
from redbot.core.data_manager import cog_data_path
import redbot.core
LAVALINK_BUILD = 3112
LAVALINK_BUILD_URL = (
"https://ci.fredboat.com/repository/download/"
"Lavalink_Build/{}:id/Lavalink.jar?guest=1"
).format(LAVALINK_BUILD)
LAVALINK_DOWNLOAD_URL = (
"https://github.com/Cog-Creators/Red-DiscordBot/"
"releases/download/{}/Lavalink.jar"
).format(redbot.core.__version__)
LAVALINK_DOWNLOAD_DIR = cog_data_path(raw_name="Audio")
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):
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:
chunk = await resp.content.read(512)
if not chunk:
@@ -33,24 +32,25 @@ async def download_lavalink(session):
async def maybe_download_lavalink(loop, cog):
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)
with ClientSession(loop=loop) as session:
await download_lavalink(session)
await cog.config.current_build.set(LAVALINK_BUILD)
await download_lavalink(session)
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))
async def setup(bot: commands.Bot):
cog = Audio(bot)
await maybe_download_lavalink(bot.loop, cog)
await start_lavalink_server(bot.loop)
if not await cog.config.use_external_lavalink():
await maybe_download_lavalink(bot.loop, cog)
await start_lavalink_server(bot.loop)
async def _finish():
await cog.init_config()
bot.add_cog(cog)
bot.loop.create_task(_finish())
bot.add_cog(cog)
bot.loop.create_task(cog.init_config())

View File

@@ -4,19 +4,20 @@ import discord
import heapq
import lavalink
import math
import redbot.core
from discord.ext import commands
from redbot.core import Config, checks, bank
from .manager import shutdown_lavalink_server
__version__ = "0.0.4"
__version__ = "0.0.5"
__author__ = ["aikaterna", "billy/bollo/ati"]
class Audio:
def __init__(self, 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 = {
"host": 'localhost',
@@ -24,7 +25,8 @@ class Audio:
"ws_port": '2332',
"password": 'youshallnotpass',
"status": False,
"current_build": 0
"current_build": [3, 0, 0, 'alpha', 0],
"use_external_lavalink": False
}
default_guild = {
@@ -32,6 +34,7 @@ class Audio:
"dj_role": None,
"jukebox": False,
"jukebox_price": 0,
"playlists": {},
"notify": False,
"repeat": False,
"shuffle": False,
@@ -115,6 +118,17 @@ class Audio:
await self.bot.change_presence(activity=discord.Activity(name='music in {} servers'.format(playing_servers),
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.guild_only()
async def audioset(self, ctx):
@@ -185,14 +199,16 @@ class Audio:
async def settings(self, ctx):
"""Show the current settings."""
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_enabled = data['dj_enabled']
jukebox = data['jukebox']
jukebox_price = data['jukebox_price']
status = await self.config.status()
jarbuild = redbot.core.__version__
vote_percent = data['vote_percent']
msg = ('```ini\n'
'----Guild Settings----\n')
'----Server Settings----\n')
if dj_enabled:
msg += 'DJ Role: [{}]\n'.format(dj_role_obj.name)
if jukebox:
@@ -201,12 +217,14 @@ class Audio:
msg += ('Repeat: [{repeat}]\n'
'Shuffle: [{shuffle}]\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:
msg += ('Vote skip: [{vote_enabled}]\n'
'Skip percentage: [{vote_percent}%]\n').format(**data)
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)
return await ctx.send(embed=embed)
@@ -290,7 +308,7 @@ class Audio:
if dj_enabled:
if not await self._can_instaskip(ctx, ctx.author):
return await self._embed_msg(ctx, 'You need the DJ role to disconnect.')
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.')
else:
await lavalink.get_player(ctx.guild.id).stop()
@@ -336,7 +354,7 @@ class Audio:
dj_enabled = await self.config.guild(ctx.guild).dj_enabled()
vote_enabled = await self.config.guild(ctx.guild).vote_enabled()
if dj_enabled or vote_enabled:
if not await self._can_instaskip(ctx, ctx.author):
if not await self._can_instaskip(ctx, ctx.author) and not await self._is_alone(ctx, ctx.author):
return
if player.current:
@@ -375,11 +393,11 @@ class Audio:
await self._can_instaskip(ctx, ctx.author)):
return await self._embed_msg(ctx, 'You must be in the voice channel to pause the music.')
if dj_enabled:
if not await self._can_instaskip(ctx, ctx.author):
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.')
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()
embed = discord.Embed(
colour=ctx.guild.me.top_role.colour, title='Track Paused',
@@ -390,7 +408,7 @@ class Audio:
)
return await ctx.send(embed=embed)
if player.paused and command == 'resume':
if player.paused and command != 'pause':
await player.pause(False)
embed = discord.Embed(
colour=ctx.guild.me.top_role.colour,
@@ -448,7 +466,7 @@ class Audio:
description=queue_user_list)
await ctx.send(embed=embed)
@commands.command(aliases=['p'])
@commands.command()
async def play(self, ctx, *, query):
"""Play a URL or search for a song."""
dj_enabled = await self.config.guild(ctx.guild).dj_enabled()
@@ -464,8 +482,6 @@ class Audio:
if dj_enabled:
if not await self._can_instaskip(ctx, ctx.author):
return await self._embed_msg(ctx, 'You need the DJ role to queue songs.')
if not await self._currency_check(ctx, jukebox_price):
return
player = lavalink.get_player(ctx.guild.id)
player.store('channel', ctx.channel.id)
player.store('guild', ctx.guild.id)
@@ -473,6 +489,8 @@ class Audio:
if ((not ctx.author.voice or ctx.author.voice.channel != player.channel) and not
await self._can_instaskip(ctx, ctx.author)):
return await self._embed_msg(ctx, 'You must be in the voice channel to use the play command.')
if not await self._currency_check(ctx, jukebox_price):
return
query = query.strip('<>')
if not query.startswith('http'):
@@ -484,6 +502,7 @@ class Audio:
queue_duration = await self._queue_duration(ctx)
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:
for track in tracks:
@@ -491,7 +510,7 @@ class Audio:
embed = discord.Embed(colour=ctx.guild.me.top_role.colour, title='Playlist Enqueued',
description='Added {} tracks to the queue.'.format(len(tracks)))
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:
await player.play()
else:
@@ -500,11 +519,181 @@ class Audio:
embed = discord.Embed(colour=ctx.guild.me.top_role.colour, title='Track Enqueued',
description='**[{}]({})**'.format(single_track.title, single_track.uri))
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:
await player.play()
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()
async def prev(self, ctx):
"""Skips to the start of the previously played track."""
@@ -514,7 +703,7 @@ class Audio:
player = lavalink.get_player(ctx.guild.id)
shuffle = await self.config.guild(ctx.guild).shuffle()
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.')
if ((not ctx.author.voice or ctx.author.voice.channel != player.channel) and not
await self._can_instaskip(ctx, ctx.author)):
@@ -525,7 +714,7 @@ class Audio:
return await self._embed_msg(ctx, 'No previous track.')
else:
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)
bump_song = player.queue[-1]
player.queue.insert(0, bump_song)
@@ -556,7 +745,10 @@ class Audio:
end = start + items_per_page
queue_list = ''
arrow = await self._draw_time(ctx)
try:
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)
if player.current.is_stream:
@@ -714,7 +906,7 @@ class Audio:
queue_duration = await self._queue_duration(ctx)
queue_total_duration = lavalink.utils.format_time(queue_duration)
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:
player.add(ctx.author, track)
if not player.current:
@@ -734,7 +926,7 @@ class Audio:
queue_duration = await self._queue_duration(ctx)
queue_total_duration = lavalink.utils.format_time(queue_duration)
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)
if not player.current:
await player.play()
@@ -751,7 +943,7 @@ class Audio:
await self._can_instaskip(ctx, ctx.author)):
return await self._embed_msg(ctx, 'You must be in the voice channel to use seek.')
if dj_enabled:
if not await self._can_instaskip(ctx, ctx.author):
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.')
if player.current:
if player.current.is_stream:
@@ -797,7 +989,7 @@ class Audio:
dj_enabled = await self.config.guild(ctx.guild).dj_enabled()
vote_enabled = await self.config.guild(ctx.guild).vote_enabled()
if dj_enabled and not vote_enabled and not await self._can_instaskip(ctx, ctx.author):
if not await self._can_instaskip(ctx, ctx.author):
if not await self._is_alone(ctx, ctx.author):
return await self._embed_msg(ctx, 'You need the DJ role to skip songs.')
if vote_enabled:
if not await self._can_instaskip(ctx, ctx.author):
@@ -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_mod = discord.utils.get(ctx.guild.get_member(member.id).roles, id=mod_role) is not None
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:
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:
if ctx.guild.get_member(self.bot.user.id).voice is not None:
nonbots = sum(not m.bot for m in ctx.guild.get_member(self.bot.user.id).voice.channel.members)
if nonbots == 1:
nonbots = 2
else:
nonbots = 2
if ctx.guild.get_member(member.id).voice.channel.members == 1:
nonbots = 1
alone = nonbots <= 1
return is_active_dj or is_owner or is_server_owner or is_coowner or is_admin or is_mod or is_bot or alone
return alone
async def _has_dj_role(self, ctx, member):
dj_role_id = await self.config.guild(ctx.guild).dj_role()
@@ -901,7 +1101,7 @@ class Audio:
await self._can_instaskip(ctx, ctx.author)):
return await self._embed_msg(ctx, 'You must be in the voice channel to stop the music.')
if vote_enabled or vote_enabled and dj_enabled:
if not await self._can_instaskip(ctx, ctx.author):
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.')
if dj_enabled and not vote_enabled:
if not await self._can_instaskip(ctx, ctx.author):
@@ -955,29 +1155,73 @@ class Audio:
if ctx.invoked_subcommand is None:
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()
async def host(self, ctx, host):
"""Set the lavalink server host."""
await self.config.host.set(host)
await self._embed_msg(ctx, 'Host set to {}.'.format(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))
@llsetup.command()
async def password(self, ctx, passw):
async def password(self, ctx, password):
"""Set the lavalink server password."""
await self.config.passw.set(str(passw))
await self._embed_msg(ctx, 'Server password set to {}.'.format(passw))
await self.config.password.set(str(password))
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()
async def restport(self, ctx, rest_port):
"""Set the lavalink REST server port."""
await self.config.rest_port.set(str(rest_port))
await self._embed_msg(ctx, 'REST port set to {}.'.format(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))
@llsetup.command()
async def wsport(self, ctx, rest_port):
async def wsport(self, ctx, ws_port):
"""Set the lavalink websocket server port."""
await self.config.ws_port.set(str(ws_port))
await self._embed_msg(ctx, 'Websocket port set to {}.'.format(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))
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
async def _clear_react(message):
@@ -1089,6 +1333,30 @@ class Audio:
except KeyError:
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):
if after.channel != before.channel:
try:

View File

@@ -1,8 +1,8 @@
msgid ""
msgstr ""
"Project-Id-Version: red-discordbot\n"
"POT-Creation-Date: 2018-02-18 14:42+AKST\n"
"PO-Revision-Date: 2018-02-25 21:32-0500\n"
"POT-Creation-Date: 2018-04-02 17:36+AKDT\n"
"PO-Revision-Date: 2018-04-15 16:41-0400\n"
"Last-Translator: Kowlin <boxedpp@gmail.com>\n"
"Language-Team: Arabic\n"
"MIME-Version: 1.0\n"
@@ -16,27 +16,3 @@ msgstr ""
"X-Crowdin-File: /cogs/audio/locales/messages.pot\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 ""
msgstr ""
"Project-Id-Version: red-discordbot\n"
"POT-Creation-Date: 2018-02-18 14:42+AKST\n"
"PO-Revision-Date: 2018-02-25 21:33-0500\n"
"POT-Creation-Date: 2018-04-02 17:36+AKDT\n"
"PO-Revision-Date: 2018-04-15 16:42-0400\n"
"Last-Translator: Kowlin <boxedpp@gmail.com>\n"
"Language-Team: Bulgarian\n"
"MIME-Version: 1.0\n"
@@ -16,27 +16,3 @@ msgstr ""
"X-Crowdin-File: /cogs/audio/locales/messages.pot\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 ""
msgstr ""
"Project-Id-Version: red-discordbot\n"
"POT-Creation-Date: 2018-02-18 14:42+AKST\n"
"PO-Revision-Date: 2018-02-25 21:33-0500\n"
"POT-Creation-Date: 2018-04-02 17:36+AKDT\n"
"PO-Revision-Date: 2018-04-15 16:42-0400\n"
"Last-Translator: Kowlin <boxedpp@gmail.com>\n"
"Language-Team: Danish\n"
"MIME-Version: 1.0\n"
@@ -16,27 +16,3 @@ msgstr ""
"X-Crowdin-File: /cogs/audio/locales/messages.pot\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 ""
msgstr ""
"Project-Id-Version: red-discordbot\n"
"POT-Creation-Date: 2018-02-18 14:42+AKST\n"
"PO-Revision-Date: 2018-02-27 01:49-0500\n"
"POT-Creation-Date: 2018-04-02 17:36+AKDT\n"
"PO-Revision-Date: 2018-04-15 16:42-0400\n"
"Last-Translator: Kowlin <boxedpp@gmail.com>\n"
"Language-Team: German\n"
"MIME-Version: 1.0\n"
@@ -16,27 +16,3 @@ msgstr ""
"X-Crowdin-File: /cogs/audio/locales/messages.pot\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 ""
msgstr ""
"Project-Id-Version: red-discordbot\n"
"POT-Creation-Date: 2018-02-18 14:42+AKST\n"
"PO-Revision-Date: 2018-02-25 21:33-0500\n"
"POT-Creation-Date: 2018-04-02 17:36+AKDT\n"
"PO-Revision-Date: 2018-04-15 16:42-0400\n"
"Last-Translator: Kowlin <boxedpp@gmail.com>\n"
"Language-Team: Greek\n"
"MIME-Version: 1.0\n"
@@ -16,27 +16,3 @@ msgstr ""
"X-Crowdin-File: /cogs/audio/locales/messages.pot\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 ""
msgstr ""
"Project-Id-Version: red-discordbot\n"
"POT-Creation-Date: 2018-02-18 14:42+AKST\n"
"PO-Revision-Date: 2018-04-02 19:27-0400\n"
"POT-Creation-Date: 2018-04-02 17:36+AKDT\n"
"PO-Revision-Date: 2018-04-15 16:43-0400\n"
"Last-Translator: Kowlin <boxedpp@gmail.com>\n"
"Language-Team: Pirate English\n"
"MIME-Version: 1.0\n"
@@ -16,27 +16,3 @@ msgstr ""
"X-Crowdin-File: /cogs/audio/locales/messages.pot\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 ""
msgstr ""
"Project-Id-Version: red-discordbot\n"
"POT-Creation-Date: 2018-02-18 14:42+AKST\n"
"PO-Revision-Date: 2018-02-25 21:32-0500\n"
"POT-Creation-Date: 2018-04-02 17:36+AKDT\n"
"PO-Revision-Date: 2018-04-15 16:41-0400\n"
"Last-Translator: Kowlin <boxedpp@gmail.com>\n"
"Language-Team: Spanish\n"
"MIME-Version: 1.0\n"
@@ -16,27 +16,3 @@ msgstr ""
"X-Crowdin-File: /cogs/audio/locales/messages.pot\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 ""
msgstr ""
"Project-Id-Version: red-discordbot\n"
"POT-Creation-Date: 2018-02-18 14:42+AKST\n"
"PO-Revision-Date: 2018-02-25 21:33-0500\n"
"POT-Creation-Date: 2018-04-02 17:36+AKDT\n"
"PO-Revision-Date: 2018-04-15 16:42-0400\n"
"Last-Translator: Kowlin <boxedpp@gmail.com>\n"
"Language-Team: Finnish\n"
"MIME-Version: 1.0\n"
@@ -16,27 +16,3 @@ msgstr ""
"X-Crowdin-File: /cogs/audio/locales/messages.pot\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 ""
msgstr ""
"Project-Id-Version: red-discordbot\n"
"POT-Creation-Date: 2018-02-18 14:42+AKST\n"
"PO-Revision-Date: 2018-02-25 21:32-0500\n"
"POT-Creation-Date: 2018-04-02 17:36+AKDT\n"
"PO-Revision-Date: 2018-04-15 16:41-0400\n"
"Last-Translator: Kowlin <boxedpp@gmail.com>\n"
"Language-Team: French\n"
"MIME-Version: 1.0\n"
@@ -16,27 +16,3 @@ msgstr ""
"X-Crowdin-File: /cogs/audio/locales/messages.pot\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 ""
msgstr ""
"Project-Id-Version: red-discordbot\n"
"POT-Creation-Date: 2018-02-18 14:42+AKST\n"
"PO-Revision-Date: 2018-02-25 21:33-0500\n"
"POT-Creation-Date: 2018-04-02 17:36+AKDT\n"
"PO-Revision-Date: 2018-04-15 16:42-0400\n"
"Last-Translator: Kowlin <boxedpp@gmail.com>\n"
"Language-Team: Hungarian\n"
"MIME-Version: 1.0\n"
@@ -16,27 +16,3 @@ msgstr ""
"X-Crowdin-File: /cogs/audio/locales/messages.pot\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 ""
msgstr ""
"Project-Id-Version: red-discordbot\n"
"POT-Creation-Date: 2018-02-18 14:42+AKST\n"
"PO-Revision-Date: 2018-04-02 19:27-0400\n"
"POT-Creation-Date: 2018-04-02 17:36+AKDT\n"
"PO-Revision-Date: 2018-04-15 16:43-0400\n"
"Last-Translator: Kowlin <boxedpp@gmail.com>\n"
"Language-Team: Indonesian\n"
"MIME-Version: 1.0\n"
@@ -16,27 +16,3 @@ msgstr ""
"X-Crowdin-File: /cogs/audio/locales/messages.pot\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 ""
msgstr ""
"Project-Id-Version: red-discordbot\n"
"POT-Creation-Date: 2018-02-18 14:42+AKST\n"
"PO-Revision-Date: 2018-02-25 21:33-0500\n"
"POT-Creation-Date: 2018-04-02 17:36+AKDT\n"
"PO-Revision-Date: 2018-04-15 16:42-0400\n"
"Last-Translator: Kowlin <boxedpp@gmail.com>\n"
"Language-Team: Italian\n"
"MIME-Version: 1.0\n"
@@ -16,27 +16,3 @@ msgstr ""
"X-Crowdin-File: /cogs/audio/locales/messages.pot\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 ""
msgstr ""
"Project-Id-Version: red-discordbot\n"
"POT-Creation-Date: 2018-02-18 14:42+AKST\n"
"PO-Revision-Date: 2018-02-25 21:33-0500\n"
"POT-Creation-Date: 2018-04-02 17:36+AKDT\n"
"PO-Revision-Date: 2018-04-15 16:42-0400\n"
"Last-Translator: Kowlin <boxedpp@gmail.com>\n"
"Language-Team: Japanese\n"
"MIME-Version: 1.0\n"
@@ -16,27 +16,3 @@ msgstr ""
"X-Crowdin-File: /cogs/audio/locales/messages.pot\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 ""
msgstr ""
"Project-Id-Version: red-discordbot\n"
"POT-Creation-Date: 2018-02-18 14:42+AKST\n"
"PO-Revision-Date: 2018-04-02 19:26-0400\n"
"POT-Creation-Date: 2018-04-02 17:36+AKDT\n"
"PO-Revision-Date: 2018-04-15 16:42-0400\n"
"Last-Translator: Kowlin <boxedpp@gmail.com>\n"
"Language-Team: Korean\n"
"MIME-Version: 1.0\n"
@@ -16,27 +16,3 @@ msgstr ""
"X-Crowdin-File: /cogs/audio/locales/messages.pot\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 ""
msgstr ""
"Project-Id-Version: red-discordbot\n"
"POT-Creation-Date: 2018-02-18 14:42+AKST\n"
"PO-Revision-Date: 2018-02-25 21:34-0500\n"
"POT-Creation-Date: 2018-04-02 17:36+AKDT\n"
"PO-Revision-Date: 2018-04-15 16:43-0400\n"
"Last-Translator: Kowlin <boxedpp@gmail.com>\n"
"Language-Team: LOLCAT\n"
"MIME-Version: 1.0\n"
@@ -16,27 +16,3 @@ msgstr ""
"X-Crowdin-File: /cogs/audio/locales/messages.pot\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 ""
msgstr ""
"Project-Id-Version: red-discordbot\n"
"POT-Creation-Date: 2018-02-18 14:42+AKST\n"
"PO-Revision-Date: 2018-04-02 19:27-0400\n"
"POT-Creation-Date: 2018-04-02 17:36+AKDT\n"
"PO-Revision-Date: 2018-04-15 16:42-0400\n"
"Last-Translator: Kowlin <boxedpp@gmail.com>\n"
"Language-Team: Dutch\n"
"MIME-Version: 1.0\n"
@@ -16,27 +16,3 @@ msgstr ""
"X-Crowdin-File: /cogs/audio/locales/messages.pot\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 ""
msgstr ""
"Project-Id-Version: red-discordbot\n"
"POT-Creation-Date: 2018-02-18 14:42+AKST\n"
"PO-Revision-Date: 2018-02-25 21:33-0500\n"
"POT-Creation-Date: 2018-04-02 17:36+AKDT\n"
"PO-Revision-Date: 2018-04-15 16:42-0400\n"
"Last-Translator: Kowlin <boxedpp@gmail.com>\n"
"Language-Team: Norwegian\n"
"MIME-Version: 1.0\n"
@@ -16,27 +16,3 @@ msgstr ""
"X-Crowdin-File: /cogs/audio/locales/messages.pot\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 ""
msgstr ""
"Project-Id-Version: red-discordbot\n"
"POT-Creation-Date: 2018-02-18 14:42+AKST\n"
"PO-Revision-Date: 2018-02-25 21:33-0500\n"
"POT-Creation-Date: 2018-04-02 17:36+AKDT\n"
"PO-Revision-Date: 2018-04-15 16:43-0400\n"
"Last-Translator: Kowlin <boxedpp@gmail.com>\n"
"Language-Team: Polish\n"
"MIME-Version: 1.0\n"
@@ -16,27 +16,3 @@ msgstr ""
"X-Crowdin-File: /cogs/audio/locales/messages.pot\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 ""
msgstr ""
"Project-Id-Version: red-discordbot\n"
"POT-Creation-Date: 2018-02-18 14:42+AKST\n"
"PO-Revision-Date: 2018-02-25 21:34-0500\n"
"POT-Creation-Date: 2018-04-02 17:36+AKDT\n"
"PO-Revision-Date: 2018-04-15 16:43-0400\n"
"Last-Translator: Kowlin <boxedpp@gmail.com>\n"
"Language-Team: Portuguese, Brazilian\n"
"MIME-Version: 1.0\n"
@@ -16,27 +16,3 @@ msgstr ""
"X-Crowdin-File: /cogs/audio/locales/messages.pot\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 ""
msgstr ""
"Project-Id-Version: red-discordbot\n"
"POT-Creation-Date: 2018-02-18 14:42+AKST\n"
"PO-Revision-Date: 2018-02-25 21:33-0500\n"
"POT-Creation-Date: 2018-04-02 17:36+AKDT\n"
"PO-Revision-Date: 2018-04-15 16:43-0400\n"
"Last-Translator: Kowlin <boxedpp@gmail.com>\n"
"Language-Team: Portuguese\n"
"MIME-Version: 1.0\n"
@@ -16,27 +16,3 @@ msgstr ""
"X-Crowdin-File: /cogs/audio/locales/messages.pot\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 ""
msgstr ""
"Project-Id-Version: red-discordbot\n"
"POT-Creation-Date: 2018-02-18 14:42+AKST\n"
"PO-Revision-Date: 2018-04-02 19:27-0400\n"
"POT-Creation-Date: 2018-04-02 17:36+AKDT\n"
"PO-Revision-Date: 2018-04-15 16:43-0400\n"
"Last-Translator: Kowlin <boxedpp@gmail.com>\n"
"Language-Team: Russian\n"
"MIME-Version: 1.0\n"
@@ -16,27 +16,3 @@ msgstr ""
"X-Crowdin-File: /cogs/audio/locales/messages.pot\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 ""
msgstr ""
"Project-Id-Version: red-discordbot\n"
"POT-Creation-Date: 2018-02-18 14:42+AKST\n"
"PO-Revision-Date: 2018-02-25 21:34-0500\n"
"POT-Creation-Date: 2018-04-02 17:36+AKDT\n"
"PO-Revision-Date: 2018-04-15 16:43-0400\n"
"Last-Translator: Kowlin <boxedpp@gmail.com>\n"
"Language-Team: Swedish\n"
"MIME-Version: 1.0\n"
@@ -16,27 +16,3 @@ msgstr ""
"X-Crowdin-File: /cogs/audio/locales/messages.pot\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 ""
msgstr ""
"Project-Id-Version: red-discordbot\n"
"POT-Creation-Date: 2018-02-18 14:42+AKST\n"
"PO-Revision-Date: 2018-02-25 21:34-0500\n"
"POT-Creation-Date: 2018-04-02 17:36+AKDT\n"
"PO-Revision-Date: 2018-04-15 16:43-0400\n"
"Last-Translator: Kowlin <boxedpp@gmail.com>\n"
"Language-Team: Chinese Simplified\n"
"MIME-Version: 1.0\n"
@@ -16,27 +16,3 @@ msgstr ""
"X-Crowdin-File: /cogs/audio/locales/messages.pot\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 shutil
import asyncio
from subprocess import Popen, DEVNULL
from subprocess import Popen, DEVNULL, PIPE
import os
import logging
log = logging.getLogger('red.audio.manager')
proc = None
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):
while not SHUTDOWN.is_set():
if proc.poll() is not None:
@@ -14,13 +24,55 @@ async def monitor_lavalink_server(loop):
await asyncio.sleep(0.5)
if not SHUTDOWN.is_set():
print("Lavalink jar shutdown, restarting.")
await start_lavalink_server(loop)
log.info("Lavalink jar shutdown.")
if not has_java_error(proc.pid):
log.info("Restarting Lavalink jar.")
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):
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
start_cmd = "java -jar {}".format(LAVALINK_JAR_FILE.resolve())
start_cmd = "java {} -jar {}".format(extra_flags, LAVALINK_JAR_FILE.resolve())
global proc
proc = Popen(
@@ -29,13 +81,15 @@ async def start_lavalink_server(loop):
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))
def shutdown_lavalink_server():
print("Shutting down lavalink server.")
log.info("Shutting down lavalink server.")
SHUTDOWN.set()
global proc
if proc is not None:
proc.terminate()
proc = None

View File

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

View File

@@ -1,8 +1,8 @@
msgid ""
msgstr ""
"Project-Id-Version: red-discordbot\n"
"POT-Creation-Date: 2018-02-18 14:42+AKST\n"
"PO-Revision-Date: 2018-02-25 21:32-0500\n"
"POT-Creation-Date: 2018-04-02 17:36+AKDT\n"
"PO-Revision-Date: 2018-04-15 16:41-0400\n"
"Last-Translator: Kowlin <boxedpp@gmail.com>\n"
"Language-Team: Arabic\n"
"MIME-Version: 1.0\n"
@@ -16,23 +16,34 @@ msgstr ""
"X-Crowdin-File: /cogs/bank/locales/messages.pot\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"
msgstr ""
#: ../bank.py:68
#: ../bank.py:94
msgid "per-guild"
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 {}."
msgstr ""
#: ../bank.py:77
#: ../bank.py:111
msgid "Bank's name has been set to {}"
msgstr ""
#: ../bank.py:84
#: ../bank.py:118
msgid "Currency name has been set to {}"
msgstr ""

View File

@@ -1,8 +1,8 @@
msgid ""
msgstr ""
"Project-Id-Version: red-discordbot\n"
"POT-Creation-Date: 2018-02-18 14:42+AKST\n"
"PO-Revision-Date: 2018-02-25 21:33-0500\n"
"POT-Creation-Date: 2018-04-02 17:36+AKDT\n"
"PO-Revision-Date: 2018-04-15 16:42-0400\n"
"Last-Translator: Kowlin <boxedpp@gmail.com>\n"
"Language-Team: Bulgarian\n"
"MIME-Version: 1.0\n"
@@ -16,23 +16,34 @@ msgstr ""
"X-Crowdin-File: /cogs/bank/locales/messages.pot\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"
msgstr "глобален"
#: ../bank.py:68
#: ../bank.py:94
msgid "per-guild"
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 {}."
msgstr "Банката вече е {}."
#: ../bank.py:77
#: ../bank.py:111
msgid "Bank's name has been set to {}"
msgstr "Името на банката е настроено на {}"
#: ../bank.py:84
#: ../bank.py:118
msgid "Currency name has been set to {}"
msgstr "Името на валутата е настроено на {}"

View File

@@ -1,8 +1,8 @@
msgid ""
msgstr ""
"Project-Id-Version: red-discordbot\n"
"POT-Creation-Date: 2018-02-18 14:42+AKST\n"
"PO-Revision-Date: 2018-02-25 21:33-0500\n"
"POT-Creation-Date: 2018-04-02 17:36+AKDT\n"
"PO-Revision-Date: 2018-04-15 16:42-0400\n"
"Last-Translator: Kowlin <boxedpp@gmail.com>\n"
"Language-Team: Danish\n"
"MIME-Version: 1.0\n"
@@ -16,23 +16,34 @@ msgstr ""
"X-Crowdin-File: /cogs/bank/locales/messages.pot\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"
msgstr ""
#: ../bank.py:68
#: ../bank.py:94
msgid "per-guild"
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 {}."
msgstr ""
#: ../bank.py:77
#: ../bank.py:111
msgid "Bank's name has been set to {}"
msgstr ""
#: ../bank.py:84
#: ../bank.py:118
msgid "Currency name has been set to {}"
msgstr ""

View File

@@ -1,8 +1,8 @@
msgid ""
msgstr ""
"Project-Id-Version: red-discordbot\n"
"POT-Creation-Date: 2018-02-18 14:42+AKST\n"
"PO-Revision-Date: 2018-02-27 01:49-0500\n"
"POT-Creation-Date: 2018-04-02 17:36+AKDT\n"
"PO-Revision-Date: 2018-04-15 16:42-0400\n"
"Last-Translator: Kowlin <boxedpp@gmail.com>\n"
"Language-Team: German\n"
"MIME-Version: 1.0\n"
@@ -16,23 +16,37 @@ msgstr ""
"X-Crowdin-File: /cogs/bank/locales/messages.pot\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"
msgstr "Global"
#: ../bank.py:68
#: ../bank.py:94
msgid "per-guild"
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 {}."
msgstr "Die Bank ist nun {}."
#: ../bank.py:77
#: ../bank.py:111
msgid "Bank's name has been set to {}"
msgstr "Der Bank Name wurde geändert zu {}"
#: ../bank.py:84
#: ../bank.py:118
msgid "Currency name has been set to {}"
msgstr "Der Währungsname wurde geändert zu {}"

View File

@@ -1,8 +1,8 @@
msgid ""
msgstr ""
"Project-Id-Version: red-discordbot\n"
"POT-Creation-Date: 2018-02-18 14:42+AKST\n"
"PO-Revision-Date: 2018-02-25 21:33-0500\n"
"POT-Creation-Date: 2018-04-02 17:36+AKDT\n"
"PO-Revision-Date: 2018-04-15 16:42-0400\n"
"Last-Translator: Kowlin <boxedpp@gmail.com>\n"
"Language-Team: Greek\n"
"MIME-Version: 1.0\n"
@@ -16,23 +16,34 @@ msgstr ""
"X-Crowdin-File: /cogs/bank/locales/messages.pot\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"
msgstr ""
#: ../bank.py:68
#: ../bank.py:94
msgid "per-guild"
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 {}."
msgstr ""
#: ../bank.py:77
#: ../bank.py:111
msgid "Bank's name has been set to {}"
msgstr ""
#: ../bank.py:84
#: ../bank.py:118
msgid "Currency name has been set to {}"
msgstr ""

View File

@@ -1,8 +1,8 @@
msgid ""
msgstr ""
"Project-Id-Version: red-discordbot\n"
"POT-Creation-Date: 2018-02-18 14:42+AKST\n"
"PO-Revision-Date: 2018-04-02 19:27-0400\n"
"POT-Creation-Date: 2018-04-02 17:36+AKDT\n"
"PO-Revision-Date: 2018-04-15 16:43-0400\n"
"Last-Translator: Kowlin <boxedpp@gmail.com>\n"
"Language-Team: Pirate English\n"
"MIME-Version: 1.0\n"
@@ -16,23 +16,34 @@ msgstr ""
"X-Crowdin-File: /cogs/bank/locales/messages.pot\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"
msgstr "global"
#: ../bank.py:68
#: ../bank.py:94
msgid "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 {}."
msgstr "Thee treasure chest is now {}."
#: ../bank.py:77
#: ../bank.py:111
msgid "Bank'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 {}"
msgstr "Yar Currency name has been set to {}"

View File

@@ -1,8 +1,8 @@
msgid ""
msgstr ""
"Project-Id-Version: red-discordbot\n"
"POT-Creation-Date: 2018-02-18 14:42+AKST\n"
"PO-Revision-Date: 2018-02-25 21:32-0500\n"
"POT-Creation-Date: 2018-04-02 17:36+AKDT\n"
"PO-Revision-Date: 2018-04-15 16:41-0400\n"
"Last-Translator: Kowlin <boxedpp@gmail.com>\n"
"Language-Team: Spanish\n"
"MIME-Version: 1.0\n"
@@ -16,23 +16,37 @@ msgstr ""
"X-Crowdin-File: /cogs/bank/locales/messages.pot\n"
"Language: es_ES\n"
#: ../bank.py:68
msgid "global"
msgstr "global"
#: ../bank.py:76
msgid "Bank settings:\n\n"
"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"
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 {}."
msgstr "El Banco ahora es {}."
#: ../bank.py:77
#: ../bank.py:111
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 {}"
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 ""
msgstr ""
"Project-Id-Version: red-discordbot\n"
"POT-Creation-Date: 2018-02-18 14:42+AKST\n"
"PO-Revision-Date: 2018-02-25 21:33-0500\n"
"POT-Creation-Date: 2018-04-02 17:36+AKDT\n"
"PO-Revision-Date: 2018-04-15 16:42-0400\n"
"Last-Translator: Kowlin <boxedpp@gmail.com>\n"
"Language-Team: Finnish\n"
"MIME-Version: 1.0\n"
@@ -16,23 +16,34 @@ msgstr ""
"X-Crowdin-File: /cogs/bank/locales/messages.pot\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"
msgstr ""
#: ../bank.py:68
#: ../bank.py:94
msgid "per-guild"
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 {}."
msgstr ""
#: ../bank.py:77
#: ../bank.py:111
msgid "Bank's name has been set to {}"
msgstr ""
#: ../bank.py:84
#: ../bank.py:118
msgid "Currency name has been set to {}"
msgstr ""

View File

@@ -1,8 +1,8 @@
msgid ""
msgstr ""
"Project-Id-Version: red-discordbot\n"
"POT-Creation-Date: 2018-02-18 14:42+AKST\n"
"PO-Revision-Date: 2018-02-25 21:32-0500\n"
"POT-Creation-Date: 2018-04-02 17:36+AKDT\n"
"PO-Revision-Date: 2018-04-15 16:41-0400\n"
"Last-Translator: Kowlin <boxedpp@gmail.com>\n"
"Language-Team: French\n"
"MIME-Version: 1.0\n"
@@ -16,23 +16,34 @@ msgstr ""
"X-Crowdin-File: /cogs/bank/locales/messages.pot\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"
msgstr "global"
#: ../bank.py:68
#: ../bank.py:94
msgid "per-guild"
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 {}."
msgstr "La banque est désormais {}."
#: ../bank.py:77
#: ../bank.py:111
msgid "Bank's name has been set to {}"
msgstr "Le nom de la banque est maintenant {}"
#: ../bank.py:84
#: ../bank.py:118
msgid "Currency name has been set to {}"
msgstr "Le nom de la devise est maintenant {}"

View File

@@ -1,8 +1,8 @@
msgid ""
msgstr ""
"Project-Id-Version: red-discordbot\n"
"POT-Creation-Date: 2018-02-18 14:42+AKST\n"
"PO-Revision-Date: 2018-02-25 21:33-0500\n"
"POT-Creation-Date: 2018-04-02 17:36+AKDT\n"
"PO-Revision-Date: 2018-04-15 16:42-0400\n"
"Last-Translator: Kowlin <boxedpp@gmail.com>\n"
"Language-Team: Hungarian\n"
"MIME-Version: 1.0\n"
@@ -16,23 +16,34 @@ msgstr ""
"X-Crowdin-File: /cogs/bank/locales/messages.pot\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"
msgstr "globális"
#: ../bank.py:68
#: ../bank.py:94
msgid "per-guild"
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 {}."
msgstr "A bank mostantól {}."
#: ../bank.py:77
#: ../bank.py:111
msgid "Bank's name has been set to {}"
msgstr "A Bank neve mostantól {}"
#: ../bank.py:84
#: ../bank.py:118
msgid "Currency name has been set to {}"
msgstr "Pénznem neve mostantól {}"

View File

@@ -1,8 +1,8 @@
msgid ""
msgstr ""
"Project-Id-Version: red-discordbot\n"
"POT-Creation-Date: 2018-02-18 14:42+AKST\n"
"PO-Revision-Date: 2018-04-02 19:27-0400\n"
"POT-Creation-Date: 2018-04-02 17:36+AKDT\n"
"PO-Revision-Date: 2018-04-15 16:43-0400\n"
"Last-Translator: Kowlin <boxedpp@gmail.com>\n"
"Language-Team: Indonesian\n"
"MIME-Version: 1.0\n"
@@ -16,23 +16,34 @@ msgstr ""
"X-Crowdin-File: /cogs/bank/locales/messages.pot\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"
msgstr "global"
#: ../bank.py:68
#: ../bank.py:94
msgid "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 {}."
msgstr "Bank sekarang adalah {}."
#: ../bank.py:77
#: ../bank.py:111
msgid "Bank's name has been set to {}"
msgstr "Nama Bank telah ditetapkan menjadi {}"
#: ../bank.py:84
#: ../bank.py:118
msgid "Currency name has been set to {}"
msgstr "Nama mata uang telah ditetapkan menjadi {}"

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