diff --git a/.bandit.yml b/.bandit.yml
new file mode 100644
index 000000000..4b100f568
--- /dev/null
+++ b/.bandit.yml
@@ -0,0 +1,396 @@
+
+### Bandit config file generated
+
+### This config may optionally select a subset of tests to run or skip by
+### filling out the 'tests' and 'skips' lists given below. If no tests are
+### specified for inclusion then it is assumed all tests are desired. The skips
+### set will remove specific tests from the include set. This can be controlled
+### using the -t/-s CLI options. Note that the same test ID should not appear
+### in both 'tests' and 'skips', this would be nonsensical and is detected by
+### Bandit at runtime.
+
+# Available tests:
+# B101 : assert_used
+# B102 : exec_used
+# B103 : set_bad_file_permissions
+# B104 : hardcoded_bind_all_interfaces
+# B105 : hardcoded_password_string
+# B106 : hardcoded_password_funcarg
+# B107 : hardcoded_password_default
+# B108 : hardcoded_tmp_directory
+# B110 : try_except_pass
+# B112 : try_except_continue
+# B201 : flask_debug_true
+# B301 : pickle
+# B302 : marshal
+# B303 : md5
+# B304 : ciphers
+# B305 : cipher_modes
+# B306 : mktemp_q
+# B307 : eval
+# B308 : mark_safe
+# B309 : httpsconnection
+# B310 : urllib_urlopen
+# B311 : random
+# B312 : telnetlib
+# B313 : xml_bad_cElementTree
+# B314 : xml_bad_ElementTree
+# B315 : xml_bad_expatreader
+# B316 : xml_bad_expatbuilder
+# B317 : xml_bad_sax
+# B318 : xml_bad_minidom
+# B319 : xml_bad_pulldom
+# B320 : xml_bad_etree
+# B321 : ftplib
+# B322 : input
+# B323 : unverified_context
+# B324 : hashlib_new_insecure_functions
+# B325 : tempnam
+# B401 : import_telnetlib
+# B402 : import_ftplib
+# B403 : import_pickle
+# B404 : import_subprocess
+# B405 : import_xml_etree
+# B406 : import_xml_sax
+# B407 : import_xml_expat
+# B408 : import_xml_minidom
+# B409 : import_xml_pulldom
+# B410 : import_lxml
+# B411 : import_xmlrpclib
+# B412 : import_httpoxy
+# B413 : import_pycrypto
+# B501 : request_with_no_cert_validation
+# B502 : ssl_with_bad_version
+# B503 : ssl_with_bad_defaults
+# B504 : ssl_with_no_version
+# B505 : weak_cryptographic_key
+# B506 : yaml_load
+# B507 : ssh_no_host_key_verification
+# B601 : paramiko_calls
+# B602 : subprocess_popen_with_shell_equals_true
+# B603 : subprocess_without_shell_equals_true
+# B604 : any_other_function_with_shell_equals_true
+# B605 : start_process_with_a_shell
+# B606 : start_process_with_no_shell
+# B607 : start_process_with_partial_path
+# B608 : hardcoded_sql_expressions
+# B609 : linux_commands_wildcard_injection
+# B610 : django_extra_used
+# B611 : django_rawsql_used
+# B701 : jinja2_autoescape_false
+# B702 : use_of_mako_templates
+# B703 : django_mark_safe
+
+# (optional) list included test IDs here, eg '[B101, B406]':
+tests:
+
+# (optional) list skipped test IDs here, eg '[B101, B406]':
+skips: ['B322']
+
+### (optional) plugin settings - some test plugins require configuration data
+### that may be given here, per-plugin. All bandit test plugins have a built in
+### set of sensible defaults and these will be used if no configuration is
+### provided. It is not necessary to provide settings for every (or any) plugin
+### if the defaults are acceptable.
+
+any_other_function_with_shell_equals_true:
+ no_shell:
+ - os.execl
+ - os.execle
+ - os.execlp
+ - os.execlpe
+ - os.execv
+ - os.execve
+ - os.execvp
+ - os.execvpe
+ - os.spawnl
+ - os.spawnle
+ - os.spawnlp
+ - os.spawnlpe
+ - os.spawnv
+ - os.spawnve
+ - os.spawnvp
+ - os.spawnvpe
+ - os.startfile
+ shell:
+ - os.system
+ - os.popen
+ - os.popen2
+ - os.popen3
+ - os.popen4
+ - popen2.popen2
+ - popen2.popen3
+ - popen2.popen4
+ - popen2.Popen3
+ - popen2.Popen4
+ - commands.getoutput
+ - commands.getstatusoutput
+ subprocess:
+ - subprocess.Popen
+ - subprocess.call
+ - subprocess.check_call
+ - subprocess.check_output
+ - subprocess.run
+hardcoded_tmp_directory:
+ tmp_dirs:
+ - /tmp
+ - /var/tmp
+ - /dev/shm
+linux_commands_wildcard_injection:
+ no_shell:
+ - os.execl
+ - os.execle
+ - os.execlp
+ - os.execlpe
+ - os.execv
+ - os.execve
+ - os.execvp
+ - os.execvpe
+ - os.spawnl
+ - os.spawnle
+ - os.spawnlp
+ - os.spawnlpe
+ - os.spawnv
+ - os.spawnve
+ - os.spawnvp
+ - os.spawnvpe
+ - os.startfile
+ shell:
+ - os.system
+ - os.popen
+ - os.popen2
+ - os.popen3
+ - os.popen4
+ - popen2.popen2
+ - popen2.popen3
+ - popen2.popen4
+ - popen2.Popen3
+ - popen2.Popen4
+ - commands.getoutput
+ - commands.getstatusoutput
+ subprocess:
+ - subprocess.Popen
+ - subprocess.call
+ - subprocess.check_call
+ - subprocess.check_output
+ - subprocess.run
+ssl_with_bad_defaults:
+ bad_protocol_versions:
+ - PROTOCOL_SSLv2
+ - SSLv2_METHOD
+ - SSLv23_METHOD
+ - PROTOCOL_SSLv3
+ - PROTOCOL_TLSv1
+ - SSLv3_METHOD
+ - TLSv1_METHOD
+ssl_with_bad_version:
+ bad_protocol_versions:
+ - PROTOCOL_SSLv2
+ - SSLv2_METHOD
+ - SSLv23_METHOD
+ - PROTOCOL_SSLv3
+ - PROTOCOL_TLSv1
+ - SSLv3_METHOD
+ - TLSv1_METHOD
+start_process_with_a_shell:
+ no_shell:
+ - os.execl
+ - os.execle
+ - os.execlp
+ - os.execlpe
+ - os.execv
+ - os.execve
+ - os.execvp
+ - os.execvpe
+ - os.spawnl
+ - os.spawnle
+ - os.spawnlp
+ - os.spawnlpe
+ - os.spawnv
+ - os.spawnve
+ - os.spawnvp
+ - os.spawnvpe
+ - os.startfile
+ shell:
+ - os.system
+ - os.popen
+ - os.popen2
+ - os.popen3
+ - os.popen4
+ - popen2.popen2
+ - popen2.popen3
+ - popen2.popen4
+ - popen2.Popen3
+ - popen2.Popen4
+ - commands.getoutput
+ - commands.getstatusoutput
+ subprocess:
+ - subprocess.Popen
+ - subprocess.call
+ - subprocess.check_call
+ - subprocess.check_output
+ - subprocess.run
+start_process_with_no_shell:
+ no_shell:
+ - os.execl
+ - os.execle
+ - os.execlp
+ - os.execlpe
+ - os.execv
+ - os.execve
+ - os.execvp
+ - os.execvpe
+ - os.spawnl
+ - os.spawnle
+ - os.spawnlp
+ - os.spawnlpe
+ - os.spawnv
+ - os.spawnve
+ - os.spawnvp
+ - os.spawnvpe
+ - os.startfile
+ shell:
+ - os.system
+ - os.popen
+ - os.popen2
+ - os.popen3
+ - os.popen4
+ - popen2.popen2
+ - popen2.popen3
+ - popen2.popen4
+ - popen2.Popen3
+ - popen2.Popen4
+ - commands.getoutput
+ - commands.getstatusoutput
+ subprocess:
+ - subprocess.Popen
+ - subprocess.call
+ - subprocess.check_call
+ - subprocess.check_output
+ - subprocess.run
+start_process_with_partial_path:
+ no_shell:
+ - os.execl
+ - os.execle
+ - os.execlp
+ - os.execlpe
+ - os.execv
+ - os.execve
+ - os.execvp
+ - os.execvpe
+ - os.spawnl
+ - os.spawnle
+ - os.spawnlp
+ - os.spawnlpe
+ - os.spawnv
+ - os.spawnve
+ - os.spawnvp
+ - os.spawnvpe
+ - os.startfile
+ shell:
+ - os.system
+ - os.popen
+ - os.popen2
+ - os.popen3
+ - os.popen4
+ - popen2.popen2
+ - popen2.popen3
+ - popen2.popen4
+ - popen2.Popen3
+ - popen2.Popen4
+ - commands.getoutput
+ - commands.getstatusoutput
+ subprocess:
+ - subprocess.Popen
+ - subprocess.call
+ - subprocess.check_call
+ - subprocess.check_output
+ - subprocess.run
+subprocess_popen_with_shell_equals_true:
+ no_shell:
+ - os.execl
+ - os.execle
+ - os.execlp
+ - os.execlpe
+ - os.execv
+ - os.execve
+ - os.execvp
+ - os.execvpe
+ - os.spawnl
+ - os.spawnle
+ - os.spawnlp
+ - os.spawnlpe
+ - os.spawnv
+ - os.spawnve
+ - os.spawnvp
+ - os.spawnvpe
+ - os.startfile
+ shell:
+ - os.system
+ - os.popen
+ - os.popen2
+ - os.popen3
+ - os.popen4
+ - popen2.popen2
+ - popen2.popen3
+ - popen2.popen4
+ - popen2.Popen3
+ - popen2.Popen4
+ - commands.getoutput
+ - commands.getstatusoutput
+ subprocess:
+ - subprocess.Popen
+ - subprocess.call
+ - subprocess.check_call
+ - subprocess.check_output
+ - subprocess.run
+subprocess_without_shell_equals_true:
+ no_shell:
+ - os.execl
+ - os.execle
+ - os.execlp
+ - os.execlpe
+ - os.execv
+ - os.execve
+ - os.execvp
+ - os.execvpe
+ - os.spawnl
+ - os.spawnle
+ - os.spawnlp
+ - os.spawnlpe
+ - os.spawnv
+ - os.spawnve
+ - os.spawnvp
+ - os.spawnvpe
+ - os.startfile
+ shell:
+ - os.system
+ - os.popen
+ - os.popen2
+ - os.popen3
+ - os.popen4
+ - popen2.popen2
+ - popen2.popen3
+ - popen2.popen4
+ - popen2.Popen3
+ - popen2.Popen4
+ - commands.getoutput
+ - commands.getstatusoutput
+ subprocess:
+ - subprocess.Popen
+ - subprocess.call
+ - subprocess.check_call
+ - subprocess.check_output
+ - subprocess.run
+try_except_continue:
+ check_typed_exception: false
+try_except_pass:
+ check_typed_exception: false
+weak_cryptographic_key:
+ weak_key_size_dsa_high: 1024
+ weak_key_size_dsa_medium: 2048
+ weak_key_size_ec_high: 160
+ weak_key_size_ec_medium: 224
+ weak_key_size_rsa_high: 1024
+ weak_key_size_rsa_medium: 2048
+
diff --git a/.codeclimate.yml b/.codeclimate.yml
index fba462070..3f29a0496 100644
--- a/.codeclimate.yml
+++ b/.codeclimate.yml
@@ -2,14 +2,15 @@ version: "2" # required to adjust maintainability checks
checks:
argument-count:
config:
- threshold: 6
+ threshold: 8 # work on this later
complex-logic:
enabled: false # Disabled in favor of using Radon for this
config:
threshold: 4
file-lines:
+ enabled: false # enable after audio stuff...
config:
- threshold: 1000 # I would set this lower if not for cogs as command containers.
+ threshold: 2000 # I would set this lower if not for cogs as command containers.
method-complexity:
enabled: false # Disabled in favor of using Radon for this
config:
@@ -24,7 +25,7 @@ checks:
threshold: 25 # I'm fine with long methods, cautious about the complexity of a single method.
nested-control-flow:
config:
- threshold: 4
+ threshold: 6
return-statements:
config:
threshold: 6
@@ -33,12 +34,19 @@ checks:
config:
threshold: # language-specific defaults. an override will affect all languages.
identical-code:
+ enabled: false
config:
threshold: # language-specific defaults. an override will affect all languages.
plugins:
bandit:
- enabled: true
+ enabled: false
radon:
- enabled: true
+ enabled: false
config:
threshold: "D"
+ duplication:
+ enabled: false
+ config:
+ languages:
+ python:
+ python_version: 3
diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS
index 7dac8bd23..7a5be858d 100644
--- a/.github/CODEOWNERS
+++ b/.github/CODEOWNERS
@@ -25,11 +25,12 @@ redbot/core/utils/antispam.py @mikeshardmind
redbot/core/utils/tunnel.py @mikeshardmind
redbot/core/utils/caching.py @mikeshardmind
redbot/core/utils/common_filters.py @mikeshardmind
+redbot/core/utils/dbtools.py @mikeshardmind
# Cogs
redbot/cogs/admin/* @tekulvw
redbot/cogs/alias/* @tekulvw
-redbot/cogs/audio/* @aikaterna
+redbot/cogs/audio/* @aikaterna @Drapersniper
redbot/cogs/bank/* @tekulvw
redbot/cogs/cleanup/* @palmtree5
redbot/cogs/customcom/* @palmtree5
@@ -55,9 +56,10 @@ tests/cogs/downloader/* @jack1142
# Setup, instance setup, and running the bot
setup.py @tekulvw
redbot/__init__.py @tekulvw
-redbot/__main__.py @tekulvw
+redbot/__main__.py @tekulvw @mikeshardmind
redbot/setup.py @tekulvw
# Others
.travis.yml @Kowlin
crowdin.yml @Kowlin
+.github/workflows/* @Kowlin
diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md
index 292dcd86f..df00afdf2 100644
--- a/.github/CONTRIBUTING.md
+++ b/.github/CONTRIBUTING.md
@@ -30,9 +30,8 @@ Red is an open source project. This means that each and every one of the develop
We love receiving contributions from our community. Any assistance you can provide with regards to bug fixes, feature enhancements, and documentation is more than welcome.
# 2. Ground Rules
-We've made a point to use [ZenHub](https://www.zenhub.com/) (a plugin for GitHub) as our main source of collaboration and coordination. Your experience contributing to Red will be greatly improved if you go get that plugin.
1. Ensure cross compatibility for Windows, Mac OS and Linux.
-2. Ensure all Python features used in contributions exist and work in Python 3.7 and above.
+2. Ensure all Python features used in contributions exist and work in Python 3.8.1 and above.
3. Create new tests for code you add or bugs you fix. It helps us help you by making sure we don't accidentally break anything :grinning:
4. Create any issues for new features you'd like to implement and explain why this feature is useful to everyone and not just you personally.
5. Don't add new cogs unless specifically given approval in an issue discussing said cog idea.
@@ -54,7 +53,7 @@ Red's repository is configured to follow a particular development workflow, usin
### 4.1 Setting up your development environment
The following requirements must be installed prior to setting up:
- - Python 3.7.0 or greater
+ - Python 3.8.1 or greater
- git
- pip
@@ -80,10 +79,10 @@ If you're not on Windows, you should also have GNU make installed, and you can o
**Note:** If you're comfortable with setting up virtual environments yourself and would rather do it manually, just run `pip install -Ur tools/dev-requirements.txt` after setting it up.
### 4.2 Testing
-We've recently started using [tox](https://github.com/tox-dev/tox) to run all of our tests. It's extremely simple to use, and if you followed the previous section correctly, it is already installed to your virtual environment.
+We're using [tox](https://github.com/tox-dev/tox) to run all of our tests. It's extremely simple to use, and if you followed the previous section correctly, it is already installed to your virtual environment.
Currently, tox does the following, creating its own virtual environments for each stage:
-- Runs all of our unit tests with [pytest](https://github.com/pytest-dev/pytest) on python 3.7 (test environment `py37`)
+- Runs all of our unit tests with [pytest](https://github.com/pytest-dev/pytest) on python 3.8 (test environment `py38`)
- Ensures documentation builds without warnings, and all hyperlinks have a valid destination (test environment `docs`)
- Ensures that the code meets our style guide with [black](https://github.com/ambv/black) (test environment `style`)
@@ -96,7 +95,7 @@ Your PR will not be merged until all of these tests pass.
### 4.3 Style
Our style checker of choice, [black](https://github.com/ambv/black), actually happens to be an auto-formatter. The checking functionality simply detects whether or not it would try to reformat something in your code, should you run the formatter on it. For this reason, we recommend using this tool as a formatter, regardless of any disagreements you might have with the style it enforces.
-Use the command `black --help` to see how to use this tool. The full style guide is explained in detail on [black's GitHub repository](https://github.com/ambv/black). **There is one exception to this**, however, which is that we set the line length to 99, instead of black's default 88. When using `black` on the command line, simply use it like so: `black -l 99 -N `.
+Use the command `black --help` to see how to use this tool. The full style guide is explained in detail on [black's GitHub repository](https://github.com/ambv/black). **There is one exception to this**, however, which is that we set the line length to 99, instead of black's default 88. This is already set in `pyproject.toml` configuration file in the repo so you can simply format code with Black like so: `black `.
### 4.4 Make
You may have noticed we have a `Makefile` and a `make.bat` in the top-level directory. For now, you can do a few things with them:
@@ -107,7 +106,7 @@ You may have noticed we have a `Makefile` and a `make.bat` in the top-level dire
The other make recipes are most likely for project maintainers rather than contributors.
-You can specify the Python executable used in the make recipes with the `PYTHON` environment variable, e.g. `make PYTHON=/usr/bin/python3.7 newenv`.
+You can specify the Python executable used in the make recipes with the `PYTHON` environment variable, e.g. `make PYTHON=/usr/bin/python3.8 newenv`.
### 4.5 Keeping your dependencies up to date
Whenever you pull from upstream (V3/develop on the main repository) and you notice either of the files `setup.cfg` or `tools/dev-requirements.txt` have been changed, it can often mean some package dependencies have been updated, added or removed. To make sure you're testing and formatting with the most up-to-date versions of our dependencies, run `make syncenv`. You could also simply do `make newenv` to install them to a clean new virtual environment.
diff --git a/.github/workflows/auto_labeler.yml b/.github/workflows/auto_labeler.yml
new file mode 100644
index 000000000..e4b3bc9f2
--- /dev/null
+++ b/.github/workflows/auto_labeler.yml
@@ -0,0 +1,26 @@
+name: Auto Labeler
+on:
+ issues:
+ types: [opened]
+
+jobs:
+ build:
+
+ runs-on: ubuntu-latest
+ steps:
+ - name: Apply Triage Label
+ uses: actions/github-script@0.4.0
+ with:
+ github-token: ${{secrets.GITHUB_TOKEN}}
+ script: |
+ const is_status_label = (label) => label.name.startsWith('Status: ');
+ if (context.payload.issue.labels.some(is_status_label)) {
+ console.log('Issue already has Status label, skipping...');
+ return;
+ }
+ github.issues.addLabels({
+ issue_number: context.issue.number,
+ owner: context.repo.owner,
+ repo: context.repo.repo,
+ labels: ['Status: Needs Triage']
+ });
diff --git a/.github/workflows/lint_python.yaml b/.github/workflows/lint_python.yaml
new file mode 100644
index 000000000..a2556737f
--- /dev/null
+++ b/.github/workflows/lint_python.yaml
@@ -0,0 +1,26 @@
+name: Lint Python
+on:
+ pull_request:
+ push:
+ repository_dispatch:
+ types:
+ - dispatched_test
+
+env:
+ ref: ${{ github.event.client_payload.ref || '' }}
+
+jobs:
+ lint_python:
+ name: Lint Python
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v2
+ with:
+ ref: ${{ env.ref }}
+ - uses: actions/setup-python@v1
+ with:
+ python_version: "3.8"
+ - run: "python -m pip install git+https://github.com/pycqa/pyflakes@1911c20#egg=pyflakes git+https://github.com/pycqa/pycodestyle@d219c68#egg=pycodestyle git+https://gitlab.com/pycqa/flake8@3.7.9#egg=flake8"
+ name: Install Flake8
+ - run: "python -m flake8 . --count --select=E9,F7,F82 --show-source"
+ name: Flake8 Linting
diff --git a/.github/workflows/publish_crowdin.yml b/.github/workflows/publish_crowdin.yml
new file mode 100644
index 000000000..205d57a98
--- /dev/null
+++ b/.github/workflows/publish_crowdin.yml
@@ -0,0 +1,55 @@
+name: Publish to Crowdin
+on:
+ schedule:
+ - cron: '0 12 * * THU'
+ repository_dispatch:
+ types: crowdin
+
+env:
+ CROWDIN_API_KEY: ${{ secrets.crowdin_token}}
+ CROWDIN_PROJECT_ID: ${{ secrets.crowdin_identifier }}
+
+jobs:
+ deploy:
+ if: github.repository == 'Cog-Creators/Red-DiscordBot'
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v2
+ - name: Set up Python
+ uses: actions/setup-python@v1
+ with:
+ python-version: '3.8'
+ - name: Install dependencies
+ run: |
+ 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
+ pip install redgettext==3.1
+ - name: Generate source files
+ run: |
+ make gettext
+ - name: Upload source files
+ run: |
+ make upload_translations
+ - name: Download translations
+ run: |
+ make download_translations
+ - name: Create Pull Request
+ uses: peter-evans/create-pull-request@v2
+ with:
+ token: ${{ secrets.GITHUB_TOKEN }}
+ commit-message: Automated Crowdin downstream
+ title: "[i18n] Automated Crowdin downstream"
+ body: |
+ This is an automated PR.
+ Please ensure that there are no errors or invalid files are in the PR.
+ labels: "Automated PR, Category: i18n"
+ branch: "automated/i18n"
+ - name: Repository Dispatch
+ uses: peter-evans/repository-dispatch@v1
+ with:
+ token: ${{ secrets.cogcreators_bot_repo_scoped }}
+ repository: Cog-Creators/Red-DiscordBot
+ event-type: dispatched_test
+ client-payload: '{"ref": "automated/i18n"}'
\ No newline at end of file
diff --git a/.github/workflows/publish_pypi.yml b/.github/workflows/publish_pypi.yml
new file mode 100644
index 000000000..fbd675789
--- /dev/null
+++ b/.github/workflows/publish_pypi.yml
@@ -0,0 +1,27 @@
+name: Publish to PyPI
+on:
+ push:
+ tags:
+ - "*"
+
+jobs:
+ deploy:
+ if: github.repository == 'Cog-Creators/Red-DiscordBot'
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v2
+ - name: Set up Python
+ uses: actions/setup-python@v1
+ with:
+ python-version: '3.8'
+ - name: Install dependencies
+ run: |
+ python -m pip install --upgrade pip
+ pip install setuptools wheel twine
+ - name: Build and publish
+ env:
+ TWINE_USERNAME: __token__
+ TWINE_PASSWORD: ${{ secrets.pypi_token }}
+ run: |
+ python setup.py sdist bdist_wheel
+ twine upload dist/*
diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml
new file mode 100644
index 000000000..13b7fe725
--- /dev/null
+++ b/.github/workflows/tests.yml
@@ -0,0 +1,85 @@
+name: Tests
+on:
+ pull_request:
+ push:
+ repository_dispatch:
+ types:
+ - dispatched_test
+
+env:
+ ref: ${{ github.event.client_payload.ref || '' }}
+
+jobs:
+ tox:
+ runs-on: ubuntu-latest
+ strategy:
+ matrix:
+ python_version:
+ - "3.8"
+ tox_env:
+ - py
+ - style
+ - docs
+ include:
+ - tox_env: py
+ friendly_name: Tests
+ - tox_env: style
+ friendly_name: Style
+ - tox_env: docs
+ friendly_name: Docs
+ fail-fast: false
+ name: Tox - ${{ matrix.friendly_name }}
+ steps:
+ - uses: actions/checkout@v2
+ with:
+ ref: ${{ env.ref }}
+ - name: Set up Python
+ uses: actions/setup-python@v1
+ with:
+ python-version: ${{ matrix.python_version }}
+ - name: Install tox
+ run: |
+ python -m pip install --upgrade pip
+ pip install tox
+ - name: Tox test
+ env:
+ TOXENV: ${{ matrix.tox_env }}
+ run: tox
+
+ tox-postgres:
+ runs-on: ubuntu-latest
+ strategy:
+ matrix:
+ python_version:
+ - "3.8"
+ fail-fast: false
+ name: Tox - Postgres
+ services:
+ postgresql:
+ image: postgres:10
+ ports:
+ - 5432:5432
+ env:
+ POSTGRES_DB: red_db
+ POSTGRES_PASSWORD: postgres
+ POSTGRES_USER: postgres
+ steps:
+ - uses: actions/checkout@v2
+ with:
+ ref: ${{ env.ref }}
+ - name: Set up Python
+ uses: actions/setup-python@v1
+ with:
+ python-version: ${{ matrix.python_version }}
+ - name: Install tox
+ run: |
+ python -m pip install --upgrade pip
+ pip install tox
+ - name: Tox test
+ env:
+ TOXENV: postgres
+ PGDATABASE: red_db
+ PGUSER: postgres
+ PGPASSWORD: postgres
+ PGPORT: 5432
+ run: tox
diff --git a/.gitignore b/.gitignore
index 7f45b422d..cae373df4 100644
--- a/.gitignore
+++ b/.gitignore
@@ -137,3 +137,6 @@ ENV/
# pytest
.pytest_cache/
+
+# Pre-commit hooks
+/.pre-commit-config.yaml
diff --git a/.readthedocs.yml b/.readthedocs.yml
index a8be59ce1..5ae4b96a0 100644
--- a/.readthedocs.yml
+++ b/.readthedocs.yml
@@ -7,7 +7,7 @@ build:
image: latest
python:
- version: 3.7
+ version: 3.8
install:
- requirements: docs/requirements.txt
- method: pip
diff --git a/.travis.yml b/.travis.yml
index 282bef8df..34bd99980 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -5,7 +5,7 @@ notifications:
email: false
python:
-- 3.7.3
+- 3.8.1
env:
global:
- PIPENV_IGNORE_VIRTUALENVS=1
@@ -30,10 +30,10 @@ jobs:
# These jobs only occur on tag creation if the prior ones succeed
- stage: PyPi Deployment
if: tag IS present
- python: 3.7.2
+ python: 3.8.1
env:
- DEPLOYING=true
- - TOXENV=py36
+ - TOXENV=py38
deploy:
- provider: pypi
distributions: sdist bdist_wheel
@@ -45,11 +45,11 @@ jobs:
repo: Cog-Creators/Red-DiscordBot
tags: true
- stage: Crowdin Deployment
- if: tag IS present
- python: 3.7.2
+ if: tag IS present OR ENV(BUILD_CROWDIN)
+ python: 3.8.1
env:
- DEPLOYING=true
- - TOXENV=py36
+ - TOXENV=py38
before_deploy:
- 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
diff --git a/LICENSE b/LICENSE
index 7333f92db..733715286 100644
--- a/LICENSE
+++ b/LICENSE
@@ -632,7 +632,7 @@ state the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.
Red - A fully customizable Discord bot
- Copyright (C) 2015-2019 Twentysix
+ Copyright (C) 2015-2020 Twentysix
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -652,7 +652,7 @@ Also add information on how to contact you by electronic and paper mail.
If the program does terminal interaction, make it output a short
notice like this when it starts in an interactive mode:
- Red-DiscordBot Copyright (C) 2015-2019 Twentysix
+ Red-DiscordBot Copyright (C) 2015-2020 Twentysix
This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
This is free software, and you are welcome to redistribute it
under certain conditions; type `show c' for details.
diff --git a/Makefile b/Makefile
index 7ae79fedd..1a1e996d1 100644
--- a/Makefile
+++ b/Makefile
@@ -1,16 +1,17 @@
-PYTHON ?= python3.7
+PYTHON ?= python3.8
# Python Code Style
reformat:
- $(PYTHON) -m black -l 99 --target-version py37 `git ls-files "*.py"`
+ $(PYTHON) -m black `git ls-files "*.py"`
stylecheck:
- $(PYTHON) -m black --check -l 99 --target-version py37 `git ls-files "*.py"`
+ $(PYTHON) -m black --check `git ls-files "*.py"`
+stylediff:
+ $(PYTHON) -m black --check --diff `git ls-files "*.py"`
# Translations
gettext:
$(PYTHON) -m redgettext --command-docstrings --verbose --recursive redbot --exclude-files "redbot/pytest/**/*"
upload_translations:
- $(MAKE) gettext
crowdin upload sources
download_translations:
crowdin download
diff --git a/README.md b/README.md
index 7d7fd9a6b..9bc2e6c0a 100644
--- a/README.md
+++ b/README.md
@@ -16,7 +16,7 @@
-
+
@@ -26,8 +26,8 @@
-
-
+
+
diff --git a/changelog.d/1734.docs.1.rst b/changelog.d/1734.docs.1.rst
deleted file mode 100644
index 3995729ef..000000000
--- a/changelog.d/1734.docs.1.rst
+++ /dev/null
@@ -1,2 +0,0 @@
-Start the user guides covering cogs and the user interface of the bot. This
-includes, for now, a "Getting started" guide.
diff --git a/changelog.d/2105.docs.rst b/changelog.d/2105.docs.rst
deleted file mode 100644
index 12b75c1d2..000000000
--- a/changelog.d/2105.docs.rst
+++ /dev/null
@@ -1 +0,0 @@
-Added documentation for PM2 support.
diff --git a/changelog.d/2429.enhance.rst b/changelog.d/2429.enhance.rst
deleted file mode 100644
index ebf9e3552..000000000
--- a/changelog.d/2429.enhance.rst
+++ /dev/null
@@ -1 +0,0 @@
-Add the option to modify the RPC port with the ``--rpc-port`` flag.
\ No newline at end of file
diff --git a/changelog.d/2558.docs.rst b/changelog.d/2558.docs.rst
deleted file mode 100644
index bb6012427..000000000
--- a/changelog.d/2558.docs.rst
+++ /dev/null
@@ -1 +0,0 @@
-Updated linux install docs, adding sections for Fedora Linux, Debian/Raspbian Buster, and openSUSE.
diff --git a/changelog.d/2571.misc.rst b/changelog.d/2571.misc.rst
deleted file mode 100644
index f071ffc3f..000000000
--- a/changelog.d/2571.misc.rst
+++ /dev/null
@@ -1 +0,0 @@
-Tests now use same event loop policy as Red's code.
\ No newline at end of file
diff --git a/changelog.d/2654.feature.rst b/changelog.d/2654.feature.rst
deleted file mode 100644
index eac3ab395..000000000
--- a/changelog.d/2654.feature.rst
+++ /dev/null
@@ -1 +0,0 @@
-Added functions to acquire locks on Config groups and values. These locks are acquired by default when calling a value as a context manager. See :meth:`Value.get_lock` for details
diff --git a/changelog.d/2723.feature.rst b/changelog.d/2723.feature.rst
deleted file mode 100644
index 1e2f3d49b..000000000
--- a/changelog.d/2723.feature.rst
+++ /dev/null
@@ -1 +0,0 @@
-Added a config driver for PostgreSQL
diff --git a/changelog.d/2723.misc.rst b/changelog.d/2723.misc.rst
deleted file mode 100644
index 2d4afcf25..000000000
--- a/changelog.d/2723.misc.rst
+++ /dev/null
@@ -1,32 +0,0 @@
-Changes to the ``redbot.core.drivers`` package:
-
-- The modules inside the ``redbot.core.drivers`` package no longer have the ``red_`` prefix in front of their names.
-- All driver classes are now directly accessible as attributes to the ``redbot.core.drivers`` package.
-- :func:`get_driver`'s signature has been changed.
-- :func:`get_driver` can now use data manager to infer the backend type if it is not supplied as an argument.
-- :func:`get_driver_class` has been added.
-
-Changes to the :class:`BaseDriver` and :class:`JsonDriver` classes class:
-
-- :meth:`BaseDriver.get_config_details` is an now abstract staticmethod.
-- :meth:`BaseDriver.initialize` and :meth:`BaseDriver.teardown` are two new abstract coroutine classmethods.
-- :meth:`BaseDriver.delete_all_data` is a new concrete (but overrideable) coroutine instance method.
-- :meth:`BaseDriver.aiter_cogs` is a new abstract asynchronous iterator method.
-- :meth:`BaseDriver.migrate_to` is a new concrete coroutine classmethod.
-- :class:`JsonDriver` no longer requires the data path when constructed and will infer the data path from data manager.
-
-Changes to the :class:`IdentifierData` class and :class:`ConfigCategory` enum:
-
-- ``IdentifierData.custom_group_data`` has been replaced by :attr:`IdentifierData.primary_key_len`.
-- :meth:`ConfigCategory.get_pkey_info` is a new classmethod.
-
-Changes to the migration and backup system:
-
-- All code in the ``redbot.setup`` script, excluding that regarding MongoV1, is now virtually backend-agnostic.
-- All code in the ``[p]backup`` is now backend-agnostic.
-- :func:`redbot.core.config.migrate` is a new coroutine function.
-- All a new driver needs to do now to be compatible with migrations and backups is to implement the :class:`BaseDriver` ABC.
-
-Enhancements to unit tests:
-
-- New tox recipes have been added for testing against Mongo and Postgres backends. See the ``tox.ini`` file for clues on how to run them.
diff --git a/changelog.d/2804.feature.1.rst b/changelog.d/2804.feature.1.rst
deleted file mode 100644
index 47f7c47fc..000000000
--- a/changelog.d/2804.feature.1.rst
+++ /dev/null
@@ -1,9 +0,0 @@
-Adds methods to Config for accessing things by id without mocked objects
-
- - Config.guild_from_id
- - Config.user_from_id
- - Config.role_from_id
- - Config.channel_from_id
- - Config.member_from_ids
- - This one requires multiple ids, one for the guild, one for the user
- - Consequence of discord's object model
\ No newline at end of file
diff --git a/changelog.d/2836.feature.rst b/changelog.d/2836.feature.rst
deleted file mode 100644
index 2ab5446d1..000000000
--- a/changelog.d/2836.feature.rst
+++ /dev/null
@@ -1 +0,0 @@
-New :func:`humanize_number` in :module:`redbot.core.utils.chat_formatting` function to convert numbers into text which respect locale.
\ No newline at end of file
diff --git a/changelog.d/2836.misc.rst b/changelog.d/2836.misc.rst
deleted file mode 100644
index d203c9ec7..000000000
--- a/changelog.d/2836.misc.rst
+++ /dev/null
@@ -1 +0,0 @@
-New :func:`humanize_number` is used throughout the bot.
diff --git a/changelog.d/2845.feature.1.rst b/changelog.d/2845.feature.1.rst
deleted file mode 100644
index 5a1cdcf30..000000000
--- a/changelog.d/2845.feature.1.rst
+++ /dev/null
@@ -1,5 +0,0 @@
-Added New commands to Economy
-
-- ``[p]bank prune user`` - This will delete a user's bank account.
-- ``[p]bank prune local`` - This will prune the bank of accounts from users no longer in the server.
-- ``[p]bank prune global`` - This will prune the global bank of accounts from users who do not share any servers with the bot.
\ No newline at end of file
diff --git a/changelog.d/2845.feature.2.rst b/changelog.d/2845.feature.2.rst
deleted file mode 100644
index 63ac4a83a..000000000
--- a/changelog.d/2845.feature.2.rst
+++ /dev/null
@@ -1,3 +0,0 @@
-Added :func:`bank_prune` to :module:`redbot.core.bank`
-
-- :func:`bank_prune` can be used to delete a specific user's bank account or remove all invalid bank accounts (For users who are not in the guild if bank is local or share servers with the bot if bank is global).
\ No newline at end of file
diff --git a/changelog.d/2849.misc.rst b/changelog.d/2849.misc.rst
deleted file mode 100644
index 6d6074e8a..000000000
--- a/changelog.d/2849.misc.rst
+++ /dev/null
@@ -1,2 +0,0 @@
-Added the function ``redbot.core.utils.chat_formatting.text_to_file`` to
-prepare a long text to be send as a file.
diff --git a/changelog.d/2863.bugfix.rst b/changelog.d/2863.bugfix.rst
deleted file mode 100644
index 9d32c3d6d..000000000
--- a/changelog.d/2863.bugfix.rst
+++ /dev/null
@@ -1 +0,0 @@
-Help properly hides disabled commands.
diff --git a/changelog.d/2872.feature.rst b/changelog.d/2872.feature.rst
deleted file mode 100644
index d4e20a46a..000000000
--- a/changelog.d/2872.feature.rst
+++ /dev/null
@@ -1 +0,0 @@
-Red now uses towncrier for changelog generation
\ No newline at end of file
diff --git a/changelog.d/2875.enhance.rst b/changelog.d/2875.enhance.rst
deleted file mode 100644
index 79ae6a859..000000000
--- a/changelog.d/2875.enhance.rst
+++ /dev/null
@@ -1 +0,0 @@
-Slots now has a 62.5% expected payout and won't inflate economy when spammed.
\ No newline at end of file
diff --git a/changelog.d/2881.enhance.rst b/changelog.d/2881.enhance.rst
deleted file mode 100644
index 6a7c15881..000000000
--- a/changelog.d/2881.enhance.rst
+++ /dev/null
@@ -1 +0,0 @@
-Allow passing cls in the :func:`redbot.core.commands.group()` decorator
diff --git a/changelog.d/2882.docs.rst b/changelog.d/2882.docs.rst
deleted file mode 100644
index 76bdc33a2..000000000
--- a/changelog.d/2882.docs.rst
+++ /dev/null
@@ -1 +0,0 @@
-Create documentation covering what we consider a developer facing breaking change and guarantees regarding them.
\ No newline at end of file
diff --git a/changelog.d/2885.misc.rst b/changelog.d/2885.misc.rst
deleted file mode 100644
index d7e2ac3db..000000000
--- a/changelog.d/2885.misc.rst
+++ /dev/null
@@ -1 +0,0 @@
-[Tunnel] Added ``use_cached`` and ``images_only`` kwargs to `redbot.core.utils.Tunnel.files_from_attach`
\ No newline at end of file
diff --git a/changelog.d/2888.bugfix.rst b/changelog.d/2888.bugfix.rst
deleted file mode 100644
index 19f76701d..000000000
--- a/changelog.d/2888.bugfix.rst
+++ /dev/null
@@ -1 +0,0 @@
-Fixed remove_command error when trying to remove a non-existent command
\ No newline at end of file
diff --git a/changelog.d/2892.bugfix.1.rst b/changelog.d/2892.bugfix.1.rst
deleted file mode 100644
index f976e6c8c..000000000
--- a/changelog.d/2892.bugfix.1.rst
+++ /dev/null
@@ -1 +0,0 @@
-``Command.can_see`` now works as intended for disabled commands
diff --git a/changelog.d/2892.enhance.rst b/changelog.d/2892.enhance.rst
deleted file mode 100644
index 67aa8ea2f..000000000
--- a/changelog.d/2892.enhance.rst
+++ /dev/null
@@ -1 +0,0 @@
-Red's Help Formatter is now considered to have a stable API.
\ No newline at end of file
diff --git a/changelog.d/2897.breaking.1.rst b/changelog.d/2897.breaking.1.rst
deleted file mode 100644
index 249871d7b..000000000
--- a/changelog.d/2897.breaking.1.rst
+++ /dev/null
@@ -1 +0,0 @@
-Modlog casetypes no longer have an attribute for auditlog action type.
\ No newline at end of file
diff --git a/changelog.d/2897.bugfix.1.rst b/changelog.d/2897.bugfix.1.rst
deleted file mode 100644
index 8bc2bbeb7..000000000
--- a/changelog.d/2897.bugfix.1.rst
+++ /dev/null
@@ -1 +0,0 @@
-Modlog entries now show up properly without the mod cog loaded
\ No newline at end of file
diff --git a/changelog.d/2897.enhance.2.rst b/changelog.d/2897.enhance.2.rst
deleted file mode 100644
index 3a48af0f0..000000000
--- a/changelog.d/2897.enhance.2.rst
+++ /dev/null
@@ -1 +0,0 @@
-Modlog no longer generates cases without being told to for actions the bot did.
\ No newline at end of file
diff --git a/changelog.d/2897.enhance.3.rst b/changelog.d/2897.enhance.3.rst
deleted file mode 100644
index 8e69e1cfb..000000000
--- a/changelog.d/2897.enhance.3.rst
+++ /dev/null
@@ -1 +0,0 @@
-Some generic modlog casetypes are now pre-registered for cog creator use
\ No newline at end of file
diff --git a/changelog.d/2908.breaking.rst b/changelog.d/2908.breaking.rst
deleted file mode 100644
index a8abb03f8..000000000
--- a/changelog.d/2908.breaking.rst
+++ /dev/null
@@ -1 +0,0 @@
-``redbot.core.modlog.get_next_case_number()`` has been removed.
diff --git a/changelog.d/2908.bugfix.rst b/changelog.d/2908.bugfix.rst
deleted file mode 100644
index 5ab962290..000000000
--- a/changelog.d/2908.bugfix.rst
+++ /dev/null
@@ -1 +0,0 @@
-Fixed error in `[p]reason` when setting the reason for a case without a moderator.
diff --git a/changelog.d/2908.enhance.rst b/changelog.d/2908.enhance.rst
deleted file mode 100644
index 660ff914e..000000000
--- a/changelog.d/2908.enhance.rst
+++ /dev/null
@@ -1 +0,0 @@
-ModLog is now much faster at creating cases, especially in large servers.
diff --git a/changelog.d/2908.feature.rst b/changelog.d/2908.feature.rst
deleted file mode 100644
index 66a212907..000000000
--- a/changelog.d/2908.feature.rst
+++ /dev/null
@@ -1 +0,0 @@
-Added :func:`redbot.core.modlog.get_latest_case` to fetch the case object for the most recent ModLog case.
diff --git a/changelog.d/2914.docs.rst b/changelog.d/2914.docs.rst
deleted file mode 100644
index 0debb16cf..000000000
--- a/changelog.d/2914.docs.rst
+++ /dev/null
@@ -1 +0,0 @@
-Fixed user parameter being labeled as discord.TextChannel instead of discord.abc.User.
diff --git a/changelog.d/2915.docs.rst b/changelog.d/2915.docs.rst
deleted file mode 100644
index 712c6c87e..000000000
--- a/changelog.d/2915.docs.rst
+++ /dev/null
@@ -1 +0,0 @@
-Updated towncrier info in contribution guidelines to include how to do a standalone PR.
\ No newline at end of file
diff --git a/changelog.d/2920.docs.rst b/changelog.d/2920.docs.rst
deleted file mode 100644
index d50d6f591..000000000
--- a/changelog.d/2920.docs.rst
+++ /dev/null
@@ -1 +0,0 @@
-Reworded virtual environment guide to make it sound less scary.
diff --git a/changelog.d/2921.enhance.rst b/changelog.d/2921.enhance.rst
deleted file mode 100644
index 7d372cf29..000000000
--- a/changelog.d/2921.enhance.rst
+++ /dev/null
@@ -1 +0,0 @@
-JSON config files are now stored without indentation, this is to reduce file size and increase performance of write operations.
diff --git a/changelog.d/2923.bugfix.rst b/changelog.d/2923.bugfix.rst
deleted file mode 100644
index 7be210ff8..000000000
--- a/changelog.d/2923.bugfix.rst
+++ /dev/null
@@ -1 +0,0 @@
-Check the recipient balance before transferring and stop transfer if will go above the maximum allowed balance.
\ No newline at end of file
diff --git a/changelog.d/2924.misc.rst b/changelog.d/2924.misc.rst
deleted file mode 100644
index bbfa22c17..000000000
--- a/changelog.d/2924.misc.rst
+++ /dev/null
@@ -1 +0,0 @@
-Fixed Requires docs inconsistencies
diff --git a/changelog.d/2926.breaking.rst b/changelog.d/2926.breaking.rst
deleted file mode 100644
index ea6ed30a8..000000000
--- a/changelog.d/2926.breaking.rst
+++ /dev/null
@@ -1 +0,0 @@
-Removed :cons:`bank.MAX_BALANCE`, use :meth:`bank.get_max_balance()` from now.
\ No newline at end of file
diff --git a/changelog.d/2926.feature.rst b/changelog.d/2926.feature.rst
deleted file mode 100644
index c68f48d5e..000000000
--- a/changelog.d/2926.feature.rst
+++ /dev/null
@@ -1 +0,0 @@
-`[p]bankset maxbal` can be used to set the maximum bank balance.
diff --git a/changelog.d/2928.removal.rst b/changelog.d/2928.removal.rst
deleted file mode 100644
index 1a4bbee23..000000000
--- a/changelog.d/2928.removal.rst
+++ /dev/null
@@ -1 +0,0 @@
-The ``set owner`` and ``set token`` commands have been removed in favor of managing server side.
\ No newline at end of file
diff --git a/changelog.d/2939.misc.1.rst b/changelog.d/2939.misc.1.rst
deleted file mode 100644
index 1fd5f21b4..000000000
--- a/changelog.d/2939.misc.1.rst
+++ /dev/null
@@ -1 +0,0 @@
-Updated dependencies, most notably PyYAML, tqdm, uvloop and pymongo.
diff --git a/changelog.d/2939.misc.2.rst b/changelog.d/2939.misc.2.rst
deleted file mode 100644
index b67b15a5e..000000000
--- a/changelog.d/2939.misc.2.rst
+++ /dev/null
@@ -1 +0,0 @@
-Setting the ``PYTHON`` env var whilst running ``make`` now allows you to specify which python executable to use.
diff --git a/changelog.d/2941.misc.rst b/changelog.d/2941.misc.rst
deleted file mode 100644
index 0b2b4bf95..000000000
--- a/changelog.d/2941.misc.rst
+++ /dev/null
@@ -1 +0,0 @@
-Add `pip-wheel-metadata` folder to `.gitignore` file - pip creates it when installing Red in venv
\ No newline at end of file
diff --git a/changelog.d/2948.bugfix.rst b/changelog.d/2948.bugfix.rst
deleted file mode 100644
index aeee92878..000000000
--- a/changelog.d/2948.bugfix.rst
+++ /dev/null
@@ -1 +0,0 @@
-The [p]invite command no longer errors when a user has the bot blocked or DMs disabled in the server.
diff --git a/changelog.d/2949.misc.rst b/changelog.d/2949.misc.rst
deleted file mode 100644
index b65940dd1..000000000
--- a/changelog.d/2949.misc.rst
+++ /dev/null
@@ -1 +0,0 @@
-Renamed two changelog files from fix to bugfix.
diff --git a/changelog.d/2953.misc.rst b/changelog.d/2953.misc.rst
deleted file mode 100644
index b30f69e77..000000000
--- a/changelog.d/2953.misc.rst
+++ /dev/null
@@ -1 +0,0 @@
-Fixed a typo in CONTRIBUTING.md.
diff --git a/changelog.d/2954.bugfix.rst b/changelog.d/2954.bugfix.rst
deleted file mode 100644
index e5e1c53cc..000000000
--- a/changelog.d/2954.bugfix.rst
+++ /dev/null
@@ -1 +0,0 @@
-Stop using `:` character in backup's filename - Windows doesn't accept it
\ No newline at end of file
diff --git a/changelog.d/2955.bugfix.rst b/changelog.d/2955.bugfix.rst
deleted file mode 100644
index 3ca92fad8..000000000
--- a/changelog.d/2955.bugfix.rst
+++ /dev/null
@@ -1 +0,0 @@
-``redbot-setup delete`` no longer errors about "unexpected keyword argument"
\ No newline at end of file
diff --git a/changelog.d/2956.bugfix.rst b/changelog.d/2956.bugfix.rst
deleted file mode 100644
index 8f5bbca45..000000000
--- a/changelog.d/2956.bugfix.rst
+++ /dev/null
@@ -1 +0,0 @@
-``redbot-setup delete`` no longer prompts about backup when user passes ``--no-prompt`` option
\ No newline at end of file
diff --git a/changelog.d/2958.enhance.1.rst b/changelog.d/2958.enhance.1.rst
deleted file mode 100644
index 876a29529..000000000
--- a/changelog.d/2958.enhance.1.rst
+++ /dev/null
@@ -1 +0,0 @@
-``--[no-]backup``, ``--[no-]drop-db`` and ``--[no-]remove-datapath`` in ``redbot-setup delete`` command are now on/off flags.
\ No newline at end of file
diff --git a/changelog.d/2958.enhance.2.rst b/changelog.d/2958.enhance.2.rst
deleted file mode 100644
index f4bba69a8..000000000
--- a/changelog.d/2958.enhance.2.rst
+++ /dev/null
@@ -1 +0,0 @@
-Confirmation prompts in ``redbot-setup`` now have default values for user convenience.
\ No newline at end of file
diff --git a/changelog.d/2962.enhance.rst b/changelog.d/2962.enhance.rst
deleted file mode 100644
index 1323dd867..000000000
--- a/changelog.d/2962.enhance.rst
+++ /dev/null
@@ -1 +0,0 @@
-```redbot-setup delete`` now has the option to leave Red's data untouched on database backends.
diff --git a/changelog.d/2963.bugfix.rst b/changelog.d/2963.bugfix.rst
deleted file mode 100644
index a6fe397e2..000000000
--- a/changelog.d/2963.bugfix.rst
+++ /dev/null
@@ -1 +0,0 @@
-[Core] Inviteset public and perms help string cleanup
\ No newline at end of file
diff --git a/changelog.d/2966.bugfix.rst b/changelog.d/2966.bugfix.rst
deleted file mode 100644
index b615eace2..000000000
--- a/changelog.d/2966.bugfix.rst
+++ /dev/null
@@ -1 +0,0 @@
-Make embedset user only affect DM's
diff --git a/changelog.d/2967.breaking.rst b/changelog.d/2967.breaking.rst
deleted file mode 100644
index cc66095a7..000000000
--- a/changelog.d/2967.breaking.rst
+++ /dev/null
@@ -1,11 +0,0 @@
-The main bot config is no longer directly accessible to cogs. New methods have been added for use where this is concerned.
-New methods for this include
-
- - ``bot.get_shared_api_tokens``
- - ``bot.set_shared_api_tokens``
- - ``bot.get_embed_color``
- - ``bot.get_embed_colour``
- - ``bot.get_admin_roles``
- - ``bot.get_admin_role_ids``
- - ``bot.get_mod_roles``
- - ``bot.get_mod_role_ids``
diff --git a/changelog.d/2968.bugfix.rst b/changelog.d/2968.bugfix.rst
deleted file mode 100644
index 5f6065eb2..000000000
--- a/changelog.d/2968.bugfix.rst
+++ /dev/null
@@ -1 +0,0 @@
-Give friendly error when provided instance name doesn't exist.
diff --git a/changelog.d/2973.breaking.rst b/changelog.d/2973.breaking.rst
deleted file mode 100644
index 8a36fcc1f..000000000
--- a/changelog.d/2973.breaking.rst
+++ /dev/null
@@ -1 +0,0 @@
-Reserves some command names for internal Red use. These are available programatically as ``redbot.core.commands.RESERVED_COMMAND_NAMES``
\ No newline at end of file
diff --git a/changelog.d/2974.bugfix.rst b/changelog.d/2974.bugfix.rst
deleted file mode 100644
index 65a856a64..000000000
--- a/changelog.d/2974.bugfix.rst
+++ /dev/null
@@ -1 +0,0 @@
-Fixed the help text and response of `[p]set usebotcolor` to accurately reflect what the command is doing.
diff --git a/changelog.d/2976.breaking.rst b/changelog.d/2976.breaking.rst
deleted file mode 100644
index 4f87f3b38..000000000
--- a/changelog.d/2976.breaking.rst
+++ /dev/null
@@ -1 +0,0 @@
-Removes bot._counter, Makes a few more attrs private (cog_mgr, main_dir)
\ No newline at end of file
diff --git a/changelog.d/2976.feature.rst b/changelog.d/2976.feature.rst
deleted file mode 100644
index c5f76df18..000000000
--- a/changelog.d/2976.feature.rst
+++ /dev/null
@@ -1,6 +0,0 @@
-adds a few methods and classes replacing direct config access (which is no longer supported)
-
- - ``redbot.core.Red.allowed_by_whitelist_blacklist``
- - ``redbot.core.Red.get_valid_prefixes``
- - ``redbot.core.Red.clear_shared_api_tokens``
- - ``redbot.core.commands.help.HelpSettings``
\ No newline at end of file
diff --git a/changelog.d/2985.bugfix.rst b/changelog.d/2985.bugfix.rst
deleted file mode 100644
index cb9ee2653..000000000
--- a/changelog.d/2985.bugfix.rst
+++ /dev/null
@@ -1 +0,0 @@
-Bot no longer types infinitely when command with cooldown is called within last second of cooldown.
\ No newline at end of file
diff --git a/changelog.d/2986.docs.rst b/changelog.d/2986.docs.rst
deleted file mode 100644
index 2809601e0..000000000
--- a/changelog.d/2986.docs.rst
+++ /dev/null
@@ -1 +0,0 @@
-Added more information about ``redbot.core.utils.humanize_timedelta`` into the docs
\ No newline at end of file
diff --git a/changelog.d/2986.misc.rst b/changelog.d/2986.misc.rst
deleted file mode 100644
index 7a1d0ad33..000000000
--- a/changelog.d/2986.misc.rst
+++ /dev/null
@@ -1 +0,0 @@
-Updated the typing of ``redbot.core.utils.humanize_timedelta`` to be more accurate.
\ No newline at end of file
diff --git a/changelog.d/2995.docs.rst b/changelog.d/2995.docs.rst
deleted file mode 100644
index 2a6f9f498..000000000
--- a/changelog.d/2995.docs.rst
+++ /dev/null
@@ -1 +0,0 @@
-Add direct link to "Installing Red" section in "Installing using powershell and chocolatey"
diff --git a/changelog.d/2997.misc.rst b/changelog.d/2997.misc.rst
deleted file mode 100644
index f2c131261..000000000
--- a/changelog.d/2997.misc.rst
+++ /dev/null
@@ -1 +0,0 @@
-Fixed a crash seen when calling economy commands in DM with a global bank.
\ No newline at end of file
diff --git a/changelog.d/2998.docs.rst b/changelog.d/2998.docs.rst
deleted file mode 100644
index 943d1db01..000000000
--- a/changelog.d/2998.docs.rst
+++ /dev/null
@@ -1 +0,0 @@
-Update Git PATH install (Windows), capitalise some words, don't mention to launcher
\ No newline at end of file
diff --git a/changelog.d/3002.bugfix.rst b/changelog.d/3002.bugfix.rst
deleted file mode 100644
index bf19c1b76..000000000
--- a/changelog.d/3002.bugfix.rst
+++ /dev/null
@@ -1 +0,0 @@
-remove f-string usage in launcher to prevent our error handling from cauing an error.
\ No newline at end of file
diff --git a/changelog.d/3004.bugfix.rst b/changelog.d/3004.bugfix.rst
deleted file mode 100644
index 05e31452f..000000000
--- a/changelog.d/3004.bugfix.rst
+++ /dev/null
@@ -1 +0,0 @@
-Fixed MessagePredicate.greater and MessagePredicate.less allowing any valid int instead of only valid ints/floats that are greater/less than the given value.
diff --git a/changelog.d/3005.docs.rst b/changelog.d/3005.docs.rst
deleted file mode 100644
index e08a0706d..000000000
--- a/changelog.d/3005.docs.rst
+++ /dev/null
@@ -1 +0,0 @@
-Adds autostart documentation for Red users who installed it inside a virtual environment.
diff --git a/changelog.d/3008.bugfix.rst b/changelog.d/3008.bugfix.rst
deleted file mode 100644
index 2df20bfaf..000000000
--- a/changelog.d/3008.bugfix.rst
+++ /dev/null
@@ -1 +0,0 @@
-Uptime command works with uptimes of under a second
\ No newline at end of file
diff --git a/changelog.d/3008.misc.rst b/changelog.d/3008.misc.rst
deleted file mode 100644
index 3f99a7ca0..000000000
--- a/changelog.d/3008.misc.rst
+++ /dev/null
@@ -1 +0,0 @@
-update some UI to include copyright
\ No newline at end of file
diff --git a/changelog.d/3010.bugfix.rst b/changelog.d/3010.bugfix.rst
deleted file mode 100644
index 7d36a7521..000000000
--- a/changelog.d/3010.bugfix.rst
+++ /dev/null
@@ -1 +0,0 @@
-Add quotation marks to helpset tagline's response so two consecutive full stops don't appear
\ No newline at end of file
diff --git a/changelog.d/3014.bugfix.rst b/changelog.d/3014.bugfix.rst
deleted file mode 100644
index 5014a8b49..000000000
--- a/changelog.d/3014.bugfix.rst
+++ /dev/null
@@ -1 +0,0 @@
-Fixes an issue with clearing rules in permissions
\ No newline at end of file
diff --git a/changelog.d/3017.misc.rst b/changelog.d/3017.misc.rst
deleted file mode 100644
index 545326eaa..000000000
--- a/changelog.d/3017.misc.rst
+++ /dev/null
@@ -1 +0,0 @@
-fixes a missing await from #2976
\ No newline at end of file
diff --git a/changelog.d/3021.docs.rst b/changelog.d/3021.docs.rst
deleted file mode 100644
index dfef4c45c..000000000
--- a/changelog.d/3021.docs.rst
+++ /dev/null
@@ -1 +0,0 @@
-Update Cog Creation guide with a note regarding the Develop version as well as folder layout for local cogs
diff --git a/changelog.d/3024.bugfix.rst b/changelog.d/3024.bugfix.rst
deleted file mode 100644
index 4a768cf57..000000000
--- a/changelog.d/3024.bugfix.rst
+++ /dev/null
@@ -1 +0,0 @@
-cog install will no longer error if a cog creator has an empty install message
diff --git a/changelog.d/3025.enhance.rst b/changelog.d/3025.enhance.rst
deleted file mode 100644
index 327be122c..000000000
--- a/changelog.d/3025.enhance.rst
+++ /dev/null
@@ -1 +0,0 @@
-Link to Getting started guide at the end of installation guides.
\ No newline at end of file
diff --git a/changelog.d/3033.bugfix.rst b/changelog.d/3033.bugfix.rst
deleted file mode 100644
index e272b2e7a..000000000
--- a/changelog.d/3033.bugfix.rst
+++ /dev/null
@@ -1 +0,0 @@
-Lavalink will now be restarted after unexpected shutdown.
\ No newline at end of file
diff --git a/changelog.d/3036.bugfix.rst b/changelog.d/3036.bugfix.rst
deleted file mode 100644
index 29fc8ae1d..000000000
--- a/changelog.d/3036.bugfix.rst
+++ /dev/null
@@ -1 +0,0 @@
-Add 3rd-party lib folder to ``sys.path`` before loading cogs. This prevents issues with 3rd-party cogs failing to load without loaded Downloader due to unavailable requirements.
\ No newline at end of file
diff --git a/changelog.d/3045.enhance.rst b/changelog.d/3045.enhance.rst
deleted file mode 100644
index 65bc0182f..000000000
--- a/changelog.d/3045.enhance.rst
+++ /dev/null
@@ -1 +0,0 @@
-Bot now handles more things prior to connecting to discord to reduce issues with initial load
\ No newline at end of file
diff --git a/changelog.d/3052.enhance.rst b/changelog.d/3052.enhance.rst
deleted file mode 100644
index 76366d55f..000000000
--- a/changelog.d/3052.enhance.rst
+++ /dev/null
@@ -1 +0,0 @@
-``bot.send_filtered`` now returns the message that is sent.
diff --git a/changelog.d/3053.docs.1.rst b/changelog.d/3053.docs.1.rst
deleted file mode 100644
index c17689fc9..000000000
--- a/changelog.d/3053.docs.1.rst
+++ /dev/null
@@ -1 +0,0 @@
-Discord.py docs links will now always use docs for currently used version of discord.py.
\ No newline at end of file
diff --git a/changelog.d/3053.docs.2.rst b/changelog.d/3053.docs.2.rst
deleted file mode 100644
index fa5f06b26..000000000
--- a/changelog.d/3053.docs.2.rst
+++ /dev/null
@@ -1 +0,0 @@
-Add ``|DPY_VERSION|`` substitution that will automatically get replaced by current discord.py version.
\ No newline at end of file
diff --git a/changelog.d/3054.docs.rst b/changelog.d/3054.docs.rst
deleted file mode 100644
index 78945ca0a..000000000
--- a/changelog.d/3054.docs.rst
+++ /dev/null
@@ -1 +0,0 @@
-Add missing descriptions for function returns.
\ No newline at end of file
diff --git a/changelog.d/3057.bugfix.rst b/changelog.d/3057.bugfix.rst
deleted file mode 100644
index da388eeac..000000000
--- a/changelog.d/3057.bugfix.rst
+++ /dev/null
@@ -1 +0,0 @@
-Bot will now properly send a message when the invoked command is guild-only.
\ No newline at end of file
diff --git a/changelog.d/3057.enhance.rst b/changelog.d/3057.enhance.rst
deleted file mode 100644
index 01748722e..000000000
--- a/changelog.d/3057.enhance.rst
+++ /dev/null
@@ -1 +0,0 @@
-Bot will now send a message when the invoked command is DM-only.
\ No newline at end of file
diff --git a/changelog.d/3060.enhance.rst b/changelog.d/3060.enhance.rst
deleted file mode 100644
index c3716ebed..000000000
--- a/changelog.d/3060.enhance.rst
+++ /dev/null
@@ -1 +0,0 @@
-All ``y/n`` confirmations in cli commands are now unified.
\ No newline at end of file
diff --git a/changelog.d/3060.feature.rst b/changelog.d/3060.feature.rst
deleted file mode 100644
index 1bee12c0d..000000000
--- a/changelog.d/3060.feature.rst
+++ /dev/null
@@ -1 +0,0 @@
-Added ``redbot --edit`` cli flag that can be used to edit instance name, token, owner and datapath.
\ No newline at end of file
diff --git a/changelog.d/3060.fix.rst b/changelog.d/3060.fix.rst
deleted file mode 100644
index 8a1858999..000000000
--- a/changelog.d/3060.fix.rst
+++ /dev/null
@@ -1 +0,0 @@
-Arguments ``--co-owner`` and ``--load-cogs`` now properly require at least one argument to be passed.
\ No newline at end of file
diff --git a/changelog.d/3062.bugfix.rst b/changelog.d/3062.bugfix.rst
deleted file mode 100644
index 5b4147525..000000000
--- a/changelog.d/3062.bugfix.rst
+++ /dev/null
@@ -1 +0,0 @@
-Always append 3rd-party lib folder to the end of ``sys.path`` to avoid shadowing Red's dependencies.
\ No newline at end of file
diff --git a/changelog.d/3069.fix.rst b/changelog.d/3069.fix.rst
deleted file mode 100644
index bbe3572f3..000000000
--- a/changelog.d/3069.fix.rst
+++ /dev/null
@@ -1 +0,0 @@
-Discord.py is updated to 1.2.4 to handle a critical issue with voice connections
diff --git a/changelog.d/3073.breaking.rst b/changelog.d/3073.breaking.rst
deleted file mode 100644
index d12ae4859..000000000
--- a/changelog.d/3073.breaking.rst
+++ /dev/null
@@ -1 +0,0 @@
-``bot.wait_until_ready`` should no longer be used during extension setup
\ No newline at end of file
diff --git a/changelog.d/3079.docs.rst b/changelog.d/3079.docs.rst
deleted file mode 100644
index 36c4166e7..000000000
--- a/changelog.d/3079.docs.rst
+++ /dev/null
@@ -1 +0,0 @@
-Word using dev during install more strongly, to try to avoid end users using dev.
diff --git a/changelog.d/3082.docs.rst b/changelog.d/3082.docs.rst
deleted file mode 100644
index 366ad4ce5..000000000
--- a/changelog.d/3082.docs.rst
+++ /dev/null
@@ -1 +0,0 @@
-Do not overwrite the docs/prolog.txt file in conf.py.
\ No newline at end of file
diff --git a/changelog.d/3083.docs.rst b/changelog.d/3083.docs.rst
deleted file mode 100644
index 7860990c1..000000000
--- a/changelog.d/3083.docs.rst
+++ /dev/null
@@ -1 +0,0 @@
-Fix some typos and wording, add MS Azure to host list
\ No newline at end of file
diff --git a/changelog.d/3090.feature.rst b/changelog.d/3090.feature.rst
deleted file mode 100644
index ca19a6c6d..000000000
--- a/changelog.d/3090.feature.rst
+++ /dev/null
@@ -1 +0,0 @@
-adds a licenseinfo command
\ No newline at end of file
diff --git a/changelog.d/3099.breaking.rst b/changelog.d/3099.breaking.rst
deleted file mode 100644
index 80a92bf70..000000000
--- a/changelog.d/3099.breaking.rst
+++ /dev/null
@@ -1 +0,0 @@
-Removes the mongo driver.
\ No newline at end of file
diff --git a/changelog.d/3100.bugfix.rst b/changelog.d/3100.bugfix.rst
deleted file mode 100644
index 53e3797b4..000000000
--- a/changelog.d/3100.bugfix.rst
+++ /dev/null
@@ -1 +0,0 @@
-fix ``is_automod_immune`` handling of guild check and support for checking webhooks
diff --git a/changelog.d/3105.docs.rst b/changelog.d/3105.docs.rst
deleted file mode 100644
index b0882fbca..000000000
--- a/changelog.d/3105.docs.rst
+++ /dev/null
@@ -1 +0,0 @@
-Update docs footer copyright to 2019.
diff --git a/changelog.d/3110.docs.rst b/changelog.d/3110.docs.rst
deleted file mode 100644
index 676ce6461..000000000
--- a/changelog.d/3110.docs.rst
+++ /dev/null
@@ -1 +0,0 @@
-Update apikey framework documentation. Change bot.get_shared_api_keys() to bot.get_shared_api_tokens().
\ No newline at end of file
diff --git a/changelog.d/3118.feature.rst b/changelog.d/3118.feature.rst
deleted file mode 100644
index dab83632a..000000000
--- a/changelog.d/3118.feature.rst
+++ /dev/null
@@ -1 +0,0 @@
-Adds a command to list disabled commands globally or per guild.
diff --git a/changelog.d/3121.enhance.rst b/changelog.d/3121.enhance.rst
deleted file mode 100644
index ee92455a5..000000000
--- a/changelog.d/3121.enhance.rst
+++ /dev/null
@@ -1 +0,0 @@
-Change ``[p]info`` to say "This bot is an..." instead of "This is an..." for clarity.
diff --git a/changelog.d/3124.docs.rst b/changelog.d/3124.docs.rst
deleted file mode 100644
index 3eb9e27a9..000000000
--- a/changelog.d/3124.docs.rst
+++ /dev/null
@@ -1 +0,0 @@
-Add information about ``info.json``'s ``min_python_version`` key in Downloader Framework docs.
\ No newline at end of file
diff --git a/changelog.d/3134.docs.rst b/changelog.d/3134.docs.rst
deleted file mode 100644
index 2b294cb65..000000000
--- a/changelog.d/3134.docs.rst
+++ /dev/null
@@ -1 +0,0 @@
-Add event reference for ``on_red_api_tokens_update`` event in Shared API Keys docs.
\ No newline at end of file
diff --git a/changelog.d/3134.feature.rst b/changelog.d/3134.feature.rst
deleted file mode 100644
index 272a2c0b3..000000000
--- a/changelog.d/3134.feature.rst
+++ /dev/null
@@ -1 +0,0 @@
-New event ``on_red_api_tokens_update`` is now dispatched when shared api keys for the service are updated.
\ No newline at end of file
diff --git a/changelog.d/3172.enhance.rst b/changelog.d/3172.enhance.rst
deleted file mode 100644
index 8838abbed..000000000
--- a/changelog.d/3172.enhance.rst
+++ /dev/null
@@ -1 +0,0 @@
-Clarified that ``[p]backup`` saves the **bot's** data in the help text.
diff --git a/changelog.d/3174.bugfix.rst b/changelog.d/3174.bugfix.rst
deleted file mode 100644
index cd743eefe..000000000
--- a/changelog.d/3174.bugfix.rst
+++ /dev/null
@@ -1 +0,0 @@
-``--owner`` and ``-p`` cli flags now work when added from launcher.
diff --git a/changelog.d/3183.enhance.rst b/changelog.d/3183.enhance.rst
deleted file mode 100644
index 03e8473d2..000000000
--- a/changelog.d/3183.enhance.rst
+++ /dev/null
@@ -1 +0,0 @@
-Add ``redbot --debuginfo`` flag that shows useful information for debugging.
diff --git a/changelog.d/3184.enhance.rst b/changelog.d/3184.enhance.rst
deleted file mode 100644
index b3c488568..000000000
--- a/changelog.d/3184.enhance.rst
+++ /dev/null
@@ -1 +0,0 @@
-Add Python executable field to `[p]debuginfo` command.
diff --git a/changelog.d/3188.docs.rst b/changelog.d/3188.docs.rst
deleted file mode 100644
index 9a9606451..000000000
--- a/changelog.d/3188.docs.rst
+++ /dev/null
@@ -1 +0,0 @@
-update windows docs with up to date dependency instructions
diff --git a/changelog.d/3256.dep.rst b/changelog.d/3256.dep.rst
new file mode 100644
index 000000000..554998fa1
--- /dev/null
+++ b/changelog.d/3256.dep.rst
@@ -0,0 +1 @@
+Use websockets 8.1
diff --git a/changelog.d/3472.enhance.rst b/changelog.d/3472.enhance.rst
new file mode 100644
index 000000000..43dc1fe4d
--- /dev/null
+++ b/changelog.d/3472.enhance.rst
@@ -0,0 +1,4 @@
+Add caching for ignored channels/guilds.
+Add caching for white/blacklist.
+Add consume-rest for white/blacklist commands.
+Allow ignoring channel categories.
\ No newline at end of file
diff --git a/changelog.d/3526.enhance.rst b/changelog.d/3526.enhance.rst
new file mode 100644
index 000000000..15256eb6a
--- /dev/null
+++ b/changelog.d/3526.enhance.rst
@@ -0,0 +1 @@
+Show DeprecationWarning's
diff --git a/changelog.d/admin/3016.enhance.rst b/changelog.d/admin/3016.enhance.rst
deleted file mode 100644
index 66f393299..000000000
--- a/changelog.d/admin/3016.enhance.rst
+++ /dev/null
@@ -1 +0,0 @@
-Add custom issue messages for adding and removing roles, this makes it easier to create translations.
\ No newline at end of file
diff --git a/changelog.d/admin/3166.bugfix.rst b/changelog.d/admin/3166.bugfix.rst
deleted file mode 100644
index 532d4d6d0..000000000
--- a/changelog.d/admin/3166.bugfix.rst
+++ /dev/null
@@ -1 +0,0 @@
-Fixed ``[p]announce`` failing after encountering an error attempting to message the bot owner.
diff --git a/changelog.d/audio/270.feature.rst b/changelog.d/audio/270.feature.rst
deleted file mode 100644
index 8ab87d40f..000000000
--- a/changelog.d/audio/270.feature.rst
+++ /dev/null
@@ -1 +0,0 @@
-Added support for nested folders in the localtrack folder.
\ No newline at end of file
diff --git a/changelog.d/audio/2861.bugfix.1.rst b/changelog.d/audio/2861.bugfix.1.rst
deleted file mode 100644
index 4fe209e39..000000000
--- a/changelog.d/audio/2861.bugfix.1.rst
+++ /dev/null
@@ -1 +0,0 @@
-``[p]playlist remove`` now removes the playlist url if the playlist was created through ``[p]playlist save``.
diff --git a/changelog.d/audio/2861.bugfix.2.rst b/changelog.d/audio/2861.bugfix.2.rst
deleted file mode 100644
index 5a686e790..000000000
--- a/changelog.d/audio/2861.bugfix.2.rst
+++ /dev/null
@@ -1 +0,0 @@
-Users are no longer able to accidentally overwrite existing playlist if a new one with the same name is created/rename.
diff --git a/changelog.d/audio/2861.enhance.1.rst b/changelog.d/audio/2861.enhance.1.rst
deleted file mode 100644
index 22e392132..000000000
--- a/changelog.d/audio/2861.enhance.1.rst
+++ /dev/null
@@ -1 +0,0 @@
-``[p]playlist upload`` will now load playlists generated via ``[p]playlist download`` much faster if the playlist use the new scheme.
diff --git a/changelog.d/audio/2861.enhance.2.rst b/changelog.d/audio/2861.enhance.2.rst
deleted file mode 100644
index bd0810d96..000000000
--- a/changelog.d/audio/2861.enhance.2.rst
+++ /dev/null
@@ -1 +0,0 @@
-``[p]playlist`` commands now can be used by everyone regardless of DJ settings, however it will respect DJ settings when creating/modifying playlist in the server scope.
diff --git a/changelog.d/audio/2861.feature.1.rst b/changelog.d/audio/2861.feature.1.rst
deleted file mode 100644
index b26f4049e..000000000
--- a/changelog.d/audio/2861.feature.1.rst
+++ /dev/null
@@ -1 +0,0 @@
-Playlist are now stored in a dataclass and new APIs were added to interact with them see :module:`redbot.cogs.audio.playlist` for more details.
diff --git a/changelog.d/audio/2861.feature.2.rst b/changelog.d/audio/2861.feature.2.rst
deleted file mode 100644
index 768f22b13..000000000
--- a/changelog.d/audio/2861.feature.2.rst
+++ /dev/null
@@ -1 +0,0 @@
-All Playlist commands now accept optional arguments, use ``[p]help playlist `` for more details.
diff --git a/changelog.d/audio/2861.feature.3.rst b/changelog.d/audio/2861.feature.3.rst
deleted file mode 100644
index d0089f1f2..000000000
--- a/changelog.d/audio/2861.feature.3.rst
+++ /dev/null
@@ -1 +0,0 @@
-``[p]playlist rename`` will now allow users to rename existing playlists.
diff --git a/changelog.d/audio/2861.feature.4.rst b/changelog.d/audio/2861.feature.4.rst
deleted file mode 100644
index 1e79bb342..000000000
--- a/changelog.d/audio/2861.feature.4.rst
+++ /dev/null
@@ -1 +0,0 @@
-``[p]playlist update`` will allow users to update non custom Playlists to the latest available tracks.
diff --git a/changelog.d/audio/2861.feature.5.rst b/changelog.d/audio/2861.feature.5.rst
deleted file mode 100644
index 0ef6b9d1b..000000000
--- a/changelog.d/audio/2861.feature.5.rst
+++ /dev/null
@@ -1,16 +0,0 @@
-There are 3 different scopes of playlist now, to define them use the ``--scope`` argument.
-
- ``Global Playlist``
-
- - These playlists will be available in all servers the bot is in.
- - These can be managed by the Bot Owner only.
-
- ``Server Playlist``
-
- - These playlists will only be available in the server they were created in.
- - These can be managed by the Bot Owner, Guild Owner, Mods, Admins, DJs and creator (if DJ role is disabled).
-
- ``User Playlist``
-
- - These playlists will be available in all servers both the bot and the creator are in.
- - These can be managed by the Bot Owner and Creator only.
\ No newline at end of file
diff --git a/changelog.d/audio/2861.misc.1.rst b/changelog.d/audio/2861.misc.1.rst
deleted file mode 100644
index f0956ddb6..000000000
--- a/changelog.d/audio/2861.misc.1.rst
+++ /dev/null
@@ -1 +0,0 @@
-:class:`ArgParserFailure` was added to :class:`redbot.core.commands.errors` to allow user friendly errors from ArgParser Converters.
diff --git a/changelog.d/audio/2861.misc.2.rst b/changelog.d/audio/2861.misc.2.rst
deleted file mode 100644
index f06aadea7..000000000
--- a/changelog.d/audio/2861.misc.2.rst
+++ /dev/null
@@ -1 +0,0 @@
-Automatic handling of :class:`redbot.core.commands.errors.ArgParserFailure` on :meth:`Cog.on_command_error`.
\ No newline at end of file
diff --git a/changelog.d/audio/2861.misc.3.rst b/changelog.d/audio/2861.misc.3.rst
deleted file mode 100644
index fe1653d55..000000000
--- a/changelog.d/audio/2861.misc.3.rst
+++ /dev/null
@@ -1 +0,0 @@
-Playlists are now stored in 3 different scopes ``GLOBALPLAYLIST``, ``GUILDPLAYLIST``, ``USERPLAYLIST``.
diff --git a/changelog.d/audio/2861.misc.4.rst b/changelog.d/audio/2861.misc.4.rst
deleted file mode 100644
index 563d7245b..000000000
--- a/changelog.d/audio/2861.misc.4.rst
+++ /dev/null
@@ -1 +0,0 @@
-:class:`ScopeParser` is used to parse optional arguments for all playlist commands.
\ No newline at end of file
diff --git a/changelog.d/audio/2861.misc.5.rst b/changelog.d/audio/2861.misc.5.rst
deleted file mode 100644
index 73ff90b55..000000000
--- a/changelog.d/audio/2861.misc.5.rst
+++ /dev/null
@@ -1 +0,0 @@
-:method:`Audio.can_manage_playlist` is now used to check users permissions when managing playlists.
diff --git a/changelog.d/audio/2861.misc.6.rst b/changelog.d/audio/2861.misc.6.rst
deleted file mode 100644
index 5469346e1..000000000
--- a/changelog.d/audio/2861.misc.6.rst
+++ /dev/null
@@ -1 +0,0 @@
-:meth:`Audio._migrate_config` will automatically migrate old schema playlist to the new schema.
diff --git a/changelog.d/audio/2890.enhance.1.rst b/changelog.d/audio/2890.enhance.1.rst
deleted file mode 100644
index 55fa674a1..000000000
--- a/changelog.d/audio/2890.enhance.1.rst
+++ /dev/null
@@ -1 +0,0 @@
-Spotify, Youtube Data and Lavalink API calls can be cached to avoid repeated calls in the future, see ``[p]audioset cache``.
\ No newline at end of file
diff --git a/changelog.d/audio/2890.enhance.2.rst b/changelog.d/audio/2890.enhance.2.rst
deleted file mode 100644
index 0af2598a9..000000000
--- a/changelog.d/audio/2890.enhance.2.rst
+++ /dev/null
@@ -1 +0,0 @@
-Playlist will now start playing as soon as first track is loaded.
diff --git a/changelog.d/audio/2890.misc.1.rst b/changelog.d/audio/2890.misc.1.rst
deleted file mode 100644
index 2a31df96c..000000000
--- a/changelog.d/audio/2890.misc.1.rst
+++ /dev/null
@@ -1 +0,0 @@
-Spotify and Youtube API functions have been moved to :module:`redbot.cogs.audio.api` under :class:`SpotifyAPI` and :class:`YouTubeAPI`.
\ No newline at end of file
diff --git a/changelog.d/audio/2890.misc.2.rst b/changelog.d/audio/2890.misc.2.rst
deleted file mode 100644
index 326a1328b..000000000
--- a/changelog.d/audio/2890.misc.2.rst
+++ /dev/null
@@ -1 +0,0 @@
-:class:`MusicCache` now handles the Spotify, Youtube Data and Lavalink API calls, this queries the cache first before making API calls.
diff --git a/changelog.d/audio/2890.misc.3.rst b/changelog.d/audio/2890.misc.3.rst
deleted file mode 100644
index 2d45531fd..000000000
--- a/changelog.d/audio/2890.misc.3.rst
+++ /dev/null
@@ -1 +0,0 @@
-Due to playlist loading order changes users are unable to load tracks while a playlist is currently loading.
\ No newline at end of file
diff --git a/changelog.d/audio/2904.bugfix.1.rst b/changelog.d/audio/2904.bugfix.1.rst
deleted file mode 100644
index 74ec8775f..000000000
--- a/changelog.d/audio/2904.bugfix.1.rst
+++ /dev/null
@@ -1 +0,0 @@
-``[p]audioset settings`` no longer shows lavalink JAR version.
diff --git a/changelog.d/audio/2904.bugfix.2.rst b/changelog.d/audio/2904.bugfix.2.rst
deleted file mode 100644
index 20ac7f463..000000000
--- a/changelog.d/audio/2904.bugfix.2.rst
+++ /dev/null
@@ -1 +0,0 @@
-:code:`KeyError: loadType` when trying to play tracks has been fixed.
diff --git a/changelog.d/audio/2904.bugfix.3.rst b/changelog.d/audio/2904.bugfix.3.rst
deleted file mode 100644
index bbea88e92..000000000
--- a/changelog.d/audio/2904.bugfix.3.rst
+++ /dev/null
@@ -1 +0,0 @@
-``[p]audioset settings`` now uses :code:`ctx.is_owner()` to check if context author is the bot owner.
\ No newline at end of file
diff --git a/changelog.d/audio/2904.dep.1.rst b/changelog.d/audio/2904.dep.1.rst
deleted file mode 100644
index a8b0491e2..000000000
--- a/changelog.d/audio/2904.dep.1.rst
+++ /dev/null
@@ -1 +0,0 @@
-New dependency: ``databases[sqlite]`` .
\ No newline at end of file
diff --git a/changelog.d/audio/2904.dep.2.rst b/changelog.d/audio/2904.dep.2.rst
deleted file mode 100644
index dbf929184..000000000
--- a/changelog.d/audio/2904.dep.2.rst
+++ /dev/null
@@ -1 +0,0 @@
-``Red-Lavalink`` bumped to version 0.4.0.
\ No newline at end of file
diff --git a/changelog.d/audio/2904.enhance.1.rst b/changelog.d/audio/2904.enhance.1.rst
deleted file mode 100644
index 484991fa5..000000000
--- a/changelog.d/audio/2904.enhance.1.rst
+++ /dev/null
@@ -1,2 +0,0 @@
-``[p]audioset localpath`` can set a path anywhere in your machine now.
- - Note: This path needs to be visible by :code:`Lavalink.jar`.
\ No newline at end of file
diff --git a/changelog.d/audio/2904.enhance.2.rst b/changelog.d/audio/2904.enhance.2.rst
deleted file mode 100644
index 377bc911f..000000000
--- a/changelog.d/audio/2904.enhance.2.rst
+++ /dev/null
@@ -1 +0,0 @@
-``[p]queue`` now works where there are no tracks in the queue (it shows the current track playing).
\ No newline at end of file
diff --git a/changelog.d/audio/2904.enhance.3.rst b/changelog.d/audio/2904.enhance.3.rst
deleted file mode 100644
index 25e24feef..000000000
--- a/changelog.d/audio/2904.enhance.3.rst
+++ /dev/null
@@ -1 +0,0 @@
-``[p]audioset settings`` now reports lavalink lib version.
diff --git a/changelog.d/audio/2904.enhance.4.rst b/changelog.d/audio/2904.enhance.4.rst
deleted file mode 100644
index 05478b075..000000000
--- a/changelog.d/audio/2904.enhance.4.rst
+++ /dev/null
@@ -1 +0,0 @@
-Adding and removing reactions in Audio is no longer a blocking action.
\ No newline at end of file
diff --git a/changelog.d/audio/2904.enhance.5.rst b/changelog.d/audio/2904.enhance.5.rst
deleted file mode 100644
index 03362ff9e..000000000
--- a/changelog.d/audio/2904.enhance.5.rst
+++ /dev/null
@@ -1 +0,0 @@
-When shuffle is on queue now shows correct play order.
\ No newline at end of file
diff --git a/changelog.d/audio/2904.enhance.6.rst b/changelog.d/audio/2904.enhance.6.rst
deleted file mode 100644
index d0d48557c..000000000
--- a/changelog.d/audio/2904.enhance.6.rst
+++ /dev/null
@@ -1 +0,0 @@
-``[p]seek`` and ``[p]skip`` can be used by user if they are the song requester while DJ mode is enabled, if votes are disabled.
\ No newline at end of file
diff --git a/changelog.d/audio/2904.enhance.7.rst b/changelog.d/audio/2904.enhance.7.rst
deleted file mode 100644
index ac882211d..000000000
--- a/changelog.d/audio/2904.enhance.7.rst
+++ /dev/null
@@ -1 +0,0 @@
-Adding a playlist and album to a saved playlist skips tracks already in the playlist.
\ No newline at end of file
diff --git a/changelog.d/audio/2904.enhance.8.rst b/changelog.d/audio/2904.enhance.8.rst
deleted file mode 100644
index a24058949..000000000
--- a/changelog.d/audio/2904.enhance.8.rst
+++ /dev/null
@@ -1 +0,0 @@
-Turn off DJ mode if the DJ role is deleted.
\ No newline at end of file
diff --git a/changelog.d/audio/2904.feature.1.rst b/changelog.d/audio/2904.feature.1.rst
deleted file mode 100644
index fe7641b1b..000000000
--- a/changelog.d/audio/2904.feature.1.rst
+++ /dev/null
@@ -1 +0,0 @@
-``[p]audioset cache`` can be used to set the cache level. **It's off by default**.
\ No newline at end of file
diff --git a/changelog.d/audio/2904.feature.10.rst b/changelog.d/audio/2904.feature.10.rst
deleted file mode 100644
index b68931a33..000000000
--- a/changelog.d/audio/2904.feature.10.rst
+++ /dev/null
@@ -1 +0,0 @@
-``[p]genre`` command can be used to play spotify playlist.
\ No newline at end of file
diff --git a/changelog.d/audio/2904.feature.2.rst b/changelog.d/audio/2904.feature.2.rst
deleted file mode 100644
index c7a40961d..000000000
--- a/changelog.d/audio/2904.feature.2.rst
+++ /dev/null
@@ -1 +0,0 @@
-``[p]audioset cacheage`` can be used to set maximum age of an entry in the cache. **Default is 365 days**.
diff --git a/changelog.d/audio/2904.feature.3.rst b/changelog.d/audio/2904.feature.3.rst
deleted file mode 100644
index 126f416c0..000000000
--- a/changelog.d/audio/2904.feature.3.rst
+++ /dev/null
@@ -1 +0,0 @@
-``[p]audioset autoplay`` can be used to enable auto play once the queue runs out.
diff --git a/changelog.d/audio/2904.feature.4.rst b/changelog.d/audio/2904.feature.4.rst
deleted file mode 100644
index 7a7a20080..000000000
--- a/changelog.d/audio/2904.feature.4.rst
+++ /dev/null
@@ -1,12 +0,0 @@
-New events dispatched by Audio.
-
- - :code:`on_red_audio_track_start(guild: discord.Guild, track: lavalink.Track, requester: discord.Member)`
- - :code:`on_red_audio_track_end(guild: discord.Guild, track: lavalink.Track, requester: discord.Member)`
- - :code:`on_red_audio_track_enqueue(guild: discord.Guild, track: lavalink.Track, requester: discord.Member)`
- - :code:`on_red_audio_track_auto_play(guild: discord.Guild, track: lavalink.Track, requester: discord.Member)`
- - :code:`on_red_audio_queue_end(guild: discord.Guild, track: lavalink.Track, requester: discord.Member)`
- - :code:`on_red_audio_audio_disconnect(guild: discord.Guild)`
- - :code:`on_red_audio_should_auto_play(guild: discord.Guild, channel: discord.VoiceChannel, play: Callable)`
- - :code:`on_red_audio_initialized(audio:Cog)`
- - :code:`on_red_audio_skip_track(guild: discord.Guild, track: lavalink.Track, requester: discord.Member)`
- - :code:`on_red_audio_unload(audio:Cog)`
\ No newline at end of file
diff --git a/changelog.d/audio/2904.feature.5.rst b/changelog.d/audio/2904.feature.5.rst
deleted file mode 100644
index 51209d660..000000000
--- a/changelog.d/audio/2904.feature.5.rst
+++ /dev/null
@@ -1 +0,0 @@
-``[p]queue shuffle`` can be used to shuffle the queue manually.
\ No newline at end of file
diff --git a/changelog.d/audio/2904.feature.6.rst b/changelog.d/audio/2904.feature.6.rst
deleted file mode 100644
index c37957ae4..000000000
--- a/changelog.d/audio/2904.feature.6.rst
+++ /dev/null
@@ -1 +0,0 @@
-``[p]queue clean self`` can be used to remove all songs you requested from the queue.
\ No newline at end of file
diff --git a/changelog.d/audio/2904.feature.7.rst b/changelog.d/audio/2904.feature.7.rst
deleted file mode 100644
index ab1b46e0c..000000000
--- a/changelog.d/audio/2904.feature.7.rst
+++ /dev/null
@@ -1 +0,0 @@
-``[p]audioset restrictions`` can be used to add or remove keywords which songs must have or are not allowed to have.
\ No newline at end of file
diff --git a/changelog.d/audio/2904.feature.8.rst b/changelog.d/audio/2904.feature.8.rst
deleted file mode 100644
index 97202c775..000000000
--- a/changelog.d/audio/2904.feature.8.rst
+++ /dev/null
@@ -1 +0,0 @@
-``[p]playlist dedupe`` can be used to remove duplicated tracks from a playlist.
\ No newline at end of file
diff --git a/changelog.d/audio/2904.feature.9.rst b/changelog.d/audio/2904.feature.9.rst
deleted file mode 100644
index 9ab73f454..000000000
--- a/changelog.d/audio/2904.feature.9.rst
+++ /dev/null
@@ -1 +0,0 @@
-``[p]autoplay`` can be used to play a song.
\ No newline at end of file
diff --git a/changelog.d/audio/2904.misc.1.rst b/changelog.d/audio/2904.misc.1.rst
deleted file mode 100644
index 1676ffd84..000000000
--- a/changelog.d/audio/2904.misc.1.rst
+++ /dev/null
@@ -1 +0,0 @@
-:class:`red.cogs.audio.localpaths.Query` and :class:`red.cogs.audio.localpaths.LocalPath` have been implemented to handle localtracks and queries.
\ No newline at end of file
diff --git a/changelog.d/audio/2905.enhance.rst b/changelog.d/audio/2905.enhance.rst
deleted file mode 100644
index 98ce114c8..000000000
--- a/changelog.d/audio/2905.enhance.rst
+++ /dev/null
@@ -1 +0,0 @@
-Remove commas for explanations about how to set API keys.
diff --git a/changelog.d/audio/3048.bugfix.rst b/changelog.d/audio/3048.bugfix.rst
deleted file mode 100644
index 6a5353584..000000000
--- a/changelog.d/audio/3048.bugfix.rst
+++ /dev/null
@@ -1 +0,0 @@
-Unify capitalisation in ``[p]help playlist``.
diff --git a/changelog.d/audio/3050.bugfix.rst b/changelog.d/audio/3050.bugfix.rst
deleted file mode 100644
index 79a5b8e67..000000000
--- a/changelog.d/audio/3050.bugfix.rst
+++ /dev/null
@@ -1 +0,0 @@
-Bot's status is now properly cleared on emptydisconnect.
\ No newline at end of file
diff --git a/changelog.d/audio/3051.enhance.rst b/changelog.d/audio/3051.enhance.rst
deleted file mode 100644
index 9d41828f1..000000000
--- a/changelog.d/audio/3051.enhance.rst
+++ /dev/null
@@ -1 +0,0 @@
-Improved explanation in help string for ``[p]audioset emptydisconnect``.
\ No newline at end of file
diff --git a/changelog.d/audio/3058.enhancement.rst b/changelog.d/audio/3058.enhancement.rst
deleted file mode 100644
index 37981047b..000000000
--- a/changelog.d/audio/3058.enhancement.rst
+++ /dev/null
@@ -1 +0,0 @@
-Add typing indicator to playlist dedupe
\ No newline at end of file
diff --git a/changelog.d/audio/3059.misc.rst b/changelog.d/audio/3059.misc.rst
deleted file mode 100644
index 5988ba3b5..000000000
--- a/changelog.d/audio/3059.misc.rst
+++ /dev/null
@@ -1 +0,0 @@
-Fixes badly formatted track name.
\ No newline at end of file
diff --git a/changelog.d/audio/3065.bugfix.rst b/changelog.d/audio/3065.bugfix.rst
deleted file mode 100644
index cb4825bde..000000000
--- a/changelog.d/audio/3065.bugfix.rst
+++ /dev/null
@@ -1 +0,0 @@
-Correctly reports the import error when an SQL dependency is missing.
\ No newline at end of file
diff --git a/changelog.d/audio/3085.enhance.1.rst b/changelog.d/audio/3085.enhance.1.rst
deleted file mode 100644
index 4106637b2..000000000
--- a/changelog.d/audio/3085.enhance.1.rst
+++ /dev/null
@@ -1 +0,0 @@
-Expose FriendlyExceptions to users on the play command.
diff --git a/changelog.d/audio/3104.misc.1.rst b/changelog.d/audio/3104.misc.1.rst
deleted file mode 100644
index 82855a786..000000000
--- a/changelog.d/audio/3104.misc.1.rst
+++ /dev/null
@@ -1 +0,0 @@
-Fix an issue where some YouTube playlists were being recognised as single tracks.
\ No newline at end of file
diff --git a/changelog.d/audio/3176.misc.1.rst b/changelog.d/audio/3176.misc.1.rst
deleted file mode 100644
index d79fa147d..000000000
--- a/changelog.d/audio/3176.misc.1.rst
+++ /dev/null
@@ -1 +0,0 @@
-Added an early exist to the `while` loop in the autoplay method, this is to that if a service is blacklisted it doesn't infinitely loop causing heartbeats.
\ No newline at end of file
diff --git a/changelog.d/audio/3201.feature.1.rst b/changelog.d/audio/3201.feature.1.rst
new file mode 100644
index 000000000..7c5beb4ca
--- /dev/null
+++ b/changelog.d/audio/3201.feature.1.rst
@@ -0,0 +1 @@
+``[p]remove`` command now accepts an URL or Index, if an URL is used it will remove all tracks in the queue with that URL.
\ No newline at end of file
diff --git a/changelog.d/audio/721.feature.rst b/changelog.d/audio/721.feature.rst
deleted file mode 100644
index ec8ae42a8..000000000
--- a/changelog.d/audio/721.feature.rst
+++ /dev/null
@@ -1 +0,0 @@
-Auto pause queue when room is empty.
\ No newline at end of file
diff --git a/changelog.d/customcom/1767.enhance.rst b/changelog.d/customcom/1767.enhance.rst
deleted file mode 100644
index 003f5a039..000000000
--- a/changelog.d/customcom/1767.enhance.rst
+++ /dev/null
@@ -1 +0,0 @@
-The group command `[p]cc` create can now be used to create simple CCs without specifying "simple".
diff --git a/changelog.d/downloader/1866.enhance.rst b/changelog.d/downloader/1866.enhance.rst
deleted file mode 100644
index 3c75d90ca..000000000
--- a/changelog.d/downloader/1866.enhance.rst
+++ /dev/null
@@ -1 +0,0 @@
-Downloader will now check if Python and bot version match requirements in ``info.json`` during update.
\ No newline at end of file
diff --git a/changelog.d/downloader/2527.docs.rst b/changelog.d/downloader/2527.docs.rst
deleted file mode 100644
index 21e5bc6b9..000000000
--- a/changelog.d/downloader/2527.docs.rst
+++ /dev/null
@@ -1 +0,0 @@
-Added :func:`redbot.cogs.downloader.installable.InstalledModule` to Downloader's framework docs.
\ No newline at end of file
diff --git a/changelog.d/downloader/2527.enhance.1.rst b/changelog.d/downloader/2527.enhance.1.rst
deleted file mode 100644
index 5666bd733..000000000
--- a/changelog.d/downloader/2527.enhance.1.rst
+++ /dev/null
@@ -1 +0,0 @@
-User can now pass multiple cog names to ``[p]cog install``.
\ No newline at end of file
diff --git a/changelog.d/downloader/2527.enhance.2.rst b/changelog.d/downloader/2527.enhance.2.rst
deleted file mode 100644
index 23b990d6d..000000000
--- a/changelog.d/downloader/2527.enhance.2.rst
+++ /dev/null
@@ -1 +0,0 @@
-When passing cogs to ``[p]cog update`` command, it will now only update those cogs, not all cogs from the repo these cogs are from.
\ No newline at end of file
diff --git a/changelog.d/downloader/2527.feature.1.rst b/changelog.d/downloader/2527.feature.1.rst
deleted file mode 100644
index 342b8910e..000000000
--- a/changelog.d/downloader/2527.feature.1.rst
+++ /dev/null
@@ -1 +0,0 @@
-Added ``[p]repo update [repos]`` command that allows you to update repos without updating cogs from them.
\ No newline at end of file
diff --git a/changelog.d/downloader/2527.feature.2.rst b/changelog.d/downloader/2527.feature.2.rst
deleted file mode 100644
index 72a7b7d13..000000000
--- a/changelog.d/downloader/2527.feature.2.rst
+++ /dev/null
@@ -1 +0,0 @@
-Added ``[p]cog installversion `` command that allows you to install cogs from specified revision (commit, tag) of given repo. When using this command, the cog will automatically be pinned.
\ No newline at end of file
diff --git a/changelog.d/downloader/2527.feature.3.rst b/changelog.d/downloader/2527.feature.3.rst
deleted file mode 100644
index b9567b967..000000000
--- a/changelog.d/downloader/2527.feature.3.rst
+++ /dev/null
@@ -1 +0,0 @@
-Added ``[p]cog pin `` and ``[p]cog unpin `` for pinning cogs. Cogs that are pinned will not be updated when using update commands.
\ No newline at end of file
diff --git a/changelog.d/downloader/2527.feature.4.rst b/changelog.d/downloader/2527.feature.4.rst
deleted file mode 100644
index c50b44623..000000000
--- a/changelog.d/downloader/2527.feature.4.rst
+++ /dev/null
@@ -1 +0,0 @@
-Added ``[p]cog checkforupdates`` command that will tell which cogs can be updated (including pinned cog) without updating them.
\ No newline at end of file
diff --git a/changelog.d/downloader/2527.feature.5.rst b/changelog.d/downloader/2527.feature.5.rst
deleted file mode 100644
index dc08620a0..000000000
--- a/changelog.d/downloader/2527.feature.5.rst
+++ /dev/null
@@ -1 +0,0 @@
-Added ``[p]cog updateallfromrepos `` command that will update all cogs from given repos.
\ No newline at end of file
diff --git a/changelog.d/downloader/2527.feature.6.rst b/changelog.d/downloader/2527.feature.6.rst
deleted file mode 100644
index d5eb16a8e..000000000
--- a/changelog.d/downloader/2527.feature.6.rst
+++ /dev/null
@@ -1 +0,0 @@
-Added ``[p]cog updatetoversion [cogs]`` command that updates all cogs or ones of user's choosing to chosen revision of given repo.
\ No newline at end of file
diff --git a/changelog.d/downloader/2527.misc.1.rst b/changelog.d/downloader/2527.misc.1.rst
deleted file mode 100644
index f7c3143f9..000000000
--- a/changelog.d/downloader/2527.misc.1.rst
+++ /dev/null
@@ -1,4 +0,0 @@
-Added :func:`redbot.cogs.downloader.installable.InstalledModule` which is used instead of :func:`redbot.cogs.downloader.installable.Installable` when we refer to installed cog or shared library.
-Therefore:
- - ``to_json`` and ``from_json`` methods were moved from :func:`redbot.cogs.downloader.installable.Installable` to :func:`redbot.cogs.downloader.installable.InstalledModule`
- - return types changed for :func:`redbot.cogs.downloader.converters.InstalledCog.convert`, :func:`redbot.cogs.downloader.downloader.Downloader.installed_cogs`, :func:`redbot.cogs.downloader.repo_manager.Repo.install_cog` to use :func:`redbot.cogs.downloader.installable.InstalledModule`.
\ No newline at end of file
diff --git a/changelog.d/downloader/2571.bugfix.1.rst b/changelog.d/downloader/2571.bugfix.1.rst
deleted file mode 100644
index 342f97e42..000000000
--- a/changelog.d/downloader/2571.bugfix.1.rst
+++ /dev/null
@@ -1 +0,0 @@
-Made regex for repo names use raw string to stop ``DeprecationWarning`` about invalid escape sequence.
\ No newline at end of file
diff --git a/changelog.d/downloader/2571.bugfix.2.rst b/changelog.d/downloader/2571.bugfix.2.rst
deleted file mode 100644
index 74bf663c0..000000000
--- a/changelog.d/downloader/2571.bugfix.2.rst
+++ /dev/null
@@ -1 +0,0 @@
-Downloader will no longer allow to install cog that is already installed.
\ No newline at end of file
diff --git a/changelog.d/downloader/2571.dep.rst b/changelog.d/downloader/2571.dep.rst
deleted file mode 100644
index 34ab16ae6..000000000
--- a/changelog.d/downloader/2571.dep.rst
+++ /dev/null
@@ -1 +0,0 @@
-Added ``pytest-mock`` requirement to ``tests`` extra.
\ No newline at end of file
diff --git a/changelog.d/downloader/2571.enhance.rst b/changelog.d/downloader/2571.enhance.rst
deleted file mode 100644
index bc65a7a84..000000000
--- a/changelog.d/downloader/2571.enhance.rst
+++ /dev/null
@@ -1 +0,0 @@
-Added error messages for failures during installing/reinstalling requirements and copying cogs and shared libraries.
\ No newline at end of file
diff --git a/changelog.d/downloader/2571.misc.rst b/changelog.d/downloader/2571.misc.rst
deleted file mode 100644
index 0acd4199f..000000000
--- a/changelog.d/downloader/2571.misc.rst
+++ /dev/null
@@ -1 +0,0 @@
-Added more Downloader tests for Repo logic and git integration. New git tests use a test repo file that can be generated using new tool at ``tools/edit_testrepo.py``.
\ No newline at end of file
diff --git a/changelog.d/downloader/2827.bugfix.rst b/changelog.d/downloader/2827.bugfix.rst
deleted file mode 100644
index 98c6b940d..000000000
--- a/changelog.d/downloader/2827.bugfix.rst
+++ /dev/null
@@ -1 +0,0 @@
-Repo names can now only contain the characters listed in the help text (A-Z, 0-9, underscores, and hyphens).
diff --git a/changelog.d/downloader/2902.bugfix.rst b/changelog.d/downloader/2902.bugfix.rst
deleted file mode 100644
index 62cbfea63..000000000
--- a/changelog.d/downloader/2902.bugfix.rst
+++ /dev/null
@@ -1 +0,0 @@
-findcog no longer attempts to find a cog for commands without one.
\ No newline at end of file
diff --git a/changelog.d/downloader/2927.bugfix.rst b/changelog.d/downloader/2927.bugfix.rst
deleted file mode 100644
index c79b243e3..000000000
--- a/changelog.d/downloader/2927.bugfix.rst
+++ /dev/null
@@ -1 +0,0 @@
-Downloader will no longer allow to install cog with same name as other that is installed.
\ No newline at end of file
diff --git a/changelog.d/downloader/2936.bugfix.rst b/changelog.d/downloader/2936.bugfix.rst
deleted file mode 100644
index 3e1e5c98f..000000000
--- a/changelog.d/downloader/2936.bugfix.rst
+++ /dev/null
@@ -1 +0,0 @@
-Catch errors if remote repository or branch is deleted, notify user which repository failed and continue updating others.
\ No newline at end of file
diff --git a/changelog.d/downloader/3080.misc.1.rst b/changelog.d/downloader/3080.misc.1.rst
deleted file mode 100644
index 4ce910b55..000000000
--- a/changelog.d/downloader/3080.misc.1.rst
+++ /dev/null
@@ -1 +0,0 @@
-`RepoManager.update_all_repos` replaced by new method `update_repos` which additionally handles failing repositories.
\ No newline at end of file
diff --git a/changelog.d/downloader/3080.misc.2.rst b/changelog.d/downloader/3080.misc.2.rst
deleted file mode 100644
index a01f183b6..000000000
--- a/changelog.d/downloader/3080.misc.2.rst
+++ /dev/null
@@ -1 +0,0 @@
-Added `Downloader.format_failed_repos` for formatting error message of repos failing to update.
\ No newline at end of file
diff --git a/changelog.d/downloader/3129.enhance.rst b/changelog.d/downloader/3129.enhance.rst
deleted file mode 100644
index 21b5b8394..000000000
--- a/changelog.d/downloader/3129.enhance.rst
+++ /dev/null
@@ -1 +0,0 @@
-Use sanitized url (without HTTP Basic Auth fragments) in `[p]findcog` command.
\ No newline at end of file
diff --git a/changelog.d/downloader/3129.misc.rst b/changelog.d/downloader/3129.misc.rst
deleted file mode 100644
index 685ee9daa..000000000
--- a/changelog.d/downloader/3129.misc.rst
+++ /dev/null
@@ -1 +0,0 @@
-Add `clean_url` property to :class:`redbot.cogs.downloader.repo_manager.Repo` which contains sanitized repo URL (without HTTP Basic Auth).
\ No newline at end of file
diff --git a/changelog.d/downloader/3141.bugfix.rst b/changelog.d/downloader/3141.bugfix.rst
deleted file mode 100644
index c329da021..000000000
--- a/changelog.d/downloader/3141.bugfix.rst
+++ /dev/null
@@ -1 +0,0 @@
-Make :attr:`redbot.cogs.downloader.repo_manager.Repo.clean_url` work with relative urls. This property uses `str` type now.
\ No newline at end of file
diff --git a/changelog.d/downloader/3153.bugfix.rst b/changelog.d/downloader/3153.bugfix.rst
deleted file mode 100644
index fd8d74945..000000000
--- a/changelog.d/downloader/3153.bugfix.rst
+++ /dev/null
@@ -1 +0,0 @@
-Fixed an error on repo add from empty string values for the `install_msg` info.json field.
diff --git a/changelog.d/downloader/3159.bugfix.rst b/changelog.d/downloader/3159.bugfix.rst
deleted file mode 100644
index 2177da2ce..000000000
--- a/changelog.d/downloader/3159.bugfix.rst
+++ /dev/null
@@ -1 +0,0 @@
-Disable all git auth prompts when adding/updating repo with Downloader.
\ No newline at end of file
diff --git a/changelog.d/downloader/3160.misc.rst b/changelog.d/downloader/3160.misc.rst
deleted file mode 100644
index 1093dc0ee..000000000
--- a/changelog.d/downloader/3160.misc.rst
+++ /dev/null
@@ -1 +0,0 @@
-Ensure consistent output from git commands for purpose of parsing.
\ No newline at end of file
diff --git a/changelog.d/downloader/3177.bugfix.rst b/changelog.d/downloader/3177.bugfix.rst
deleted file mode 100644
index 462e8d4ca..000000000
--- a/changelog.d/downloader/3177.bugfix.rst
+++ /dev/null
@@ -1 +0,0 @@
-``[p]findcog`` now properly works for cogs with less typical folder structure.
diff --git a/changelog.d/downloader/3179.bugfix.rst b/changelog.d/downloader/3179.bugfix.rst
deleted file mode 100644
index 6739d0dc1..000000000
--- a/changelog.d/downloader/3179.bugfix.rst
+++ /dev/null
@@ -1 +0,0 @@
-``[p]cog uninstall`` now fully unloads cog - bot will not try to load it on next startup.
diff --git a/changelog.d/economy/3438.bugfix.rst b/changelog.d/economy/3438.bugfix.rst
new file mode 100644
index 000000000..6e748956f
--- /dev/null
+++ b/changelog.d/economy/3438.bugfix.rst
@@ -0,0 +1 @@
+Changes next_payday to last_payday. last_payday stores the latest time the command runned successfully, allows the command to dynamicly change with the PAYDAY_TIME variable, by checking if last_payday + PAYDAY_TIME >= current time.
\ No newline at end of file
diff --git a/changelog.d/image/2905.enhance.2.rst b/changelog.d/image/2905.enhance.2.rst
deleted file mode 100644
index f26d2f70c..000000000
--- a/changelog.d/image/2905.enhance.2.rst
+++ /dev/null
@@ -1 +0,0 @@
-Updated the giphycreds command to match the formatting of the other API commands.
diff --git a/changelog.d/image/2905.enhance.rst b/changelog.d/image/2905.enhance.rst
deleted file mode 100644
index 98ce114c8..000000000
--- a/changelog.d/image/2905.enhance.rst
+++ /dev/null
@@ -1 +0,0 @@
-Remove commas for explanations about how to set API keys.
diff --git a/changelog.d/mod/2884.enhance.rst b/changelog.d/mod/2884.enhance.rst
deleted file mode 100644
index 7923dcc5c..000000000
--- a/changelog.d/mod/2884.enhance.rst
+++ /dev/null
@@ -1 +0,0 @@
-Slowmode now accepts integer only inputs as seconds
diff --git a/changelog.d/mod/2897.misc.rst b/changelog.d/mod/2897.misc.rst
deleted file mode 100644
index 47cbdff5e..000000000
--- a/changelog.d/mod/2897.misc.rst
+++ /dev/null
@@ -1 +0,0 @@
-Modlog case registration and modlog event handling was moved to the core bot
\ No newline at end of file
diff --git a/changelog.d/mod/2910.bugfix.rst b/changelog.d/mod/2910.bugfix.rst
deleted file mode 100644
index b27f55dcf..000000000
--- a/changelog.d/mod/2910.bugfix.rst
+++ /dev/null
@@ -1 +0,0 @@
-userinfo doesn't break with absurd numbers of roles.
\ No newline at end of file
diff --git a/changelog.d/mod/2918.bugfix.rst b/changelog.d/mod/2918.bugfix.rst
deleted file mode 100644
index cafa96097..000000000
--- a/changelog.d/mod/2918.bugfix.rst
+++ /dev/null
@@ -1 +0,0 @@
-Fixed Mod cog not recording username changes for ``[p]names`` and ``[p]userinfo`` commands
\ No newline at end of file
diff --git a/changelog.d/mod/2924.fix.rst b/changelog.d/mod/2924.fix.rst
deleted file mode 100644
index 38dce73f7..000000000
--- a/changelog.d/mod/2924.fix.rst
+++ /dev/null
@@ -1 +0,0 @@
-``modset deletedelay`` doesn't delete non-commands.
\ No newline at end of file
diff --git a/changelog.d/mod/2932.bugfix.rst.txt b/changelog.d/mod/2932.bugfix.rst.txt
deleted file mode 100644
index 555c1a375..000000000
--- a/changelog.d/mod/2932.bugfix.rst.txt
+++ /dev/null
@@ -1 +0,0 @@
-Fixed an error when reloading the core mod cog
diff --git a/changelog.d/mod/2993.misc.rst b/changelog.d/mod/2993.misc.rst
deleted file mode 100644
index ebf091f2d..000000000
--- a/changelog.d/mod/2993.misc.rst
+++ /dev/null
@@ -1 +0,0 @@
-More descriptive tempban unban failure logging
\ No newline at end of file
diff --git a/changelog.d/mod/3472.enhance.rst b/changelog.d/mod/3472.enhance.rst
new file mode 100644
index 000000000..87dbf9954
--- /dev/null
+++ b/changelog.d/mod/3472.enhance.rst
@@ -0,0 +1 @@
+Move ignore commands and checks into core.
\ No newline at end of file
diff --git a/changelog.d/mod/3523.bugfix.rst b/changelog.d/mod/3523.bugfix.rst
new file mode 100644
index 000000000..e4bc1d9e2
--- /dev/null
+++ b/changelog.d/mod/3523.bugfix.rst
@@ -0,0 +1,2 @@
+Allow mentions in hackban and ban commands.
+Have the correct lower bound on length of a snowflake for the converter.
\ No newline at end of file
diff --git a/changelog.d/modlog/2945.fix.rst b/changelog.d/modlog/2945.fix.rst
deleted file mode 100644
index a30222b30..000000000
--- a/changelog.d/modlog/2945.fix.rst
+++ /dev/null
@@ -1 +0,0 @@
-Remove potential for additional bad API calls per ban/unban
diff --git a/changelog.d/permissions/2991.enhance.rst b/changelog.d/permissions/2991.enhance.rst
deleted file mode 100644
index efb88ab78..000000000
--- a/changelog.d/permissions/2991.enhance.rst
+++ /dev/null
@@ -1 +0,0 @@
-Clear out usage of commands with ```` argument.
diff --git a/changelog.d/permissions/3037.bugfix.rst b/changelog.d/permissions/3037.bugfix.rst
deleted file mode 100644
index c783beaa1..000000000
--- a/changelog.d/permissions/3037.bugfix.rst
+++ /dev/null
@@ -1 +0,0 @@
-defaults are cleared properly when clearing all rules
\ No newline at end of file
diff --git a/changelog.d/streams/2905.enhance.rst b/changelog.d/streams/2905.enhance.rst
deleted file mode 100644
index 98ce114c8..000000000
--- a/changelog.d/streams/2905.enhance.rst
+++ /dev/null
@@ -1 +0,0 @@
-Remove commas for explanations about how to set API keys.
diff --git a/changelog.d/streams/3237.enhance.rst b/changelog.d/streams/3237.enhance.rst
new file mode 100644
index 000000000..f437043f9
--- /dev/null
+++ b/changelog.d/streams/3237.enhance.rst
@@ -0,0 +1 @@
+Added ``[p]streamset timer`` command, which can be used to control how often the cog checks for livestreams.
\ No newline at end of file
diff --git a/changelog.d/streams/3237.misc.rst b/changelog.d/streams/3237.misc.rst
new file mode 100644
index 000000000..b6c984c03
--- /dev/null
+++ b/changelog.d/streams/3237.misc.rst
@@ -0,0 +1 @@
+Changed the YouTube streams logic to use an RSS instead of the search endpoint, significantly reducing quota usage.
\ No newline at end of file
diff --git a/changelog.d/streams/3487.enhancement.rst b/changelog.d/streams/3487.enhancement.rst
new file mode 100644
index 000000000..ccd5f6d94
--- /dev/null
+++ b/changelog.d/streams/3487.enhancement.rst
@@ -0,0 +1 @@
+Use new Twitch API and Bearer tokens. Escape markdown and mass mentions for "streamer_name is live!" messages, and use humanize_number for every numbers.
\ No newline at end of file
diff --git a/changelog.d/trivia/12.enhance.rst b/changelog.d/trivia/12.enhance.rst
deleted file mode 100644
index 75e88dc5b..000000000
--- a/changelog.d/trivia/12.enhance.rst
+++ /dev/null
@@ -1 +0,0 @@
-Add trivia for Prince and Michael Jackson lyrics
diff --git a/changelog.d/trivia/2909.bugfix.rst b/changelog.d/trivia/2909.bugfix.rst
deleted file mode 100644
index 6451aa3f2..000000000
--- a/changelog.d/trivia/2909.bugfix.rst
+++ /dev/null
@@ -1 +0,0 @@
-Fixes a typo in `Ahsoka Tano`'s name in the starwars trivia
diff --git a/changelog.d/trivia/2911.bugfix.rst b/changelog.d/trivia/2911.bugfix.rst
deleted file mode 100644
index 5ba3eea44..000000000
--- a/changelog.d/trivia/2911.bugfix.rst
+++ /dev/null
@@ -1 +0,0 @@
-Fixes a bug where ``[p]trivia leaderboard`` failed to run.
\ No newline at end of file
diff --git a/changelog.d/trivia/2994.bugfix.rst b/changelog.d/trivia/2994.bugfix.rst
deleted file mode 100644
index e7204b41e..000000000
--- a/changelog.d/trivia/2994.bugfix.rst
+++ /dev/null
@@ -1 +0,0 @@
-Fix typo in the Greek mythology trivia regarding Hermes' staff
diff --git a/changelog.d/trivia/2996.bugfix.rst b/changelog.d/trivia/2996.bugfix.rst
deleted file mode 100644
index 8fd6f76fd..000000000
--- a/changelog.d/trivia/2996.bugfix.rst
+++ /dev/null
@@ -1 +0,0 @@
-Fixed a question in Overwatch accepting blank responses.
diff --git a/changelog.d/warnings/3515.misc.rst b/changelog.d/warnings/3515.misc.rst
new file mode 100644
index 000000000..197ee6641
--- /dev/null
+++ b/changelog.d/warnings/3515.misc.rst
@@ -0,0 +1 @@
+Don't use `inspect.getsource` to check for ``is_owner`` check.
diff --git a/crowdin.yml b/crowdin.yml
index 457cf1ea4..fb1b9d420 100644
--- a/crowdin.yml
+++ b/crowdin.yml
@@ -1,6 +1,7 @@
api_key_env: CROWDIN_API_KEY
project_identifier_env: CROWDIN_PROJECT_ID
base_path: ./redbot/
+preserve_hierarchy: true
files:
- source: cogs/**/messages.pot
translation: /%original_path%/%locale%.po
diff --git a/docs/_templates/layout.html b/docs/_templates/layout.html
new file mode 100644
index 000000000..91fab053e
--- /dev/null
+++ b/docs/_templates/layout.html
@@ -0,0 +1,9 @@
+{% extends '!layout.html' %}
+{% block document %}
+{{ super() }}
+
+
+
+{% endblock %}
\ No newline at end of file
diff --git a/docs/about_venv.rst b/docs/about_venv.rst
new file mode 100644
index 000000000..1b10c0fc0
--- /dev/null
+++ b/docs/about_venv.rst
@@ -0,0 +1,39 @@
+.. _about-venvs:
+
+==========================
+About Virtual Environments
+==========================
+Creating a virtual environment is really easy and usually prevents many common installation
+problems.
+
+**What Are Virtual Environments For?**
+
+Virtual environments allow you to isolate Red's library dependencies, cog dependencies and python
+binaries from the rest of your system. There is no performance overhead to using virtual environment
+and it saves you from a lot of troubles during setup. It also makes sure Red and its dependencies
+are installed to a predictable location which makes uninstalling Red as simple as removing a single folder,
+without worrying about losing your data or other things on your system becoming broken.
+
+
+--------------------------------------------
+Virtual Environments with Multiple Instances
+--------------------------------------------
+If you are running multiple instances of Red on the same machine, you have the option of either
+using the same virtual environment for all of them, or creating separate ones.
+
+.. note::
+
+ This only applies for multiple instances of V3. If you are running a V2 instance as well,
+ you **must** use separate virtual environments.
+
+The advantages of using a *single* virtual environment for all of your V3 instances are:
+
+- When updating Red, you will only need to update it once for all instances (however you will still need to restart all instances for the changes to take effect)
+- It will save space on your hard drive
+
+On the other hand, you may wish to update each of your instances individually.
+
+.. important::
+
+ Windows users with multiple instances should create *separate* virtual environments, as
+ updating multiple running instances at once is likely to cause errors.
diff --git a/docs/autostart_pm2.rst b/docs/autostart_pm2.rst
index b7e28e38d..27300ec3b 100644
--- a/docs/autostart_pm2.rst
+++ b/docs/autostart_pm2.rst
@@ -17,18 +17,20 @@ Start by installing Node.JS and NPM via your favorite package distributor. From
After PM2 is installed, run the following command to enable your Red instance to be managed by PM2. Replace the brackets with the required information.
You can add additional Red based arguments after the instance, such as :code:`--dev`.
-:code:`pm2 start redbot --name "" --interpreter "" -- --no-prompt`
+.. code-block:: none
+
+ pm2 start redbot --name "" --interpreter "" --interpreter-args "-O" -- --no-prompt
.. code-block:: none
Arguments to replace.
- --name ""
+
A name to identify the bot within pm2, this is not your Red instance.
- --interpreter ""
- The location of your Python interpreter, to find out where that is use the following command:
- which python3.6
+
+ The location of your Python interpreter, to find out where that is use the following command inside activated venv:
+ which python
The name of your Red instance.
diff --git a/docs/autostart_systemd.rst b/docs/autostart_systemd.rst
index 29d404c44..1280b424a 100644
--- a/docs/autostart_systemd.rst
+++ b/docs/autostart_systemd.rst
@@ -8,32 +8,42 @@ Setting up auto-restart using systemd on Linux
Creating the service file
-------------------------
-In order to create the service file, you will first need the location of your :code:`redbot` binary.
+In order to create the service file, you will first need to know two things, your Linux :code:`username` and your Python :code:`path`
+
+First, your Linux :code:`username` can be fetched with the following command:
.. code-block:: bash
- # If redbot is installed in a virtualenv
- source redenv/bin/activate
+ whoami
- # If you are using pyenv
- pyenv shell
+Next, your python :code:`path` can be fetched with the following commands:
- which redbot
+.. code-block:: bash
+
+ # If redbot is installed in a venv
+ source ~/redenv/bin/activate
+ which python
+
+ # If redbot is installed in a pyenv virtualenv
+ pyenv shell
+ pyenv which python
Then create the new service file:
:code:`sudo -e /etc/systemd/system/red@.service`
-Paste the following and replace all instances of :code:`username` with the username, and :code:`path` with the location you obtained above:
+Paste the following in the file, and replace all instances of :code:`username` with the Linux username you retrieved above, and :code:`path` with the python path you retrieved above.
.. code-block:: none
[Unit]
Description=%I redbot
After=multi-user.target
+ After=network-online.target
+ Wants=network-online.target
[Service]
- ExecStart=path %I --no-prompt
+ ExecStart=path -O -m redbot %I --no-prompt
User=username
Group=username
Type=idle
@@ -71,4 +81,4 @@ type the following command in the terminal, still by adding the instance name af
To view Red’s log, you can acccess through journalctl:
-:code:`sudo journalctl -u red@instancename`
+:code:`sudo journalctl -eu red@instancename`
diff --git a/docs/changelog_3_1_0.rst b/docs/changelog_3_1_0.rst
index d56af23ee..e067ae804 100644
--- a/docs/changelog_3_1_0.rst
+++ b/docs/changelog_3_1_0.rst
@@ -110,7 +110,7 @@ Downloader
* ``[p]cog uninstall`` allows to uninstall multiple cogs now (`#2592`_)
* ``[p]cog uninstall`` will now remove cog from installed cogs even if it can't find the cog in install path anymore (`#2595`_)
* ``[p]cog install`` will not allow to install cogs which aren't suitable for installed version of Red anymore (`#2605`_)
- * Cog Developers now have to use ``min_bot_version`` in form of version string instead of ``bot_version`` in info.json and they can also use ``max_bot_version`` to specify maximum version of Red, more in :doc:`framework_downloader`. (`#2605`_)
+ * Cog Developers now have to use ``min_bot_version`` in form of version string instead of ``bot_version`` in info.json and they can also use ``max_bot_version`` to specify maximum version of Red, more in :ref:`info-json-format`. (`#2605`_)
------
Filter
diff --git a/docs/changelog_3_2_0.rst b/docs/changelog_3_2_0.rst
new file mode 100644
index 000000000..ce594cde5
--- /dev/null
+++ b/docs/changelog_3_2_0.rst
@@ -0,0 +1,565 @@
+.. 3.2.x Changelogs
+
+Redbot 3.2.3 (2020-01-17)
+=========================
+
+Core Bot Changes
+----------------
+
+- Further improvements have been made to bot startup and shutdown.
+- Prefixes are now cached for performance.
+- Added the means for cog creators to use a global preinvoke hook.
+- The bot now ensures it has at least the bare neccessary permissions before running commands.
+- Deleting instances works as intended again.
+- Sinbad stopped fighting it and embraced the entrypoint madness.
+
+Core Commands
+-------------
+
+- The servers command now also shows the ids.
+
+Admin Cog
+---------
+
+- The selfrole command now has reasonable expectations about hierarchy.
+
+Help Formatter
+--------------
+
+- ``[botname]`` is now replaced with the bot's display name in help text.
+- New features added for cog creators to further customize help behavior.
+
+ - Check out our command reference for details on new ``format_help_for_context`` method.
+- Embed settings are now consistent.
+
+Downloader
+----------
+
+- Improved a few user facing messages.
+- Added pagination of output on cog update.
+- Added logging of failures.
+
+Docs
+----
+
+There's more detail to the below changes, so go read the docs.
+For some reason, documenting documentation changes is hard.
+
+- Added instructions about git version.
+- Clarified instructions for installation and update.
+- Added more details to the API key reference.
+- Fixed some typos and versioning mistakes.
+
+
+Audio
+-----
+
+Draper did things.
+
+- No seriously, Draper did things.
+- Wait you wanted details? Ok, I guess we can share those.
+- Audio properly disconnects with autodisconnect, even if notify is being used.
+- Symbolic links now work as intended for local tracks.
+- Bump play now shows the correct time till next track.
+- Multiple user facing messages have been made more correct.
+
+Redbot 3.2.2 (2020-01-10)
+=========================
+
+Hotfixes
+--------
+
+- Fix Help Pagination issue
+
+Docs
+----
+
+- Correct venv docs
+
+
+Redbot 3.2.1 (2020-01-10)
+=========================
+
+Hotfixes
+--------
+
+- Fix Mongo conversion from being incorrectly blocked
+- Fix announcer not creating a message for success feedback
+- Log an error with creating case types rather than crash
+
+
+Redbot 3.2.0 (2020-01-09)
+=========================
+Core Bot Changes
+----------------
+
+Breaking Changes
+~~~~~~~~~~~~~~~~
+
+- Modlog casetypes no longer have an attribute for auditlog action type. (`#2897 `_)
+- Removed ``redbot.core.modlog.get_next_case_number()``. (`#2908 `_)
+- Removed ``bank.MAX_BALANCE``, use ``bank.get_max_balance()`` from now on. (`#2926 `_)
+- The main bot config is no longer directly accessible to cogs. New methods have been added for use where this is concerned.
+ New methods for this include
+
+ - ``bot.get_shared_api_tokens``
+ - ``bot.set_shared_api_tokens``
+ - ``bot.get_embed_color``
+ - ``bot.get_embed_colour``
+ - ``bot.get_admin_roles``
+ - ``bot.get_admin_role_ids``
+ - ``bot.get_mod_roles``
+ - ``bot.get_mod_role_ids`` (`#2967 `_)
+- Reserved some command names for internal Red use. These are available programatically as ``redbot.core.commands.RESERVED_COMMAND_NAMES``. (`#2973 `_)
+- Removed ``bot._counter``, Made a few more attrs private (``cog_mgr``, ``main_dir``). (`#2976 `_)
+- Extension's ``setup()`` function should no longer assume that we are, or even will be connected to Discord.
+ This also means that cog creators should no longer use ``bot.wait_until_ready()`` inside it. (`#3073 `_)
+- Removed the mongo driver. (`#3099 `_)
+
+
+Bug Fixes
+~~~~~~~~~
+
+- Help now properly hides disabled commands. (`#2863 `_)
+- Fixed ``bot.remove_command`` throwing an error when trying to remove a non-existent command. (`#2888 `_)
+- ``Command.can_see`` now works as intended for disabled commands. (`#2892 `_)
+- Modlog entries now show up properly without the mod cog loaded. (`#2897 `_)
+- Fixed an error in ``[p]reason`` when setting the reason for a case without a moderator. (`#2908 `_)
+- Bank functions now check the recipient balance before transferring and stop the transfer if the recipient's balance will go above the maximum allowed balance. (`#2923 `_)
+- Removed potential for additional bad API calls per ban/unban. (`#2945 `_)
+- The ``[p]invite`` command no longer errors when a user has the bot blocked or DMs disabled in the server. (`#2948 `_)
+- Stopped using the ``:`` character in backup's filename - Windows doesn't accept it. (`#2954 `_)
+- ``redbot-setup delete`` no longer errors with "unexpected keyword argument". (`#2955 `_)
+- ``redbot-setup delete`` no longer prompts about backup when the user passes the option ``--no-prompt``. (`#2956 `_)
+- Cleaned up the ``[p]inviteset public`` and ``[p]inviteset perms`` help strings. (`#2963 `_)
+- ```[p]embedset user`` now only affects DM's. (`#2966 `_)
+- Fixed an unfriendly error when the provided instance name doesn't exist. (`#2968 `_)
+- Fixed the help text and response of ``[p]set usebotcolor`` to accurately reflect what the command is doing. (`#2974 `_)
+- Red no longer types infinitely when a command with a cooldown is called within the last second of a cooldown. (`#2985 `_)
+- Removed f-string usage in the launcher to prevent our error handling from causing an error. (`#3002 `_)
+- Fixed ``MessagePredicate.greater`` and ``MessagePredicate.less`` allowing any valid int instead of only valid ints/floats that are greater/less than the given value. (`#3004 `_)
+- Fixed an error in ``[p]uptime`` when the uptime is under a second. (`#3009 `_)
+- Added quotation marks to the response of ``[p]helpset tagline`` so that two consecutive full stops do not appear. (`#3010 `_)
+- Fixed an issue with clearing rules in permissions. (`#3014 `_)
+- Lavalink will now be restarted after an unexpected shutdown. (`#3033 `_)
+- Added a 3rd-party lib folder to ``sys.path`` before loading cogs. This prevents issues with 3rd-party cogs failing to load when Downloader is not loaded to install requirements. (`#3036 `_)
+- Escaped track descriptions so that they do not break markdown. (`#3047 `_)
+- Red will now properly send a message when the invoked command is guild-only. (`#3057 `_)
+- Arguments ``--co-owner`` and ``--load-cogs`` now properly require at least one argument to be passed. (`#3060 `_)
+- Now always appends the 3rd-party lib folder to the end of ``sys.path`` to avoid shadowing Red's dependencies. (`#3062 `_)
+- Fixed ``is_automod_immune``'s handling of the guild check and added support for checking webhooks. (`#3100 `_)
+- Fixed the generation of the ``repos.json`` file in the backup process. (`#3114 `_)
+- Fixed an issue where calling audio commands when not in a voice channel could result in a crash. (`#3120 `_)
+- Added handling for invalid folder names in the data path gracefully in ``redbot-setup`` and ``redbot --edit``. (`#3171 `_)
+- ``--owner`` and ``-p`` cli flags now work when added from launcher. (`#3174 `_)
+- Red will now prevent users from locking themselves out with localblacklist. (`#3207 `_)
+- Fixed help ending up a little too large for discord embed limits. (`#3208 `_)
+- Fixed formatting issues in commands that list whitelisted/blacklisted users/roles when the list is empty. (`#3219 `_)
+- Red will now prevent users from locking the guild owner out with localblacklist (unless the command caller is bot owner). (`#3221 `_)
+- Guild owners are no longer affected by the local whitelist and blacklist. (`#3221 `_)
+- Fixed an attribute error that can be raised in ``humanize_timedelta`` if ``seconds = 0``. (`#3231 `_)
+- Fixed ``ctx.clean_prefix`` issues resulting from undocumented changes from discord. (`#3249 `_)
+- ``redbot.core.bot.Bot.owner_id`` is now set in the post connection startup. (`#3273 `_)
+- ``redbot.core.bot.Bot.send_to_owners()`` and ``redbot.core.bot.Bot.get_owner_notification_destinations()`` now wait until Red is done with post connection startup to ensure owner ID is available. (`#3273 `_)
+
+
+Enhancements
+~~~~~~~~~~~~
+
+- Added the option to modify the RPC port with the ``--rpc-port`` flag. (`#2429 `_)
+- Slots now has a 62.5% expected payout and will not inflate economy when spammed. (`#2875 `_)
+- Allowed passing ``cls`` in the ``redbot.core.commands.group()`` decorator. (`#2881 `_)
+- Red's Help Formatter is now considered to have a stable API. (`#2892 `_)
+- Modlog no longer generates cases without being told to for actions the bot did. (`#2897 `_)
+- Some generic modlog casetypes are now pre-registered for cog creator use. (`#2897 `_)
+- ModLog is now much faster at creating cases, especially in large servers. (`#2908 `_)
+- JSON config files are now stored without indentation, this is to reduce the file size and increase the performance of write operations. (`#2921 `_)
+- ``--[no-]backup``, ``--[no-]drop-db`` and ``--[no-]remove-datapath`` in the ``redbot-setup delete`` command are now on/off flags. (`#2958 `_)
+- The confirmation prompts in ``redbot-setup`` now have default values for user convenience. (`#2958 `_)
+- ``redbot-setup delete`` now has the option to leave Red's data untouched on database backends. (`#2962 `_)
+- Red now takes less time to fetch cases, unban members, and list warnings. (`#2964 `_)
+- Red now handles more things prior to connecting to discord to reduce issues during the initial load. (`#3045 `_)
+- ``bot.send_filtered`` now returns the message that is sent. (`#3052 `_)
+- Red will now send a message when the invoked command is DM-only. (`#3057 `_)
+- All ``y/n`` confirmations in cli commands are now unified. (`#3060 `_)
+- Changed ``[p]info`` to say "This bot is an..." instead of "This is an..." for clarity. (`#3121 `_)
+- ``redbot-setup`` will now use the instance name in default data paths to avoid creating a second instance with the same data path. (`#3171 `_)
+- Instance names can now only include characters A-z, numbers, underscores, and hyphens. Old instances are unaffected by this change. (`#3171 `_)
+- Clarified that ``[p]backup`` saves the **bot's** data in the help text. (`#3172 `_)
+- Added ``redbot --debuginfo`` flag which shows useful information for debugging. (`#3183 `_)
+- Added the Python executable field to ``[p]debuginfo``. (`#3184 `_)
+- When Red prompts for a token, it will now print a link to the guide explaining how to obtain a token. (`#3204 `_)
+- ``redbot-setup`` will no longer log to disk. (`#3269 `_)
+- ``redbot.core.bot.Bot.send_to_owners()`` and ``redbot.core.bot.Bot.get_owner_notification_destinations()`` now log when they are not able to find the owner notification destination. (`#3273 `_)
+- The lib folder is now cleared on minor Python version changes. ``[p]cog reinstallreqs`` in Downloader can be used to regenerate the lib folder for a new Python version. (`#3274 `_)
+- If Red detects operating system or architecture change, it will now warn the owner about possible problems with the lib folder. (`#3274 `_)
+- ``[p]playlist download`` will now compress playlists larger than the server attachment limit and attempt to send that. (`#3279 `_)
+
+
+New Features
+~~~~~~~~~~~~
+
+- Added functions to acquire locks on Config groups and values. These locks are acquired by default when calling a value as a context manager. See ``Value.get_lock`` for details. (`#2654 `_)
+- Added a config driver for PostgreSQL. (`#2723 `_)
+- Added methods to Config for accessing things by id without mocked objects
+
+ - ``Config.guild_from_id``
+ - ``Config.user_from_id``
+ - ``Config.role_from_id``
+ - ``Config.channel_from_id``
+ - ``Config.member_from_ids``
+ - This one requires multiple ids, one for the guild, one for the user
+ - Consequence of discord's object model (`#2804 `_)
+- New method ``humanize_number`` in ``redbot.core.utils.chat_formatting`` to convert numbers into text that respects the current locale. (`#2836 `_)
+- Added new commands to Economy
+
+ - ``[p]bank prune user`` - This will delete a user's bank account.
+ - ``[p]bank prune local`` - This will prune the bank of accounts for users who are no longer in the server.
+ - ``[p]bank prune global`` - This will prune the global bank of accounts for users who do not share any servers with the bot. (`#2845 `_)
+- Red now uses towncrier for changelog generation. (`#2872 `_)
+- Added ``redbot.core.modlog.get_latest_case`` to fetch the case object for the most recent ModLog case. (`#2908 `_)
+- Added ``[p]bankset maxbal`` to set the maximum bank balance. (`#2926 `_)
+- Added a few methods and classes replacing direct config access (which is no longer supported)
+
+ - ``redbot.core.Red.allowed_by_whitelist_blacklist``
+ - ``redbot.core.Red.get_valid_prefixes``
+ - ``redbot.core.Red.clear_shared_api_tokens``
+ - ``redbot.core.commands.help.HelpSettings`` (`#2976 `_)
+- Added the cli flag ``redbot --edit`` which is used to edit the instance name, token, owner, and datapath. (`#3060 `_)
+- Added ``[p]licenseinfo``. (`#3090 `_)
+- Ensured that people can migrate from MongoDB. (`#3108 `_)
+- Added a command to list disabled commands globally or per guild. (`#3118 `_)
+- New event ``on_red_api_tokens_update`` is now dispatched when shared api keys for a service are updated. (`#3134 `_)
+- Added ``redbot-setup backup``. (`#3235 `_)
+- Added the method ``redbot.core.bot.Bot.wait_until_red_ready()`` that waits until Red's post connection startup is done. (`#3273 `_)
+
+
+Removals
+~~~~~~~~
+
+- ``[p]set owner`` and ``[p]set token`` have been removed in favor of managing server side. (`#2928 `_)
+- Shared libraries are marked for removal in Red 3.4. (`#3106 `_)
+- Removed ``[p]backup``. Use the cli command ``redbot-setup backup`` instead. (`#3235 `_)
+- Removed the functions ``safe_delete``, ``fuzzy_command_search``, ``format_fuzzy_results`` and ``create_backup`` from ``redbot.core.utils``. (`#3240 `_)
+- Removed a lot of the launcher's handled behavior. (`#3289 `_)
+
+
+Miscellaneous changes
+~~~~~~~~~~~~~~~~~~~~~
+
+- `#2527 `_, `#2571 `_, `#2723 `_, `#2836 `_, `#2849 `_, `#2861 `_, `#2885 `_, `#2890 `_, `#2897 `_, `#2904 `_, `#2924 `_, `#2939 `_, `#2940 `_, `#2941 `_, `#2949 `_, `#2953 `_, `#2964 `_, `#2986 `_, `#2993 `_, `#2997 `_, `#3008 `_, `#3017 `_, `#3048 `_, `#3059 `_, `#3080 `_, `#3089 `_, `#3104 `_, `#3106 `_, `#3129 `_, `#3152 `_, `#3160 `_, `#3168 `_, `#3173 `_, `#3176 `_, `#3186 `_, `#3192 `_, `#3193 `_, `#3195 `_, `#3202 `_, `#3214 `_, `#3223 `_, `#3229 `_, `#3245 `_, `#3247 `_, `#3248 `_, `#3250 `_, `#3254 `_, `#3255 `_, `#3256 `_, `#3258 `_, `#3261 `_, `#3275 `_, `#3276 `_, `#3293 `_, `#3278 `_, `#3285 `_, `#3296 `_,
+
+
+Dependency changes
+~~~~~~~~~~~~~~~~~~~~~~~
+
+- Added ``pytest-mock`` requirement to ``tests`` extra. (`#2571 `_)
+- Updated the python minimum requirement to 3.8.1, updated JRE to Java 11. (`#3245 `_)
+- Bumped dependency versions. (`#3288 `_)
+- Bumped red-lavalink version. (`#3290 `_)
+
+
+Documentation Changes
+~~~~~~~~~~~~~~~~~~~~~
+
+- Started the user guides covering cogs and the user interface of the bot. This includes, for now, a "Getting started" guide. (`#1734 `_)
+- Added documentation for PM2 support. (`#2105 `_)
+- Updated linux install docs, adding sections for Fedora Linux, Debian/Raspbian Buster, and openSUSE. (`#2558 `_)
+- Created documentation covering what we consider a developer facing breaking change and the guarantees regarding them. (`#2882 `_)
+- Fixed the user parameter being labeled as ``discord.TextChannel`` instead of ``discord.abc.User`` in ``redbot.core.utils.predicates``. (`#2914 `_)
+- Updated towncrier info in the contribution guidelines to explain how to create a changelog for a standalone PR. (`#2915 `_)
+- Reworded the virtual environment guide to make it sound less scary. (`#2920 `_)
+- Driver docs no longer show twice. (`#2972 `_)
+- Added more information about ``redbot.core.utils.humanize_timedelta`` into the docs. (`#2986 `_)
+- Added a direct link to the "Installing Red" section in "Installing using powershell and chocolatey". (`#2995 `_)
+- Updated Git PATH install (Windows), capitalized some words, stopped mentioning the launcher. (`#2998 `_)
+- Added autostart documentation for Red users who installed Red inside of a virtual environment. (`#3005 `_)
+- Updated the Cog Creation guide with a note regarding the Develop version as well as the folder layout for local cogs. (`#3021 `_)
+- Added links to the getting started guide at the end of installation guides. (`#3025 `_)
+- Added proper docstrings to enums that show in drivers docs. (`#3035 `_)
+- Discord.py doc links will now always use the docs for the currently used version of discord.py. (`#3053 `_)
+- Added ``|DPY_VERSION|`` substitution that will automatically get replaced by the current discord.py version. (`#3053 `_)
+- Added missing descriptions for function returns. (`#3054 `_)
+- Stopped overwriting the ``docs/prolog.txt`` file in ``conf.py``. (`#3082 `_)
+- Fixed some typos and wording, added MS Azure to the host list. (`#3083 `_)
+- Updated the docs footer copyright to 2019. (`#3105 `_)
+- Added a deprecation note about shared libraries in the Downloader Framework docs. (`#3106 `_)
+- Updated the apikey framework documentation. Changed ``bot.get_shared_api_keys()`` to ``bot.get_shared_api_tokens()``. (`#3110 `_)
+- Added information about ``info.json``'s ``min_python_version`` key in Downloader Framework docs. (`#3124 `_)
+- Added an event reference for the ``on_red_api_tokens_update`` event in the Shared API Keys docs. (`#3134 `_)
+- Added notes explaining the best practices with config. (`#3149 `_)
+- Documented additional attributes in Context. (`#3151 `_)
+- Updated Windows docs with up to date dependency instructions. (`#3188 `_)
+- Added a "Publishing cogs for V3" document explaining how to make user's cogs work with Downloader. (`#3234 `_)
+- Fixed broken docs for ``redbot.core.commands.Context.react_quietly``. (`#3257 `_)
+- Updated copyright notices on License and RTD config to 2020. (`#3259 `_)
+- Added a line about setuptools and wheel. (`#3262 `_)
+- Ensured development builds are not advertised to the wrong audience. (`#3292 `_)
+- Clarified the usage intent of some of the chat formatting functions. (`#3292 `_)
+
+
+Admin
+-----
+
+Breaking Changes
+~~~~~~~~~~~~~~~~
+
+- Changed ``[p]announce ignore`` and ``[p]announce channel`` to ``[p]announceset ignore`` and ``[p]announceset channel``. (`#3250 `_)
+- Changed ``[p]selfrole `` to ``[p]selfrole add ``, changed ``[p]selfrole add`` to ``[p]selfroleset add`` , and changed ``[p]selfrole delete`` to ``[p]selfroleset remove``. (`#3250 `_)
+
+
+Bug Fixes
+~~~~~~~~~
+
+- Fixed ``[p]announce`` failing after encountering an error attempting to message the bot owner. (`#3166 `_)
+- Improved the clarity of user facing messages when the user is not allowed to do something due to Discord hierarchy rules. (`#3250 `_)
+- Fixed some role managing commands not properly checking if Red had ``manage_roles`` perms before attempting to manage roles. (`#3250 `_)
+- Fixed ``[p]editrole`` commands not checking if roles to be edited are higher than Red's highest role before trying to edit them. (`#3250 `_)
+- Fixed ``[p]announce ignore`` and ``[p]announce channel`` not being able to be used by guild owners and administrators. (`#3250 `_)
+
+
+Enhancements
+~~~~~~~~~~~~
+
+- Added custom issue messages for adding and removing roles, this makes it easier to create translations. (`#3016 `_)
+
+
+Audio
+-----
+
+Bug Fixes
+~~~~~~~~~
+
+- ``[p]playlist remove`` now removes the playlist url if the playlist was created through ``[p]playlist save``. (`#2861 `_)
+- Users are no longer able to accidentally overwrite existing playlist if a new one with the same name is created/renamed. (`#2861 `_)
+- ``[p]audioset settings`` no longer shows lavalink JAR version. (`#2904 `_)
+- Fixed a ``KeyError: loadType`` when trying to play tracks. (`#2904 `_)
+- ``[p]audioset settings`` now uses ``ctx.is_owner()`` to check if the context author is the bot owner. (`#2904 `_)
+- Fixed track indexs being off by 1 in ``[p]search``. (`#2940 `_)
+- Fixed an issue where updating your Spotify and YouTube Data API tokens did not refresh them. (`#3047 `_)
+- Fixed an issue where the blacklist was not being applied correctly. (`#3047 `_)
+- Fixed an issue in ``[p]audioset restrictions blacklist list`` where it would call the list a ``Whitelist``. (`#3047 `_)
+- Red's status is now properly cleared on emptydisconnect. (`#3050 `_)
+- Fixed a console spam caused sometimes when auto disconnect and auto pause are used. (`#3123 `_)
+- Fixed an error that was thrown when running ``[p]audioset dj``. (`#3165 `_)
+- Fixed a crash that could happen when the bot can't connect to the lavalink node. (`#3238 `_)
+- Restricted the number of songs shown in the queue to first 500 to avoid heartbeats. (`#3279 `_)
+- Added more cooldowns to playlist commands and restricted the queue and playlists to 10k songs to avoid bot errors. (`#3286 `_)
+
+
+Enhancements
+~~~~~~~~~~~~
+
+- ``[p]playlist upload`` will now load playlists generated via ``[p]playlist download`` much faster if the playlist uses the new scheme. (`#2861 `_)
+- ``[p]playlist`` commands now can be used by everyone regardless of DJ settings, however it will respect DJ settings when creating/modifying playlists in the server scope. (`#2861 `_)
+- Spotify, Youtube Data, and Lavalink API calls can be cached to avoid repeated calls in the future, see ``[p]audioset cache``. (`#2890 `_)
+- Playlists will now start playing as soon as first track is loaded. (`#2890 `_)
+- ``[p]audioset localpath`` can set a path anywhere in your machine now. Note: This path needs to be visible by ``Lavalink.jar``. (`#2904 `_)
+- ``[p]queue`` now works when there are no tracks in the queue, showing the track currently playing. (`#2904 `_)
+- ``[p]audioset settings`` now reports Red Lavalink version. (`#2904 `_)
+- Adding and removing reactions in Audio is no longer a blocking action. (`#2904 `_)
+- When shuffle is on, queue now shows the correct play order. (`#2904 `_)
+- ``[p]seek`` and ``[p]skip`` can be used by user if they are the song requester while DJ mode is enabled and votes are disabled. (`#2904 `_)
+- Adding a playlist and an album to a saved playlist skips tracks already in the playlist. (`#2904 `_)
+- DJ mode is now turned off if the DJ role is deleted. (`#2904 `_)
+- When playing a localtrack, ``[p]play`` and ``[p]bumpplay`` no longer require the use of the prefix "localtracks\\".
+
+ Before: ``[p]bumpplay localtracks\\ENM\\501 - Inside The Machine.mp3``
+ Now: ``[p]bumpplay ENM\\501 - Inside The Machine.mp3``
+ Now nested folders: ``[p]bumpplay Parent Folder\\Nested Folder\\track.mp3`` (`#2904