Compare commits
4 Commits
6603cd1a86
...
V3/feature
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
2f28df2dd0 | ||
|
|
677d700363 | ||
|
|
4c77cde249 | ||
|
|
1cb43b11a1 |
@@ -1,5 +0,0 @@
|
||||
team = "Cog-Creators"
|
||||
repo = "Red-DiscordBot"
|
||||
check_sha = "6251c585e4ec0a53813a9993ede3ab5309024579"
|
||||
fix_commit_msg = false
|
||||
default_branch = "V3/develop"
|
||||
@@ -1,40 +0,0 @@
|
||||
# Since version 2.23 (released in August 2019), git-blame has a feature
|
||||
# to ignore or bypass certain commits.
|
||||
#
|
||||
# This file contains a list of commits that are not likely what you
|
||||
# are looking for in a blame, such as mass reformatting or renaming.
|
||||
# You can set this file as a default ignore file for blame by running
|
||||
# the following command.
|
||||
#
|
||||
# $ git config blame.ignoreRevsFile .git-blame-ignore-revs
|
||||
|
||||
# [V3] Update code standards (black code format pass) (#1650)
|
||||
b88b5a2601f56bda985729352d24842f087a8ade
|
||||
|
||||
# Black tests and setup.py (#1657)
|
||||
e01cdbb0912387749d9459e1d934f9ed393a9b51
|
||||
|
||||
# Black formatting for generate_strings.py and docs/conf.py (#1658)
|
||||
1ecaf6f8d5f2af731bec3eb6ad3a9721ab7a2812
|
||||
|
||||
# [V3 Travis] Update travis to not skip pipfile lock... (#1678)
|
||||
# additional black formatting pass to conform to black 18.5b
|
||||
d3f406a34a5cae6ea63664e76e8e74be43f9949f
|
||||
|
||||
# [V3] Update black version and reformat (#1745)
|
||||
14cc701b25cea385fd0d537cdb6475d341c017c5
|
||||
|
||||
# [V3] Clean up some ugly auto-formatted strings (#1753)
|
||||
622382f42588ac1d8a52bd3e39bf171c89ff0224
|
||||
|
||||
# [CI] Improve automated checks (#2702)
|
||||
16443c8cc0c24cbc5b3dc7de858edb71b9ca6cd3
|
||||
|
||||
# Bump black to 20.8b1 (and reformat) (#4371)
|
||||
85afe19455f91af21a0f603705eeb5d9599b45cc
|
||||
|
||||
# Reformat with Black 22.1.0 (#5633)
|
||||
c69e8d31fdadbe10230ec0ea2ef35402e5c4cf43
|
||||
|
||||
# Reformat with Black 2023 formatting changes
|
||||
226d8d734de43e1d5ea96a528a8e480641604db1
|
||||
@@ -1,2 +0,0 @@
|
||||
$Format:%h$
|
||||
$Format:%(describe:tags=true)$
|
||||
11
.gitattributes
vendored
@@ -1,11 +0,0 @@
|
||||
* text eol=lf
|
||||
|
||||
# binary file excludsions
|
||||
*.png binary
|
||||
|
||||
# include commit/tag information in `.git_archive_info.txt` when packing with git-archive
|
||||
.git_archive_info.txt export-subst
|
||||
|
||||
# hide diffs for .po files by default
|
||||
# https://docs.github.com/en/repositories/working-with-files/managing-files/customizing-how-changed-files-appear-on-github
|
||||
*.po linguist-generated
|
||||
83
.github/CODEOWNERS
vendored
@@ -1,30 +1,65 @@
|
||||
# Default
|
||||
* @Twentysix26
|
||||
|
||||
# Core
|
||||
redbot/core/bank.py @palmtree5
|
||||
redbot/core/checks.py @tekulvw
|
||||
redbot/core/cli.py @tekulvw
|
||||
redbot/core/config.py @tekulvw
|
||||
redbot/core/cog_manager.py @tekulvw
|
||||
redbot/core/core_commands.py @tekulvw
|
||||
redbot/core/context.py @Tobotimus
|
||||
redbot/core/commands/* @mikeshardmind
|
||||
redbot/core/data_manager.py @tekulvw
|
||||
redbot/core/dev_commands.py @tekulvw
|
||||
redbot/core/drivers/* @tekulvw
|
||||
redbot/core/events.py @tekulvw
|
||||
redbot/core/global_checks.py @tekulvw
|
||||
redbot/core/i18n.py @tekulvw
|
||||
redbot/core/modlog.py @palmtree5
|
||||
redbot/core/rpc.py @tekulvw
|
||||
redbot/core/utils/chat_formatting.py @tekulvw
|
||||
redbot/core/utils/mod.py @palmtree5
|
||||
redbot/core/utils/data_converter.py @mikeshardmind
|
||||
redbot/core/utils/antispam.py @mikeshardmind
|
||||
redbot/core/utils/tunnel.py @mikeshardmind
|
||||
redbot/core/utils/caching.py @mikeshardmind
|
||||
redbot/core/utils/common_filters.py @mikeshardmind
|
||||
redbot/core/utils/dbtools.py @mikeshardmind
|
||||
|
||||
# Cogs
|
||||
/redbot/cogs/audio/** @aikaterna @PredaaA
|
||||
/redbot/cogs/downloader/* @Jackenmen
|
||||
/redbot/cogs/streams/* @palmtree5
|
||||
/redbot/cogs/mutes/* @TrustyJAID
|
||||
redbot/cogs/admin/* @tekulvw
|
||||
redbot/cogs/alias/* @tekulvw
|
||||
redbot/cogs/audio/* @aikaterna @Drapersniper
|
||||
redbot/cogs/bank/* @tekulvw
|
||||
redbot/cogs/cleanup/* @palmtree5
|
||||
redbot/cogs/customcom/* @palmtree5
|
||||
redbot/cogs/downloader/* @tekulvw @jack1142
|
||||
redbot/cogs/economy/* @palmtree5
|
||||
redbot/cogs/filter/* @palmtree5
|
||||
redbot/cogs/general/* @palmtree5
|
||||
redbot/cogs/image/* @palmtree5
|
||||
redbot/cogs/mod/* @palmtree5
|
||||
redbot/cogs/modlog/* @palmtree5
|
||||
redbot/cogs/streams/* @Twentysix26 @palmtree5
|
||||
redbot/cogs/trivia/* @Tobotimus
|
||||
redbot/cogs/reports/* @mikeshardmind
|
||||
redbot/cogs/permissions/* @mikeshardmind
|
||||
redbot/cogs/warnings/* @palmtree5
|
||||
|
||||
# Docs - Install and update guides
|
||||
/docs/install_guides/** @Jackenmen
|
||||
/docs/update_red.rst @Jackenmen
|
||||
|
||||
# Docs - Version guarantees
|
||||
/docs/version_guarantees.rst @Jackenmen
|
||||
|
||||
# Trivia Lists
|
||||
/redbot/cogs/trivia/data/lists/whosthatpokemon*.yaml @aikaterna
|
||||
# Docs
|
||||
docs/* @tekulvw @palmtree5
|
||||
|
||||
# Tests
|
||||
/redbot/pytest/downloader* @Jackenmen
|
||||
/tests/cogs/downloader/* @Jackenmen
|
||||
tests/cogs/downloader/* @jack1142
|
||||
|
||||
# Schemas
|
||||
/schema/* @Jackenmen
|
||||
# Setup, instance setup, and running the bot
|
||||
setup.py @tekulvw
|
||||
redbot/__init__.py @tekulvw
|
||||
redbot/__main__.py @tekulvw @mikeshardmind
|
||||
redbot/setup.py @tekulvw
|
||||
|
||||
# CI
|
||||
/.travis.yml @Kowlin
|
||||
/crowdin.yml @Kowlin
|
||||
/.github/workflows/* @Kowlin
|
||||
|
||||
# Excludes
|
||||
**/locales/* @ghost
|
||||
# Others
|
||||
.travis.yml @Kowlin
|
||||
crowdin.yml @Kowlin
|
||||
.github/workflows/* @Kowlin
|
||||
|
||||
49
CONTRIBUTING.md → .github/CONTRIBUTING.md
vendored
@@ -11,8 +11,9 @@
|
||||
* [4.4 Make](#44-make)
|
||||
* [4.5 Keeping your dependencies up to date](#45-keeping-your-dependencies-up-to-date)
|
||||
* [4.6 To contribute changes](#46-to-contribute-changes)
|
||||
* [4.7 How To Report A Bug](#47-how-to-report-a-bug)
|
||||
* [4.8 How To Suggest A Feature Or Enhancement](#48-how-to-suggest-a-feature-or-enhancement)
|
||||
* [4.7 Using towncrier](#47-using-towncrier)
|
||||
* [4.8 How To Report A Bug](#48-how-to-report-a-bug)
|
||||
* [4.9 How To Suggest A Feature Or Enhancement](#49-how-to-suggest-a-feature-or-enhancement)
|
||||
* [5. Code Review Process](#5-code-review-process)
|
||||
* [5.1 Issues](#51-issues)
|
||||
* [5.2 Pull Requests](#52-pull-requests)
|
||||
@@ -42,7 +43,7 @@ Unsure of how to get started contributing to Red? Please take a look at the Issu
|
||||
* beginner - issues that can normally be fixed in just a few lines of code and maybe a test or two.
|
||||
* help-wanted - issues that are currently unassigned to anyone and may be a bit more involved/complex than issues tagged with beginner.
|
||||
|
||||
**Working on your first Pull Request?** You can learn how from this *free* series [How to Contribute to an Open Source Project on GitHub](https://app.egghead.io/playlists/how-to-contribute-to-an-open-source-project-on-github)
|
||||
**Working on your first Pull Request?** You can learn how from this *free* series [How to Contribute to an Open Source Project on GitHub](https://egghead.io/series/how-to-contribute-to-an-open-source-project-on-github)
|
||||
|
||||
At this point you're ready to start making changes. Feel free to ask for help; everyone was a beginner at some point!
|
||||
|
||||
@@ -78,12 +79,12 @@ 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'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.
|
||||
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.
|
||||
|
||||
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.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/psf/black) (test environment `style`)
|
||||
- Ensures that the code meets our style guide with [black](https://github.com/ambv/black) (test environment `style`)
|
||||
|
||||
To run all of these tests, just run the command `tox` in the project directory.
|
||||
|
||||
@@ -92,9 +93,9 @@ To run a subset of these tests, use the command `tox -e <env>`, where `<env>` is
|
||||
Your PR will not be merged until all of these tests pass.
|
||||
|
||||
### 4.3 Style
|
||||
Our style checker of choice, [black](https://github.com/psf/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.
|
||||
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/psf/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 <src>`.
|
||||
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 <src>`.
|
||||
|
||||
### 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:
|
||||
@@ -115,17 +116,39 @@ Whenever you pull from upstream (V3/develop on the main repository) and you noti
|
||||
1. Create a new branch on your fork
|
||||
2. Make the changes
|
||||
3. If you like the changes and think the main Red project could use it:
|
||||
* Create a towncrier entry for the changes. (See next section for details)
|
||||
* Run tests with `tox` to ensure your code is up to scratch
|
||||
* Create a Pull Request on GitHub with your changes
|
||||
- If you are contributing a behavior change, please keep in mind that behavior changes
|
||||
are conditional on them being appropriate for the project's current goals.
|
||||
If you would like to reduce the risk of putting in effort for something we aren't
|
||||
going to use, open an issue discussing it first.
|
||||
|
||||
### 4.7 How To Report A Bug
|
||||
### 4.7 Using towncrier
|
||||
|
||||
Red uses towncrier to create changelogs.
|
||||
|
||||
To create a towncrier entry for your PR, create a file in `changelog.d` for it. If the changes are for a specific cog, place the file in the related subdirectory.
|
||||
|
||||
The filename should be of the format `issuenumber.changetype(.count).rst`, where `(.count)` is an optional
|
||||
part of the filename should multiple entries for the same issue number and type be necessary.
|
||||
If there is not an issue associated with your PR,
|
||||
you may use the PR number in place of the issue number.
|
||||
|
||||
Valid changetypes are:
|
||||
|
||||
* breaking : Breaking changes
|
||||
* dep : Changes to dependencies
|
||||
* enhance : Enhancements
|
||||
* feature : New features
|
||||
* bugfix : Bugfixes
|
||||
* docs : documentation improvements and additions
|
||||
* removal : removal of something
|
||||
* misc : any changes which don't have a user facing change, and don't belong in the changelog for users
|
||||
|
||||
The contents of the file should be a short, human readable description of the impact of the changes made,
|
||||
not the technical details of the change.
|
||||
|
||||
### 4.8 How To Report A Bug
|
||||
Please see our **ISSUES.MD** for more information.
|
||||
|
||||
### 4.8 How To Suggest A Feature Or Enhancement
|
||||
### 4.9 How To Suggest A Feature Or Enhancement
|
||||
The goal of Red is to be as useful to as many people as possible, this means that all features must be useful to anyone and any server that uses Red.
|
||||
|
||||
If you find yourself wanting a feature that Red does not already have, you're probably not alone. There's bound to be a great number of users out there needing the same thing and a lot of the features that Red has today have been added because of the needs of our users. Open an issue on our issues list and describe the feature you would like to see, how you would use it, how it should work, and why it would be useful to the Red community as a whole.
|
||||
86
.github/ISSUE_TEMPLATE/01_command_bug.yml
vendored
@@ -1,86 +0,0 @@
|
||||
name: Bug reports for commands
|
||||
description: For bugs that involve commands found within Red.
|
||||
labels: 'Type: Bug'
|
||||
body:
|
||||
- type: markdown
|
||||
attributes:
|
||||
value: |
|
||||
Thank you for taking the time to fill out an issue. This template is meant for any issues related to commands.
|
||||
If you require help with installing Red we ask that you join our [Discord server](https://discord.gg/red)
|
||||
- type: input
|
||||
id: red-version
|
||||
attributes:
|
||||
label: "What Red version are you using?"
|
||||
placeholder: 3.4.5
|
||||
validations:
|
||||
required: true
|
||||
- type: dropdown
|
||||
id: cog-name
|
||||
attributes:
|
||||
label: "Cog name"
|
||||
description: "From which cog does the command come from?"
|
||||
options:
|
||||
- Admin
|
||||
- Alias
|
||||
- Audio
|
||||
- Bank
|
||||
- Cleanup
|
||||
- CogManagerUI
|
||||
- Core
|
||||
- Customcom
|
||||
- Dev
|
||||
- Downloader
|
||||
- Economy
|
||||
- Filter
|
||||
- General
|
||||
- Image
|
||||
- Mod
|
||||
- Modlog
|
||||
- Mutes
|
||||
- Permissions
|
||||
- Reports
|
||||
- Streams
|
||||
- Trivia
|
||||
- Warnings
|
||||
validations:
|
||||
required: true
|
||||
- type: input
|
||||
id: command-name
|
||||
attributes:
|
||||
label: "Command name"
|
||||
description: "What is the command that caused the error?"
|
||||
placeholder: "play"
|
||||
validations:
|
||||
required: true
|
||||
- type: textarea
|
||||
id: weh
|
||||
attributes:
|
||||
label: "What did you expect to happen?"
|
||||
validations:
|
||||
required: true
|
||||
- type: textarea
|
||||
id: wah
|
||||
attributes:
|
||||
label: "What actually happened?"
|
||||
description: |
|
||||
A clear and concise description of what the bug is.
|
||||
If the issue is visual in nature, consider posting a screenshot.
|
||||
validations:
|
||||
required: true
|
||||
- type: textarea
|
||||
id: reproduction-steps
|
||||
attributes:
|
||||
label: "How can we reproduce this error?"
|
||||
description: "List of steps required to reproduce this error."
|
||||
value: |
|
||||
1.
|
||||
2.
|
||||
3.
|
||||
...
|
||||
validations:
|
||||
required: true
|
||||
- type: textarea
|
||||
id: anything-else
|
||||
attributes:
|
||||
label: Anything else?
|
||||
description: Let us know if you have anything else to share.
|
||||
54
.github/ISSUE_TEMPLATE/02_other_bugs.yml
vendored
@@ -1,54 +0,0 @@
|
||||
name: Bug report
|
||||
description: "For bugs that don't involve a command."
|
||||
labels: 'Type: Bug'
|
||||
body:
|
||||
- type: markdown
|
||||
attributes:
|
||||
value: |
|
||||
Thank you for taking the time to fill out an issue. This template is meant for any issues not related to any existing command.
|
||||
If you require help with installing Red we ask that you join our [Discord server](https://discord.gg/red)
|
||||
- type: input
|
||||
id: red-version
|
||||
attributes:
|
||||
label: "What Red version are you using?"
|
||||
placeholder: 3.4.5
|
||||
validations:
|
||||
required: true
|
||||
- type: textarea
|
||||
id: what-happened
|
||||
attributes:
|
||||
label: "What were you trying to do?"
|
||||
validations:
|
||||
required: true
|
||||
- type: textarea
|
||||
id: weh
|
||||
attributes:
|
||||
label: "What did you expect to happen?"
|
||||
validations:
|
||||
required: true
|
||||
- type: textarea
|
||||
id: wah
|
||||
attributes:
|
||||
label: "What actually happened?"
|
||||
description: |
|
||||
If the issue is visual in nature, consider posting a screenshot.
|
||||
validations:
|
||||
required: true
|
||||
- type: textarea
|
||||
id: reproduction-steps
|
||||
attributes:
|
||||
label: "How can we reproduce this error?"
|
||||
description: |
|
||||
List of steps required to reproduce the error. If the bug is code related, a minimal code example that reproduces the problem would be a big help.
|
||||
value: |
|
||||
1.
|
||||
2.
|
||||
3.
|
||||
...
|
||||
validations:
|
||||
required: true
|
||||
- type: textarea
|
||||
id: anything-else
|
||||
attributes:
|
||||
label: Anything else?
|
||||
description: Let us know if you have anything else to share.
|
||||
29
.github/ISSUE_TEMPLATE/03_enhancements.yml
vendored
@@ -1,29 +0,0 @@
|
||||
name: Enhancement proposal
|
||||
description: For feature requests and improvements related to already existing functionality.
|
||||
labels: 'Type: Enhancement'
|
||||
body:
|
||||
- type: markdown
|
||||
attributes:
|
||||
value: |
|
||||
Thank you for taking the time to fill out an issue. This template is meant for feature requests and improvements to already existing functionality.
|
||||
If you require help with installing Red we ask that you join our [Discord server](https://discord.gg/red)
|
||||
- type: input
|
||||
id: component-name
|
||||
attributes:
|
||||
label: "What component of Red (cog, command, API) would you like to see improvements on?"
|
||||
placeholder: Audio
|
||||
validations:
|
||||
required: true
|
||||
- type: textarea
|
||||
id: proposal
|
||||
attributes:
|
||||
label: "Describe the enhancement you're suggesting."
|
||||
description: |
|
||||
Feel free to describe in as much detail as you wish.
|
||||
validations:
|
||||
required: true
|
||||
- type: textarea
|
||||
id: anything-else
|
||||
attributes:
|
||||
label: Anything else?
|
||||
description: Let us know if you have anything else to share.
|
||||
52
.github/ISSUE_TEMPLATE/04_feature_request.yml
vendored
@@ -1,52 +0,0 @@
|
||||
name: Feature request
|
||||
description: For feature requests regarding Red itself.
|
||||
labels: 'Type: Feature'
|
||||
body:
|
||||
- type: markdown
|
||||
attributes:
|
||||
value: |
|
||||
Thank you for taking the time to fill out an issue, this template is meant for any feature suggestions.
|
||||
If you require help with installing Red we ask that you join our [Discord server](https://discord.gg/red)
|
||||
- type: dropdown
|
||||
id: feature-name
|
||||
attributes:
|
||||
label: "Type of feature request"
|
||||
description: "What type of feature would you like to request?"
|
||||
multiple: true
|
||||
options:
|
||||
- API functionality
|
||||
- Cog
|
||||
- Command
|
||||
- Other
|
||||
validations:
|
||||
required: true
|
||||
- type: textarea
|
||||
id: proposal
|
||||
attributes:
|
||||
label: "Description of the feature you're suggesting"
|
||||
description: |
|
||||
Feel free to describe in as much detail as you wish.
|
||||
|
||||
If you are requesting API functionality:
|
||||
- Describe what it should do
|
||||
- Note whether it is to extend existing functionality or introduce new functionality
|
||||
|
||||
If you are requesting a cog to be included in core:
|
||||
- Describe the functionality in as much detail as possible
|
||||
- Include the command structure, if possible
|
||||
- Please note that unless it's something that should be core functionality,
|
||||
we reserve the right to reject your suggestion and point you to our cog
|
||||
board to request it for a third-party cog
|
||||
|
||||
If you are requesting a command:
|
||||
- Include what cog it should be in and a name for the command
|
||||
- Describe the intended functionality for the command
|
||||
- Note any restrictions on who can use the command or where it can be used
|
||||
validations:
|
||||
required: true
|
||||
- type: textarea
|
||||
id: anything-else
|
||||
attributes:
|
||||
label: Anything else?
|
||||
description: Let us know if you have anything else to share.
|
||||
|
||||
20
.github/ISSUE_TEMPLATE/ISSUE_TEMPLATE.md
vendored
Normal file
@@ -0,0 +1,20 @@
|
||||
Please be sure to read through other issues as well to make sure what you are suggesting/reporting has not already
|
||||
been suggested/reported
|
||||
|
||||
### Type:
|
||||
|
||||
- [ ] Suggestion
|
||||
- [ ] Bug
|
||||
|
||||
### Brief description of the problem
|
||||
|
||||
### Expected behavior
|
||||
|
||||
### Actual behavior
|
||||
|
||||
### Steps to reproduce
|
||||
|
||||
1.
|
||||
2.
|
||||
3.
|
||||
4.
|
||||
34
.github/ISSUE_TEMPLATE/command_bug.md
vendored
Normal file
@@ -0,0 +1,34 @@
|
||||
---
|
||||
name: Bug reports for commands
|
||||
about: For bugs that involve commands found within Red
|
||||
title: ''
|
||||
labels: 'Type: Bug'
|
||||
assignees: ''
|
||||
|
||||
---
|
||||
|
||||
# Command bugs
|
||||
|
||||
<!--
|
||||
Did you find a bug with a command? Fill out the following:
|
||||
-->
|
||||
|
||||
#### Command name
|
||||
|
||||
<!-- Replace this line with the name of the command -->
|
||||
|
||||
#### What cog is this command from?
|
||||
|
||||
<!-- Replace this line with the name of the cog -->
|
||||
|
||||
#### What were you expecting to happen?
|
||||
|
||||
<!-- Replace this line with a description of what you were expecting to happen -->
|
||||
|
||||
#### What actually happened?
|
||||
|
||||
<!-- Replace this line with a description of what actually happened. Include any error messages -->
|
||||
|
||||
#### How can we reproduce this issue?
|
||||
|
||||
<!-- Replace with numbered steps to reproduce the issue -->
|
||||
5
.github/ISSUE_TEMPLATE/config.yml
vendored
@@ -1,5 +0,0 @@
|
||||
blank_issues_enabled: true
|
||||
contact_links:
|
||||
- name: Support question
|
||||
url: https://discord.gg/red
|
||||
about: For any questions regarding on how to operate and run Red.
|
||||
44
.github/ISSUE_TEMPLATE/feature_req.md
vendored
Normal file
@@ -0,0 +1,44 @@
|
||||
---
|
||||
name: Feature request
|
||||
about: For feature requests regarding Red itself.
|
||||
title: ''
|
||||
labels: 'Type: Feature'
|
||||
assignees: ''
|
||||
|
||||
---
|
||||
|
||||
# Feature request
|
||||
|
||||
<!-- This template is for feature requests. Please fill out the following: -->
|
||||
|
||||
|
||||
#### Select the type of feature you are requesting:
|
||||
|
||||
<!-- To check a box, replace the space between the [] with a x -->
|
||||
|
||||
- [ ] Cog
|
||||
- [ ] Command
|
||||
- [ ] API functionality
|
||||
|
||||
#### Describe your requested feature
|
||||
|
||||
<!--
|
||||
Feel free to describe in as much detail as you wish.
|
||||
|
||||
If you are requesting a cog to be included in core:
|
||||
- Describe the functionality in as much detail as possible
|
||||
- Include the command structure, if possible
|
||||
- Please note that unless it's something that should be core functionality,
|
||||
we reserve the right to reject your suggestion and point you to our cog
|
||||
board to request it for a third-party cog
|
||||
|
||||
If you are requesting a command:
|
||||
- Include what cog it should be in and a name for the command
|
||||
- Describe the intended functionality for the command
|
||||
- Note any restrictions on who can use the command or where it can be used
|
||||
|
||||
If you are requesting API functionality:
|
||||
- Describe what it should do
|
||||
- Note whether it is to extend existing functionality or introduce new functionality
|
||||
|
||||
-->
|
||||
30
.github/ISSUE_TEMPLATE/other_bug.md
vendored
Normal file
@@ -0,0 +1,30 @@
|
||||
---
|
||||
name: Bug report
|
||||
about: For bugs that don't involve a command.
|
||||
title: ''
|
||||
labels: 'Type: Bug'
|
||||
assignees: ''
|
||||
|
||||
---
|
||||
|
||||
# Other bugs
|
||||
|
||||
<!--
|
||||
Did you find a bug with something other than a command? Fill out the following:
|
||||
-->
|
||||
|
||||
#### What were you trying to do?
|
||||
|
||||
<!-- Replace this line with a description of what you were trying to do -->
|
||||
|
||||
#### What were you expecting to happen?
|
||||
|
||||
<!-- Replace this line with a description of what you were expecting to happen -->
|
||||
|
||||
#### What actually happened?
|
||||
|
||||
<!-- Replace this line with a description of what actually happened. Include any error messages -->
|
||||
|
||||
#### How can we reproduce this issue?
|
||||
|
||||
<!-- Replace with numbered steps to reproduce the issue -->
|
||||
22
.github/PULL_REQUEST_TEMPLATE.md
vendored
@@ -1,17 +1,7 @@
|
||||
### Type
|
||||
|
||||
- [ ] Bugfix
|
||||
- [ ] Enhancement
|
||||
- [ ] New feature
|
||||
|
||||
### Description of the changes
|
||||
|
||||
|
||||
|
||||
### Have the changes in this PR been tested?
|
||||
|
||||
<!--
|
||||
Choose one (remove the line that doesn't apply):
|
||||
-->
|
||||
Yes
|
||||
No
|
||||
<!--
|
||||
If the question doesn't apply (for example, it's not a code change), choose Yes.
|
||||
|
||||
Please respond to this question truthfully. We do not delay nor reject PRs
|
||||
based on the answer to this question but it allows to better review this PR.
|
||||
-->
|
||||
|
||||
7
.github/PULL_REQUEST_TEMPLATE/PULL_REQUEST_TEMPLATE.md
vendored
Normal file
@@ -0,0 +1,7 @@
|
||||
### Type
|
||||
|
||||
- [ ] Bugfix
|
||||
- [ ] Enhancement
|
||||
- [ ] New feature
|
||||
|
||||
### Description of the changes
|
||||
332
.github/labeler.yml
vendored
@@ -1,332 +0,0 @@
|
||||
"Category: CI":
|
||||
- .github/workflows/**/*
|
||||
|
||||
|
||||
"Category: Cogs - Admin":
|
||||
# Source
|
||||
- redbot/cogs/admin/*
|
||||
# Docs
|
||||
- docs/cog_guides/admin.rst
|
||||
- docs/.resources/admin/**/*
|
||||
"Category: Cogs - Alias":
|
||||
# Source
|
||||
- redbot/cogs/alias/*
|
||||
# Docs
|
||||
- docs/cog_guides/alias.rst
|
||||
# Tests
|
||||
- redbot/pytest/alias.py
|
||||
- tests/cogs/test_alias.py
|
||||
- docs/.resources/alias/**/*
|
||||
"Category: Cogs - Audio":
|
||||
# Source
|
||||
- any:
|
||||
- redbot/cogs/audio/**/*
|
||||
- "!redbot/cogs/audio/**/locales/*"
|
||||
# Docs
|
||||
- docs/cog_guides/audio.rst
|
||||
# Tests
|
||||
- tests/cogs/audio/**/*
|
||||
"Category: Cogs - Bank": [] # historical label for a removed cog
|
||||
"Category: Cogs - Cleanup":
|
||||
# Source
|
||||
- redbot/cogs/cleanup/*
|
||||
# Docs
|
||||
- docs/cog_guides/cleanup.rst
|
||||
"Category: Cogs - CustomCommands":
|
||||
# Source
|
||||
- redbot/cogs/customcom/*
|
||||
# Docs
|
||||
- docs/cog_customcom.rst
|
||||
- docs/cog_guides/customcommands.rst
|
||||
"Category: Cogs - Dev":
|
||||
# Source
|
||||
- redbot/core/dev_commands.py
|
||||
# Docs
|
||||
- docs/cog_guides/dev.rst
|
||||
# Tests
|
||||
- tests/core/test_dev_commands.py
|
||||
"Category: Cogs - Downloader":
|
||||
# Source
|
||||
- redbot/cogs/downloader/*
|
||||
# Docs
|
||||
- docs/cog_guides/downloader.rst
|
||||
# Tests
|
||||
- redbot/pytest/downloader.py
|
||||
- redbot/pytest/downloader_testrepo.*
|
||||
- tests/cogs/downloader/**/*
|
||||
"Category: Cogs - Economy":
|
||||
# Source
|
||||
- redbot/cogs/economy/*
|
||||
# Docs
|
||||
- docs/cog_guides/economy.rst
|
||||
# Tests
|
||||
- redbot/pytest/economy.py
|
||||
- tests/cogs/test_economy.py
|
||||
"Category: Cogs - Filter":
|
||||
# Source
|
||||
- redbot/cogs/filter/*
|
||||
# Docs
|
||||
- docs/cog_guides/filter.rst
|
||||
"Category: Cogs - General":
|
||||
# Source
|
||||
- redbot/cogs/general/*
|
||||
# Docs
|
||||
- docs/cog_guides/general.rst
|
||||
"Category: Cogs - Image":
|
||||
# Source
|
||||
- redbot/cogs/image/*
|
||||
# Docs
|
||||
- docs/cog_guides/image.rst
|
||||
"Category: Cogs - Mod":
|
||||
# Source
|
||||
- redbot/cogs/mod/*
|
||||
# Docs
|
||||
- docs/cog_guides/mod.rst
|
||||
# Tests
|
||||
- redbot/pytest/mod.py
|
||||
- tests/cogs/test_mod.py
|
||||
"Category: Cogs - Modlog":
|
||||
# Source
|
||||
- redbot/cogs/modlog/*
|
||||
# Docs
|
||||
- docs/cog_guides/modlog.rst
|
||||
"Category: Cogs - Mutes":
|
||||
# Source
|
||||
- redbot/cogs/mutes/*
|
||||
# Docs
|
||||
- docs/cog_guides/mutes.rst
|
||||
"Category: Cogs - Permissions":
|
||||
# Source
|
||||
- redbot/cogs/permissions/*
|
||||
# Docs
|
||||
- docs/cog_guides/permissions.rst
|
||||
- docs/cog_permissions.rst
|
||||
# Tests
|
||||
- redbot/pytest/permissions.py
|
||||
- tests/cogs/test_permissions.py
|
||||
"Category: Cogs - Reports":
|
||||
# Source
|
||||
- redbot/cogs/reports/*
|
||||
# Docs
|
||||
- docs/cog_guides/reports.rst
|
||||
"Category: Cogs - Streams":
|
||||
# Source
|
||||
- redbot/cogs/streams/*
|
||||
# Docs
|
||||
- docs/cog_guides/streams.rst
|
||||
"Category: Cogs - Trivia":
|
||||
# Source
|
||||
- redbot/cogs/trivia/*
|
||||
# Docs
|
||||
- docs/cog_guides/trivia.rst
|
||||
- docs/guide_trivia_list_creation.rst
|
||||
- docs/.resources/trivia/**/*
|
||||
# Tests
|
||||
- tests/cogs/test_trivia.py
|
||||
"Category: Cogs - Trivia - Lists":
|
||||
- redbot/cogs/trivia/data/lists/*
|
||||
"Category: Cogs - Warnings":
|
||||
# Source
|
||||
- redbot/cogs/warnings/*
|
||||
# Docs
|
||||
- docs/cog_guides/warnings.rst
|
||||
|
||||
|
||||
"Category: Core - API - Audio": [] # potential future feature
|
||||
"Category: Core - API - Bank":
|
||||
# Source
|
||||
- redbot/core/bank.py
|
||||
# Docs
|
||||
- docs/framework_bank.rst
|
||||
"Category: Core - API - App Commands Package":
|
||||
# Source
|
||||
- redbot/core/app_commands/*
|
||||
# Docs
|
||||
- docs/framework_app_commands.rst
|
||||
# Tests
|
||||
- tests/core/test_app_commands.py
|
||||
"Category: Core - API - Commands Package":
|
||||
# Source
|
||||
- any:
|
||||
- redbot/core/commands/*
|
||||
- "!redbot/core/commands/help.py"
|
||||
# this isn't in commands package but it just re-exports things from it
|
||||
- redbot/core/checks.py
|
||||
# Docs
|
||||
- docs/framework_checks.rst
|
||||
- docs/framework_commands.rst
|
||||
# Tests
|
||||
- tests/core/test_commands.py
|
||||
"Category: Core - API - Config":
|
||||
# Source
|
||||
- any:
|
||||
- redbot/core/_drivers/**/*
|
||||
- "!redbot/core/_drivers/**/locales/*"
|
||||
- redbot/core/_config.py
|
||||
- redbot/core/config.py
|
||||
# Docs
|
||||
- docs/framework_config.rst
|
||||
# Tests
|
||||
- tests/core/test_config.py
|
||||
"Category: Core - API - Other":
|
||||
# Source
|
||||
- redbot/__init__.py
|
||||
- redbot/core/__init__.py
|
||||
- redbot/core/data_manager.py
|
||||
- redbot/core/errors.py
|
||||
- redbot/core/tree.py
|
||||
# Docs
|
||||
- docs/framework_datamanager.rst
|
||||
- docs/framework_tree.rst
|
||||
# Tests
|
||||
- redbot/pytest/data_manager.py
|
||||
- tests/core/test_cog_manager.py
|
||||
- tests/core/test_data_manager.py
|
||||
- tests/core/test_version.py
|
||||
"Category: Core - API - Utils Package":
|
||||
# Source
|
||||
- any:
|
||||
- redbot/core/utils/*
|
||||
- "!redbot/core/utils/_internal_utils.py"
|
||||
# Docs
|
||||
- docs/framework_utils.rst
|
||||
# Tests
|
||||
- tests/core/test_utils.py
|
||||
"Category: Core - Bot Class":
|
||||
# Source
|
||||
- redbot/core/bot.py
|
||||
# Docs
|
||||
- docs/framework_apikeys.rst
|
||||
- docs/framework_bot.rst
|
||||
"Category: Core - Bot Commands":
|
||||
# Source
|
||||
- redbot/core/core_commands.py
|
||||
- redbot/core/_diagnoser.py
|
||||
# Docs
|
||||
- docs/.resources/cog_manager_ui/**/*
|
||||
- docs/cog_guides/cog_manager_ui.rst
|
||||
- docs/cog_guides/core.rst
|
||||
"Category: Core - Command-line Interfaces":
|
||||
- redbot/__main__.py
|
||||
- redbot/logging.py
|
||||
- redbot/core/_cli.py
|
||||
- redbot/core/_debuginfo.py
|
||||
- redbot/setup.py
|
||||
"Category: Core - Help":
|
||||
- redbot/core/commands/help.py
|
||||
"Category: Core - i18n":
|
||||
# Source
|
||||
- redbot/core/_i18n.py
|
||||
- redbot/core/i18n.py
|
||||
# Locale files
|
||||
- redbot/**/locales/*
|
||||
# Docs
|
||||
- docs/framework_i18n.rst
|
||||
"Category: Core - Modlog":
|
||||
# Source
|
||||
- redbot/core/generic_casetypes.py
|
||||
- redbot/core/modlog.py
|
||||
# Docs
|
||||
- docs/framework_modlog.rst
|
||||
"Category: Core - Other Internals":
|
||||
# Source
|
||||
- redbot/core/_cog_manager.py
|
||||
- redbot/core/_events.py
|
||||
- redbot/core/_global_checks.py
|
||||
- redbot/core/_settings_caches.py
|
||||
- redbot/core/_sharedlibdeprecation.py
|
||||
- redbot/core/utils/_internal_utils.py
|
||||
# Tests
|
||||
- redbot/pytest/__init__.py
|
||||
- redbot/pytest/cog_manager.py
|
||||
- redbot/pytest/core.py
|
||||
- tests/core/test_installation.py
|
||||
"Category: Core - RPC/ZMQ":
|
||||
# Source
|
||||
- redbot/core/_rpc.py
|
||||
# Docs
|
||||
- docs/framework_rpc.rst
|
||||
# Tests
|
||||
- redbot/pytest/rpc.py
|
||||
- tests/core/test_rpc.py
|
||||
- tests/rpc_test.html
|
||||
|
||||
|
||||
"Category: Docker": [] # potential future feature
|
||||
|
||||
|
||||
"Category: Docs - Changelogs":
|
||||
- CHANGES.rst
|
||||
- docs/changelog.rst
|
||||
- docs/incompatible_changes/**/*
|
||||
"Category: Docs - For Developers":
|
||||
- docs/framework_events.rst
|
||||
- docs/guide_cog_creation.rst
|
||||
- docs/guide_cog_creators.rst
|
||||
- docs/guide_migration.rst
|
||||
- docs/guide_publish_cogs.rst
|
||||
- docs/guide_slash_and_interactions.rst
|
||||
"Category: Docs - Install Guides":
|
||||
- docs/about_venv.rst
|
||||
- docs/autostart_*.rst
|
||||
- docs/.resources/bot-guide/**/*
|
||||
- docs/bot_application_guide.rst
|
||||
- docs/install_guides/**/*
|
||||
- docs/update_red.rst
|
||||
"Category: Docs - Other":
|
||||
- docs/host-list.rst
|
||||
- docs/index.rst
|
||||
- docs/version_guarantees.rst
|
||||
- README.md
|
||||
"Category: Docs - User Guides":
|
||||
- docs/getting_started.rst
|
||||
- docs/intents.rst
|
||||
- docs/red_core_data_statement.rst
|
||||
# TODO: move these to `docs/.resources/getting_started` subfolder
|
||||
- docs/.resources/red-console.png
|
||||
- docs/.resources/code-grant.png
|
||||
- docs/.resources/instances-ssh-button.png
|
||||
- docs/.resources/ssh-output.png
|
||||
|
||||
|
||||
"Category: Meta":
|
||||
# top-level files
|
||||
- any:
|
||||
- '*'
|
||||
- '!README.md'
|
||||
- '!CHANGES.rst'
|
||||
# .gitattributes files
|
||||
- '**/.gitattributes'
|
||||
# GitHub configuration files, with the exception of CI configuration
|
||||
- .github/*
|
||||
- .github/ISSUE_TEMPLATE/*
|
||||
- .github/PULL_REQUEST_TEMPLATE/*
|
||||
# documentation configuration, extensions, scripts, templates, etc.
|
||||
- docs/conf.py
|
||||
- docs/_ext/**/*
|
||||
- docs/_html/**/*
|
||||
- docs/make.bat
|
||||
- docs/Makefile
|
||||
- docs/prolog.txt
|
||||
- docs/_templates/**/*
|
||||
# empty file
|
||||
- redbot/cogs/__init__.py
|
||||
# py.typed file
|
||||
- redbot/py.typed
|
||||
# requirements files
|
||||
- requirements/*
|
||||
# schema files
|
||||
- schema/*
|
||||
# tests configuration, global fixtures, etc.
|
||||
- tests/conftest.py
|
||||
- tests/__init__.py
|
||||
- tests/*/__init__.py
|
||||
# repository tools
|
||||
- tools/*
|
||||
|
||||
|
||||
# "Category: RPC/ZMQ methods": [] # can't be matched by file patterns
|
||||
|
||||
|
||||
"Category: Vendored Packages":
|
||||
- redbot/vendored/**/*
|
||||
@@ -1,17 +1,15 @@
|
||||
name: Auto Labeler - Issues
|
||||
name: Auto Labeler
|
||||
on:
|
||||
issues:
|
||||
types: [opened]
|
||||
|
||||
permissions:
|
||||
issues: write
|
||||
|
||||
jobs:
|
||||
apply_triage_label_to_issues:
|
||||
build:
|
||||
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Apply Triage Label
|
||||
uses: actions/github-script@v6
|
||||
uses: actions/github-script@0.4.0
|
||||
with:
|
||||
github-token: ${{secrets.GITHUB_TOKEN}}
|
||||
script: |
|
||||
@@ -20,7 +18,7 @@ jobs:
|
||||
console.log('Issue already has Status label, skipping...');
|
||||
return;
|
||||
}
|
||||
github.rest.issues.addLabels({
|
||||
github.issues.addLabels({
|
||||
issue_number: context.issue.number,
|
||||
owner: context.repo.owner,
|
||||
repo: context.repo.repo,
|
||||
27
.github/workflows/auto_labeler_pr.yml
vendored
@@ -1,27 +0,0 @@
|
||||
name: Auto Labeler - PRs
|
||||
on:
|
||||
pull_request_target:
|
||||
types:
|
||||
- opened
|
||||
- synchronize
|
||||
- reopened
|
||||
- labeled
|
||||
- unlabeled
|
||||
|
||||
permissions:
|
||||
pull-requests: write
|
||||
|
||||
jobs:
|
||||
label_pull_requests:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Apply Type Label
|
||||
uses: actions/labeler@v4
|
||||
with:
|
||||
repo-token: "${{ secrets.GITHUB_TOKEN }}"
|
||||
sync-labels: true
|
||||
|
||||
- name: Label documentation-only changes.
|
||||
uses: Jackenmen/label-doconly-changes@v1
|
||||
env:
|
||||
LDC_LABELS: Docs-only
|
||||
@@ -1,23 +0,0 @@
|
||||
name: Check label pattern exhaustiveness
|
||||
on:
|
||||
pull_request:
|
||||
push:
|
||||
|
||||
jobs:
|
||||
check_label_pattern_exhaustiveness:
|
||||
name: Check label pattern exhaustiveness
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout the repository
|
||||
uses: actions/checkout@v4
|
||||
- name: Set up Python
|
||||
uses: actions/setup-python@v4
|
||||
with:
|
||||
python-version: "3.8"
|
||||
- name: Install script's pre-requirements
|
||||
run: |
|
||||
python -m pip install -U pip
|
||||
python -m pip install -U pathspec pyyaml rich
|
||||
- name: Check label pattern exhaustiveness
|
||||
run: |
|
||||
python .github/workflows/scripts/check_label_pattern_exhaustiveness.py
|
||||
57
.github/workflows/codeql-analysis.yml
vendored
@@ -1,57 +0,0 @@
|
||||
name: "CodeQL"
|
||||
|
||||
on:
|
||||
push:
|
||||
pull_request:
|
||||
schedule:
|
||||
- cron: '0 14 * * 4'
|
||||
workflow_dispatch:
|
||||
|
||||
jobs:
|
||||
analyze:
|
||||
name: Analyze
|
||||
runs-on: ubuntu-latest
|
||||
permissions:
|
||||
security-events: write
|
||||
actions: read
|
||||
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Set up Python
|
||||
uses: actions/setup-python@v4
|
||||
with:
|
||||
python-version: "3.8"
|
||||
|
||||
- name: Install dependencies
|
||||
run: |
|
||||
python -m pip install -U pip wheel
|
||||
python -m pip install -e .[all]
|
||||
# Set the `CODEQL-PYTHON` environment variable to the Python executable
|
||||
# that includes the dependencies
|
||||
echo "CODEQL_PYTHON=$(which python)" >> $GITHUB_ENV
|
||||
|
||||
# Initializes the CodeQL tools for scanning.
|
||||
- name: Initialize CodeQL
|
||||
uses: github/codeql-action/init@v3
|
||||
with:
|
||||
languages: 'python'
|
||||
# Override the default behavior so that the action doesn't attempt
|
||||
# to auto-install Python dependencies
|
||||
# Learn more...
|
||||
# https://docs.github.com/en/free-pro-team@latest/github/finding-security-vulnerabilities-and-errors-in-your-code/configuring-code-scanning#analyzing-python-dependencies
|
||||
|
||||
# ℹ️ Command-line programs to run using the OS shell.
|
||||
# 📚 https://git.io/JvXDl
|
||||
|
||||
# ✏️ If the Autobuild fails above, remove it and uncomment the following three lines
|
||||
# and modify them (or add more) to build your code if your project
|
||||
# uses a compiled language
|
||||
|
||||
#- run: |
|
||||
# make bootstrap
|
||||
# make release
|
||||
|
||||
- name: Perform CodeQL Analysis
|
||||
uses: github/codeql-action/analyze@v3
|
||||
32
.github/workflows/crowdin_upload_strings.yml
vendored
@@ -1,32 +0,0 @@
|
||||
name: Crowdin - Upload strings
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- V3/develop
|
||||
|
||||
jobs:
|
||||
deploy:
|
||||
if: github.repository == 'Cog-Creators/Red-DiscordBot'
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- name: Set up Python
|
||||
uses: actions/setup-python@v4
|
||||
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 crowdin3
|
||||
pip install redgettext==3.4.2
|
||||
- name: Generate source files
|
||||
run: |
|
||||
make gettext
|
||||
- name: Upload source files
|
||||
run: |
|
||||
make upload_translations
|
||||
env:
|
||||
CROWDIN_PERSONAL_TOKEN: ${{ secrets.CROWDIN_PERSONAL_TOKEN }}
|
||||
CROWDIN_PROJECT_ID: ${{ secrets.CROWDIN_IDENTIFIER }}
|
||||
24
.github/workflows/lint_python.yaml
vendored
@@ -1,30 +1,16 @@
|
||||
name: Lint Python
|
||||
on:
|
||||
pull_request:
|
||||
push:
|
||||
repository_dispatch:
|
||||
types:
|
||||
- dispatched_test
|
||||
|
||||
env:
|
||||
ref: ${{ github.event.client_payload.ref || '' }}
|
||||
on: [push, pull_request]
|
||||
|
||||
jobs:
|
||||
lint_python:
|
||||
name: Lint Python
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: actions/checkout@v1
|
||||
- uses: actions/setup-python@v1
|
||||
with:
|
||||
ref: ${{ env.ref }}
|
||||
- uses: actions/setup-python@v4
|
||||
with:
|
||||
python-version: "3.8"
|
||||
- run: >
|
||||
python -m pip install
|
||||
'pyflakes @ https://github.com/pycqa/pyflakes/tarball/1911c20'
|
||||
'pycodestyle @ https://github.com/pycqa/pycodestyle/tarball/d219c68'
|
||||
'flake8 @ https://github.com/pycqa/flake8/tarball/3.7.9'
|
||||
python_version: "3.8"
|
||||
- run: "python -m pip install flake8"
|
||||
name: Install Flake8
|
||||
- run: "python -m flake8 . --count --select=E9,F7,F82 --show-source"
|
||||
name: Flake8 Linting
|
||||
|
||||
130
.github/workflows/prepare_release.yml
vendored
@@ -1,130 +0,0 @@
|
||||
name: Prepare Release
|
||||
on:
|
||||
workflow_dispatch:
|
||||
inputs:
|
||||
new_stable_version:
|
||||
description: Version number for the new stable release (leave empty to just strip `.dev1`)
|
||||
required: false
|
||||
default: 'auto'
|
||||
|
||||
permissions:
|
||||
contents: write
|
||||
pull-requests: write
|
||||
|
||||
jobs:
|
||||
crowdin_download_translations:
|
||||
needs: pr_stable_bump
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- name: Set up Python
|
||||
uses: actions/setup-python@v4
|
||||
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 crowdin3
|
||||
pip install redgettext==3.4.2
|
||||
|
||||
- name: Generate source files
|
||||
run: |
|
||||
make gettext
|
||||
- name: Download translations
|
||||
run: |
|
||||
make download_translations
|
||||
env:
|
||||
CROWDIN_PERSONAL_TOKEN: ${{ secrets.CROWDIN_PERSONAL_TOKEN }}
|
||||
CROWDIN_PROJECT_ID: ${{ secrets.CROWDIN_IDENTIFIER }}
|
||||
|
||||
- name: Create Pull Request
|
||||
id: cpr_crowdin
|
||||
uses: peter-evans/create-pull-request@v4
|
||||
with:
|
||||
token: ${{ secrets.GITHUB_TOKEN }}
|
||||
commit-message: Automated Crowdin downstream
|
||||
title: "Automated Crowdin downstream"
|
||||
body: |
|
||||
This is an automated PR that is part of Prepare Release automated workflow (2 out of 2).
|
||||
Please ensure that there are no errors or invalid files are in the PR.
|
||||
labels: "Automated PR, Changelog Entry: Skipped"
|
||||
branch: "automated/i18n"
|
||||
author: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
|
||||
milestone: ${{ needs.pr_stable_bump.outputs.milestone_number }}
|
||||
|
||||
- name: Close and reopen the PR with different token to trigger CI
|
||||
uses: actions/github-script@v6
|
||||
env:
|
||||
PR_NUMBER: ${{ steps.cpr_crowdin.outputs.pull-request-number }}
|
||||
PR_OPERATION: ${{ steps.cpr_crowdin.outputs.pull-request-operation }}
|
||||
with:
|
||||
github-token: ${{ secrets.cogcreators_bot_repo_scoped }}
|
||||
script: |
|
||||
const script = require(
|
||||
`${process.env.GITHUB_WORKSPACE}/.github/workflows/scripts/close_and_reopen_pr.js`
|
||||
);
|
||||
console.log(script({github, context}));
|
||||
|
||||
pr_stable_bump:
|
||||
runs-on: ubuntu-latest
|
||||
outputs:
|
||||
milestone_number: ${{ steps.get_milestone_number.outputs.result }}
|
||||
steps:
|
||||
# Checkout repository and install Python
|
||||
- uses: actions/checkout@v4
|
||||
- name: Set up Python
|
||||
uses: actions/setup-python@v4
|
||||
with:
|
||||
python-version: '3.8'
|
||||
|
||||
# Create PR for stable version bump
|
||||
- name: Update Red version number from input
|
||||
id: bump_version_stable
|
||||
run: |
|
||||
python .github/workflows/scripts/bump_version.py
|
||||
env:
|
||||
PYTHONPATH: ${{ github.workspace }}:${{ env.PYTHONPATH }}
|
||||
NEW_STABLE_VERSION: ${{ github.event.inputs.new_stable_version }}
|
||||
|
||||
# Get milestone number of the milestone for the new stable version
|
||||
- name: Get milestone number
|
||||
id: get_milestone_number
|
||||
uses: actions/github-script@v6
|
||||
env:
|
||||
MILESTONE_TITLE: ${{ steps.bump_version_stable.outputs.new_version }}
|
||||
with:
|
||||
script: |
|
||||
const script = require(
|
||||
`${process.env.GITHUB_WORKSPACE}/.github/workflows/scripts/get_milestone_number_by_exact_title.js`
|
||||
);
|
||||
return await script({github, context});
|
||||
|
||||
- name: Create Pull Request
|
||||
id: cpr_bump_stable
|
||||
uses: peter-evans/create-pull-request@v4
|
||||
with:
|
||||
token: ${{ secrets.GITHUB_TOKEN }}
|
||||
commit-message: Version bump to ${{ steps.bump_version_stable.outputs.new_version }}
|
||||
title: Version bump to ${{ steps.bump_version_stable.outputs.new_version }}
|
||||
body: |
|
||||
This is an automated PR that is part of Prepare Release automated workflow (1 out of 2).
|
||||
Please ensure that there are no errors or invalid files are in the PR.
|
||||
labels: "Automated PR, Changelog Entry: Skipped"
|
||||
branch: "automated/pr_bumps/${{ steps.bump_version_stable.outputs.new_version }}"
|
||||
author: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
|
||||
milestone: ${{ steps.get_milestone_number.outputs.result }}
|
||||
|
||||
- name: Close and reopen the PR with different token to trigger CI
|
||||
uses: actions/github-script@v6
|
||||
env:
|
||||
PR_NUMBER: ${{ steps.cpr_bump_stable.outputs.pull-request-number }}
|
||||
PR_OPERATION: ${{ steps.cpr_bump_stable.outputs.pull-request-operation }}
|
||||
with:
|
||||
github-token: ${{ secrets.cogcreators_bot_repo_scoped }}
|
||||
script: |
|
||||
const script = require(
|
||||
`${process.env.GITHUB_WORKSPACE}/.github/workflows/scripts/close_and_reopen_pr.js`
|
||||
);
|
||||
console.log(await script({github, context}));
|
||||
28
.github/workflows/publish_crowdin.yml
vendored
Normal file
@@ -0,0 +1,28 @@
|
||||
name: Publish to Crowdin
|
||||
on:
|
||||
push:
|
||||
tags:
|
||||
- "*"
|
||||
|
||||
jobs:
|
||||
deploy:
|
||||
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: Publish
|
||||
env:
|
||||
CROWDIN_API_KEY: ${{ secrets.crowdin_token}}
|
||||
CROWDIN_PROJECT_ID: ${{ secrets.crowdin_identifier }}
|
||||
run: |
|
||||
make upload_translations
|
||||
26
.github/workflows/publish_pypi.yml
vendored
Normal file
@@ -0,0 +1,26 @@
|
||||
name: Publish to PyPI
|
||||
on:
|
||||
push:
|
||||
tags:
|
||||
- "*"
|
||||
|
||||
jobs:
|
||||
deploy:
|
||||
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/*
|
||||
220
.github/workflows/publish_release.yml
vendored
@@ -1,220 +0,0 @@
|
||||
name: Publish Release
|
||||
on:
|
||||
push:
|
||||
tags:
|
||||
- "3.[0-9]+.[0-9]+"
|
||||
|
||||
jobs:
|
||||
release_information:
|
||||
if: github.repository == 'Cog-Creators/Red-DiscordBot'
|
||||
name: GO HERE BEFORE APPROVING
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
# Checkout repository and install Python
|
||||
- uses: actions/checkout@v4
|
||||
- name: Set up Python
|
||||
uses: actions/setup-python@v4
|
||||
with:
|
||||
python-version: '3.8'
|
||||
|
||||
# Get version to release
|
||||
- name: Get version to release
|
||||
id: version_to_release
|
||||
run: |
|
||||
python .github/workflows/scripts/bump_version.py
|
||||
env:
|
||||
PYTHONPATH: ${{ github.workspace }}:${{ env.PYTHONPATH }}
|
||||
JUST_RETURN_VERSION: '1'
|
||||
|
||||
# Print release information
|
||||
- name: REVIEW OUTPUT OF THIS STEP BEFORE APPROVING
|
||||
env:
|
||||
TAG_BASE_BRANCH: ${{ github.event.base_ref }}
|
||||
TAG_REF_NAME: ${{ github.ref }}
|
||||
RELEASE_VERSION: ${{ steps.version_to_release.outputs.version }}
|
||||
run: |
|
||||
echo 'Release information:'
|
||||
echo "- Branch the tag was based off: ${TAG_BASE_BRANCH#'refs/heads/'}"
|
||||
echo "- Tag name: ${TAG_REF_NAME#'refs/tags/'}"
|
||||
echo "- Release version: $RELEASE_VERSION"
|
||||
|
||||
echo "TAG_NAME=${TAG_REF_NAME#'refs/tags/'}" >> $GITHUB_ENV
|
||||
|
||||
- name: Ensure the tag name corresponds to the released version
|
||||
env:
|
||||
RELEASE_VERSION: ${{ steps.version_to_release.outputs.version }}
|
||||
run: |
|
||||
if [[ "$TAG_NAME" != "$RELEASE_VERSION" ]]; then
|
||||
echo -n "The tag name ($TAG_NAME) is not the same as"
|
||||
echo " the release version ($RELEASE_VERSION)!"
|
||||
exit 1
|
||||
else
|
||||
echo "The tag name and the release version are the same ($TAG_NAME)."
|
||||
echo 'Continuing...'
|
||||
fi
|
||||
|
||||
build:
|
||||
name: Build package
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
|
||||
- name: Set up Python
|
||||
uses: actions/setup-python@v4
|
||||
with:
|
||||
python-version: '3.8'
|
||||
|
||||
- name: Install dependencies
|
||||
run: |
|
||||
python -m pip install --upgrade pip
|
||||
python -m pip install --upgrade build twine
|
||||
|
||||
- name: Build
|
||||
run: python -m build
|
||||
- name: Check built distributions
|
||||
run: python -m twine check dist/*
|
||||
|
||||
- name: Upload packaged distributions
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: build-output
|
||||
path: ./dist
|
||||
|
||||
generate_default_ll_server_config:
|
||||
name: Generate default application.yml
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
|
||||
- name: Set up Python
|
||||
uses: actions/setup-python@v4
|
||||
with:
|
||||
python-version: '3.8'
|
||||
|
||||
- name: Install script's dependencies
|
||||
run: python -m pip install PyYAML
|
||||
|
||||
- name: Generate default application.yml
|
||||
env:
|
||||
APP_YML_FILE: "Red-DiscordBot-${{ github.ref_name }}-default-lavalink-application.yml"
|
||||
run: |
|
||||
mkdir -p release_assets
|
||||
python .github/workflows/scripts/get_default_ll_server_config.py "release_assets/$APP_YML_FILE"
|
||||
|
||||
- name: Upload default application.yml
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: ll-default-server-config
|
||||
path: ./release_assets
|
||||
|
||||
release_to_pypi:
|
||||
needs:
|
||||
- release_information
|
||||
- build
|
||||
- generate_default_ll_server_config
|
||||
environment: Release
|
||||
name: Release to PyPI
|
||||
runs-on: ubuntu-latest
|
||||
permissions:
|
||||
contents: write
|
||||
id-token: write
|
||||
steps:
|
||||
- name: Download packaged distributions
|
||||
uses: actions/download-artifact@v4
|
||||
with:
|
||||
name: build-output
|
||||
path: dist/
|
||||
|
||||
- name: Download default application.yml
|
||||
uses: actions/download-artifact@v4
|
||||
with:
|
||||
name: ll-default-server-config
|
||||
path: release_assets/
|
||||
|
||||
- name: Upload dists to GitHub Release
|
||||
env:
|
||||
GITHUB_TOKEN: "${{ github.token }}"
|
||||
run: |
|
||||
gh release upload "$GITHUB_REF_NAME" dist/* release_assets/* --repo "$GITHUB_REPOSITORY"
|
||||
|
||||
- name: Publish package distributions to PyPI
|
||||
uses: pypa/gh-action-pypi-publish@release/v1
|
||||
with:
|
||||
# This is already checked during the build.
|
||||
verify-metadata: false
|
||||
# Allow security-minded people to verify whether the files on PyPI
|
||||
# were automatically uploaded by a CI script.
|
||||
print-hash: true
|
||||
|
||||
pr_dev_bump:
|
||||
permissions:
|
||||
contents: write
|
||||
pull-requests: write
|
||||
needs: release_to_pypi
|
||||
name: Update Red version number to dev
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Get base branch
|
||||
env:
|
||||
TAG_BASE_BRANCH: ${{ github.event.base_ref }}
|
||||
run: |
|
||||
echo "BASE_BRANCH=${TAG_BASE_BRANCH#'refs/heads/'}" >> $GITHUB_ENV
|
||||
|
||||
- uses: actions/checkout@v4
|
||||
with:
|
||||
ref: ${{ env.BASE_BRANCH }}
|
||||
- name: Set up Python
|
||||
uses: actions/setup-python@v4
|
||||
with:
|
||||
python-version: '3.8'
|
||||
|
||||
# Version bump to development version
|
||||
- name: Update Red version number to dev
|
||||
id: bump_version_dev
|
||||
run: |
|
||||
python .github/workflows/scripts/bump_version.py
|
||||
env:
|
||||
PYTHONPATH: ${{ github.workspace }}:${{ env.PYTHONPATH }}
|
||||
DEV_BUMP: '1'
|
||||
|
||||
# Get milestone number of the milestone for the old version
|
||||
- name: Get milestone number
|
||||
id: get_milestone_number
|
||||
uses: actions/github-script@v6
|
||||
env:
|
||||
MILESTONE_TITLE: ${{ steps.bump_version_dev.outputs.old_version }}
|
||||
with:
|
||||
script: |
|
||||
const script = require(
|
||||
`${process.env.GITHUB_WORKSPACE}/.github/workflows/scripts/get_milestone_number_by_exact_title.js`
|
||||
);
|
||||
return await script({github, context});
|
||||
|
||||
- name: Create Pull Request
|
||||
id: cpr_bump_dev
|
||||
uses: peter-evans/create-pull-request@v4
|
||||
with:
|
||||
token: ${{ secrets.GITHUB_TOKEN }}
|
||||
commit-message: Version bump to ${{ steps.bump_version_dev.outputs.new_version }}
|
||||
title: Version bump to ${{ steps.bump_version_dev.outputs.new_version }}
|
||||
body: |
|
||||
This is an automated PR.
|
||||
Please ensure that there are no errors or invalid files are in the PR.
|
||||
labels: "Automated PR, Changelog Entry: Skipped"
|
||||
branch: "automated/pr_bumps/${{ steps.bump_version_dev.outputs.new_version }}"
|
||||
author: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
|
||||
milestone: ${{ steps.get_milestone_number.outputs.result }}
|
||||
base: ${{ env.BASE_BRANCH }}
|
||||
|
||||
- name: Close and reopen the PR with different token to trigger CI
|
||||
uses: actions/github-script@v6
|
||||
env:
|
||||
PR_NUMBER: ${{ steps.cpr_bump_dev.outputs.pull-request-number }}
|
||||
PR_OPERATION: ${{ steps.cpr_bump_dev.outputs.pull-request-operation }}
|
||||
with:
|
||||
github-token: ${{ secrets.cogcreators_bot_repo_scoped }}
|
||||
script: |
|
||||
const script = require(
|
||||
`${process.env.GITHUB_WORKSPACE}/.github/workflows/scripts/close_and_reopen_pr.js`
|
||||
);
|
||||
console.log(await script({github, context}));
|
||||
99
.github/workflows/run_pip_compile.yaml
vendored
@@ -1,99 +0,0 @@
|
||||
name: Generate requirements files with pip-compile.
|
||||
|
||||
on:
|
||||
workflow_dispatch:
|
||||
|
||||
jobs:
|
||||
generate_requirements:
|
||||
name: Generate requirements files for ${{ matrix.os }} platform.
|
||||
runs-on: ${{ matrix.os }}
|
||||
strategy:
|
||||
matrix:
|
||||
os:
|
||||
- ubuntu-latest
|
||||
- windows-latest
|
||||
- macos-latest
|
||||
steps:
|
||||
- name: Checkout the repository.
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Set up Python 3.8.
|
||||
uses: actions/setup-python@v4
|
||||
with:
|
||||
python-version: |
|
||||
3.11
|
||||
3.10
|
||||
3.9
|
||||
3.8
|
||||
|
||||
- name: Install dependencies on Linux/macOS
|
||||
if: matrix.os != 'windows-latest'
|
||||
run: |
|
||||
python3.11 -m pip install -U pip pip-tools
|
||||
python3.10 -m pip install -U pip pip-tools
|
||||
python3.9 -m pip install -U pip pip-tools
|
||||
python3.8 -m pip install -U pip pip-tools
|
||||
|
||||
- name: Install dependencies on Windows
|
||||
if: matrix.os == 'windows-latest'
|
||||
run: |
|
||||
py -3.11 -m pip install -U pip pip-tools
|
||||
py -3.10 -m pip install -U pip pip-tools
|
||||
py -3.9 -m pip install -U pip pip-tools
|
||||
py -3.8 -m pip install -U pip pip-tools
|
||||
|
||||
- name: Generate requirements files.
|
||||
id: compile_requirements
|
||||
run: |
|
||||
python .github/workflows/scripts/compile_requirements.py
|
||||
|
||||
- name: Upload requirements files.
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: ${{ steps.compile_requirements.outputs.sys_platform }}
|
||||
path: requirements/${{ steps.compile_requirements.outputs.sys_platform }}-*.txt
|
||||
|
||||
merge_requirements:
|
||||
name: Merge requirements files.
|
||||
needs: generate_requirements
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout the repository.
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Set up Python 3.8.
|
||||
uses: actions/setup-python@v4
|
||||
with:
|
||||
python-version: '3.8'
|
||||
|
||||
- name: Install dependencies
|
||||
run: |
|
||||
python -m pip install -U "packaging>=22.0"
|
||||
|
||||
- name: Download Windows requirements.
|
||||
uses: actions/download-artifact@v4
|
||||
with:
|
||||
name: win32
|
||||
path: requirements
|
||||
- name: Download Linux requirements.
|
||||
uses: actions/download-artifact@v4
|
||||
with:
|
||||
name: linux
|
||||
path: requirements
|
||||
- name: Download macOS requirements.
|
||||
uses: actions/download-artifact@v4
|
||||
with:
|
||||
name: darwin
|
||||
path: requirements
|
||||
|
||||
- name: Merge requirements files.
|
||||
run: |
|
||||
python .github/workflows/scripts/merge_requirements.py
|
||||
|
||||
- name: Upload merged requirements files.
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: merged
|
||||
path: |
|
||||
requirements/base.txt
|
||||
requirements/extra-*.txt
|
||||
59
.github/workflows/scripts/bump_version.py
vendored
@@ -1,59 +0,0 @@
|
||||
import os
|
||||
import re
|
||||
import sys
|
||||
from typing import Any, Match
|
||||
|
||||
import redbot
|
||||
|
||||
GITHUB_OUTPUT = os.environ["GITHUB_OUTPUT"]
|
||||
|
||||
|
||||
def set_output(name: str, value: Any) -> None:
|
||||
with open(GITHUB_OUTPUT, "a", encoding="utf-8") as fp:
|
||||
fp.write(f"{name}={value}\n")
|
||||
|
||||
|
||||
if int(os.environ.get("JUST_RETURN_VERSION", 0)):
|
||||
set_output("version", redbot._VERSION)
|
||||
sys.exit(0)
|
||||
|
||||
|
||||
version_info = None
|
||||
|
||||
|
||||
def repl(match: Match[str]) -> str:
|
||||
global version_info
|
||||
|
||||
set_output("old_version", match.group("version"))
|
||||
|
||||
new_stable_version = os.environ.get("NEW_STABLE_VERSION", "auto")
|
||||
if new_stable_version == "auto":
|
||||
version_info = redbot.VersionInfo.from_str(match.group("version"))
|
||||
version_info.dev_release = None
|
||||
else:
|
||||
version_info = redbot.VersionInfo.from_str(new_stable_version)
|
||||
|
||||
if int(os.environ.get("DEV_BUMP", 0)):
|
||||
version_info.micro += 1
|
||||
version_info.dev_release = 1
|
||||
|
||||
return f'_VERSION = "{version_info}"'
|
||||
|
||||
|
||||
with open("redbot/__init__.py", encoding="utf-8") as fp:
|
||||
new_contents, found = re.subn(
|
||||
pattern=r'^_VERSION = "(?P<version>[^"]*)"$',
|
||||
repl=repl,
|
||||
string=fp.read(),
|
||||
count=1,
|
||||
flags=re.MULTILINE,
|
||||
)
|
||||
|
||||
if not found:
|
||||
print("Couldn't find `_VERSION` line!")
|
||||
sys.exit(1)
|
||||
|
||||
with open("redbot/__init__.py", "w", encoding="utf-8", newline="\n") as fp:
|
||||
fp.write(new_contents)
|
||||
|
||||
set_output("new_version", version_info)
|
||||
@@ -1,215 +0,0 @@
|
||||
import itertools
|
||||
import operator
|
||||
import os
|
||||
import subprocess
|
||||
from pathlib import Path
|
||||
from typing import Any, Dict, Iterable, List, Optional
|
||||
from typing_extensions import Self
|
||||
|
||||
import rich
|
||||
import yaml
|
||||
from rich.console import Console, ConsoleOptions, RenderResult
|
||||
from rich.tree import Tree
|
||||
from pathspec import PathSpec
|
||||
from pathspec.patterns.gitwildmatch import GitWildMatchPattern
|
||||
|
||||
|
||||
ROOT_PATH = Path(__file__).resolve().parents[3]
|
||||
|
||||
|
||||
class Matcher:
|
||||
def __init__(self, *, any: Iterable[str] = (), all: Iterable[str] = ()) -> None:
|
||||
self.any_patterns = tuple(any)
|
||||
self.any_specs = self._get_pathspecs(self.any_patterns)
|
||||
self.all_patterns = tuple(all)
|
||||
self.all_specs = self._get_pathspecs(self.all_patterns)
|
||||
|
||||
def __repr__(self) -> str:
|
||||
return f"Matcher(any={self.any_patterns!r}, all={self.all_patterns!r})"
|
||||
|
||||
def __eq__(self, other: Any) -> bool:
|
||||
if isinstance(other, self.__class__):
|
||||
return (
|
||||
self.any_patterns == other.any_patterns and self.all_patterns == other.all_patterns
|
||||
)
|
||||
return NotImplemented
|
||||
|
||||
def __hash__(self) -> int:
|
||||
return hash((self.any_patterns, self.all_patterns))
|
||||
|
||||
@classmethod
|
||||
def _get_pathspecs(cls, patterns: Iterable[str]) -> List[PathSpec]:
|
||||
return tuple(
|
||||
PathSpec.from_lines(GitWildMatchPattern, cls._get_pattern_lines(pattern))
|
||||
for pattern in patterns
|
||||
)
|
||||
|
||||
@staticmethod
|
||||
def _get_pattern_lines(pattern: str) -> List[str]:
|
||||
# an approximation of actions/labeler's minimatch globs
|
||||
if pattern.startswith("!"):
|
||||
pattern_lines = ["*", f"!/{pattern[1:]}"]
|
||||
else:
|
||||
pattern_lines = [f"/{pattern}"]
|
||||
if pattern.endswith("*") and "**" not in pattern:
|
||||
pattern_lines.append(f"!/{pattern}/")
|
||||
return pattern_lines
|
||||
|
||||
@classmethod
|
||||
def get_label_matchers(cls) -> Dict[str, List[Self]]:
|
||||
with open(ROOT_PATH / ".github/labeler.yml", encoding="utf-8") as fp:
|
||||
label_definitions = yaml.safe_load(fp)
|
||||
label_matchers: Dict[str, List[Matcher]] = {}
|
||||
for label_name, matcher_definitions in label_definitions.items():
|
||||
matchers = label_matchers[label_name] = []
|
||||
for idx, matcher_data in enumerate(matcher_definitions):
|
||||
if isinstance(matcher_data, str):
|
||||
matchers.append(cls(any=[matcher_data]))
|
||||
elif isinstance(matcher_data, dict):
|
||||
matchers.append(
|
||||
cls(any=matcher_data.pop("any", []), all=matcher_data.pop("all", []))
|
||||
)
|
||||
if matcher_data:
|
||||
raise RuntimeError(
|
||||
f"Unexpected keys at index {idx} for label {label_name!r}: "
|
||||
+ ", ".join(map(repr, matcher_data))
|
||||
)
|
||||
elif matcher_data is not None:
|
||||
raise RuntimeError(f"Unexpected type at index {idx} for label {label_name!r}")
|
||||
|
||||
return label_matchers
|
||||
|
||||
|
||||
class PathNode:
|
||||
def __init__(self, parent_tree: Tree, path: Path, *, label: Optional[str] = None) -> None:
|
||||
self.parent_tree = parent_tree
|
||||
self.path = path
|
||||
self.label = label
|
||||
|
||||
def __rich__(self) -> str:
|
||||
if self.label is not None:
|
||||
return self.label
|
||||
return self.path.name
|
||||
|
||||
|
||||
class DirectoryTree:
|
||||
def __init__(self, label: str) -> None:
|
||||
self.root = Tree(PathNode(Tree(""), Path(), label=label))
|
||||
self._previous = self.root
|
||||
|
||||
def __bool__(self) -> bool:
|
||||
return bool(self.root.children)
|
||||
|
||||
def __rich_console__(self, console: Console, options: ConsoleOptions) -> RenderResult:
|
||||
yield from self.root.__rich_console__(console, options)
|
||||
|
||||
def add(self, file: Path) -> Tree:
|
||||
common_path = Path(os.path.commonpath([file.parent, self._previous.label.path]))
|
||||
|
||||
parent_tree = self._previous
|
||||
while parent_tree != self.root and parent_tree.label.path != common_path:
|
||||
parent_tree = parent_tree.label.parent_tree
|
||||
|
||||
for part in file.relative_to(common_path).parts:
|
||||
if parent_tree.label.path.name == "locales":
|
||||
if not parent_tree.children:
|
||||
parent_tree.add(PathNode(parent_tree, parent_tree.label.path / "*.po"))
|
||||
continue
|
||||
parent_tree = parent_tree.add(PathNode(parent_tree, parent_tree.label.path / part))
|
||||
|
||||
self._previous = parent_tree
|
||||
return parent_tree
|
||||
|
||||
|
||||
class App:
|
||||
def __init__(self) -> None:
|
||||
self.exit_code = 0
|
||||
self.label_matchers = Matcher.get_label_matchers()
|
||||
self.tracked_files = [
|
||||
Path(filename)
|
||||
for filename in subprocess.check_output(
|
||||
("git", "ls-tree", "-r", "HEAD", "--name-only"), encoding="utf-8", cwd=ROOT_PATH
|
||||
).splitlines()
|
||||
]
|
||||
self.matches_per_label = {label_name: set() for label_name in self.label_matchers}
|
||||
self.matches_per_file = []
|
||||
self.used_matchers = set()
|
||||
|
||||
def run(self) -> int:
|
||||
old_cwd = os.getcwd()
|
||||
try:
|
||||
os.chdir(ROOT_PATH)
|
||||
self._run()
|
||||
finally:
|
||||
os.chdir(old_cwd)
|
||||
return self.exit_code
|
||||
|
||||
def _run(self) -> None:
|
||||
self._collect_match_information()
|
||||
self._show_matches_per_label()
|
||||
self._show_files_without_labels()
|
||||
self._show_files_with_multiple_labels()
|
||||
self._show_unused_matchers()
|
||||
|
||||
def _collect_match_information(self) -> None:
|
||||
tmp_matches_per_file = {file: [] for file in self.tracked_files}
|
||||
|
||||
for file in self.tracked_files:
|
||||
for label_name, matchers in self.label_matchers.items():
|
||||
matched = False
|
||||
for matcher in matchers:
|
||||
if all(
|
||||
path_spec.match_file(file)
|
||||
for path_spec in itertools.chain(matcher.all_specs, matcher.any_specs)
|
||||
):
|
||||
self.matches_per_label[label_name].add(file)
|
||||
matched = True
|
||||
self.used_matchers.add(matcher)
|
||||
if matched:
|
||||
tmp_matches_per_file[file].append(label_name)
|
||||
|
||||
self.matches_per_file = sorted(tmp_matches_per_file.items(), key=operator.itemgetter(0))
|
||||
|
||||
def _show_matches_per_label(self) -> None:
|
||||
for label_name, files in self.matches_per_label.items():
|
||||
top_tree = DirectoryTree(f"{label_name}:")
|
||||
for file in sorted(files):
|
||||
top_tree.add(file)
|
||||
rich.print(top_tree)
|
||||
print()
|
||||
|
||||
def _show_files_without_labels(self) -> None:
|
||||
top_tree = DirectoryTree("\n--- Not matched ---")
|
||||
for file, labels in self.matches_per_file:
|
||||
if not labels:
|
||||
top_tree.add(file)
|
||||
if top_tree:
|
||||
self.exit_code = 1
|
||||
rich.print(top_tree)
|
||||
else:
|
||||
print("--- All files match at least one label's patterns ---")
|
||||
|
||||
def _show_files_with_multiple_labels(self) -> None:
|
||||
top_tree = DirectoryTree("\n--- Matched by more than one label ---")
|
||||
for file, labels in self.matches_per_file:
|
||||
if len(labels) > 1:
|
||||
tree = top_tree.add(file)
|
||||
for label_name in labels:
|
||||
tree.add(label_name)
|
||||
if top_tree:
|
||||
rich.print(top_tree)
|
||||
else:
|
||||
print("--- None of the files are matched by more than one label's patterns ---")
|
||||
|
||||
def _show_unused_matchers(self) -> None:
|
||||
for label_name, matchers in self.label_matchers.items():
|
||||
for idx, matcher in enumerate(matchers):
|
||||
if matcher not in self.used_matchers:
|
||||
print(
|
||||
f"--- Matcher {idx} for label {label_name!r} does not match any files! ---"
|
||||
)
|
||||
self.exit_code = 1
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
raise SystemExit(App().run())
|
||||
25
.github/workflows/scripts/close_and_reopen_pr.js
vendored
@@ -1,25 +0,0 @@
|
||||
module.exports = (async function ({github, context}) {
|
||||
const pr_number = process.env.PR_NUMBER;
|
||||
const pr_operation = process.env.PR_OPERATION;
|
||||
let sleep_time = 0;
|
||||
|
||||
if (!['created', 'updated'].includes(pr_operation)) {
|
||||
console.log('PR was not created as there were no changes.')
|
||||
return;
|
||||
}
|
||||
|
||||
for (const new_state of ['closed', 'open']) {
|
||||
// some sleep time needed to make sure API handles open after close
|
||||
if (sleep_time)
|
||||
await new Promise(r => setTimeout(r, sleep_time));
|
||||
|
||||
github.rest.issues.update({
|
||||
issue_number: pr_number,
|
||||
owner: context.repo.owner,
|
||||
repo: context.repo.repo,
|
||||
state: new_state
|
||||
});
|
||||
|
||||
sleep_time = 2000;
|
||||
}
|
||||
})
|
||||
@@ -1,52 +0,0 @@
|
||||
import os
|
||||
import re
|
||||
import shutil
|
||||
import subprocess
|
||||
import sys
|
||||
from pathlib import Path
|
||||
|
||||
|
||||
EXCLUDE_STEM_RE = re.compile(r".*-3\.(?!8-)(\d+)-extra-(doc|style)")
|
||||
GITHUB_OUTPUT = os.environ["GITHUB_OUTPUT"]
|
||||
REQUIREMENTS_FOLDER = Path(__file__).parents[3].absolute() / "requirements"
|
||||
os.chdir(REQUIREMENTS_FOLDER)
|
||||
|
||||
|
||||
def pip_compile(version: str, name: str) -> None:
|
||||
stem = f"{sys.platform}-{version}-{name}"
|
||||
if EXCLUDE_STEM_RE.fullmatch(stem):
|
||||
return
|
||||
|
||||
constraint_flags = [
|
||||
arg
|
||||
for file in REQUIREMENTS_FOLDER.glob(f"{sys.platform}-3.8-*.txt")
|
||||
for arg in ("-c", file.name)
|
||||
]
|
||||
|
||||
executable = ("py", f"-{version}") if sys.platform == "win32" else (f"python{version}",)
|
||||
subprocess.check_call(
|
||||
(
|
||||
*executable,
|
||||
"-m",
|
||||
"piptools",
|
||||
"compile",
|
||||
"--upgrade",
|
||||
"--resolver=backtracking",
|
||||
"--verbose",
|
||||
f"{name}.in",
|
||||
"--output-file",
|
||||
f"{stem}.txt",
|
||||
*constraint_flags,
|
||||
)
|
||||
)
|
||||
|
||||
|
||||
for minor in range(8, 11 + 1):
|
||||
version = f"3.{minor}"
|
||||
pip_compile(version, "base")
|
||||
shutil.copyfile(f"{sys.platform}-{version}-base.txt", "base.txt")
|
||||
for file in REQUIREMENTS_FOLDER.glob("extra-*.in"):
|
||||
pip_compile(version, file.stem)
|
||||
|
||||
with open(GITHUB_OUTPUT, "a", encoding="utf-8") as fp:
|
||||
fp.write(f"sys_platform={sys.platform}\n")
|
||||
@@ -1,31 +0,0 @@
|
||||
import sys
|
||||
from pathlib import Path
|
||||
|
||||
import yaml
|
||||
|
||||
ROOT_FOLDER = Path(__file__).parents[3].absolute()
|
||||
AUDIO_FOLDER = ROOT_FOLDER / "redbot/cogs/audio"
|
||||
|
||||
# We want to import `redbot.cogs.audio.managed_node` package as if it were top-level package
|
||||
# so we have to the `redbot/cogs/audio` directory to Python's path.
|
||||
sys.path.insert(0, str(AUDIO_FOLDER))
|
||||
|
||||
|
||||
def main() -> int:
|
||||
try:
|
||||
output_file = sys.argv[1]
|
||||
except IndexError:
|
||||
print("Usage:", sys.argv[0], "<output_file>", file=sys.stderr)
|
||||
return 2
|
||||
|
||||
import managed_node
|
||||
|
||||
server_config = managed_node.get_default_server_config()
|
||||
with open(output_file, "w", encoding="utf-8") as fp:
|
||||
yaml.safe_dump(server_config, fp)
|
||||
|
||||
return 0
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
raise SystemExit(main())
|
||||
@@ -1,49 +0,0 @@
|
||||
module.exports = (async function ({github, context}) {
|
||||
const milestone_title = process.env.MILESTONE_TITLE;
|
||||
const [repo_owner, repo_name] = process.env.GITHUB_REPOSITORY.split('/');
|
||||
|
||||
const {
|
||||
repository: {
|
||||
milestones: {
|
||||
nodes: milestones,
|
||||
pageInfo: {hasNextPage}
|
||||
}
|
||||
}
|
||||
} = await github.graphql({
|
||||
query: `
|
||||
query getMilestoneNumberByTitle(
|
||||
$repo_owner: String!
|
||||
$repo_name: String!
|
||||
$milestone_title: String!
|
||||
) {
|
||||
repository(owner:$repo_owner name:$repo_name) {
|
||||
milestones(query:$milestone_title states:OPEN first:100) {
|
||||
nodes {
|
||||
number
|
||||
title
|
||||
}
|
||||
pageInfo {
|
||||
hasNextPage
|
||||
}
|
||||
}
|
||||
}
|
||||
}`,
|
||||
repo_owner: repo_owner,
|
||||
repo_name: repo_name,
|
||||
milestone_title: milestone_title,
|
||||
});
|
||||
|
||||
if (hasNextPage) {
|
||||
// this should realistically never happen so let's just error
|
||||
core.setFailed('Impossible happened! :)');
|
||||
return;
|
||||
}
|
||||
|
||||
for (const milestone of milestones)
|
||||
if (milestone.title === milestone_title)
|
||||
return milestone.number;
|
||||
|
||||
// if no exact match is found, assume the milestone doesn't exist
|
||||
console.log('The milestone was not found. API returned the array: %o', milestones);
|
||||
return null;
|
||||
})
|
||||
207
.github/workflows/scripts/merge_requirements.py
vendored
@@ -1,207 +0,0 @@
|
||||
from __future__ import annotations
|
||||
|
||||
import os
|
||||
from pathlib import Path
|
||||
from typing import Dict, Iterable, List, TextIO, Tuple
|
||||
|
||||
from packaging.markers import Marker
|
||||
from packaging.requirements import Requirement
|
||||
|
||||
|
||||
REQUIREMENTS_FOLDER = Path(__file__).parents[3].absolute() / "requirements"
|
||||
os.chdir(REQUIREMENTS_FOLDER)
|
||||
|
||||
|
||||
class RequirementData:
|
||||
def __init__(self, requirement_string: str) -> None:
|
||||
self.req = Requirement(requirement_string)
|
||||
self.comments = set()
|
||||
|
||||
def __hash__(self) -> int:
|
||||
return hash(self.req)
|
||||
|
||||
def __eq__(self, other: RequirementData) -> bool:
|
||||
return self.req == other.req
|
||||
|
||||
@property
|
||||
def name(self) -> str:
|
||||
return self.req.name
|
||||
|
||||
@property
|
||||
def marker(self) -> Marker:
|
||||
return self.req.marker
|
||||
|
||||
@marker.setter
|
||||
def marker(self, value: Marker) -> None:
|
||||
self.req.marker = value
|
||||
|
||||
|
||||
def get_requirements(fp: TextIO) -> List[RequirementData]:
|
||||
requirements = []
|
||||
|
||||
current = None
|
||||
for line in fp.read().splitlines():
|
||||
annotation_prefix = " # "
|
||||
if line.startswith(annotation_prefix) and current is not None:
|
||||
source = line[len(annotation_prefix) :].strip()
|
||||
if source == "via":
|
||||
continue
|
||||
via_prefix = "via "
|
||||
if source.startswith(via_prefix):
|
||||
source = source[len(via_prefix) :]
|
||||
if source.startswith("-c ") and source != "-c base.txt":
|
||||
continue
|
||||
current.comments.add(source)
|
||||
elif line and not line.startswith(("#", " ")):
|
||||
current = RequirementData(line)
|
||||
requirements.append(current)
|
||||
|
||||
return requirements
|
||||
|
||||
|
||||
def iter_envs(envs: Iterable[str]) -> Iterable[Tuple[str, str]]:
|
||||
for env_name in envs:
|
||||
platform, python_version = env_name.split("-", maxsplit=1)
|
||||
yield (platform, python_version)
|
||||
|
||||
|
||||
names = ["base"]
|
||||
names.extend(file.stem for file in REQUIREMENTS_FOLDER.glob("extra-*.in"))
|
||||
base_requirements: List[RequirementData] = []
|
||||
|
||||
for name in names:
|
||||
# {req_data: {sys_platform: RequirementData}
|
||||
input_data: Dict[RequirementData, Dict[str, RequirementData]] = {}
|
||||
all_envs = set()
|
||||
all_platforms = set()
|
||||
all_python_versions = set()
|
||||
for file in REQUIREMENTS_FOLDER.glob(f"*-{name}.txt"):
|
||||
platform_name, python_version, _ = file.stem.split("-", maxsplit=2)
|
||||
env_name = f"{platform_name}-{python_version}"
|
||||
all_envs.add(env_name)
|
||||
all_platforms.add(platform_name)
|
||||
all_python_versions.add(python_version)
|
||||
with file.open(encoding="utf-8") as fp:
|
||||
requirements = get_requirements(fp)
|
||||
|
||||
for req in requirements:
|
||||
envs = input_data.setdefault(req, {})
|
||||
envs[env_name] = req
|
||||
|
||||
output = base_requirements if name == "base" else []
|
||||
for req, envs in input_data.items():
|
||||
# {platform: [python_versions...]}
|
||||
python_versions_per_platform: Dict[str, List[str]] = {}
|
||||
# {python_version: [platforms...]}
|
||||
platforms_per_python_version: Dict[str, List[str]] = {}
|
||||
platforms = python_versions_per_platform.keys()
|
||||
python_versions = platforms_per_python_version.keys()
|
||||
for env_name, other_req in envs.items():
|
||||
platform_name, python_version = env_name.split("-", maxsplit=1)
|
||||
python_versions_per_platform.setdefault(platform_name, []).append(python_version)
|
||||
platforms_per_python_version.setdefault(python_version, []).append(platform_name)
|
||||
|
||||
req.comments.update(other_req.comments)
|
||||
|
||||
base_req = next(
|
||||
(base_req for base_req in base_requirements if base_req.name == req.name), None
|
||||
)
|
||||
if base_req is not None:
|
||||
old_base_marker = base_req.marker
|
||||
old_req_marker = req.marker
|
||||
req.marker = base_req.marker = None
|
||||
if base_req.req != req.req:
|
||||
raise RuntimeError(f"Incompatible requirements for {req.name}.")
|
||||
|
||||
base_req.marker = old_base_marker
|
||||
req.marker = old_req_marker
|
||||
if base_req.marker is None or base_req.marker == req.marker:
|
||||
continue
|
||||
|
||||
if len(envs) == len(all_envs):
|
||||
output.append(req)
|
||||
continue
|
||||
|
||||
# At this point I'm wondering why I didn't just go for
|
||||
# a more generic boolean algebra simplification (sympy.simplify_logic())...
|
||||
if (
|
||||
len(set(map(frozenset, python_versions_per_platform.values()))) == 1
|
||||
or len(set(map(frozenset, platforms_per_python_version.values()))) == 1
|
||||
):
|
||||
# Either all platforms have the same Python version set
|
||||
# or all Python versions have the same platform set.
|
||||
# We can generate markers for platform (platform_marker) and Python
|
||||
# (python_version_marker) version sets separately and then simply require
|
||||
# that both markers are fulfilled at the same time (env_marker).
|
||||
|
||||
python_version_marker = (
|
||||
# Requirement present on less Python versions than not.
|
||||
" or ".join(
|
||||
f"python_version == '{python_version}'"
|
||||
for python_version in sorted(python_versions)
|
||||
)
|
||||
if len(python_versions) < len(all_python_versions - python_versions)
|
||||
# Requirement present on more Python versions than not
|
||||
# This may generate an empty string when Python version is irrelevant.
|
||||
else " and ".join(
|
||||
f"python_version != '{python_version}'"
|
||||
for python_version in sorted(all_python_versions - python_versions)
|
||||
)
|
||||
)
|
||||
|
||||
platform_marker = (
|
||||
# Requirement present on less platforms than not.
|
||||
" or ".join(f"sys_platform == '{platform}'" for platform in sorted(platforms))
|
||||
if len(platforms) < len(all_platforms - platforms)
|
||||
# Requirement present on more platforms than not
|
||||
# This may generate an empty string when platform is irrelevant.
|
||||
else " and ".join(
|
||||
f"sys_platform != '{platform}'"
|
||||
for platform in sorted(all_platforms - platforms)
|
||||
)
|
||||
)
|
||||
|
||||
if python_version_marker and platform_marker:
|
||||
env_marker = f"({python_version_marker}) and ({platform_marker})"
|
||||
else:
|
||||
env_marker = python_version_marker or platform_marker
|
||||
else:
|
||||
# Fallback to generic case.
|
||||
env_marker = (
|
||||
# Requirement present on less envs than not.
|
||||
" or ".join(
|
||||
f"(sys_platform == '{platform}' and python_version == '{python_version}')"
|
||||
for platform, python_version in iter_envs(sorted(envs))
|
||||
)
|
||||
if len(envs) < len(all_envs - envs.keys())
|
||||
else " and ".join(
|
||||
f"(sys_platform != '{platform}' and python_version != '{python_version}')"
|
||||
for platform, python_version in iter_envs(sorted(all_envs - envs.keys()))
|
||||
)
|
||||
)
|
||||
|
||||
new_marker = f"({req.marker}) and ({env_marker})" if req.marker is not None else env_marker
|
||||
req.marker = Marker(new_marker)
|
||||
if base_req is not None and base_req.marker == req.marker:
|
||||
continue
|
||||
|
||||
output.append(req)
|
||||
|
||||
output.sort(key=lambda req: (req.marker is not None, req.name))
|
||||
with open(f"{name}.txt", "w+", encoding="utf-8") as fp:
|
||||
for req in output:
|
||||
fp.write(str(req.req))
|
||||
fp.write("\n")
|
||||
comments = sorted(req.comments)
|
||||
|
||||
if len(comments) == 1:
|
||||
source = comments[0]
|
||||
fp.write(" # via ")
|
||||
fp.write(source)
|
||||
fp.write("\n")
|
||||
else:
|
||||
fp.write(" # via\n")
|
||||
for source in comments:
|
||||
fp.write(" # ")
|
||||
fp.write(source)
|
||||
fp.write("\n")
|
||||
50
.github/workflows/tests.yml
vendored
@@ -1,13 +1,5 @@
|
||||
name: Tests
|
||||
on:
|
||||
pull_request:
|
||||
push:
|
||||
repository_dispatch:
|
||||
types:
|
||||
- dispatched_test
|
||||
|
||||
env:
|
||||
ref: ${{ github.event.client_payload.ref || '' }}
|
||||
on: [push, pull_request]
|
||||
|
||||
jobs:
|
||||
tox:
|
||||
@@ -17,21 +9,12 @@ jobs:
|
||||
python_version:
|
||||
- "3.8"
|
||||
tox_env:
|
||||
- py
|
||||
- style
|
||||
- docs
|
||||
include:
|
||||
- tox_env: py38
|
||||
python_version: "3.8"
|
||||
friendly_name: Python 3.8 - Tests
|
||||
- tox_env: py39
|
||||
python_version: "3.9"
|
||||
friendly_name: Python 3.9 - Tests
|
||||
- tox_env: py310
|
||||
python_version: "3.10"
|
||||
friendly_name: Python 3.10 - Tests
|
||||
- tox_env: py311
|
||||
python_version: "3.11"
|
||||
friendly_name: Python 3.11 - Tests
|
||||
- tox_env: py
|
||||
friendly_name: Tests
|
||||
- tox_env: style
|
||||
friendly_name: Style
|
||||
- tox_env: docs
|
||||
@@ -39,11 +22,9 @@ jobs:
|
||||
fail-fast: false
|
||||
name: Tox - ${{ matrix.friendly_name }}
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
with:
|
||||
ref: ${{ env.ref }}
|
||||
- uses: actions/checkout@v2
|
||||
- name: Set up Python
|
||||
uses: actions/setup-python@v4
|
||||
uses: actions/setup-python@v1
|
||||
with:
|
||||
python-version: ${{ matrix.python_version }}
|
||||
- name: Install tox
|
||||
@@ -61,9 +42,6 @@ jobs:
|
||||
matrix:
|
||||
python_version:
|
||||
- "3.8"
|
||||
- "3.9"
|
||||
- "3.10"
|
||||
- "3.11"
|
||||
fail-fast: false
|
||||
name: Tox - Postgres
|
||||
services:
|
||||
@@ -76,11 +54,9 @@ jobs:
|
||||
POSTGRES_PASSWORD: postgres
|
||||
POSTGRES_USER: postgres
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
with:
|
||||
ref: ${{ env.ref }}
|
||||
- uses: actions/checkout@v2
|
||||
- name: Set up Python
|
||||
uses: actions/setup-python@v4
|
||||
uses: actions/setup-python@v1
|
||||
with:
|
||||
python-version: ${{ matrix.python_version }}
|
||||
- name: Install tox
|
||||
@@ -95,13 +71,3 @@ jobs:
|
||||
PGPASSWORD: postgres
|
||||
PGPORT: 5432
|
||||
run: tox
|
||||
- name: Verify no errors in PostgreSQL logs.
|
||||
run: |
|
||||
logs="$(docker logs "${{ job.services.postgresql.id }}" 2>&1)"
|
||||
echo "---- PostgreSQL logs ----"
|
||||
echo "$logs"
|
||||
echo "---- PostgreSQL logs ----"
|
||||
error_count="$(echo "$logs" | { grep -c 'ERROR: ' || true; })"
|
||||
if [[ $error_count -gt 0 ]]; then
|
||||
exit 1
|
||||
fi
|
||||
|
||||
88
.gitignore
vendored
@@ -1,3 +1,4 @@
|
||||
*.json
|
||||
*.exe
|
||||
*.dll
|
||||
*.pot
|
||||
@@ -5,7 +6,6 @@
|
||||
!/tests/cogs/dataconverter/data/**/*.json
|
||||
Pipfile
|
||||
Pipfile.lock
|
||||
.directory
|
||||
|
||||
### JetBrains template
|
||||
# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio and Webstorm
|
||||
@@ -14,9 +14,6 @@ Pipfile.lock
|
||||
# User-specific stuff:
|
||||
.idea/
|
||||
*.iws
|
||||
.vscode/
|
||||
*.sublime-project
|
||||
*.sublime-workspace
|
||||
|
||||
## Plugin-specific files:
|
||||
|
||||
@@ -143,86 +140,3 @@ ENV/
|
||||
|
||||
# Pre-commit hooks
|
||||
/.pre-commit-config.yaml
|
||||
|
||||
### macOS template
|
||||
# General
|
||||
.DS_Store
|
||||
.AppleDouble
|
||||
.LSOverride
|
||||
|
||||
# Icon must end with two \r
|
||||
Icon
|
||||
|
||||
# Thumbnails
|
||||
._*
|
||||
|
||||
# Files that might appear in the root of a volume
|
||||
.DocumentRevisions-V100
|
||||
.fseventsd
|
||||
.Spotlight-V100
|
||||
.TemporaryItems
|
||||
.Trashes
|
||||
.VolumeIcon.icns
|
||||
.com.apple.timemachine.donotpresent
|
||||
|
||||
# Directories potentially created on remote AFP share
|
||||
.AppleDB
|
||||
.AppleDesktop
|
||||
Network Trash Folder
|
||||
Temporary Items
|
||||
.apdisk
|
||||
|
||||
### Windows template
|
||||
# Windows thumbnail cache files
|
||||
Thumbs.db
|
||||
Thumbs.db:encryptable
|
||||
ehthumbs.db
|
||||
ehthumbs_vista.db
|
||||
|
||||
# Dump file
|
||||
*.stackdump
|
||||
|
||||
# Folder config file
|
||||
[Dd]esktop.ini
|
||||
|
||||
# Recycle Bin used on file shares
|
||||
$RECYCLE.BIN/
|
||||
|
||||
# Windows Installer files
|
||||
*.cab
|
||||
*.msi
|
||||
*.msix
|
||||
*.msm
|
||||
*.msp
|
||||
|
||||
# Windows shortcuts
|
||||
*.lnk
|
||||
|
||||
### SublimeText template
|
||||
# Cache files for Sublime Text
|
||||
*.tmlanguage.cache
|
||||
*.tmPreferences.cache
|
||||
*.stTheme.cache
|
||||
|
||||
# Workspace files are user-specific
|
||||
|
||||
# SFTP configuration file
|
||||
sftp-config.json
|
||||
sftp-config-alt*.json
|
||||
|
||||
# Package control specific files
|
||||
Package Control.last-run
|
||||
Package Control.ca-list
|
||||
Package Control.ca-bundle
|
||||
Package Control.system-ca-bundle
|
||||
Package Control.cache/
|
||||
Package Control.ca-certs/
|
||||
Package Control.merged-ca-bundle
|
||||
Package Control.user-ca-bundle
|
||||
oscrypto-ca-bundle.crt
|
||||
bh_unicode_properties.cache
|
||||
|
||||
# Sublime-github package stores a github token in this file
|
||||
# https://packagecontrol.io/packages/sublime-github
|
||||
GitHub.sublime-settings
|
||||
|
||||
|
||||
@@ -26,6 +26,14 @@ unsafe-load-any-extension=no
|
||||
# run arbitrary code
|
||||
extension-pkg-whitelist=
|
||||
|
||||
# Allow optimization of some AST trees. This will activate a peephole AST
|
||||
# optimizer, which will apply various small optimizations. For instance, it can
|
||||
# be used to obtain the result of joining multiple strings with the addition
|
||||
# operator. Joining a lot of strings can lead to a maximum recursion error in
|
||||
# Pylint and this flag can prevent that. It has one side effect, the resulting
|
||||
# AST will be different than the one from reality.
|
||||
optimize-ast=no
|
||||
|
||||
|
||||
[MESSAGES CONTROL]
|
||||
|
||||
@@ -58,6 +66,7 @@ disable=C, # black is enforcing this for us already, incompatibly
|
||||
[REPORTS]
|
||||
|
||||
output-format=parseable
|
||||
files-output=no
|
||||
reports=no
|
||||
|
||||
|
||||
|
||||
@@ -1,19 +1,16 @@
|
||||
version: 2
|
||||
|
||||
build:
|
||||
os: "ubuntu-22.04"
|
||||
tools:
|
||||
python: "3.8"
|
||||
jobs:
|
||||
install:
|
||||
- pip install .[doc]
|
||||
formats:
|
||||
- pdf
|
||||
|
||||
sphinx:
|
||||
configuration: docs/conf.py
|
||||
build:
|
||||
image: latest
|
||||
|
||||
python:
|
||||
version: 3.8
|
||||
install:
|
||||
- requirements: docs/requirements.txt
|
||||
- method: pip
|
||||
path: .
|
||||
extra_requirements:
|
||||
- doc
|
||||
- docs
|
||||
|
||||
65
.travis.yml
Normal file
@@ -0,0 +1,65 @@
|
||||
dist: xenial
|
||||
language: python
|
||||
cache: pip
|
||||
notifications:
|
||||
email: false
|
||||
|
||||
python:
|
||||
- 3.8.1
|
||||
env:
|
||||
global:
|
||||
- PIPENV_IGNORE_VIRTUALENVS=1
|
||||
|
||||
install:
|
||||
- pip install --upgrade pip tox
|
||||
|
||||
script:
|
||||
- tox
|
||||
|
||||
jobs:
|
||||
include:
|
||||
- env: TOXENV=py
|
||||
- env: TOXENV=docs
|
||||
- env: TOXENV=style
|
||||
- env: TOXENV=postgres
|
||||
services: postgresql
|
||||
addons:
|
||||
postgresql: "10"
|
||||
before_script:
|
||||
- psql -c 'create database red_db;' -U postgres
|
||||
# These jobs only occur on tag creation if the prior ones succeed
|
||||
- stage: PyPi Deployment
|
||||
if: tag IS present
|
||||
python: 3.8.1
|
||||
env:
|
||||
- DEPLOYING=true
|
||||
- TOXENV=py38
|
||||
deploy:
|
||||
- provider: pypi
|
||||
distributions: sdist bdist_wheel
|
||||
user: Red-DiscordBot
|
||||
password:
|
||||
secure: Ty9vYnd/wCuQkVC/OsS4E2jT9LVDVfzsFrQc4U2hMYcTJnYbl/3omyObdCWCOBC40vUDkVHAQU8ULHzoCA+2KX9Ds/7/P5zCumAA0uJRR9Smw7OlRzSMxJI+/lGq4CwXKzxDZKuo5rsxXEbW5qmYjtO8Mk6KuLkvieb1vyr2DcqWEFzg/7TZNDfD1oP8et8ITQ26lLP1dtQx/jlAiIBzgK9wziuwj1Divb9A///VsGz43N8maZ+jfsDjYqrfUVWTy3ar7JPUplletenYCR1PmQ5C46XfV0kitKd1aITJ48YPAKyYgKy8AIT+Uz1JArTnqdzLSFRNELS57qS00lzgllbteCyWQ8Uzy0Zpxb/5DDH8/mL1n0MyJrF8qjZd2hLNAXg3z/k9bGXeiMLGwoxRlGXkL2XpiVgI93UKKyVyooGNMgPTc/QdSc7krjAWcOtX/HgLR34jxeLPFEdzJNAFIimfDD8N+XTFcNBw6EvOYm/n5MXkckNoX/G+ThNobHZ7VKSASltZ9zBRAJ2dDh35G3CYmVEk33U77RKbL9le/Za9QVBcAO8i6rqVGYkdO7thHHKHc/1CB1jNnjsFSDt0bURtNfAqfwKCurQC8487zbEzT+2fog3Wygv7g3cklaRg4guY8UjZuFWStYGqbroTsOCd9ATNqeO5B13pNhllSzU=
|
||||
skip_cleanup: true
|
||||
on:
|
||||
repo: Cog-Creators/Red-DiscordBot
|
||||
tags: true
|
||||
- stage: Crowdin Deployment
|
||||
if: tag IS present OR ENV(BUILD_CROWDIN)
|
||||
python: 3.8.1
|
||||
env:
|
||||
- DEPLOYING=true
|
||||
- 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
|
||||
- sudo apt-get update -qq
|
||||
- sudo apt-get install -y crowdin
|
||||
- pip install redgettext==3.1
|
||||
deploy:
|
||||
- provider: script
|
||||
script: make upload_translations
|
||||
skip_cleanup: true
|
||||
on:
|
||||
repo: Cog-Creators/Red-DiscordBot
|
||||
tags: true
|
||||
4541
CHANGES.rst
17
LICENSE
@@ -632,8 +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) 2017-present Cog Creators
|
||||
Copyright (C) 2015-2017 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
|
||||
@@ -653,8 +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) 2017-present Cog Creators
|
||||
Red-DiscordBot Copyright (C) 2015-2017 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.
|
||||
@@ -675,10 +673,10 @@ the library. If this is what you want to do, use the GNU Lesser General
|
||||
Public License instead of this License. But first, please read
|
||||
<http://www.gnu.org/philosophy/why-not-lgpl.html>.
|
||||
|
||||
The Red-DiscordBot project contains subcomponents in the Audio module that
|
||||
have a separate copyright notice and license terms. Your use of the source
|
||||
code for these subcomponents is subject to the terms and conditions of the
|
||||
following licenses.
|
||||
The Red-DiscordBot project contains subcomponents in audio.py that have a
|
||||
separate copyright notice and license terms. Your use of the source code for
|
||||
these subcomponents is subject to the terms and conditions of the following
|
||||
licenses.
|
||||
|
||||
This product bundles methods from https://github.com/Just-Some-Bots/MusicBot/
|
||||
blob/master/musicbot/spotify.py which are available under an MIT license.
|
||||
@@ -702,6 +700,3 @@ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
THE SOFTWARE.
|
||||
|
||||
This project vendors discord.ext.menus package (https://github.com/Rapptz/discord-ext-menus) made by Danny Y. (Rapptz) which is distributed under MIT License.
|
||||
Copy of this license can be found in discord-ext-menus.LICENSE file in redbot/vendored folder of this repository.
|
||||
|
||||
33
MANIFEST.in
@@ -1,33 +0,0 @@
|
||||
# include license files
|
||||
include LICENSE
|
||||
recursive-include redbot *.LICENSE
|
||||
|
||||
# include requirements files
|
||||
include requirements/base.in
|
||||
include requirements/base.txt
|
||||
include requirements/extra-*.in
|
||||
include requirements/extra-*.txt
|
||||
|
||||
# include locale files
|
||||
recursive-include redbot locales/*.po
|
||||
|
||||
# include data folders for cogs
|
||||
recursive-include redbot/**/data *
|
||||
|
||||
# include *.export files from the test fixtures
|
||||
recursive-include redbot *.export
|
||||
|
||||
# include the py.typed file informing about Red being typed
|
||||
recursive-include redbot py.typed
|
||||
|
||||
# include *.sql files from postgres driver
|
||||
recursive-include redbot/core/_drivers/postgres *.sql
|
||||
|
||||
# include tests
|
||||
graft tests
|
||||
|
||||
# include tox configuration
|
||||
include tox.ini
|
||||
|
||||
# exclude files containing byte-code and compiled libs
|
||||
global-exclude *.py[cod]
|
||||
45
Makefile
@@ -1,46 +1,16 @@
|
||||
.DEFAULT_GOAL := help
|
||||
|
||||
PYTHON ?= python3.8
|
||||
|
||||
ROOT_DIR:=$(shell dirname $(realpath $(firstword $(MAKEFILE_LIST))))
|
||||
|
||||
ifneq ($(wildcard $(ROOT_DIR)/.venv/.),)
|
||||
VENV_PYTHON = $(ROOT_DIR)/.venv/bin/python
|
||||
else
|
||||
VENV_PYTHON = $(PYTHON)
|
||||
endif
|
||||
|
||||
define HELP_BODY
|
||||
Usage:
|
||||
make <command>
|
||||
|
||||
Commands:
|
||||
reformat Reformat all .py files being tracked by git.
|
||||
stylecheck Check which tracked .py files need reformatting.
|
||||
stylediff Show the post-reformat diff of the tracked .py files
|
||||
without modifying them.
|
||||
gettext Generate pot files.
|
||||
upload_translations Upload pot files to Crowdin.
|
||||
download_translations Download translations from Crowdin.
|
||||
bumpdeps Run script bumping dependencies.
|
||||
newenv Create or replace this project's virtual environment.
|
||||
syncenv Sync this project's virtual environment to Red's latest
|
||||
dependencies.
|
||||
endef
|
||||
export HELP_BODY
|
||||
|
||||
# Python Code Style
|
||||
reformat:
|
||||
$(VENV_PYTHON) -m black $(ROOT_DIR)
|
||||
$(PYTHON) -m black -l 99 --target-version py38 `git ls-files "*.py"`
|
||||
stylecheck:
|
||||
$(VENV_PYTHON) -m black --check $(ROOT_DIR)
|
||||
stylediff:
|
||||
$(VENV_PYTHON) -m black --check --diff $(ROOT_DIR)
|
||||
$(PYTHON) -m black --check -l 99 --target-version py38 `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
|
||||
@@ -52,11 +22,12 @@ bumpdeps:
|
||||
# Development environment
|
||||
newenv:
|
||||
$(PYTHON) -m venv --clear .venv
|
||||
.venv/bin/pip install -U pip wheel
|
||||
.venv/bin/pip install -U pip setuptools
|
||||
$(MAKE) syncenv
|
||||
syncenv:
|
||||
.venv/bin/pip install -Ur ./tools/dev-requirements.txt
|
||||
|
||||
# Help
|
||||
help:
|
||||
@echo "$$HELP_BODY"
|
||||
# Changelog check
|
||||
checkchangelog:
|
||||
bash tools/check_changelog_entries.sh
|
||||
$(PYTHON) -m towncrier --draft
|
||||
|
||||
44
README.md
@@ -12,35 +12,32 @@
|
||||
<a href="https://discord.gg/red">
|
||||
<img src="https://discordapp.com/api/guilds/133049272517001216/widget.png?style=shield" alt="Discord Server">
|
||||
</a>
|
||||
<a href="https://pypi.org/project/Red-DiscordBot/">
|
||||
<img alt="PyPI" src="https://img.shields.io/pypi/v/Red-Discordbot">
|
||||
<a href="https://www.patreon.com/Red_Devs">
|
||||
<img src="https://img.shields.io/badge/Support-Red!-yellow.svg" alt="Support Red on Patreon!">
|
||||
</a>
|
||||
<a href="https://www.python.org/downloads/">
|
||||
<img alt="PyPI - Python Version" src="https://img.shields.io/pypi/pyversions/Red-Discordbot">
|
||||
<img src="https://img.shields.io/badge/Made%20With-Python%203.8-blue.svg?style=for-the-badge" alt="Made with Python 3.8">
|
||||
</a>
|
||||
<a href="https://crowdin.com/project/red-discordbot">
|
||||
<img src="https://d322cqt584bo4o.cloudfront.net/red-discordbot/localized.svg" alt="Localized with Crowdin">
|
||||
</a>
|
||||
<a href="https://github.com/Rapptz/discord.py/">
|
||||
<img src="https://img.shields.io/badge/discord-py-blue.svg" alt="discord.py">
|
||||
</a>
|
||||
<a href="https://www.patreon.com/Red_Devs">
|
||||
<img src="https://img.shields.io/badge/Support-Red!-red.svg" alt="Support Red on Patreon!">
|
||||
</a>
|
||||
</p>
|
||||
<p align="center">
|
||||
<a href="https://github.com/Cog-Creators/Red-DiscordBot/actions">
|
||||
<img src="https://img.shields.io/github/actions/workflow/status/Cog-Creators/Red-Discordbot/tests.yml?label=tests" alt="GitHub Actions">
|
||||
<img src="https://github.com/Cog-Creators/Red-DiscordBot/workflows/Tests/badge.svg" alt="GitHub Actions">
|
||||
</a>
|
||||
<a href="http://docs.discord.red/en/stable/?badge=stable">
|
||||
<a href="http://red-discordbot.readthedocs.io/en/stable/?badge=stable">
|
||||
<img src="https://readthedocs.org/projects/red-discordbot/badge/?version=stable" alt="Red on readthedocs.org">
|
||||
</a>
|
||||
<a href="https://github.com/psf/black">
|
||||
<a href="https://github.com/ambv/black">
|
||||
<img src="https://img.shields.io/badge/code%20style-black-000000.svg" alt="Code Style: Black">
|
||||
</a>
|
||||
<a href="http://makeapullrequest.com">
|
||||
<img src="https://img.shields.io/badge/PRs-welcome-brightgreen.svg">
|
||||
</a>
|
||||
<a href="https://crowdin.com/project/red-discordbot">
|
||||
<img src="https://d322cqt584bo4o.cloudfront.net/red-discordbot/localized.svg" alt="Localized with Crowdin">
|
||||
</a>
|
||||
</p>
|
||||
|
||||
<p align="center">
|
||||
@@ -48,7 +45,7 @@
|
||||
•
|
||||
<a href="#installation">Installation</a>
|
||||
•
|
||||
<a href="http://docs.discord.red/en/stable/index.html">Documentation</a>
|
||||
<a href="http://red-discordbot.readthedocs.io/en/stable/index.html">Documentation</a>
|
||||
•
|
||||
<a href="#plugins">Plugins</a>
|
||||
•
|
||||
@@ -60,19 +57,19 @@
|
||||
# Overview
|
||||
|
||||
Red is a fully modular bot – meaning all features and commands can be enabled/disabled to your
|
||||
liking, making it completely customizable. This is a *self-hosted bot* – meaning you will need
|
||||
liking, making it completely customizable. This is also a *self-hosted bot* – meaning you will need
|
||||
to host and maintain your own instance. You can turn Red into an admin bot, music bot, trivia bot,
|
||||
new best friend or all of these together!
|
||||
|
||||
[Installation](#installation) is easy, and you do **NOT** need to know anything about coding! Aside
|
||||
from installing and updating, every part of the bot can be controlled from within Discord.
|
||||
from installation and updating, every part of the bot can be controlled from within Discord.
|
||||
|
||||
**The default set of modules includes and is not limited to:**
|
||||
|
||||
- Moderation features (kick/ban/softban/hackban, mod-log, filter, chat cleanup)
|
||||
- Trivia (lists are included and can be easily added)
|
||||
- Music features (YouTube, SoundCloud, local files, playlists, queues)
|
||||
- Stream alerts (Twitch, Youtube, Picarto)
|
||||
- Stream alerts (Twitch, Youtube, Mixer, Hitbox, Picarto)
|
||||
- Bank (slot machine, user credits)
|
||||
- Custom commands
|
||||
- Imgur/gif search
|
||||
@@ -86,9 +83,9 @@ community of cog repositories.**
|
||||
|
||||
**The following platforms are officially supported:**
|
||||
|
||||
- [Windows](https://docs.discord.red/en/stable/install_guides/windows.html)
|
||||
- [MacOS](https://docs.discord.red/en/stable/install_guides/mac.html)
|
||||
- [Most major linux distributions](https://docs.discord.red/en/stable/install_guides/index.html)
|
||||
- [Windows](https://red-discordbot.readthedocs.io/en/stable/install_windows.html)
|
||||
- [MacOS](https://red-discordbot.readthedocs.io/en/stable/install_linux_mac.html)
|
||||
- [Most major linux distributions](https://red-discordbot.readthedocs.io/en/stable/install_linux_mac.html)
|
||||
|
||||
If after reading the guide you are still experiencing issues, feel free to join the
|
||||
[Official Discord Server](https://discord.gg/red) and ask in the **#support** channel for help.
|
||||
@@ -107,15 +104,15 @@ plugins directly from Discord! A few examples are:
|
||||
- AniList
|
||||
- And much, much more!
|
||||
|
||||
Feel free to take a [peek](https://index.discord.red) at a list of
|
||||
Feel free to take a [peek](https://cogboard.red/t/approved-repositories/210) at a list of
|
||||
available 3rd party cogs!
|
||||
|
||||
# Join the community!
|
||||
|
||||
**Red** is in continuous development, and it’s supported by an active community which produces new
|
||||
content (cogs/plugins) for everyone to enjoy. New features are constantly added. If you can’t
|
||||
[find](https://index.discord.red) the cog you’re looking for,
|
||||
consult our [guide](https://docs.discord.red/en/stable/guide_cog_creation.html) on
|
||||
[find](https://cogboard.red/t/approved-repositories/210) the cog you’re looking for,
|
||||
consult our [guide](https://red-discordbot.readthedocs.io/en/stable/guide_cog_creation.html) on
|
||||
building your own cogs!
|
||||
|
||||
Join us on our [Official Discord Server](https://discord.gg/red)!
|
||||
@@ -129,6 +126,3 @@ Red is named after the main character of "Transistor", a video game by
|
||||
|
||||
Artwork created by [Sinlaire](https://sinlaire.deviantart.com/) on Deviant Art for the Red Discord
|
||||
Bot Project.
|
||||
|
||||
This project vendors [discord.ext.menus](https://github.com/Rapptz/discord-ext-menus) package made by Danny Y. (Rapptz) which is distributed under MIT License.
|
||||
A copy of this license can be found in the [discord-ext-menus.LICENSE](redbot/vendored/discord-ext-menus.LICENSE) file in the [redbot/vendored](redbot/vendored) folder of this repository.
|
||||
|
||||
38
SECURITY.md
@@ -1,38 +0,0 @@
|
||||
# Security Policy
|
||||
|
||||
## Supported Versions
|
||||
|
||||
The table below explains the current state of our versions. Currently, only version
|
||||
3.5 and higher are supported and receive security updates. Versions lower than 3.5
|
||||
are considered End of Life and will not receive any security updates.
|
||||
|
||||
| Version | Branch | Security Updates | End of Life |
|
||||
|---------------|------------|--------------------|--------------------|
|
||||
| < 2.0 | master | :x: | :white_check_mark: |
|
||||
| >= 2.0, < 3.0 | develop | :x: | :white_check_mark: |
|
||||
| >= 3.0, < 3.5 | V3/develop | :x: | :white_check_mark: |
|
||||
| >= 3.5 | V3/develop | :white_check_mark: | :x: |
|
||||
|
||||
|
||||
## Reporting a Vulnerability
|
||||
|
||||
For reporting vulnerabilities within Red-DiscordBot we make use of GitHub's
|
||||
private vulnerability reporting feature (More information can be found
|
||||
[here](https://docs.github.com/en/code-security/security-advisories/guidance-on-reporting-and-writing/privately-reporting-a-security-vulnerability)).
|
||||
This ensures that all maintainers and key members have access to the reported
|
||||
vulnerability.
|
||||
|
||||
### Opening a Vulnerability Report
|
||||
|
||||
To open a vulnerability report please fill out [this form](https://github.com/Cog-Creators/Red-DiscordBot/security/advisories/new)
|
||||
|
||||
You will be asked to provide a summary, details and proof of concept for your vulnerability report.
|
||||
We ask that you fill out this form to the best of your ability, with as many details as possible.
|
||||
Furthermore, you'll be asked to provide affected products and severity.
|
||||
These fields are optional and will be filled appropriately by the maintainers if not provided.
|
||||
|
||||
### Timeline
|
||||
|
||||
We will try to answer your report within 7 days. If you haven't received an answer by then, we suggest you reach
|
||||
out to us privately. This can best be done via our [Discord server](https://discord.gg/red), and contacting
|
||||
a member who has the Staff role.
|
||||
1
changelog.d/.gitignore
vendored
Normal file
@@ -0,0 +1 @@
|
||||
!.gitignore
|
||||
1
changelog.d/admin/.gitignore
vendored
Normal file
@@ -0,0 +1 @@
|
||||
!.gitignore
|
||||
1
changelog.d/alias/.gitignore
vendored
Normal file
@@ -0,0 +1 @@
|
||||
!.gitignore
|
||||
1
changelog.d/audio/.gitignore
vendored
Normal file
@@ -0,0 +1 @@
|
||||
!.gitignore
|
||||
1
changelog.d/bank/.gitignore
vendored
Normal file
@@ -0,0 +1 @@
|
||||
!.gitignore
|
||||
1
changelog.d/cleanup/.gitignore
vendored
Normal file
@@ -0,0 +1 @@
|
||||
!.gitignore
|
||||
1
changelog.d/customcom/.gitignore
vendored
Normal file
@@ -0,0 +1 @@
|
||||
!.gitignore
|
||||
1
changelog.d/downloader/.gitignore
vendored
Normal file
@@ -0,0 +1 @@
|
||||
!.gitignore
|
||||
1
changelog.d/economy/.gitignore
vendored
Normal file
@@ -0,0 +1 @@
|
||||
!.gitignore
|
||||
1
changelog.d/filter/.gitignore
vendored
Normal file
@@ -0,0 +1 @@
|
||||
!.gitignore
|
||||
1
changelog.d/general/.gitignore
vendored
Normal file
@@ -0,0 +1 @@
|
||||
!.gitignore
|
||||
1
changelog.d/image/.gitignore
vendored
Normal file
@@ -0,0 +1 @@
|
||||
!.gitignore
|
||||
1
changelog.d/mod/.gitignore
vendored
Normal file
@@ -0,0 +1 @@
|
||||
!.gitignore
|
||||
1
changelog.d/modlog/.gitignore
vendored
Normal file
@@ -0,0 +1 @@
|
||||
!.gitignore
|
||||
1
changelog.d/mutes/.gitignore
vendored
Normal file
@@ -0,0 +1 @@
|
||||
!.gitignore
|
||||
1
changelog.d/permissions/.gitignore
vendored
Normal file
@@ -0,0 +1 @@
|
||||
!.gitignore
|
||||
1
changelog.d/reports/.gitignore
vendored
Normal file
@@ -0,0 +1 @@
|
||||
!.gitignore
|
||||
1
changelog.d/streams/.gitignore
vendored
Normal file
@@ -0,0 +1 @@
|
||||
!.gitignore
|
||||
1
changelog.d/trivia/.gitignore
vendored
Normal file
@@ -0,0 +1 @@
|
||||
!.gitignore
|
||||
1
changelog.d/warnings/.gitignore
vendored
Normal file
@@ -0,0 +1 @@
|
||||
!.gitignore
|
||||
@@ -1,7 +1,6 @@
|
||||
project_id_env: CROWDIN_PROJECT_ID
|
||||
api_token_env: CROWDIN_PERSONAL_TOKEN
|
||||
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
|
||||
|
||||
|
Before Width: | Height: | Size: 334 KiB |
|
Before Width: | Height: | Size: 14 KiB |
|
Before Width: | Height: | Size: 15 KiB |
|
Before Width: | Height: | Size: 9.2 KiB |
|
Before Width: | Height: | Size: 47 KiB |
|
Before Width: | Height: | Size: 1.5 KiB |
|
Before Width: | Height: | Size: 26 KiB |
|
Before Width: | Height: | Size: 16 KiB |
|
Before Width: | Height: | Size: 77 KiB |
|
Before Width: | Height: | Size: 68 KiB |
|
Before Width: | Height: | Size: 11 KiB |
|
Before Width: | Height: | Size: 16 KiB After Width: | Height: | Size: 57 KiB |
|
Before Width: | Height: | Size: 24 KiB |
@@ -1,129 +0,0 @@
|
||||
"""
|
||||
A Sphinx extension adding a ``deprecated-removed`` directive that works
|
||||
similarly to CPython's directive with the same name.
|
||||
|
||||
The key difference is that instead of passing the version of planned removal,
|
||||
the writer must provide the minimum amount of days that must pass
|
||||
since the date of the release it was deprecated in.
|
||||
|
||||
Due to lack of a concrete release schedule for Red, this ensures that
|
||||
we give enough time to people affected by the changes no matter
|
||||
when the releases actually happen.
|
||||
|
||||
`DeprecatedRemoved` class is heavily based on
|
||||
`sphinx.domains.changeset.VersionChange` class that is available at:
|
||||
https://github.com/sphinx-doc/sphinx/blob/0949735210abaa05b6448e531984f159403053f4/sphinx/domains/changeset.py
|
||||
|
||||
Copyright 2007-2020 by the Sphinx team, see AUTHORS:
|
||||
https://github.com/sphinx-doc/sphinx/blob/82f495fed386c798735adf675f867b95d61ee0e1/AUTHORS
|
||||
|
||||
The original copy was distributed under BSD License and this derivative work
|
||||
is distributed under GNU GPL Version 3.
|
||||
"""
|
||||
|
||||
import datetime
|
||||
import multiprocessing
|
||||
import subprocess
|
||||
from typing import Any, Dict, List, Optional
|
||||
|
||||
from docutils import nodes
|
||||
from sphinx import addnodes
|
||||
from sphinx.application import Sphinx
|
||||
from sphinx.util.docutils import SphinxDirective
|
||||
|
||||
|
||||
class TagDateCache:
|
||||
def __init__(self) -> None:
|
||||
self._tags: Dict[str, datetime.date] = {}
|
||||
|
||||
def _populate_tags(self) -> None:
|
||||
with _LOCK:
|
||||
if self._tags:
|
||||
return
|
||||
out = subprocess.check_output(
|
||||
("git", "tag", "-l", "--format", "%(creatordate:raw)\t%(refname:short)"),
|
||||
text=True,
|
||||
)
|
||||
lines = out.splitlines(False)
|
||||
for line in lines:
|
||||
creator_date, tag_name = line.split("\t", maxsplit=1)
|
||||
timestamp = int(creator_date.split(" ", maxsplit=1)[0])
|
||||
self._tags[tag_name] = datetime.datetime.fromtimestamp(
|
||||
timestamp, tz=datetime.timezone.utc
|
||||
).date()
|
||||
|
||||
def get_tag_date(self, tag_name: str) -> Optional[datetime.date]:
|
||||
self._populate_tags()
|
||||
return self._tags.get(tag_name)
|
||||
|
||||
|
||||
_LOCK = multiprocessing.Manager().Lock()
|
||||
_TAGS = TagDateCache()
|
||||
|
||||
|
||||
class DeprecatedRemoved(SphinxDirective):
|
||||
has_content = True
|
||||
required_arguments = 2
|
||||
optional_arguments = 1
|
||||
final_argument_whitespace = True
|
||||
|
||||
def run(self) -> List[nodes.Node]:
|
||||
# Some Sphinx stuff
|
||||
node = addnodes.versionmodified()
|
||||
node.document = self.state.document
|
||||
self.set_source_info(node)
|
||||
node["type"] = self.name
|
||||
node["version"] = tuple(self.arguments)
|
||||
if len(self.arguments) == 3:
|
||||
inodes, messages = self.state.inline_text(self.arguments[2], self.lineno + 1)
|
||||
para = nodes.paragraph(self.arguments[2], "", *inodes, translatable=False)
|
||||
self.set_source_info(para)
|
||||
node.append(para)
|
||||
else:
|
||||
messages = []
|
||||
|
||||
# Text generation
|
||||
deprecation_version = self.arguments[0]
|
||||
minimum_days = int(self.arguments[1])
|
||||
tag_date = _TAGS.get_tag_date(deprecation_version)
|
||||
text = (
|
||||
f"Will be deprecated in version {deprecation_version},"
|
||||
" and removed in the first minor version that gets released"
|
||||
f" after {minimum_days} days since deprecation"
|
||||
if tag_date is None
|
||||
else f"Deprecated since version {deprecation_version},"
|
||||
" will be removed in the first minor version that gets released"
|
||||
f" after {tag_date + datetime.timedelta(days=minimum_days)}"
|
||||
)
|
||||
|
||||
# More Sphinx stuff
|
||||
if self.content:
|
||||
self.state.nested_parse(self.content, self.content_offset, node)
|
||||
classes = ["versionmodified"]
|
||||
if len(node):
|
||||
if isinstance(node[0], nodes.paragraph) and node[0].rawsource:
|
||||
content = nodes.inline(node[0].rawsource, translatable=True)
|
||||
content.source = node[0].source
|
||||
content.line = node[0].line
|
||||
content += node[0].children
|
||||
node[0].replace_self(nodes.paragraph("", "", content, translatable=False))
|
||||
|
||||
node[0].insert(0, nodes.inline("", f"{text}: ", classes=classes))
|
||||
else:
|
||||
para = nodes.paragraph(
|
||||
"", "", nodes.inline("", f"{text}.", classes=classes), translatable=False
|
||||
)
|
||||
node.append(para)
|
||||
|
||||
ret = [node]
|
||||
ret += messages
|
||||
|
||||
return ret
|
||||
|
||||
|
||||
def setup(app: Sphinx) -> Dict[str, Any]:
|
||||
app.add_directive("deprecated-removed", DeprecatedRemoved)
|
||||
return {
|
||||
"version": "1.0",
|
||||
"parallel_read_safe": True,
|
||||
}
|
||||
@@ -1,6 +0,0 @@
|
||||
User-agent: *
|
||||
Disallow: /
|
||||
Allow: /en/stable
|
||||
Allow: /en/latest
|
||||
|
||||
Sitemap: https://docs.discord.red/sitemap.xml
|
||||
9
docs/_templates/layout.html
vendored
@@ -1,14 +1,5 @@
|
||||
{% extends '!layout.html' %}
|
||||
{% block document %}
|
||||
{% if version_slug == 'latest' %}
|
||||
<div class="admonition warning">
|
||||
<p class="first admonition-title">Warning</p>
|
||||
<p class="last">
|
||||
This document is for Red's development version, which can be significantly different from previous releases.
|
||||
If you're a regular user, you should read the <a href="/{{ rtd_language }}/stable/">Red documentation for the current stable release</a>.
|
||||
</p>
|
||||
</div>
|
||||
{% endif %}
|
||||
{{ super() }}
|
||||
<a href="https://github.com/Cog-Creators/Red-DiscordBot">
|
||||
<img style="position: absolute; top: 0; right: 0; border: 0;"
|
||||
|
||||
@@ -1,39 +0,0 @@
|
||||
.. _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.
|
||||
@@ -1,112 +0,0 @@
|
||||
.. launchd guide
|
||||
|
||||
==============================
|
||||
Setting up auto-restart on Mac
|
||||
==============================
|
||||
|
||||
-----------------------
|
||||
Creating the plist file
|
||||
-----------------------
|
||||
|
||||
Start by activating your venv. Then run the following command:
|
||||
|
||||
.. code-block:: none
|
||||
|
||||
which python
|
||||
|
||||
Copy the output of that command.
|
||||
|
||||
Now run :code:`sudo nano /Library/LaunchDaemons/red.plist`
|
||||
|
||||
Paste the following and replace the following:
|
||||
|
||||
- :code:`username` (but not :code:`UserName`) with your Mac username
|
||||
- :code:`path` with the path you copied earlier
|
||||
- :code:`instance-name` with your instance name:
|
||||
|
||||
.. code-block:: none
|
||||
:emphasize-lines: 9, 13, 28
|
||||
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>Label</key>
|
||||
<string>red</string>
|
||||
<key>ProgramArguments</key>
|
||||
<array>
|
||||
<string>path</string>
|
||||
<string>-O</string>
|
||||
<string>-m</string>
|
||||
<string>redbot</string>
|
||||
<string>instance-name</string>
|
||||
<string>--no-prompt</string>
|
||||
</array>
|
||||
<key>RunAtLoad</key>
|
||||
<true/>
|
||||
<key>KeepAlive</key>
|
||||
<dict>
|
||||
<key>SuccessfulExit</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<key>StandardOutPath</key>
|
||||
<string>/tmp/red_out.log</string>
|
||||
<key>StandardErrorPath</key>
|
||||
<string>/tmp/red_err.log</string>
|
||||
<key>UserName</key>
|
||||
<string>username</string>
|
||||
<key>InitGroups</key>
|
||||
<true/>
|
||||
<key>ProcessType</key>
|
||||
<string>Interactive</string>
|
||||
</dict>
|
||||
</plist>
|
||||
|
||||
.. note::
|
||||
|
||||
You may add any additional arguments you need to add to the :code:`redbot` command by
|
||||
adding them to the end of the array under :code:`ProgramArguments`
|
||||
|
||||
.. note::
|
||||
|
||||
Should you need to set up auto-restart for additional bots, create a :code:`.plist` file for
|
||||
each bot under a different file name, and use the respective file names for the commands below.
|
||||
|
||||
Save and exit :code:`ctrl + O; enter; ctrl + x`
|
||||
|
||||
-------------------------------
|
||||
Starting and loading the plist
|
||||
-------------------------------
|
||||
|
||||
To start the bot and set it to start on boot, you must run the following command:
|
||||
|
||||
.. prompt:: bash
|
||||
|
||||
sudo launchctl load -w /Library/LaunchDaemons/red.plist
|
||||
|
||||
If you need to shutdown the bot, you can use the ``[p]shutdown`` command or
|
||||
type the following command in the terminal:
|
||||
|
||||
.. prompt:: bash
|
||||
|
||||
sudo launchctl stop red
|
||||
|
||||
To start the bot again after a shutdown, run the following:
|
||||
|
||||
.. prompt:: bash
|
||||
|
||||
sudo launchctl start red
|
||||
|
||||
To stop the bot and set it to not start on boot anymore, run the following:
|
||||
|
||||
.. prompt:: bash
|
||||
|
||||
sudo launchctl unload -w /Library/LaunchDaemons/red.plist
|
||||
|
||||
To view Red's log, run the following (:code:`red_out.log` is for the console output, and
|
||||
:code:`red_err.log` for the error logs):
|
||||
|
||||
.. prompt:: bash
|
||||
|
||||
nano /tmp/red_out.log
|
||||
nano /tmp/red_err.log
|
||||
44
docs/autostart_pm2.rst
Normal file
@@ -0,0 +1,44 @@
|
||||
.. pm2 service guide
|
||||
|
||||
==============================================
|
||||
Setting up auto-restart using pm2 on Linux
|
||||
==============================================
|
||||
|
||||
.. note:: This guide is for setting up PM2 on a Linux environment. This guide assumes that you already have a working Red instance.
|
||||
|
||||
--------------
|
||||
Installing PM2
|
||||
--------------
|
||||
|
||||
Start by installing Node.JS and NPM via your favorite package distributor. From there run the following command:
|
||||
|
||||
:code:`npm install pm2 -g`
|
||||
|
||||
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-block:: none
|
||||
|
||||
pm2 start redbot --name "<Insert a name here>" --interpreter "<Location to your Python Interpreter>" --interpreter-args "-O" -- <Red Instance> --no-prompt
|
||||
|
||||
.. code-block:: none
|
||||
|
||||
Arguments to replace.
|
||||
|
||||
<Insert a name here>
|
||||
A name to identify the bot within pm2, this is not your Red instance.
|
||||
|
||||
<Location to your Python Interpreter>
|
||||
The location of your Python interpreter, to find out where that is use the following command inside activated venv:
|
||||
which python
|
||||
|
||||
<Red Instance>
|
||||
The name of your Red instance.
|
||||
|
||||
------------------------------
|
||||
Ensuring that PM2 stays online
|
||||
------------------------------
|
||||
|
||||
To make sure that PM2 stays online and persistence between machine restarts, run the following commands:
|
||||
|
||||
:code:`pm2 save` & :code:`pm2 startup`
|
||||
@@ -4,54 +4,42 @@
|
||||
Setting up auto-restart using systemd on Linux
|
||||
==============================================
|
||||
|
||||
.. note:: This guide is for setting up systemd on a Linux environment. This guide assumes that you already have a working Red instance.
|
||||
|
||||
-------------------------
|
||||
Creating the service file
|
||||
-------------------------
|
||||
|
||||
In order to create the service file, you will first need to know two things, your Linux :code:`username` and your Python :code:`path`
|
||||
In order to create the service file, you will first need the location of your :code:`redbot` binary.
|
||||
|
||||
First, your Linux :code:`username` can be fetched with the following command:
|
||||
.. code-block:: bash
|
||||
|
||||
.. prompt:: bash
|
||||
# If redbot is installed in a virtualenv
|
||||
source redenv/bin/activate
|
||||
which python
|
||||
|
||||
whoami
|
||||
|
||||
Next, your python :code:`path` can be fetched with the following commands:
|
||||
|
||||
.. prompt:: bash
|
||||
:prompts: $,(redenv) $
|
||||
:modifiers: auto
|
||||
|
||||
# If redbot is installed in a venv
|
||||
$ source ~/redenv/bin/activate
|
||||
(redenv) $ /usr/bin/which python
|
||||
# If you are using pyenv
|
||||
pyenv shell <name>
|
||||
pyenv which python
|
||||
|
||||
Then create the new service file:
|
||||
|
||||
:code:`sudo nano /etc/systemd/system/red@.service`
|
||||
:code:`sudo -e /etc/systemd/system/red@.service`
|
||||
|
||||
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.
|
||||
Paste the following and replace all instances of :code:`username` with the username, and :code:`path` with the location you obtained above:
|
||||
|
||||
.. code-block:: none
|
||||
:emphasize-lines: 8-10
|
||||
|
||||
[Unit]
|
||||
Description=%I redbot
|
||||
After=multi-user.target
|
||||
After=network-online.target
|
||||
Wants=network-online.target
|
||||
|
||||
[Service]
|
||||
ExecStart=path -O -m redbot %I --no-prompt
|
||||
User=username
|
||||
Group=username
|
||||
Type=idle
|
||||
Restart=on-abnormal
|
||||
Restart=always
|
||||
RestartSec=15
|
||||
RestartForceExitStatus=1
|
||||
RestartForceExitStatus=26
|
||||
RestartPreventExitStatus=0
|
||||
TimeoutStopSec=10
|
||||
|
||||
[Install]
|
||||
@@ -67,34 +55,20 @@ Starting and enabling the service
|
||||
|
||||
To start the bot, run the service and add the instance name after the **@**:
|
||||
|
||||
.. prompt:: bash
|
||||
|
||||
sudo systemctl start red@instancename
|
||||
:code:`sudo systemctl start red@instancename`
|
||||
|
||||
To set the bot to start on boot, you must enable the service, again adding the instance name after the **@**:
|
||||
|
||||
.. prompt:: bash
|
||||
|
||||
sudo systemctl enable red@instancename
|
||||
:code:`sudo systemctl enable red@instancename`
|
||||
|
||||
If you need to shutdown the bot, you can use the ``[p]shutdown`` command or
|
||||
type the following command in the terminal, still by adding the instance name after the **@**:
|
||||
|
||||
.. prompt:: bash
|
||||
|
||||
sudo systemctl stop red@instancename
|
||||
:code:`sudo systemctl stop red@instancename`
|
||||
|
||||
.. warning:: If the service doesn't stop in the next 10 seconds, the process is killed.
|
||||
Check your logs to know the cause of the error that prevents the shutdown.
|
||||
|
||||
To set the bot to not start on boot anymore, you must disable the service by running the following command, adding the instance name after the **@**:
|
||||
To view Red’s log, you can acccess through journalctl:
|
||||
|
||||
.. prompt:: bash
|
||||
|
||||
sudo systemctl disable red@instancename
|
||||
|
||||
You can access Red's log through journalctl:
|
||||
|
||||
.. prompt:: bash
|
||||
|
||||
sudo journalctl -eu red@instancename
|
||||
:code:`sudo journalctl -eu red@instancename`
|
||||
|
||||
@@ -1,51 +0,0 @@
|
||||
.. _autostart-windows:
|
||||
|
||||
==============================================
|
||||
Setting up auto-restart using batch on Windows
|
||||
==============================================
|
||||
|
||||
.. note:: This guide assumes that you already have a working Red instance.
|
||||
|
||||
-----------------------
|
||||
Creating the batch file
|
||||
-----------------------
|
||||
|
||||
Create a new text document anywhere you want to. This file will be used to launch the bot, so you may want to put it somewhere convenient, like Documents or Desktop.
|
||||
|
||||
Open that document in Notepad, and paste the following text in it:
|
||||
|
||||
.. code-block:: batch
|
||||
|
||||
@ECHO OFF
|
||||
:RED
|
||||
CALL "%userprofile%\redenv\Scripts\activate.bat"
|
||||
python -O -m redbot <your instance name>
|
||||
|
||||
IF %ERRORLEVEL% == 1 GOTO RESTART_RED
|
||||
IF %ERRORLEVEL% == 26 GOTO RESTART_RED
|
||||
EXIT /B %ERRORLEVEL%
|
||||
|
||||
:RESTART_RED
|
||||
ECHO Restarting Red...
|
||||
GOTO RED
|
||||
|
||||
Replace ``<your instance name>`` with the instance name of your bot.
|
||||
If you created your VENV at a location other than the recommended one, replace ``%userprofile%\redenv\Scripts\activate.bat`` with the path to your VENV.
|
||||
|
||||
Click "File", "Save as". Change the dropdown "Save as type" to "All Files (*.*)". Set the filename to ``start_redbot.bat``, and click save.
|
||||
|
||||
There should now be a new file in the location you created the text document in. You can delete that text document as it is no longer needed.
|
||||
You can now use the ``start_redbot.bat`` batch file to launch Red by double clicking it.
|
||||
This script will automatically restart red when the ``[p]restart`` command is used or when the bot shuts down abnormally.
|
||||
|
||||
-------------------------
|
||||
Launch the bot on startup
|
||||
-------------------------
|
||||
|
||||
Create a shortcut of your ``start_redbot.bat`` file.
|
||||
|
||||
Open the "Run" dialogue box using Windows Key + R.
|
||||
|
||||
Enter ``shell:startup`` if you want the bot to launch only when the current user logs in, or ``shell:common startup`` if you want the bot to launch when any user logs in.
|
||||
|
||||
Drag the shortcut into the folder that is opened. The bot will now launch on startup.
|
||||
@@ -1,80 +0,0 @@
|
||||
===========================================
|
||||
Creating a bot account
|
||||
===========================================
|
||||
|
||||
To use Red you will require a bot account and to enable privileged intents. Both these steps will be covered below.
|
||||
|
||||
.. _creating-a-bot-account:
|
||||
|
||||
-------------------------------
|
||||
Creating the bot application
|
||||
-------------------------------
|
||||
|
||||
In order to use Red, we must first create a Discord Bot account.
|
||||
|
||||
Creating a Bot account is a pretty straightforward process.
|
||||
|
||||
1. Make sure you're logged on to the `Discord website <https://discord.com>`_.
|
||||
2. Navigate to the `application page <https://discord.com/developers/applications>`_
|
||||
3. Click on the "New Application" button.
|
||||
|
||||
.. image:: /.resources/bot-guide/discord_create_app_button.png
|
||||
:alt: The new application button.
|
||||
|
||||
4. Give the application a name and click "Create".
|
||||
|
||||
.. image:: /.resources/bot-guide/discord_create_app_form.png
|
||||
:alt: The new application form filled in.
|
||||
|
||||
5. Create a Bot User by navigating to the "Bot" tab and clicking "Add Bot".
|
||||
|
||||
- Click "Yes, do it!" to continue.
|
||||
|
||||
.. image:: /.resources/bot-guide/discord_create_bot_user.png
|
||||
:alt: The Add Bot button.
|
||||
6. If you want others to be able to invite your bot tick the **Public Bot**. Keeping it unticked will prevent others from inviting your bot to their servers and only you will be able to add the bot to servers (provided that you have needed permissions in the server you want to add the bot to).
|
||||
|
||||
- Make sure **Require OAuth2 Code Grant** is unchecked.
|
||||
|
||||
.. image:: /.resources/bot-guide/discord_bot_user_options.png
|
||||
:alt: How the Bot User options should look like for most people.
|
||||
|
||||
7. Copy the token using the "Copy" button.
|
||||
|
||||
- **This is not the Client Secret at the General Information page**
|
||||
|
||||
.. warning::
|
||||
|
||||
Do not share your token as it is like your password.
|
||||
If you shared your token you can regenerate it.
|
||||
|
||||
Continue to the next section to enable privileged intents.
|
||||
|
||||
.. _enabling-privileged-intents:
|
||||
|
||||
-------------------------------
|
||||
Enabling Privileged Intents
|
||||
-------------------------------
|
||||
.. warning::
|
||||
:ref:`Red Bot requires all intents. <intents>`
|
||||
\This section is required.
|
||||
|
||||
1. Make sure you're logged on to the `Discord website <https://discord.com>`_.
|
||||
2. Navigate to the `application page <https://discord.com/developers/applications>`_
|
||||
3. Click on the bot you want to enable privileged intents for.
|
||||
4. Navigate to the bot tab on the left side of the screen.
|
||||
|
||||
.. image:: /.resources/bot-guide/discord_bot_tab.png
|
||||
:alt: The bot tab in the application page.
|
||||
|
||||
5. Scroll down to the "Privileged Gateway Intents" section, enable all three privileged intents and save your changes.
|
||||
|
||||
.. image:: /.resources/bot-guide/discord_privileged_intents.png
|
||||
:alt: The privileged gateway intents selector.
|
||||
|
||||
.. warning::
|
||||
|
||||
Red bots with over 100 servers require `bot verification <https://support.discord.com/hc/en-us/articles/360040720412>`_ which is not covered in this guide.
|
||||
Remember that :ref:`we do not support public bots <intents>`. We encourage you to read that page before scaling up your bot.
|
||||
|
||||
*Parts of this guide have been adapted from* `discord.py intro <https://discordpy.readthedocs.io/en/stable/discord.html#discord-intro>`_ *and* `discord.py privileged intents <https://discordpy.readthedocs.io/en/stable/intents.html#privileged-intents>`_.
|
||||
@@ -1,5 +0,0 @@
|
||||
=========
|
||||
Changelog
|
||||
=========
|
||||
|
||||
.. include:: ../CHANGES.rst
|
||||
232
docs/changelog_3_1_0.rst
Normal file
@@ -0,0 +1,232 @@
|
||||
.. v3.1.0 Changelog
|
||||
|
||||
####################
|
||||
v3.1.0 Release Notes
|
||||
####################
|
||||
|
||||
----------------------
|
||||
Mongo Driver Migration
|
||||
----------------------
|
||||
|
||||
Due to the required changes of the Mongo driver for Config, all existing Mongo users will need to
|
||||
complete the below instructions to continue to use Mongo after updating to 3.1.
|
||||
This includes **all** users, regardless of any prior migration attempt to a development version of
|
||||
3.1.
|
||||
|
||||
#. Upgrade to 3.1
|
||||
#. Convert all existing Mongo instances to JSON using the new converters
|
||||
#. Start each bot instance while using JSON and load any and all cogs you have in order to successfully preserve data.
|
||||
#. Turn each instance off and convert back to Mongo.
|
||||
**NOTE:** No data is wiped from your Mongo database when converting to JSON.
|
||||
You may want to use a *new* database name when converting back to Mongo in order to not have duplicate data.
|
||||
|
||||
-------------
|
||||
Setup Utility
|
||||
-------------
|
||||
|
||||
New commands were introduced to simplify the conversion/editing/removal process both on our end and the users end.
|
||||
Please use ``redbot-setup --help`` to learn how to use the new features.
|
||||
|
||||
.. HINT::
|
||||
|
||||
Converting to JSON: ``redbot-setup convert <instance_name> json``
|
||||
|
||||
Converting to Mongo: ``redbot-setup convert <instance_name> mongo``
|
||||
|
||||
################
|
||||
v3.1.0 Changelog
|
||||
################
|
||||
|
||||
-----
|
||||
Audio
|
||||
-----
|
||||
|
||||
* Add Spotify support (`#2328`_)
|
||||
* Play local folders via text command (`#2457`_)
|
||||
* Change pause to a toggle (`#2461`_)
|
||||
* Remove aliases (`#2462`_)
|
||||
* Add track length restriction (`#2465`_)
|
||||
* Seek command can now seek to position (`#2470`_)
|
||||
* Add option for dc at queue end (`#2472`_)
|
||||
* Emptydisconnect and status refactor (`#2473`_)
|
||||
* Queue clean and queue clear addition (`#2476`_)
|
||||
* Fix for audioset status (`#2481`_)
|
||||
* Playlist download addition (`#2482`_)
|
||||
* Add songs when search-queuing (`#2513`_)
|
||||
* Match v2 behavior for channel change (`#2521`_)
|
||||
* Bot will no longer complain about permissions when trying to connect to user-limited channel, if it has "Move Members" permission (`#2525`_)
|
||||
* Fix issue on audiostats command when more than 20 servers to display (`#2533`_)
|
||||
* Fix for prev command display (`#2556`_)
|
||||
* Fix for localtrack playing (`#2557`_)
|
||||
* Fix for playlist queue when not playing (`#2586`_)
|
||||
* Track search and append fixes (`#2591`_)
|
||||
* DJ role should ask for a role (`#2606`_)
|
||||
|
||||
----
|
||||
Core
|
||||
----
|
||||
|
||||
* Warn on usage of ``yaml.load`` (`#2326`_)
|
||||
* New Event dispatch: ``on_message_without_command`` (`#2338`_)
|
||||
* Improve output format of cooldown messages (`#2412`_)
|
||||
* Delete cooldown messages when expired (`#2469`_)
|
||||
* Fix local blacklist/whitelist management (`#2531`_)
|
||||
* ``[p]set locale`` now only accepts actual locales (`#2553`_)
|
||||
* ``[p]listlocales`` now displays ``en-US`` (`#2553`_)
|
||||
* ``redbot --version`` will now give you current version of Red (`#2567`_)
|
||||
* Redesign help and related formatter (`#2628`_)
|
||||
* Default locale changed from ``en`` to ``en-US`` (`#2642`_)
|
||||
* New command ``[p]datapath`` that prints the bot's datapath (`#2652`_)
|
||||
|
||||
------
|
||||
Config
|
||||
------
|
||||
|
||||
* Updated Mongo driver to support large guilds (`#2536`_)
|
||||
* Introduced ``init_custom`` method on Config objects (`#2545`_)
|
||||
* We now record custom group primary key lengths in the core config object (`#2550`_)
|
||||
* Migrated internal UUIDs to maintain cross platform consistency (`#2604`_)
|
||||
|
||||
-------------
|
||||
DataConverter
|
||||
-------------
|
||||
|
||||
* It's dead jim (Removal) (`#2554`_)
|
||||
|
||||
----------
|
||||
discord.py
|
||||
----------
|
||||
|
||||
* No longer vendoring discord.py (`#2587`_)
|
||||
* Upgraded discord.py dependency to version 1.0.1 (`#2587`_)
|
||||
|
||||
----------
|
||||
Downloader
|
||||
----------
|
||||
|
||||
* ``[p]cog install`` will now tell user that cog has to be loaded (`#2523`_)
|
||||
* The message when libraries fail to install is now formatted (`#2576`_)
|
||||
* Fixed bug, that caused Downloader to include submodules on cog list (`#2590`_)
|
||||
* ``[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 :ref:`info-json-format`. (`#2605`_)
|
||||
|
||||
------
|
||||
Filter
|
||||
------
|
||||
|
||||
* Filter performs significantly better on large servers. (`#2509`_)
|
||||
|
||||
--------
|
||||
Launcher
|
||||
--------
|
||||
|
||||
* Fixed extras in the launcher (`#2588`_)
|
||||
|
||||
---
|
||||
Mod
|
||||
---
|
||||
|
||||
* Admins can now decide how many times message has to be repeated before ``deleterepeats`` removes it (`#2437`_)
|
||||
* Fix: make ``[p]ban [days]`` optional as per the doc (`#2602`_)
|
||||
* Added the command ``voicekick`` to kick members from a voice channel with optional mod case. (`#2639`_)
|
||||
|
||||
-----------
|
||||
Permissions
|
||||
-----------
|
||||
|
||||
* Removed: ``p`` alias for ``permissions`` command (`#2467`_)
|
||||
|
||||
-------------
|
||||
Setup Scripts
|
||||
-------------
|
||||
|
||||
* ``redbot-setup`` now uses the click CLI library (`#2579`_)
|
||||
* ``redbot-setup convert`` now used to convert between libraries (`#2579`_)
|
||||
* Backup support for Mongo is currently broken (`#2579`_)
|
||||
|
||||
-------
|
||||
Streams
|
||||
-------
|
||||
|
||||
* Add support for custom stream alert messages per guild (`#2600`_)
|
||||
* Add ability to exclude rerun Twitch streams, and note rerun streams in embed status (`#2620`_)
|
||||
|
||||
-----
|
||||
Tests
|
||||
-----
|
||||
|
||||
* Test for ``trivia`` cog uses explicitly utf-8 encoding for checking yaml files (`#2565`_)
|
||||
|
||||
------
|
||||
Trivia
|
||||
------
|
||||
|
||||
* Fix of dead image link for Sao Tome and Principe in ``worldflags`` trivia (`#2540`_)
|
||||
|
||||
-----------------
|
||||
Utility Functions
|
||||
-----------------
|
||||
|
||||
* New: ``chat_formatting.humanize_timedelta`` (`#2412`_)
|
||||
* ``Tunnel`` - Spelling correction of method name - changed ``files_from_attatch`` to ``files_from_attach`` (old name is left for backwards compatibility) (`#2496`_)
|
||||
* ``Tunnel`` - fixed behavior of ``react_close()``, now when tunnel closes message will be sent to other end (`#2507`_)
|
||||
* ``chat_formatting.humanize_list`` - Improved error handling of empty lists (`#2597`_)
|
||||
|
||||
.. _#2326: https://github.com/Cog-Creators/Red-DiscordBot/pull/2326
|
||||
.. _#2328: https://github.com/Cog-Creators/Red-DiscordBot/pull/2328
|
||||
.. _#2338: https://github.com/Cog-Creators/Red-DiscordBot/pull/2338
|
||||
.. _#2412: https://github.com/Cog-Creators/Red-DiscordBot/pull/2412
|
||||
.. _#2437: https://github.com/Cog-Creators/Red-DiscordBot/pull/2437
|
||||
.. _#2457: https://github.com/Cog-Creators/Red-DiscordBot/pull/2457
|
||||
.. _#2461: https://github.com/Cog-Creators/Red-DiscordBot/pull/2461
|
||||
.. _#2462: https://github.com/Cog-Creators/Red-DiscordBot/pull/2462
|
||||
.. _#2465: https://github.com/Cog-Creators/Red-DiscordBot/pull/2465
|
||||
.. _#2467: https://github.com/Cog-Creators/Red-DiscordBot/pull/2467
|
||||
.. _#2469: https://github.com/Cog-Creators/Red-DiscordBot/pull/2469
|
||||
.. _#2470: https://github.com/Cog-Creators/Red-DiscordBot/pull/2470
|
||||
.. _#2472: https://github.com/Cog-Creators/Red-DiscordBot/pull/2472
|
||||
.. _#2473: https://github.com/Cog-Creators/Red-DiscordBot/pull/2473
|
||||
.. _#2476: https://github.com/Cog-Creators/Red-DiscordBot/pull/2476
|
||||
.. _#2481: https://github.com/Cog-Creators/Red-DiscordBot/pull/2481
|
||||
.. _#2482: https://github.com/Cog-Creators/Red-DiscordBot/pull/2482
|
||||
.. _#2496: https://github.com/Cog-Creators/Red-DiscordBot/pull/2496
|
||||
.. _#2507: https://github.com/Cog-Creators/Red-DiscordBot/pull/2507
|
||||
.. _#2509: https://github.com/Cog-Creators/Red-DiscordBot/pull/2509
|
||||
.. _#2513: https://github.com/Cog-Creators/Red-DiscordBot/pull/2513
|
||||
.. _#2521: https://github.com/Cog-Creators/Red-DiscordBot/pull/2521
|
||||
.. _#2523: https://github.com/Cog-Creators/Red-DiscordBot/pull/2523
|
||||
.. _#2525: https://github.com/Cog-Creators/Red-DiscordBot/pull/2525
|
||||
.. _#2531: https://github.com/Cog-Creators/Red-DiscordBot/pull/2531
|
||||
.. _#2533: https://github.com/Cog-Creators/Red-DiscordBot/pull/2533
|
||||
.. _#2536: https://github.com/Cog-Creators/Red-DiscordBot/pull/2536
|
||||
.. _#2540: https://github.com/Cog-Creators/Red-DiscordBot/pull/2540
|
||||
.. _#2545: https://github.com/Cog-Creators/Red-DiscordBot/pull/2545
|
||||
.. _#2550: https://github.com/Cog-Creators/Red-DiscordBot/pull/2550
|
||||
.. _#2553: https://github.com/Cog-Creators/Red-DiscordBot/pull/2553
|
||||
.. _#2554: https://github.com/Cog-Creators/Red-DiscordBot/pull/2554
|
||||
.. _#2556: https://github.com/Cog-Creators/Red-DiscordBot/pull/2556
|
||||
.. _#2557: https://github.com/Cog-Creators/Red-DiscordBot/pull/2557
|
||||
.. _#2565: https://github.com/Cog-Creators/Red-DiscordBot/pull/2565
|
||||
.. _#2567: https://github.com/Cog-Creators/Red-DiscordBot/pull/2567
|
||||
.. _#2576: https://github.com/Cog-Creators/Red-DiscordBot/pull/2576
|
||||
.. _#2579: https://github.com/Cog-Creators/Red-DiscordBot/pull/2579
|
||||
.. _#2586: https://github.com/Cog-Creators/Red-DiscordBot/pull/2586
|
||||
.. _#2587: https://github.com/Cog-Creators/Red-DiscordBot/pull/2587
|
||||
.. _#2588: https://github.com/Cog-Creators/Red-DiscordBot/pull/2588
|
||||
.. _#2590: https://github.com/Cog-Creators/Red-DiscordBot/pull/2590
|
||||
.. _#2591: https://github.com/Cog-Creators/Red-DiscordBot/pull/2591
|
||||
.. _#2592: https://github.com/Cog-Creators/Red-DiscordBot/pull/2592
|
||||
.. _#2595: https://github.com/Cog-Creators/Red-DiscordBot/pull/2595
|
||||
.. _#2597: https://github.com/Cog-Creators/Red-DiscordBot/pull/2597
|
||||
.. _#2600: https://github.com/Cog-Creators/Red-DiscordBot/pull/2600
|
||||
.. _#2602: https://github.com/Cog-Creators/Red-DiscordBot/pull/2602
|
||||
.. _#2604: https://github.com/Cog-Creators/Red-DiscordBot/pull/2604
|
||||
.. _#2605: https://github.com/Cog-Creators/Red-DiscordBot/pull/2605
|
||||
.. _#2606: https://github.com/Cog-Creators/Red-DiscordBot/pull/2606
|
||||
.. _#2620: https://github.com/Cog-Creators/Red-DiscordBot/pull/2620
|
||||
.. _#2628: https://github.com/Cog-Creators/Red-DiscordBot/pull/2628
|
||||
.. _#2639: https://github.com/Cog-Creators/Red-DiscordBot/pull/2639
|
||||
.. _#2642: https://github.com/Cog-Creators/Red-DiscordBot/pull/2642
|
||||
.. _#2652: https://github.com/Cog-Creators/Red-DiscordBot/pull/2652
|
||||
565
docs/changelog_3_2_0.rst
Normal file
@@ -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 <https://github.com/Cog-Creators/Red-DiscordBot/issues/2897>`_)
|
||||
- Removed ``redbot.core.modlog.get_next_case_number()``. (`#2908 <https://github.com/Cog-Creators/Red-DiscordBot/issues/2908>`_)
|
||||
- Removed ``bank.MAX_BALANCE``, use ``bank.get_max_balance()`` from now on. (`#2926 <https://github.com/Cog-Creators/Red-DiscordBot/issues/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 <https://github.com/Cog-Creators/Red-DiscordBot/issues/2967>`_)
|
||||
- Reserved some command names for internal Red use. These are available programatically as ``redbot.core.commands.RESERVED_COMMAND_NAMES``. (`#2973 <https://github.com/Cog-Creators/Red-DiscordBot/issues/2973>`_)
|
||||
- Removed ``bot._counter``, Made a few more attrs private (``cog_mgr``, ``main_dir``). (`#2976 <https://github.com/Cog-Creators/Red-DiscordBot/issues/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 <https://github.com/Cog-Creators/Red-DiscordBot/issues/3073>`_)
|
||||
- Removed the mongo driver. (`#3099 <https://github.com/Cog-Creators/Red-DiscordBot/issues/3099>`_)
|
||||
|
||||
|
||||
Bug Fixes
|
||||
~~~~~~~~~
|
||||
|
||||
- Help now properly hides disabled commands. (`#2863 <https://github.com/Cog-Creators/Red-DiscordBot/issues/2863>`_)
|
||||
- Fixed ``bot.remove_command`` throwing an error when trying to remove a non-existent command. (`#2888 <https://github.com/Cog-Creators/Red-DiscordBot/issues/2888>`_)
|
||||
- ``Command.can_see`` now works as intended for disabled commands. (`#2892 <https://github.com/Cog-Creators/Red-DiscordBot/issues/2892>`_)
|
||||
- Modlog entries now show up properly without the mod cog loaded. (`#2897 <https://github.com/Cog-Creators/Red-DiscordBot/issues/2897>`_)
|
||||
- Fixed an error in ``[p]reason`` when setting the reason for a case without a moderator. (`#2908 <https://github.com/Cog-Creators/Red-DiscordBot/issues/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 <https://github.com/Cog-Creators/Red-DiscordBot/issues/2923>`_)
|
||||
- Removed potential for additional bad API calls per ban/unban. (`#2945 <https://github.com/Cog-Creators/Red-DiscordBot/issues/2945>`_)
|
||||
- The ``[p]invite`` command no longer errors when a user has the bot blocked or DMs disabled in the server. (`#2948 <https://github.com/Cog-Creators/Red-DiscordBot/issues/2948>`_)
|
||||
- Stopped using the ``:`` character in backup's filename - Windows doesn't accept it. (`#2954 <https://github.com/Cog-Creators/Red-DiscordBot/issues/2954>`_)
|
||||
- ``redbot-setup delete`` no longer errors with "unexpected keyword argument". (`#2955 <https://github.com/Cog-Creators/Red-DiscordBot/issues/2955>`_)
|
||||
- ``redbot-setup delete`` no longer prompts about backup when the user passes the option ``--no-prompt``. (`#2956 <https://github.com/Cog-Creators/Red-DiscordBot/issues/2956>`_)
|
||||
- Cleaned up the ``[p]inviteset public`` and ``[p]inviteset perms`` help strings. (`#2963 <https://github.com/Cog-Creators/Red-DiscordBot/issues/2963>`_)
|
||||
- ```[p]embedset user`` now only affects DM's. (`#2966 <https://github.com/Cog-Creators/Red-DiscordBot/issues/2966>`_)
|
||||
- Fixed an unfriendly error when the provided instance name doesn't exist. (`#2968 <https://github.com/Cog-Creators/Red-DiscordBot/issues/2968>`_)
|
||||
- Fixed the help text and response of ``[p]set usebotcolor`` to accurately reflect what the command is doing. (`#2974 <https://github.com/Cog-Creators/Red-DiscordBot/issues/2974>`_)
|
||||
- Red no longer types infinitely when a command with a cooldown is called within the last second of a cooldown. (`#2985 <https://github.com/Cog-Creators/Red-DiscordBot/issues/2985>`_)
|
||||
- Removed f-string usage in the launcher to prevent our error handling from causing an error. (`#3002 <https://github.com/Cog-Creators/Red-DiscordBot/issues/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 <https://github.com/Cog-Creators/Red-DiscordBot/issues/3004>`_)
|
||||
- Fixed an error in ``[p]uptime`` when the uptime is under a second. (`#3009 <https://github.com/Cog-Creators/Red-DiscordBot/issues/3009>`_)
|
||||
- Added quotation marks to the response of ``[p]helpset tagline`` so that two consecutive full stops do not appear. (`#3010 <https://github.com/Cog-Creators/Red-DiscordBot/issues/3010>`_)
|
||||
- Fixed an issue with clearing rules in permissions. (`#3014 <https://github.com/Cog-Creators/Red-DiscordBot/issues/3014>`_)
|
||||
- Lavalink will now be restarted after an unexpected shutdown. (`#3033 <https://github.com/Cog-Creators/Red-DiscordBot/issues/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 <https://github.com/Cog-Creators/Red-DiscordBot/issues/3036>`_)
|
||||
- Escaped track descriptions so that they do not break markdown. (`#3047 <https://github.com/Cog-Creators/Red-DiscordBot/issues/3047>`_)
|
||||
- Red will now properly send a message when the invoked command is guild-only. (`#3057 <https://github.com/Cog-Creators/Red-DiscordBot/issues/3057>`_)
|
||||
- Arguments ``--co-owner`` and ``--load-cogs`` now properly require at least one argument to be passed. (`#3060 <https://github.com/Cog-Creators/Red-DiscordBot/issues/3060>`_)
|
||||
- Now always appends the 3rd-party lib folder to the end of ``sys.path`` to avoid shadowing Red's dependencies. (`#3062 <https://github.com/Cog-Creators/Red-DiscordBot/issues/3062>`_)
|
||||
- Fixed ``is_automod_immune``'s handling of the guild check and added support for checking webhooks. (`#3100 <https://github.com/Cog-Creators/Red-DiscordBot/issues/3100>`_)
|
||||
- Fixed the generation of the ``repos.json`` file in the backup process. (`#3114 <https://github.com/Cog-Creators/Red-DiscordBot/issues/3114>`_)
|
||||
- Fixed an issue where calling audio commands when not in a voice channel could result in a crash. (`#3120 <https://github.com/Cog-Creators/Red-DiscordBot/issues/3120>`_)
|
||||
- Added handling for invalid folder names in the data path gracefully in ``redbot-setup`` and ``redbot --edit``. (`#3171 <https://github.com/Cog-Creators/Red-DiscordBot/issues/3171>`_)
|
||||
- ``--owner`` and ``-p`` cli flags now work when added from launcher. (`#3174 <https://github.com/Cog-Creators/Red-DiscordBot/issues/3174>`_)
|
||||
- Red will now prevent users from locking themselves out with localblacklist. (`#3207 <https://github.com/Cog-Creators/Red-DiscordBot/issues/3207>`_)
|
||||
- Fixed help ending up a little too large for discord embed limits. (`#3208 <https://github.com/Cog-Creators/Red-DiscordBot/issues/3208>`_)
|
||||
- Fixed formatting issues in commands that list whitelisted/blacklisted users/roles when the list is empty. (`#3219 <https://github.com/Cog-Creators/Red-DiscordBot/issues/3219>`_)
|
||||
- Red will now prevent users from locking the guild owner out with localblacklist (unless the command caller is bot owner). (`#3221 <https://github.com/Cog-Creators/Red-DiscordBot/issues/3221>`_)
|
||||
- Guild owners are no longer affected by the local whitelist and blacklist. (`#3221 <https://github.com/Cog-Creators/Red-DiscordBot/issues/3221>`_)
|
||||
- Fixed an attribute error that can be raised in ``humanize_timedelta`` if ``seconds = 0``. (`#3231 <https://github.com/Cog-Creators/Red-DiscordBot/issues/3231>`_)
|
||||
- Fixed ``ctx.clean_prefix`` issues resulting from undocumented changes from discord. (`#3249 <https://github.com/Cog-Creators/Red-DiscordBot/issues/3249>`_)
|
||||
- ``redbot.core.bot.Bot.owner_id`` is now set in the post connection startup. (`#3273 <https://github.com/Cog-Creators/Red-DiscordBot/issues/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 <https://github.com/Cog-Creators/Red-DiscordBot/issues/3273>`_)
|
||||
|
||||
|
||||
Enhancements
|
||||
~~~~~~~~~~~~
|
||||
|
||||
- Added the option to modify the RPC port with the ``--rpc-port`` flag. (`#2429 <https://github.com/Cog-Creators/Red-DiscordBot/issues/2429>`_)
|
||||
- Slots now has a 62.5% expected payout and will not inflate economy when spammed. (`#2875 <https://github.com/Cog-Creators/Red-DiscordBot/issues/2875>`_)
|
||||
- Allowed passing ``cls`` in the ``redbot.core.commands.group()`` decorator. (`#2881 <https://github.com/Cog-Creators/Red-DiscordBot/issues/2881>`_)
|
||||
- Red's Help Formatter is now considered to have a stable API. (`#2892 <https://github.com/Cog-Creators/Red-DiscordBot/issues/2892>`_)
|
||||
- Modlog no longer generates cases without being told to for actions the bot did. (`#2897 <https://github.com/Cog-Creators/Red-DiscordBot/issues/2897>`_)
|
||||
- Some generic modlog casetypes are now pre-registered for cog creator use. (`#2897 <https://github.com/Cog-Creators/Red-DiscordBot/issues/2897>`_)
|
||||
- ModLog is now much faster at creating cases, especially in large servers. (`#2908 <https://github.com/Cog-Creators/Red-DiscordBot/issues/2908>`_)
|
||||
- JSON config files are now stored without indentation, this is to reduce the file size and increase the performance of write operations. (`#2921 <https://github.com/Cog-Creators/Red-DiscordBot/issues/2921>`_)
|
||||
- ``--[no-]backup``, ``--[no-]drop-db`` and ``--[no-]remove-datapath`` in the ``redbot-setup delete`` command are now on/off flags. (`#2958 <https://github.com/Cog-Creators/Red-DiscordBot/issues/2958>`_)
|
||||
- The confirmation prompts in ``redbot-setup`` now have default values for user convenience. (`#2958 <https://github.com/Cog-Creators/Red-DiscordBot/issues/2958>`_)
|
||||
- ``redbot-setup delete`` now has the option to leave Red's data untouched on database backends. (`#2962 <https://github.com/Cog-Creators/Red-DiscordBot/issues/2962>`_)
|
||||
- Red now takes less time to fetch cases, unban members, and list warnings. (`#2964 <https://github.com/Cog-Creators/Red-DiscordBot/issues/2964>`_)
|
||||
- Red now handles more things prior to connecting to discord to reduce issues during the initial load. (`#3045 <https://github.com/Cog-Creators/Red-DiscordBot/issues/3045>`_)
|
||||
- ``bot.send_filtered`` now returns the message that is sent. (`#3052 <https://github.com/Cog-Creators/Red-DiscordBot/issues/3052>`_)
|
||||
- Red will now send a message when the invoked command is DM-only. (`#3057 <https://github.com/Cog-Creators/Red-DiscordBot/issues/3057>`_)
|
||||
- All ``y/n`` confirmations in cli commands are now unified. (`#3060 <https://github.com/Cog-Creators/Red-DiscordBot/issues/3060>`_)
|
||||
- Changed ``[p]info`` to say "This bot is an..." instead of "This is an..." for clarity. (`#3121 <https://github.com/Cog-Creators/Red-DiscordBot/issues/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 <https://github.com/Cog-Creators/Red-DiscordBot/issues/3171>`_)
|
||||
- Instance names can now only include characters A-z, numbers, underscores, and hyphens. Old instances are unaffected by this change. (`#3171 <https://github.com/Cog-Creators/Red-DiscordBot/issues/3171>`_)
|
||||
- Clarified that ``[p]backup`` saves the **bot's** data in the help text. (`#3172 <https://github.com/Cog-Creators/Red-DiscordBot/issues/3172>`_)
|
||||
- Added ``redbot --debuginfo`` flag which shows useful information for debugging. (`#3183 <https://github.com/Cog-Creators/Red-DiscordBot/issues/3183>`_)
|
||||
- Added the Python executable field to ``[p]debuginfo``. (`#3184 <https://github.com/Cog-Creators/Red-DiscordBot/issues/3184>`_)
|
||||
- When Red prompts for a token, it will now print a link to the guide explaining how to obtain a token. (`#3204 <https://github.com/Cog-Creators/Red-DiscordBot/issues/3204>`_)
|
||||
- ``redbot-setup`` will no longer log to disk. (`#3269 <https://github.com/Cog-Creators/Red-DiscordBot/issues/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 <https://github.com/Cog-Creators/Red-DiscordBot/issues/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 <https://github.com/Cog-Creators/Red-DiscordBot/issues/3274>`_)
|
||||
- If Red detects operating system or architecture change, it will now warn the owner about possible problems with the lib folder. (`#3274 <https://github.com/Cog-Creators/Red-DiscordBot/issues/3274>`_)
|
||||
- ``[p]playlist download`` will now compress playlists larger than the server attachment limit and attempt to send that. (`#3279 <https://github.com/Cog-Creators/Red-DiscordBot/issues/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 <https://github.com/Cog-Creators/Red-DiscordBot/issues/2654>`_)
|
||||
- Added a config driver for PostgreSQL. (`#2723 <https://github.com/Cog-Creators/Red-DiscordBot/issues/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 <https://github.com/Cog-Creators/Red-DiscordBot/issues/2804>`_)
|
||||
- New method ``humanize_number`` in ``redbot.core.utils.chat_formatting`` to convert numbers into text that respects the current locale. (`#2836 <https://github.com/Cog-Creators/Red-DiscordBot/issues/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 <https://github.com/Cog-Creators/Red-DiscordBot/issues/2845>`_)
|
||||
- Red now uses towncrier for changelog generation. (`#2872 <https://github.com/Cog-Creators/Red-DiscordBot/issues/2872>`_)
|
||||
- Added ``redbot.core.modlog.get_latest_case`` to fetch the case object for the most recent ModLog case. (`#2908 <https://github.com/Cog-Creators/Red-DiscordBot/issues/2908>`_)
|
||||
- Added ``[p]bankset maxbal`` to set the maximum bank balance. (`#2926 <https://github.com/Cog-Creators/Red-DiscordBot/issues/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 <https://github.com/Cog-Creators/Red-DiscordBot/issues/2976>`_)
|
||||
- Added the cli flag ``redbot --edit`` which is used to edit the instance name, token, owner, and datapath. (`#3060 <https://github.com/Cog-Creators/Red-DiscordBot/issues/3060>`_)
|
||||
- Added ``[p]licenseinfo``. (`#3090 <https://github.com/Cog-Creators/Red-DiscordBot/issues/3090>`_)
|
||||
- Ensured that people can migrate from MongoDB. (`#3108 <https://github.com/Cog-Creators/Red-DiscordBot/issues/3108>`_)
|
||||
- Added a command to list disabled commands globally or per guild. (`#3118 <https://github.com/Cog-Creators/Red-DiscordBot/issues/3118>`_)
|
||||
- New event ``on_red_api_tokens_update`` is now dispatched when shared api keys for a service are updated. (`#3134 <https://github.com/Cog-Creators/Red-DiscordBot/issues/3134>`_)
|
||||
- Added ``redbot-setup backup``. (`#3235 <https://github.com/Cog-Creators/Red-DiscordBot/issues/3235>`_)
|
||||
- Added the method ``redbot.core.bot.Bot.wait_until_red_ready()`` that waits until Red's post connection startup is done. (`#3273 <https://github.com/Cog-Creators/Red-DiscordBot/issues/3273>`_)
|
||||
|
||||
|
||||
Removals
|
||||
~~~~~~~~
|
||||
|
||||
- ``[p]set owner`` and ``[p]set token`` have been removed in favor of managing server side. (`#2928 <https://github.com/Cog-Creators/Red-DiscordBot/issues/2928>`_)
|
||||
- Shared libraries are marked for removal in Red 3.4. (`#3106 <https://github.com/Cog-Creators/Red-DiscordBot/issues/3106>`_)
|
||||
- Removed ``[p]backup``. Use the cli command ``redbot-setup backup`` instead. (`#3235 <https://github.com/Cog-Creators/Red-DiscordBot/issues/3235>`_)
|
||||
- Removed the functions ``safe_delete``, ``fuzzy_command_search``, ``format_fuzzy_results`` and ``create_backup`` from ``redbot.core.utils``. (`#3240 <https://github.com/Cog-Creators/Red-DiscordBot/issues/3240>`_)
|
||||
- Removed a lot of the launcher's handled behavior. (`#3289 <https://github.com/Cog-Creators/Red-DiscordBot/issues/3289>`_)
|
||||
|
||||
|
||||
Miscellaneous changes
|
||||
~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
- `#2527 <https://github.com/Cog-Creators/Red-DiscordBot/issues/2527>`_, `#2571 <https://github.com/Cog-Creators/Red-DiscordBot/issues/2571>`_, `#2723 <https://github.com/Cog-Creators/Red-DiscordBot/issues/2723>`_, `#2836 <https://github.com/Cog-Creators/Red-DiscordBot/issues/2836>`_, `#2849 <https://github.com/Cog-Creators/Red-DiscordBot/issues/2849>`_, `#2861 <https://github.com/Cog-Creators/Red-DiscordBot/issues/2861>`_, `#2885 <https://github.com/Cog-Creators/Red-DiscordBot/issues/2885>`_, `#2890 <https://github.com/Cog-Creators/Red-DiscordBot/issues/2890>`_, `#2897 <https://github.com/Cog-Creators/Red-DiscordBot/issues/2897>`_, `#2904 <https://github.com/Cog-Creators/Red-DiscordBot/issues/2904>`_, `#2924 <https://github.com/Cog-Creators/Red-DiscordBot/issues/2924>`_, `#2939 <https://github.com/Cog-Creators/Red-DiscordBot/issues/2939>`_, `#2940 <https://github.com/Cog-Creators/Red-DiscordBot/issues/2940>`_, `#2941 <https://github.com/Cog-Creators/Red-DiscordBot/issues/2941>`_, `#2949 <https://github.com/Cog-Creators/Red-DiscordBot/issues/2949>`_, `#2953 <https://github.com/Cog-Creators/Red-DiscordBot/issues/2953>`_, `#2964 <https://github.com/Cog-Creators/Red-DiscordBot/issues/2964>`_, `#2986 <https://github.com/Cog-Creators/Red-DiscordBot/issues/2986>`_, `#2993 <https://github.com/Cog-Creators/Red-DiscordBot/issues/2993>`_, `#2997 <https://github.com/Cog-Creators/Red-DiscordBot/issues/2997>`_, `#3008 <https://github.com/Cog-Creators/Red-DiscordBot/issues/3008>`_, `#3017 <https://github.com/Cog-Creators/Red-DiscordBot/issues/3017>`_, `#3048 <https://github.com/Cog-Creators/Red-DiscordBot/issues/3048>`_, `#3059 <https://github.com/Cog-Creators/Red-DiscordBot/issues/3059>`_, `#3080 <https://github.com/Cog-Creators/Red-DiscordBot/issues/3080>`_, `#3089 <https://github.com/Cog-Creators/Red-DiscordBot/issues/3089>`_, `#3104 <https://github.com/Cog-Creators/Red-DiscordBot/issues/3104>`_, `#3106 <https://github.com/Cog-Creators/Red-DiscordBot/issues/3106>`_, `#3129 <https://github.com/Cog-Creators/Red-DiscordBot/issues/3129>`_, `#3152 <https://github.com/Cog-Creators/Red-DiscordBot/issues/3152>`_, `#3160 <https://github.com/Cog-Creators/Red-DiscordBot/issues/3160>`_, `#3168 <https://github.com/Cog-Creators/Red-DiscordBot/issues/3168>`_, `#3173 <https://github.com/Cog-Creators/Red-DiscordBot/issues/3173>`_, `#3176 <https://github.com/Cog-Creators/Red-DiscordBot/issues/3176>`_, `#3186 <https://github.com/Cog-Creators/Red-DiscordBot/issues/3186>`_, `#3192 <https://github.com/Cog-Creators/Red-DiscordBot/issues/3192>`_, `#3193 <https://github.com/Cog-Creators/Red-DiscordBot/issues/3193>`_, `#3195 <https://github.com/Cog-Creators/Red-DiscordBot/issues/3195>`_, `#3202 <https://github.com/Cog-Creators/Red-DiscordBot/issues/3202>`_, `#3214 <https://github.com/Cog-Creators/Red-DiscordBot/issues/3214>`_, `#3223 <https://github.com/Cog-Creators/Red-DiscordBot/issues/3223>`_, `#3229 <https://github.com/Cog-Creators/Red-DiscordBot/issues/3229>`_, `#3245 <https://github.com/Cog-Creators/Red-DiscordBot/issues/3245>`_, `#3247 <https://github.com/Cog-Creators/Red-DiscordBot/issues/3247>`_, `#3248 <https://github.com/Cog-Creators/Red-DiscordBot/issues/3248>`_, `#3250 <https://github.com/Cog-Creators/Red-DiscordBot/issues/3250>`_, `#3254 <https://github.com/Cog-Creators/Red-DiscordBot/issues/3254>`_, `#3255 <https://github.com/Cog-Creators/Red-DiscordBot/issues/3255>`_, `#3256 <https://github.com/Cog-Creators/Red-DiscordBot/issues/3256>`_, `#3258 <https://github.com/Cog-Creators/Red-DiscordBot/issues/3258>`_, `#3261 <https://github.com/Cog-Creators/Red-DiscordBot/issues/3261>`_, `#3275 <https://github.com/Cog-Creators/Red-DiscordBot/issues/3275>`_, `#3276 <https://github.com/Cog-Creators/Red-DiscordBot/issues/3276>`_, `#3293 <https://github.com/Cog-Creators/Red-DiscordBot/issues/3293>`_, `#3278 <https://github.com/Cog-Creators/Red-DiscordBot/issues/3278>`_, `#3285 <https://github.com/Cog-Creators/Red-DiscordBot/issues/3285>`_, `#3296 <https://github.com/Cog-Creators/Red-DiscordBot/issues/3296>`_,
|
||||
|
||||
|
||||
Dependency changes
|
||||
~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
- Added ``pytest-mock`` requirement to ``tests`` extra. (`#2571 <https://github.com/Cog-Creators/Red-DiscordBot/issues/2571>`_)
|
||||
- Updated the python minimum requirement to 3.8.1, updated JRE to Java 11. (`#3245 <https://github.com/Cog-Creators/Red-DiscordBot/issues/3245>`_)
|
||||
- Bumped dependency versions. (`#3288 <https://github.com/Cog-Creators/Red-DiscordBot/issues/3288>`_)
|
||||
- Bumped red-lavalink version. (`#3290 <https://github.com/Cog-Creators/Red-DiscordBot/issues/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 <https://github.com/Cog-Creators/Red-DiscordBot/issues/1734>`_)
|
||||
- Added documentation for PM2 support. (`#2105 <https://github.com/Cog-Creators/Red-DiscordBot/issues/2105>`_)
|
||||
- Updated linux install docs, adding sections for Fedora Linux, Debian/Raspbian Buster, and openSUSE. (`#2558 <https://github.com/Cog-Creators/Red-DiscordBot/issues/2558>`_)
|
||||
- Created documentation covering what we consider a developer facing breaking change and the guarantees regarding them. (`#2882 <https://github.com/Cog-Creators/Red-DiscordBot/issues/2882>`_)
|
||||
- Fixed the user parameter being labeled as ``discord.TextChannel`` instead of ``discord.abc.User`` in ``redbot.core.utils.predicates``. (`#2914 <https://github.com/Cog-Creators/Red-DiscordBot/issues/2914>`_)
|
||||
- Updated towncrier info in the contribution guidelines to explain how to create a changelog for a standalone PR. (`#2915 <https://github.com/Cog-Creators/Red-DiscordBot/issues/2915>`_)
|
||||
- Reworded the virtual environment guide to make it sound less scary. (`#2920 <https://github.com/Cog-Creators/Red-DiscordBot/issues/2920>`_)
|
||||
- Driver docs no longer show twice. (`#2972 <https://github.com/Cog-Creators/Red-DiscordBot/issues/2972>`_)
|
||||
- Added more information about ``redbot.core.utils.humanize_timedelta`` into the docs. (`#2986 <https://github.com/Cog-Creators/Red-DiscordBot/issues/2986>`_)
|
||||
- Added a direct link to the "Installing Red" section in "Installing using powershell and chocolatey". (`#2995 <https://github.com/Cog-Creators/Red-DiscordBot/issues/2995>`_)
|
||||
- Updated Git PATH install (Windows), capitalized some words, stopped mentioning the launcher. (`#2998 <https://github.com/Cog-Creators/Red-DiscordBot/issues/2998>`_)
|
||||
- Added autostart documentation for Red users who installed Red inside of a virtual environment. (`#3005 <https://github.com/Cog-Creators/Red-DiscordBot/issues/3005>`_)
|
||||
- Updated the Cog Creation guide with a note regarding the Develop version as well as the folder layout for local cogs. (`#3021 <https://github.com/Cog-Creators/Red-DiscordBot/issues/3021>`_)
|
||||
- Added links to the getting started guide at the end of installation guides. (`#3025 <https://github.com/Cog-Creators/Red-DiscordBot/issues/3025>`_)
|
||||
- Added proper docstrings to enums that show in drivers docs. (`#3035 <https://github.com/Cog-Creators/Red-DiscordBot/issues/3035>`_)
|
||||
- Discord.py doc links will now always use the docs for the currently used version of discord.py. (`#3053 <https://github.com/Cog-Creators/Red-DiscordBot/issues/3053>`_)
|
||||
- Added ``|DPY_VERSION|`` substitution that will automatically get replaced by the current discord.py version. (`#3053 <https://github.com/Cog-Creators/Red-DiscordBot/issues/3053>`_)
|
||||
- Added missing descriptions for function returns. (`#3054 <https://github.com/Cog-Creators/Red-DiscordBot/issues/3054>`_)
|
||||
- Stopped overwriting the ``docs/prolog.txt`` file in ``conf.py``. (`#3082 <https://github.com/Cog-Creators/Red-DiscordBot/issues/3082>`_)
|
||||
- Fixed some typos and wording, added MS Azure to the host list. (`#3083 <https://github.com/Cog-Creators/Red-DiscordBot/issues/3083>`_)
|
||||
- Updated the docs footer copyright to 2019. (`#3105 <https://github.com/Cog-Creators/Red-DiscordBot/issues/3105>`_)
|
||||
- Added a deprecation note about shared libraries in the Downloader Framework docs. (`#3106 <https://github.com/Cog-Creators/Red-DiscordBot/issues/3106>`_)
|
||||
- Updated the apikey framework documentation. Changed ``bot.get_shared_api_keys()`` to ``bot.get_shared_api_tokens()``. (`#3110 <https://github.com/Cog-Creators/Red-DiscordBot/issues/3110>`_)
|
||||
- Added information about ``info.json``'s ``min_python_version`` key in Downloader Framework docs. (`#3124 <https://github.com/Cog-Creators/Red-DiscordBot/issues/3124>`_)
|
||||
- Added an event reference for the ``on_red_api_tokens_update`` event in the Shared API Keys docs. (`#3134 <https://github.com/Cog-Creators/Red-DiscordBot/issues/3134>`_)
|
||||
- Added notes explaining the best practices with config. (`#3149 <https://github.com/Cog-Creators/Red-DiscordBot/issues/3149>`_)
|
||||
- Documented additional attributes in Context. (`#3151 <https://github.com/Cog-Creators/Red-DiscordBot/issues/3151>`_)
|
||||
- Updated Windows docs with up to date dependency instructions. (`#3188 <https://github.com/Cog-Creators/Red-DiscordBot/issues/3188>`_)
|
||||
- Added a "Publishing cogs for V3" document explaining how to make user's cogs work with Downloader. (`#3234 <https://github.com/Cog-Creators/Red-DiscordBot/issues/3234>`_)
|
||||
- Fixed broken docs for ``redbot.core.commands.Context.react_quietly``. (`#3257 <https://github.com/Cog-Creators/Red-DiscordBot/issues/3257>`_)
|
||||
- Updated copyright notices on License and RTD config to 2020. (`#3259 <https://github.com/Cog-Creators/Red-DiscordBot/issues/3259>`_)
|
||||
- Added a line about setuptools and wheel. (`#3262 <https://github.com/Cog-Creators/Red-DiscordBot/issues/3262>`_)
|
||||
- Ensured development builds are not advertised to the wrong audience. (`#3292 <https://github.com/Cog-Creators/Red-DiscordBot/issues/3292>`_)
|
||||
- Clarified the usage intent of some of the chat formatting functions. (`#3292 <https://github.com/Cog-Creators/Red-DiscordBot/issues/3292>`_)
|
||||
|
||||
|
||||
Admin
|
||||
-----
|
||||
|
||||
Breaking Changes
|
||||
~~~~~~~~~~~~~~~~
|
||||
|
||||
- Changed ``[p]announce ignore`` and ``[p]announce channel`` to ``[p]announceset ignore`` and ``[p]announceset channel``. (`#3250 <https://github.com/Cog-Creators/Red-DiscordBot/issues/3250>`_)
|
||||
- Changed ``[p]selfrole <role>`` to ``[p]selfrole add <role>``, changed ``[p]selfrole add`` to ``[p]selfroleset add`` , and changed ``[p]selfrole delete`` to ``[p]selfroleset remove``. (`#3250 <https://github.com/Cog-Creators/Red-DiscordBot/issues/3250>`_)
|
||||
|
||||
|
||||
Bug Fixes
|
||||
~~~~~~~~~
|
||||
|
||||
- Fixed ``[p]announce`` failing after encountering an error attempting to message the bot owner. (`#3166 <https://github.com/Cog-Creators/Red-DiscordBot/issues/3166>`_)
|
||||
- Improved the clarity of user facing messages when the user is not allowed to do something due to Discord hierarchy rules. (`#3250 <https://github.com/Cog-Creators/Red-DiscordBot/issues/3250>`_)
|
||||
- Fixed some role managing commands not properly checking if Red had ``manage_roles`` perms before attempting to manage roles. (`#3250 <https://github.com/Cog-Creators/Red-DiscordBot/issues/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 <https://github.com/Cog-Creators/Red-DiscordBot/issues/3250>`_)
|
||||
- Fixed ``[p]announce ignore`` and ``[p]announce channel`` not being able to be used by guild owners and administrators. (`#3250 <https://github.com/Cog-Creators/Red-DiscordBot/issues/3250>`_)
|
||||
|
||||
|
||||
Enhancements
|
||||
~~~~~~~~~~~~
|
||||
|
||||
- Added custom issue messages for adding and removing roles, this makes it easier to create translations. (`#3016 <https://github.com/Cog-Creators/Red-DiscordBot/issues/3016>`_)
|
||||
|
||||
|
||||
Audio
|
||||
-----
|
||||
|
||||
Bug Fixes
|
||||
~~~~~~~~~
|
||||
|
||||
- ``[p]playlist remove`` now removes the playlist url if the playlist was created through ``[p]playlist save``. (`#2861 <https://github.com/Cog-Creators/Red-DiscordBot/issues/2861>`_)
|
||||
- Users are no longer able to accidentally overwrite existing playlist if a new one with the same name is created/renamed. (`#2861 <https://github.com/Cog-Creators/Red-DiscordBot/issues/2861>`_)
|
||||
- ``[p]audioset settings`` no longer shows lavalink JAR version. (`#2904 <https://github.com/Cog-Creators/Red-DiscordBot/issues/2904>`_)
|
||||
- Fixed a ``KeyError: loadType`` when trying to play tracks. (`#2904 <https://github.com/Cog-Creators/Red-DiscordBot/issues/2904>`_)
|
||||
- ``[p]audioset settings`` now uses ``ctx.is_owner()`` to check if the context author is the bot owner. (`#2904 <https://github.com/Cog-Creators/Red-DiscordBot/issues/2904>`_)
|
||||
- Fixed track indexs being off by 1 in ``[p]search``. (`#2940 <https://github.com/Cog-Creators/Red-DiscordBot/issues/2940>`_)
|
||||
- Fixed an issue where updating your Spotify and YouTube Data API tokens did not refresh them. (`#3047 <https://github.com/Cog-Creators/Red-DiscordBot/issues/3047>`_)
|
||||
- Fixed an issue where the blacklist was not being applied correctly. (`#3047 <https://github.com/Cog-Creators/Red-DiscordBot/issues/3047>`_)
|
||||
- Fixed an issue in ``[p]audioset restrictions blacklist list`` where it would call the list a ``Whitelist``. (`#3047 <https://github.com/Cog-Creators/Red-DiscordBot/issues/3047>`_)
|
||||
- Red's status is now properly cleared on emptydisconnect. (`#3050 <https://github.com/Cog-Creators/Red-DiscordBot/issues/3050>`_)
|
||||
- Fixed a console spam caused sometimes when auto disconnect and auto pause are used. (`#3123 <https://github.com/Cog-Creators/Red-DiscordBot/issues/3123>`_)
|
||||
- Fixed an error that was thrown when running ``[p]audioset dj``. (`#3165 <https://github.com/Cog-Creators/Red-DiscordBot/issues/3165>`_)
|
||||
- Fixed a crash that could happen when the bot can't connect to the lavalink node. (`#3238 <https://github.com/Cog-Creators/Red-DiscordBot/issues/3238>`_)
|
||||
- Restricted the number of songs shown in the queue to first 500 to avoid heartbeats. (`#3279 <https://github.com/Cog-Creators/Red-DiscordBot/issues/3279>`_)
|
||||
- Added more cooldowns to playlist commands and restricted the queue and playlists to 10k songs to avoid bot errors. (`#3286 <https://github.com/Cog-Creators/Red-DiscordBot/issues/3286>`_)
|
||||
|
||||
|
||||
Enhancements
|
||||
~~~~~~~~~~~~
|
||||
|
||||
- ``[p]playlist upload`` will now load playlists generated via ``[p]playlist download`` much faster if the playlist uses the new scheme. (`#2861 <https://github.com/Cog-Creators/Red-DiscordBot/issues/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 <https://github.com/Cog-Creators/Red-DiscordBot/issues/2861>`_)
|
||||
- Spotify, Youtube Data, and Lavalink API calls can be cached to avoid repeated calls in the future, see ``[p]audioset cache``. (`#2890 <https://github.com/Cog-Creators/Red-DiscordBot/issues/2890>`_)
|
||||
- Playlists will now start playing as soon as first track is loaded. (`#2890 <https://github.com/Cog-Creators/Red-DiscordBot/issues/2890>`_)
|
||||
- ``[p]audioset localpath`` can set a path anywhere in your machine now. Note: This path needs to be visible by ``Lavalink.jar``. (`#2904 <https://github.com/Cog-Creators/Red-DiscordBot/issues/2904>`_)
|
||||
- ``[p]queue`` now works when there are no tracks in the queue, showing the track currently playing. (`#2904 <https://github.com/Cog-Creators/Red-DiscordBot/issues/2904>`_)
|
||||
- ``[p]audioset settings`` now reports Red Lavalink version. (`#2904 <https://github.com/Cog-Creators/Red-DiscordBot/issues/2904>`_)
|
||||
- Adding and removing reactions in Audio is no longer a blocking action. (`#2904 <https://github.com/Cog-Creators/Red-DiscordBot/issues/2904>`_)
|
||||
- When shuffle is on, queue now shows the correct play order. (`#2904 <https://github.com/Cog-Creators/Red-DiscordBot/issues/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 <https://github.com/Cog-Creators/Red-DiscordBot/issues/2904>`_)
|
||||
- Adding a playlist and an album to a saved playlist skips tracks already in the playlist. (`#2904 <https://github.com/Cog-Creators/Red-DiscordBot/issues/2904>`_)
|
||||
- DJ mode is now turned off if the DJ role is deleted. (`#2904 <https://github.com/Cog-Creators/Red-DiscordBot/issues/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 <https://github.com/Cog-Creators/Red-DiscordBot/issues/2904>`_)
|
||||
- Removed commas in explanations about how to set API keys. (`#2905 <https://github.com/Cog-Creators/Red-DiscordBot/issues/2905>`_)
|
||||
- Expanded local track support to all file formats (m3u, m4a, mp4, etc). (`#2940 <https://github.com/Cog-Creators/Red-DiscordBot/issues/2940>`_)
|
||||
- Cooldowns are now reset upon failure of commands that have a cooldown timer. (`#2940 <https://github.com/Cog-Creators/Red-DiscordBot/issues/2940>`_)
|
||||
- Improved the explanation in the help string for ``[p]audioset emptydisconnect``. (`#3051 <https://github.com/Cog-Creators/Red-DiscordBot/issues/3051>`_)
|
||||
- Added a typing indicator to playlist dedupe. (`#3058 <https://github.com/Cog-Creators/Red-DiscordBot/issues/3058>`_)
|
||||
- Exposed clearer errors to users in the play commands. (`#3085 <https://github.com/Cog-Creators/Red-DiscordBot/issues/3085>`_)
|
||||
- Better error handling when the player is unable to play multiple tracks in the sequence. (`#3165 <https://github.com/Cog-Creators/Red-DiscordBot/issues/3165>`_)
|
||||
|
||||
|
||||
New Features
|
||||
~~~~~~~~~~~~
|
||||
|
||||
- Added support for nested folders in the localtrack folder. (`#270 <https://github.com/Cog-Creators/Red-DiscordBot/issues/270>`_)
|
||||
- Now auto pauses the queue when the voice channel is empty. (`#721 <https://github.com/Cog-Creators/Red-DiscordBot/issues/721>`_)
|
||||
- All Playlist commands now accept optional arguments, use ``[p]help playlist <subcommand>`` for more details. (`#2861 <https://github.com/Cog-Creators/Red-DiscordBot/issues/2861>`_)
|
||||
- ``[p]playlist rename`` will now allow users to rename existing playlists. (`#2861 <https://github.com/Cog-Creators/Red-DiscordBot/issues/2861>`_)
|
||||
- ``[p]playlist update`` will now allow users to update non-custom Playlists to the latest available tracks. (`#2861 <https://github.com/Cog-Creators/Red-DiscordBot/issues/2861>`_)
|
||||
- There are now 3 different scopes of playlist. 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 the Creator (if the 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. (`#2861 <https://github.com/Cog-Creators/Red-DiscordBot/issues/2861>`_)
|
||||
- ``[p]audioset cache`` can be used to set the cache level. **It's off by default**. (`#2904 <https://github.com/Cog-Creators/Red-DiscordBot/issues/2904>`_)
|
||||
- ``[p]genre`` can be used to play spotify playlists. (`#2904 <https://github.com/Cog-Creators/Red-DiscordBot/issues/2904>`_)
|
||||
- ``[p]audioset cacheage`` can be used to set the maximum age of an entry in the cache. **Default is 365 days**. (`#2904 <https://github.com/Cog-Creators/Red-DiscordBot/issues/2904>`_)
|
||||
- ``[p]audioset autoplay`` can be used to enable auto play once the queue runs out. (`#2904 <https://github.com/Cog-Creators/Red-DiscordBot/issues/2904>`_)
|
||||
- New events dispatched by Audio.
|
||||
|
||||
- ``on_red_audio_track_start(guild: discord.Guild, track: lavalink.Track, requester: discord.Member)``
|
||||
- ``on_red_audio_track_end(guild: discord.Guild, track: lavalink.Track, requester: discord.Member)``
|
||||
- ``on_red_audio_track_enqueue(guild: discord.Guild, track: lavalink.Track, requester: discord.Member)``
|
||||
- ``on_red_audio_track_auto_play(guild: discord.Guild, track: lavalink.Track, requester: discord.Member)``
|
||||
- ``on_red_audio_queue_end(guild: discord.Guild, track: lavalink.Track, requester: discord.Member)``
|
||||
- ``on_red_audio_audio_disconnect(guild: discord.Guild)``
|
||||
- ``on_red_audio_skip_track(guild: discord.Guild, track: lavalink.Track, requester: discord.Member)`` (`#2904 <https://github.com/Cog-Creators/Red-DiscordBot/issues/2904>`_)
|
||||
- ``[p]queue shuffle`` can be used to shuffle the queue manually. (`#2904 <https://github.com/Cog-Creators/Red-DiscordBot/issues/2904>`_)
|
||||
- ``[p]queue clean self`` can be used to remove all songs you requested from the queue. (`#2904 <https://github.com/Cog-Creators/Red-DiscordBot/issues/2904>`_)
|
||||
- ``[p]audioset restrictions`` can be used to add or remove keywords which songs must have or are not allowed to have. (`#2904 <https://github.com/Cog-Creators/Red-DiscordBot/issues/2904>`_)
|
||||
- ``[p]playlist dedupe`` can be used to remove duplicated tracks from a playlist. (`#2904 <https://github.com/Cog-Creators/Red-DiscordBot/issues/2904>`_)
|
||||
- ``[p]autoplay`` can be used to play a random song. (`#2904 <https://github.com/Cog-Creators/Red-DiscordBot/issues/2904>`_)
|
||||
- ``[p]bumpplay`` can be used to add a song to the front of the queue. (`#2940 <https://github.com/Cog-Creators/Red-DiscordBot/issues/2940>`_)
|
||||
- ``[p]shuffle`` has an additional argument to tell the bot whether it should shuffle bumped tracks. (`#2940 <https://github.com/Cog-Creators/Red-DiscordBot/issues/2940>`_)
|
||||
- Added global whitelist/blacklist commands. (`#3047 <https://github.com/Cog-Creators/Red-DiscordBot/issues/3047>`_)
|
||||
- Added self-managed daily playlists in the GUILD scope, these are called "Daily playlist - YYYY-MM-DD" and auto delete after 7 days. (`#3199 <https://github.com/Cog-Creators/Red-DiscordBot/issues/3199>`_)
|
||||
|
||||
|
||||
CustomCom
|
||||
---------
|
||||
|
||||
Enhancements
|
||||
~~~~~~~~~~~~
|
||||
|
||||
- The group command ``[p]cc create`` can now be used to create simple CCs without specifying "simple". (`#1767 <https://github.com/Cog-Creators/Red-DiscordBot/issues/1767>`_)
|
||||
- Added a query option for CC typehints for URL-based CCs. (`#3228 <https://github.com/Cog-Creators/Red-DiscordBot/issues/3228>`_)
|
||||
- Now uses the ``humanize_list`` utility for iterable parameter results, e.g. ``{#:Role.members}``. (`#3277 <https://github.com/Cog-Creators/Red-DiscordBot/issues/3277>`_)
|
||||
|
||||
|
||||
Downloader
|
||||
----------
|
||||
|
||||
Bug Fixes
|
||||
~~~~~~~~~
|
||||
|
||||
- Made the regex for repo names use raw strings to stop causing a ``DeprecationWarning`` for invalid escape sequences. (`#2571 <https://github.com/Cog-Creators/Red-DiscordBot/issues/2571>`_)
|
||||
- Downloader will no longer attempt to install cogs that are already installed. (`#2571 <https://github.com/Cog-Creators/Red-DiscordBot/issues/2571>`_)
|
||||
- Repo names can now only contain the characters listed in the help text (A-Z, 0-9, underscores, and hyphens). (`#2827 <https://github.com/Cog-Creators/Red-DiscordBot/issues/2827>`_)
|
||||
- ``[p]findcog`` no longer attempts to find a cog for commands without a cog. (`#2902 <https://github.com/Cog-Creators/Red-DiscordBot/issues/2902>`_)
|
||||
- Downloader will no longer attempt to install a cog with same name as another cog that is already installed. (`#2927 <https://github.com/Cog-Creators/Red-DiscordBot/issues/2927>`_)
|
||||
- Added error handling for when a remote repository or branch is deleted, now notifies the which repository failed and continues to update the others. (`#2936 <https://github.com/Cog-Creators/Red-DiscordBot/issues/2936>`_)
|
||||
- ``[p]cog install`` will no longer error if a cog has an empty install message. (`#3024 <https://github.com/Cog-Creators/Red-DiscordBot/issues/3024>`_)
|
||||
- Made ``redbot.cogs.downloader.repo_manager.Repo.clean_url`` work with relative urls. This property is ``str`` type now. (`#3141 <https://github.com/Cog-Creators/Red-DiscordBot/issues/3141>`_)
|
||||
- Fixed an error on repo add from empty string values for the ``install_msg`` info.json field. (`#3153 <https://github.com/Cog-Creators/Red-DiscordBot/issues/3153>`_)
|
||||
- Disabled all git auth prompts when adding/updating a repo with Downloader. (`#3159 <https://github.com/Cog-Creators/Red-DiscordBot/issues/3159>`_)
|
||||
- ``[p]findcog`` now properly works for cogs with less typical folder structure. (`#3177 <https://github.com/Cog-Creators/Red-DiscordBot/issues/3177>`_)
|
||||
- ``[p]cog uninstall`` now fully unloads cog - the bot will not try to load it on next startup. (`#3179 <https://github.com/Cog-Creators/Red-DiscordBot/issues/3179>`_)
|
||||
|
||||
|
||||
Enhancements
|
||||
~~~~~~~~~~~~
|
||||
|
||||
- Downloader will now check if the Python and bot versions match requirements in ``info.json`` during update. (`#1866 <https://github.com/Cog-Creators/Red-DiscordBot/issues/1866>`_)
|
||||
- ``[p]cog install`` now accepts multiple cog names. (`#2527 <https://github.com/Cog-Creators/Red-DiscordBot/issues/2527>`_)
|
||||
- When passing cogs to ``[p]cog update``, it will now only update those cogs, not all cogs from the repo those cogs are from. (`#2527 <https://github.com/Cog-Creators/Red-DiscordBot/issues/2527>`_)
|
||||
- Added error messages for failures when installing/reinstalling requirements and copying cogs and shared libraries. (`#2571 <https://github.com/Cog-Creators/Red-DiscordBot/issues/2571>`_)
|
||||
- ``[p]findcog`` now uses sanitized urls (without HTTP Basic Auth fragments). (`#3129 <https://github.com/Cog-Creators/Red-DiscordBot/issues/3129>`_)
|
||||
- ``[p]repo info`` will now show the repo's url, branch, and authors. (`#3225 <https://github.com/Cog-Creators/Red-DiscordBot/issues/3225>`_)
|
||||
- ``[p]cog info`` will now show cog authors. (`#3225 <https://github.com/Cog-Creators/Red-DiscordBot/issues/3225>`_)
|
||||
- ``[p]findcog`` will now show the repo's branch. (`#3225 <https://github.com/Cog-Creators/Red-DiscordBot/issues/3225>`_)
|
||||
|
||||
|
||||
New Features
|
||||
~~~~~~~~~~~~
|
||||
|
||||
- Added ``[p]repo update [repos]`` which updates repos without updating the cogs from them. (`#2527 <https://github.com/Cog-Creators/Red-DiscordBot/issues/2527>`_)
|
||||
- Added ``[p]cog installversion <repo_name> <revision> <cogs>`` which installs cogs from a specified revision (commit, tag) of the given repo. When using this command, the cog will automatically be pinned. (`#2527 <https://github.com/Cog-Creators/Red-DiscordBot/issues/2527>`_)
|
||||
- Added ``[p]cog pin <cogs>`` and ``[p]cog unpin <cogs>`` for pinning cogs. Cogs that are pinned will not be updated when using update commands. (`#2527 <https://github.com/Cog-Creators/Red-DiscordBot/issues/2527>`_)
|
||||
- Added ``[p]cog checkforupdates`` that lists which cogs can be updated (including pinned cog) without updating them. (`#2527 <https://github.com/Cog-Creators/Red-DiscordBot/issues/2527>`_)
|
||||
- Added ``[p]cog updateallfromrepos <repos>`` that updates all cogs from the given repos. (`#2527 <https://github.com/Cog-Creators/Red-DiscordBot/issues/2527>`_)
|
||||
- Added ``[p]cog updatetoversion <repo_name> <revision> [cogs]`` that updates all cogs or ones of user's choosing to chosen revision of the given repo. (`#2527 <https://github.com/Cog-Creators/Red-DiscordBot/issues/2527>`_)
|
||||
- Added ``[p]cog reinstallreqs`` that reinstalls cog requirements and shared libraries for all installed cogs. (`#3167 <https://github.com/Cog-Creators/Red-DiscordBot/issues/3167>`_)
|
||||
|
||||
|
||||
Documentation Changes
|
||||
~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
- Added ``redbot.cogs.downloader.installable.InstalledModule`` to Downloader's framework docs. (`#2527 <https://github.com/Cog-Creators/Red-DiscordBot/issues/2527>`_)
|
||||
- Removed API References for Downloader. (`#3234 <https://github.com/Cog-Creators/Red-DiscordBot/issues/3234>`_)
|
||||
|
||||
|
||||
Image
|
||||
-----
|
||||
|
||||
Enhancements
|
||||
~~~~~~~~~~~~
|
||||
|
||||
- Updated the giphycreds command to match the formatting of the other API commands. (`#2905 <https://github.com/Cog-Creators/Red-DiscordBot/issues/2905>`_)
|
||||
- Removed commas from explanations about how to set API keys. (`#2905 <https://github.com/Cog-Creators/Red-DiscordBot/issues/2905>`_)
|
||||
|
||||
|
||||
Mod
|
||||
---
|
||||
|
||||
Bug Fixes
|
||||
~~~~~~~~~
|
||||
|
||||
- ``[p]userinfo`` no longer breaks when a user has an absurd numbers of roles. (`#2910 <https://github.com/Cog-Creators/Red-DiscordBot/issues/2910>`_)
|
||||
- Fixed Mod cog not recording username changes for ``[p]names`` and ``[p]userinfo`` commands. (`#2918 <https://github.com/Cog-Creators/Red-DiscordBot/issues/2918>`_)
|
||||
- Fixed ``[p]modset deletedelay`` deleting non-command messages. (`#2924 <https://github.com/Cog-Creators/Red-DiscordBot/issues/2924>`_)
|
||||
- Fixed an error when reloading Mod. (`#2932 <https://github.com/Cog-Creators/Red-DiscordBot/issues/2932>`_)
|
||||
|
||||
|
||||
Enhancements
|
||||
~~~~~~~~~~~~
|
||||
|
||||
- Slowmode now accepts integer-only inputs as seconds. (`#2884 <https://github.com/Cog-Creators/Red-DiscordBot/issues/2884>`_)
|
||||
|
||||
|
||||
Permissions
|
||||
-----------
|
||||
|
||||
Bug Fixes
|
||||
~~~~~~~~~
|
||||
|
||||
- Defaults are now cleared properly when clearing all rules. (`#3037 <https://github.com/Cog-Creators/Red-DiscordBot/issues/3037>`_)
|
||||
|
||||
|
||||
Enhancements
|
||||
~~~~~~~~~~~~
|
||||
|
||||
- Better explained the usage of commands with the ``<who_or_what>`` argument. (`#2991 <https://github.com/Cog-Creators/Red-DiscordBot/issues/2991>`_)
|
||||
|
||||
|
||||
Streams
|
||||
-------
|
||||
|
||||
Bug Fixes
|
||||
~~~~~~~~~
|
||||
|
||||
- Fixed a ``TypeError`` in the ``TwitchStream`` class when calling Twitch client_id from Red shared APIs tokens. (`#3042 <https://github.com/Cog-Creators/Red-DiscordBot/issues/3042>`_)
|
||||
- Changed the ``stream_alert`` function for Twitch alerts to make it work with how the ``TwitchStream`` class works now. (`#3042 <https://github.com/Cog-Creators/Red-DiscordBot/issues/3042>`_)
|
||||
|
||||
|
||||
Enhancements
|
||||
~~~~~~~~~~~~
|
||||
|
||||
- Removed commas from explanations about how to set API keys. (`#2905 <https://github.com/Cog-Creators/Red-DiscordBot/issues/2905>`_)
|
||||
|
||||
|
||||
Trivia
|
||||
------
|
||||
|
||||
Bug Fixes
|
||||
~~~~~~~~~
|
||||
|
||||
- Fixed a typo in Ahsoka Tano's name in the Starwars trivia list. (`#2909 <https://github.com/Cog-Creators/Red-DiscordBot/issues/2909>`_)
|
||||
- Fixed a bug where ``[p]trivia leaderboard`` failed to run. (`#2911 <https://github.com/Cog-Creators/Red-DiscordBot/issues/2911>`_)
|
||||
- Fixed a typo in the Greek mythology trivia list regarding Hermes' staff. (`#2994 <https://github.com/Cog-Creators/Red-DiscordBot/issues/2994>`_)
|
||||
- Fixed a question in the Overwatch trivia list that accepted blank responses. (`#2996 <https://github.com/Cog-Creators/Red-DiscordBot/issues/2996>`_)
|
||||
- Fixed questions and answers that were incorrect in the Clash Royale trivia list. (`#3236 <https://github.com/Cog-Creators/Red-DiscordBot/issues/3236>`_)
|
||||
|
||||
|
||||
Enhancements
|
||||
~~~~~~~~~~~~
|
||||
|
||||
- Added trivia lists for Prince and Michael Jackson lyrics. (`#12 <https://github.com/Cog-Creators/Red-DiscordBot/issues/12>`_)
|
||||
102
docs/changelog_3_3_0.rst
Normal file
@@ -0,0 +1,102 @@
|
||||
.. 3.3.x Changelogs
|
||||
|
||||
Redbot 3.3.1 (2020-02-05)
|
||||
=========================
|
||||
|
||||
|
||||
Core Bot
|
||||
--------
|
||||
|
||||
- Add a cli flag for setting a max size of message cache
|
||||
- Allow to edit prefix from command line using ``redbot --edit``.
|
||||
- Some functions have been changed to no longer use deprecated asyncio functions
|
||||
|
||||
Core Commands
|
||||
-------------
|
||||
|
||||
- The short help text for dm has been made more useful
|
||||
- dm no longer allows owners to have the bot attempt to DM itself
|
||||
|
||||
Utils
|
||||
-----
|
||||
|
||||
- Passing the event loop explicitly in utils is deprecated (Removal in 3.4)
|
||||
|
||||
Mod Cog
|
||||
-------
|
||||
|
||||
- Hackban now works properly without being provided a number of days
|
||||
|
||||
Documentation Changes
|
||||
---------------------
|
||||
|
||||
- Add ``-e`` flag to ``journalctl`` command in systemd guide so that it takes the user to the end of logs automatically.
|
||||
- Added section to install docs for CentOS 8
|
||||
- Improve usage of apt update in docs
|
||||
|
||||
Redbot 3.3.0 (2020-01-26)
|
||||
=========================
|
||||
|
||||
Core Bot
|
||||
--------
|
||||
|
||||
- The bot's description is now configurable.
|
||||
- We now use discord.py 1.3.1, this comes with added teams support.
|
||||
- The commands module has been slightly restructured to provide more useful data to developers.
|
||||
- Help is now self consistent in the extra formatting used.
|
||||
|
||||
Core Commands
|
||||
-------------
|
||||
|
||||
- Slowmode should no longer error on nonsensical time quantities.
|
||||
- Embed use can be configured per channel as well.
|
||||
|
||||
Documentation
|
||||
-------------
|
||||
|
||||
- We've made some small fixes to inaccurate instructions about installing with pyenv.
|
||||
- Notes about deprecating in 3.3 have been altered to 3.4 to match the intended timeframe.
|
||||
|
||||
Admin
|
||||
-----
|
||||
|
||||
- Gives feedback when adding or removing a role doesn't make sense.
|
||||
|
||||
Audio
|
||||
-----
|
||||
|
||||
- Playlist finding is more intuitive.
|
||||
- disconnect and repeat commands no longer interfere with eachother.
|
||||
|
||||
CustomCom
|
||||
---------
|
||||
|
||||
- No longer errors when exiting an interactive menu.
|
||||
|
||||
Cleanup
|
||||
-------
|
||||
|
||||
- A rare edge case involving messages which are deleted during cleanup and are the only message was fixed.
|
||||
|
||||
Downloader
|
||||
----------
|
||||
|
||||
- Some user facing messages were improved.
|
||||
- Downloader's initialization can no longer time out at startup.
|
||||
|
||||
General
|
||||
-------
|
||||
|
||||
- Roll command will no longer attempt to roll obscenely large amounts.
|
||||
|
||||
Mod
|
||||
---
|
||||
|
||||
- You can set a default amount of days to clean up when banning.
|
||||
- Ban and hackban now use that default.
|
||||
- Users can now optionally be DMed their ban reason.
|
||||
|
||||
Permissions
|
||||
-----------
|
||||
|
||||
- Now has stronger enforcement of prioritizing botwide settings.
|
||||
@@ -1,5 +1,4 @@
|
||||
.. CustomCommands Cog Reference
|
||||
.. _cog_customcom:
|
||||
|
||||
============================
|
||||
CustomCommands Cog Reference
|
||||
@@ -19,7 +18,7 @@ Cooldowns
|
||||
|
||||
You can set cooldowns for your custom commands. If a command is on cooldown, it will not be triggered.
|
||||
|
||||
You can set cooldowns per member or per thread/channel, or set a cooldown guild-wide. You can also set multiple types of cooldown on a single custom command. All cooldowns must pass before the command will trigger.
|
||||
You can set cooldowns per member or per channel, or set a cooldown guild-wide. You can also set multiple types of cooldown on a single custom command. All cooldowns must pass before the command will trigger.
|
||||
|
||||
------------------
|
||||
Context Parameters
|
||||
@@ -27,19 +26,19 @@ Context Parameters
|
||||
|
||||
You can enhance your custom command's response by leaving spaces for the bot to substitute.
|
||||
|
||||
+-----------+--------------------------------------------------+
|
||||
+-----------+----------------------------------------+
|
||||
| Argument | Substitute |
|
||||
+===========+==================================================+
|
||||
+===========+========================================+
|
||||
| {message} | The message the bot is responding to. |
|
||||
+-----------+--------------------------------------------------+
|
||||
+-----------+----------------------------------------+
|
||||
| {author} | The user who called the command. |
|
||||
+-----------+--------------------------------------------------+
|
||||
| {channel} | The channel or thread the command was called in. |
|
||||
+-----------+--------------------------------------------------+
|
||||
+-----------+----------------------------------------+
|
||||
| {channel} | The channel the command was called in. |
|
||||
+-----------+----------------------------------------+
|
||||
| {server} | The server the command was called in. |
|
||||
+-----------+--------------------------------------------------+
|
||||
+-----------+----------------------------------------+
|
||||
| {guild} | Same as with {server}. |
|
||||
+-----------+--------------------------------------------------+
|
||||
+-----------+----------------------------------------+
|
||||
|
||||
You can further refine the response with dot notation. For example, {author.mention} will mention the user who called the command.
|
||||
|
||||
@@ -81,7 +80,7 @@ Showing your own avatar
|
||||
|
||||
.. code-block:: none
|
||||
|
||||
[p]customcom add simple avatar {author.display_avatar}
|
||||
[p]customcom add simple avatar {author.avatar_url}
|
||||
[p]avatar
|
||||
https://cdn.discordapp.com/avatars/133801473317404673/be4c4a4fe47cb3e74c31a0504e7a295e.webp?size=1024
|
||||
|
||||
|
||||
@@ -1,454 +0,0 @@
|
||||
.. _admin:
|
||||
|
||||
=====
|
||||
Admin
|
||||
=====
|
||||
|
||||
This is the cog guide for the admin cog. You will
|
||||
find detailed docs about usage and commands.
|
||||
|
||||
``[p]`` is considered as your prefix.
|
||||
|
||||
.. note:: To use this cog, load it by typing this::
|
||||
|
||||
[p]load admin
|
||||
|
||||
.. _admin-usage:
|
||||
|
||||
-----
|
||||
Usage
|
||||
-----
|
||||
|
||||
This cog will provide tools for server admins and bot owners.
|
||||
|
||||
It can add or remove a role to a member, edit one or make some available
|
||||
for members so they can self-assign them as they wish.
|
||||
|
||||
It also provides tools for the bot owner such as server locking (once enabled,
|
||||
the bot will instantly leave new servers it joins) and announcements, which
|
||||
can send something in all the servers of the bot.
|
||||
|
||||
.. _admin-commands:
|
||||
|
||||
--------
|
||||
Commands
|
||||
--------
|
||||
|
||||
Here's a list of all commands available for this cog.
|
||||
|
||||
.. _admin-command-selfrole:
|
||||
|
||||
^^^^^^^^
|
||||
selfrole
|
||||
^^^^^^^^
|
||||
|
||||
**Syntax**
|
||||
|
||||
.. code-block:: none
|
||||
|
||||
[p]selfrole <selfrole>
|
||||
|
||||
**Description**
|
||||
|
||||
Add or remove a role from yourself. It must have been configured as user settable
|
||||
by admins using the :ref:`selfroleset command <admin-command-selfroleset>`.
|
||||
|
||||
**Arguments**
|
||||
|
||||
* ``<selfrole>``: The role you want to attribute or remove from yourself. |role-input|
|
||||
|
||||
.. _admin-command-selfrole-add:
|
||||
|
||||
""""""""""""
|
||||
selfrole add
|
||||
""""""""""""
|
||||
|
||||
**Syntax**
|
||||
|
||||
.. code-block:: none
|
||||
|
||||
[p]selfrole add <selfrole>
|
||||
|
||||
**Description**
|
||||
|
||||
Add a role to yourself. It must have been configured as user settable
|
||||
by admins using the :ref:`selfroleset command <admin-command-selfroleset>`.
|
||||
|
||||
**Arguments**
|
||||
|
||||
* ``<selfrole>``: The role you want to attribute to yourself. |role-input|
|
||||
|
||||
.. _admin-command-selfrole-remove:
|
||||
|
||||
"""""""""""""""
|
||||
selfrole remove
|
||||
"""""""""""""""
|
||||
|
||||
**Syntax**
|
||||
|
||||
.. code-block:: none
|
||||
|
||||
[p]selfrole remove <selfrole>
|
||||
|
||||
**Description**
|
||||
|
||||
Remove a role from yourself. It must have been configured as user settable
|
||||
by admins using the :ref:`selfroleset command <admin-command-selfroleset>`.
|
||||
|
||||
**Arguments**
|
||||
|
||||
* ``<selfrole>``: The role you want to remove from yourself. |role-input|
|
||||
|
||||
|
||||
.. _admin-command-selfrole-list:
|
||||
|
||||
"""""""""""""
|
||||
selfrole list
|
||||
"""""""""""""
|
||||
|
||||
**Syntax**
|
||||
|
||||
.. code-block:: none
|
||||
|
||||
[p]selfrole list
|
||||
|
||||
**Description**
|
||||
|
||||
List all of the available roles you can assign to yourself.
|
||||
|
||||
.. _admin-command-selfroleset:
|
||||
|
||||
^^^^^^^^^^^
|
||||
selfroleset
|
||||
^^^^^^^^^^^
|
||||
|
||||
.. note:: |admin-lock| This is also usable by the members with the
|
||||
``Manage roles`` permission.
|
||||
|
||||
**Syntax**
|
||||
|
||||
.. code-block:: none
|
||||
|
||||
[p]selfroleset
|
||||
|
||||
**Description**
|
||||
|
||||
Define the list of user settable roles. Those roles will be available to any
|
||||
member using the :ref:`selfrole command <admin-command-selfrole>`.
|
||||
|
||||
.. _admin-command-selfroleset-add:
|
||||
|
||||
"""""""""""""""
|
||||
selfroleset add
|
||||
"""""""""""""""
|
||||
|
||||
**Syntax**
|
||||
|
||||
.. code-block:: none
|
||||
|
||||
[p]selfroleset add <role>
|
||||
|
||||
**Description**
|
||||
|
||||
Add a role, or a selection of roles, to the list of available selfroles.
|
||||
|
||||
.. warning:: Members will be able to assign themselves the role.
|
||||
Make sure it doesn't give extra perms or anything that can break
|
||||
your server's security.
|
||||
|
||||
**Arguments**
|
||||
|
||||
* ``<role>``: The role to add to the list. |role-input|
|
||||
|
||||
.. _admin-command-selfroleset-clear:
|
||||
|
||||
"""""""""""""""""
|
||||
selfroleset clear
|
||||
"""""""""""""""""
|
||||
|
||||
**Syntax**
|
||||
|
||||
.. code-block:: none
|
||||
|
||||
[p]selfroleset clear
|
||||
|
||||
**Description**
|
||||
|
||||
Clear the list of available selfroles for this server.
|
||||
|
||||
.. _admin-command-selfroleset-remove:
|
||||
|
||||
""""""""""""""""""
|
||||
selfroleset remove
|
||||
""""""""""""""""""
|
||||
|
||||
**Syntax**
|
||||
|
||||
.. code-block:: none
|
||||
|
||||
[p]selfroleset remove <role>
|
||||
|
||||
**Description**
|
||||
|
||||
Remove a role, or a selection of roles, from the list of available selfroles.
|
||||
|
||||
**Arguments**
|
||||
|
||||
* ``<role>``: The role to remove from the list. |role-input|
|
||||
|
||||
.. _admin-command-addrole:
|
||||
|
||||
^^^^^^^
|
||||
addrole
|
||||
^^^^^^^
|
||||
|
||||
.. note:: |admin-lock| This is also usable by the members with the ``Manage
|
||||
roles`` permission.
|
||||
|
||||
**Syntax**
|
||||
|
||||
.. code-block:: none
|
||||
|
||||
[p]addrole <rolename> [user]
|
||||
|
||||
**Description**
|
||||
|
||||
Adds a role to a member. If ``user`` is not given, it will be considered
|
||||
as yourself, the command author.
|
||||
|
||||
**Arguments**
|
||||
|
||||
* ``<role>``: The role to add to the member. |role-input-quotes|
|
||||
|
||||
* ``[user]``: The member you want to add the role to. Defaults to the
|
||||
command author. |member-input|
|
||||
|
||||
.. _admin-command-removerole:
|
||||
|
||||
^^^^^^^^^^
|
||||
removerole
|
||||
^^^^^^^^^^
|
||||
|
||||
.. note:: |admin-lock| This is also usable by the members with the
|
||||
``Manage roles`` permission.
|
||||
|
||||
**Syntax**
|
||||
|
||||
.. code-block:: none
|
||||
|
||||
[p]removerole <rolename> [user]
|
||||
|
||||
**Description**
|
||||
|
||||
Removes a role from a member. If ``user`` is not given, it will be considered
|
||||
as yourself, the command author.
|
||||
|
||||
**Arguments**
|
||||
|
||||
* ``<role>``: The role to remove. |role-input-quotes|
|
||||
|
||||
* ``[user]``: The member to remove the role from. |member-input| Defaults
|
||||
to the command author.
|
||||
|
||||
.. _admin-command-editrole:
|
||||
|
||||
^^^^^^^^
|
||||
editrole
|
||||
^^^^^^^^
|
||||
|
||||
.. note:: |admin-lock|
|
||||
|
||||
**Syntax**
|
||||
|
||||
.. code-block:: none
|
||||
|
||||
[p]editrole
|
||||
|
||||
**Description**
|
||||
|
||||
Edits the settings of a role.
|
||||
|
||||
.. _admin-command-editrole-name:
|
||||
|
||||
"""""""""""""
|
||||
editrole name
|
||||
"""""""""""""
|
||||
|
||||
**Syntax**
|
||||
|
||||
.. code-block:: none
|
||||
|
||||
[p]editrole name <role> <name>
|
||||
|
||||
**Description**
|
||||
|
||||
Edits the name of a role.
|
||||
|
||||
**Arguments**
|
||||
|
||||
* ``<role>``: The role name to edit. |role-input-quotes|
|
||||
|
||||
* ``<name>``: The new role name. If it has spaces, you must use quotes.
|
||||
|
||||
.. _admin-command-editrole-color:
|
||||
|
||||
""""""""""""""
|
||||
editrole color
|
||||
""""""""""""""
|
||||
|
||||
**Syntax**
|
||||
|
||||
.. code-block:: none
|
||||
|
||||
[p]editrole color <role> <color>
|
||||
|
||||
**Description**
|
||||
|
||||
Edits the color of a role.
|
||||
|
||||
**Arguments**
|
||||
|
||||
* ``<role>``: The role name to edit. |role-input-quotes|
|
||||
|
||||
* ``<color>``: The new color to assign. |color-input|
|
||||
|
||||
**Examples**
|
||||
|
||||
* ``[p]editrole color "My role" #ff0000``
|
||||
|
||||
* ``[p]editrole color "My role" dark_blue``
|
||||
|
||||
.. _admin-command-announce:
|
||||
|
||||
^^^^^^^^
|
||||
announce
|
||||
^^^^^^^^
|
||||
|
||||
.. note:: |owner-lock|
|
||||
|
||||
**Syntax**
|
||||
|
||||
.. code-block:: none
|
||||
|
||||
[p]announce <message>
|
||||
|
||||
**Description**
|
||||
|
||||
Announce your message to all of the servers the bot is in.
|
||||
|
||||
The bot will announce the message in the guild's announcements channel.
|
||||
If this channel is not set, the message won't be announced.
|
||||
|
||||
**Arguments**
|
||||
|
||||
* ``<message>``: The message to send.
|
||||
|
||||
.. _admin-command-announce-cancel:
|
||||
|
||||
"""""""""""""""
|
||||
announce cancel
|
||||
"""""""""""""""
|
||||
|
||||
.. note:: |owner-lock|
|
||||
|
||||
**Syntax**
|
||||
|
||||
.. code-block:: none
|
||||
|
||||
[p]announce cancel
|
||||
|
||||
**Description**
|
||||
|
||||
Cancels an active announcement.
|
||||
|
||||
.. _admin-command-announceset:
|
||||
|
||||
^^^^^^^^^^^
|
||||
announceset
|
||||
^^^^^^^^^^^
|
||||
|
||||
.. note:: |guildowner-lock|
|
||||
|
||||
**Syntax**
|
||||
|
||||
.. code-block:: none
|
||||
|
||||
[p]announceset
|
||||
|
||||
**Description**
|
||||
|
||||
Change how announcements are received in this guild.
|
||||
|
||||
.. _admin-command-announceset-channel:
|
||||
|
||||
"""""""""""""""""""
|
||||
announceset channel
|
||||
"""""""""""""""""""
|
||||
|
||||
**Syntax**
|
||||
|
||||
.. code-block:: none
|
||||
|
||||
[p]announceset channel <channel>
|
||||
|
||||
**Description**
|
||||
|
||||
Sets the channel where the bot owner announcements will be sent.
|
||||
|
||||
**Arguments**
|
||||
|
||||
* ``<channel>``: The channel that will be used for bot announcements.
|
||||
|channel-input|
|
||||
|
||||
.. _admin-command-announceset-clearchannel:
|
||||
|
||||
""""""""""""""""""""""""
|
||||
announceset clearchannel
|
||||
""""""""""""""""""""""""
|
||||
|
||||
**Syntax**
|
||||
|
||||
.. code-block:: none
|
||||
|
||||
[p]announceset clearchannel
|
||||
|
||||
**Description**
|
||||
|
||||
Disables announcements on your server. To enable them again, you will have to
|
||||
re-enter your announcements channel with the :ref:`announceset channel
|
||||
<admin-command-announceset-channel>` command.
|
||||
|
||||
.. _admin-command-serverlock:
|
||||
|
||||
^^^^^^^^^^
|
||||
serverlock
|
||||
^^^^^^^^^^
|
||||
|
||||
.. note:: |owner-lock| This is also usable by the members with the
|
||||
``Administrator`` permission.
|
||||
|
||||
**Syntax**
|
||||
|
||||
.. code-block:: none
|
||||
|
||||
[p]serverlock
|
||||
|
||||
**Description**
|
||||
|
||||
Lock a bot to its current servers only.
|
||||
|
||||
This means that, once you enable this, if someone invites the bot to a new
|
||||
server, the bot will automatically leave the server.
|
||||
|
||||
.. tip:: Another way to prevent your bot from being invited on more servers is
|
||||
making it private directly from the developer portal.
|
||||
|
||||
Once a bot is private, it can only be invited by its owner (or team
|
||||
owners). Other users will get an error on Discord's webpage explaining that
|
||||
the bot is private.
|
||||
|
||||
To do this, go to the `Discord developer portal
|
||||
<https://discord.com/developers>`_, select your application, click "Bot" in
|
||||
the sidebar, then untick "Public bot".
|
||||
|
||||
.. image:: ../.resources/admin/public_bot.png
|
||||
@@ -1,277 +0,0 @@
|
||||
.. _alias:
|
||||
|
||||
=====
|
||||
Alias
|
||||
=====
|
||||
|
||||
This is the cog guide for the alias cog. You will
|
||||
find detailed docs about the usage and the commands.
|
||||
|
||||
``[p]`` is considered as your prefix.
|
||||
|
||||
.. note:: To use this cog, load it by typing this::
|
||||
|
||||
[p]load alias
|
||||
|
||||
.. _alias-usage:
|
||||
|
||||
-----
|
||||
Usage
|
||||
-----
|
||||
|
||||
This cog is used to create shortcuts for commands.
|
||||
|
||||
Here's an example:
|
||||
|
||||
.. code-block:: python
|
||||
|
||||
[p]play
|
||||
# with an alias, you can call the command above with a shortcut like this:
|
||||
[p]p
|
||||
# "p" is now a shortcut for "play"
|
||||
|
||||
In this example, we made an alias named ``p`` that will
|
||||
invoke the ``play`` command. If you use ``[p]play`` or ``[p]p``, the result will
|
||||
be the same.
|
||||
|
||||
----
|
||||
|
||||
Here's another example
|
||||
|
||||
.. code-block:: python
|
||||
|
||||
[p]cleanup messages
|
||||
# now we're creating another alias that will group both the command and the subcommand into this:
|
||||
[p]clear
|
||||
# "clear" is now a shortcut for "cleanup messages"
|
||||
|
||||
In this second example, we made an alias called ``clear`` that will
|
||||
invoke the ``cleanup messages`` subcommand. Now if you use ``[p]cleanup
|
||||
message`` or ``[p]clear``, the result will be the same.
|
||||
|
||||
----
|
||||
|
||||
This is the basic usage, where you can define an alias for the first part of
|
||||
the command and give the second part when invoking the command. A more advanced
|
||||
usage of aliases is the usage of arguments.
|
||||
|
||||
Let's suppose you want to make an alias to ban someone, delete 7 days of
|
||||
messages and set the reason to "Spam bot.", that cannot be done with a classic
|
||||
alias since the required member argument is the first one. If you create the
|
||||
alias "spamban" using arguments like this ``ban {0} 7 Spam bot.``, ``{0}`` will
|
||||
be replaced by the first argument of your alias:
|
||||
|
||||
.. code-block:: none
|
||||
|
||||
# we created the following alias named "spamban"
|
||||
[p]spamban Slime#3160
|
||||
# this alias will execute the following command:
|
||||
[p]ban Slime#3160 7 Spam bot.
|
||||
|
||||
For a more detailed explanation, read :ref:`this <alias-command-alias-add>`.
|
||||
|
||||
.. _alias-commands:
|
||||
|
||||
--------
|
||||
Commands
|
||||
--------
|
||||
|
||||
.. _alias-command-alias:
|
||||
|
||||
^^^^^
|
||||
alias
|
||||
^^^^^
|
||||
|
||||
**Syntax**
|
||||
|
||||
.. code-block:: none
|
||||
|
||||
[p]alias
|
||||
|
||||
**Description**
|
||||
|
||||
This is the main command used for setting up the cog.
|
||||
It will be used for all other commands.
|
||||
|
||||
.. _alias-command-alias-add:
|
||||
|
||||
"""""""""
|
||||
alias add
|
||||
"""""""""
|
||||
|
||||
.. note:: |mod-lock|
|
||||
|
||||
**Syntax**
|
||||
|
||||
.. code-block:: none
|
||||
|
||||
[p]alias add <alias_name> <command>
|
||||
|
||||
**Description**
|
||||
|
||||
Creates an alias. It will be used like this ``[p]alias_name <arguments>``
|
||||
and will be equal to this ``[p]command <arguments>``.
|
||||
|
||||
Let's develop the examples given :ref:`earlier <alias-usage>` a bit more,
|
||||
the left part of the command is the alias (blue), and the right part is the
|
||||
parameters members have to give for the command (orange).
|
||||
|
||||
.. image:: ../.resources/alias/example-1.png
|
||||
|
||||
One more thing you can do with aliases is using arguments, a bit like
|
||||
CustomCommands. Let's suppose you want an alias that bans x member and deletes
|
||||
7 days of messages. Without aliases, the command would look like this:
|
||||
|
||||
``[p]ban NotSoTrustyJAID#0001 7 My random reason``
|
||||
|
||||
A classic alias wouldn't work because the member argument is the first one,
|
||||
and you can only shorten the left part before the required argument.
|
||||
|
||||
An alias with arguments can fix that, you can define the alias on the whole
|
||||
command and replace the required argument by ``{0}``, which will be replaced
|
||||
by the first parameter given when invoking the alias.
|
||||
|
||||
Back to our example, let's make an alias named ``bigban`` which will be
|
||||
assigned to this expression: ``ban {0} 7``
|
||||
|
||||
.. image:: ../.resources/alias/example-2.png
|
||||
|
||||
You can see in blue the "static" part of the alias, what is contained and
|
||||
doesn't need to be given, the orange part is the arguments given at the end of
|
||||
the command, just like a classic alias, and the green part is the positional
|
||||
argument we defined: the first argument of the alias will be the green part.
|
||||
|
||||
You can add as many arguments as you want, they can start at ``{0}`` or ``{1}``
|
||||
and must be in order: ``{1}`` will be the first argument, ``{2}`` will be the
|
||||
second one...
|
||||
|
||||
.. attention:: The numbers must be in order, you cannot use ``{0}`` and ``{2}``
|
||||
without using ``{1}``.
|
||||
|
||||
Here are more examples:
|
||||
|
||||
* * Full command: ``[p]cleanup messages 75 True``
|
||||
* Alias: ``[p]alias add fullclear cleanup messages {0} True``
|
||||
* Invoked alias: ``[p]fullclear 75``
|
||||
|
||||
*The* ``True`` *at the end tells the bot to also clear pinned messages.*
|
||||
|
||||
* * Full command: ``[p]repo add SinbadCogs
|
||||
https://github.com/mikeshardmind/SinbadCogs v3``
|
||||
|
||||
* Alias: ``[p]alias add newrepo repo add {2} https://github.com/{1}/{2}``
|
||||
* Invoked with alias: ``[p]newrepo mikeshardmind SinbadCogs v3``
|
||||
|
||||
**Arguments**
|
||||
|
||||
* ``<alias_name>``: The new command name.
|
||||
|
||||
* ``<command>``: The command to execute when ``[p]alias_name`` is invoked.
|
||||
|
||||
.. _alias-command-alias-delete:
|
||||
|
||||
""""""""""""
|
||||
alias delete
|
||||
""""""""""""
|
||||
|
||||
.. note:: |mod-lock|
|
||||
|
||||
**Syntax**
|
||||
|
||||
.. code-block:: none
|
||||
|
||||
[p]alias [delete|remove|del] <alias_name>
|
||||
|
||||
**Description**
|
||||
|
||||
Removes an alias from the list. Check the list with
|
||||
the :ref:`alias list <alias-command-alias-list>` command.
|
||||
|
||||
**Arguments**
|
||||
|
||||
* ``<alias_name>``: The alias' name to delete.
|
||||
|
||||
.. _alias-command-alias-list:
|
||||
|
||||
""""""""""
|
||||
alias list
|
||||
""""""""""
|
||||
|
||||
**Syntax**
|
||||
|
||||
.. code-block:: none
|
||||
|
||||
[p]alias list
|
||||
|
||||
**Description**
|
||||
|
||||
Shows all of the existing aliases on the current server.
|
||||
|
||||
.. _alias-command-alias-show:
|
||||
|
||||
""""""""""
|
||||
alias show
|
||||
""""""""""
|
||||
|
||||
**Syntax**
|
||||
|
||||
.. code-block:: none
|
||||
|
||||
[p]alias show <alias_name>
|
||||
|
||||
**Description**
|
||||
|
||||
Shows the command associated to the alias.
|
||||
|
||||
**Arguments**
|
||||
|
||||
* ``<alias_name>``: The alias you want information from.
|
||||
|
||||
.. _alias-command-alias-help:
|
||||
|
||||
""""""""""
|
||||
alias help
|
||||
""""""""""
|
||||
|
||||
**Syntax**
|
||||
|
||||
.. code-block:: none
|
||||
|
||||
[p]alias help <alias_name>
|
||||
|
||||
**Description**
|
||||
|
||||
Shows help message for an alias.
|
||||
|
||||
**Arguments**
|
||||
|
||||
* ``<alias_name>``: Alias you want to get help from.
|
||||
|
||||
.. _alias-command-alias-global:
|
||||
|
||||
""""""""""""
|
||||
alias global
|
||||
""""""""""""
|
||||
|
||||
.. note:: |owner-lock|
|
||||
|
||||
**Syntax**
|
||||
|
||||
.. code-block:: none
|
||||
|
||||
[p]alias global
|
||||
|
||||
**Description**
|
||||
|
||||
Another group command which contains the :ref:`add
|
||||
<alias-command-alias-add>`, :ref:`del
|
||||
<alias-command-alias-delete>` and :ref:`list
|
||||
<alias-command-alias-list>` commands.
|
||||
|
||||
They work the same, except the created aliases will be
|
||||
global instead of being only server-wide.
|
||||
|
||||
Please refer to these docs for the commands, they work with the
|
||||
same arguments. For example, if you want to add a global alias,
|
||||
instead of doing ``[p]alias add <arguments>``, do ``[p]alias
|
||||
global add <arguments>``.
|
||||
@@ -1,333 +0,0 @@
|
||||
.. _cleanup:
|
||||
|
||||
=======
|
||||
Cleanup
|
||||
=======
|
||||
|
||||
This is the cog guide for the cleanup cog. You will
|
||||
find detailed docs about usage and commands.
|
||||
|
||||
``[p]`` is considered as your prefix.
|
||||
|
||||
.. note:: To use this cog, load it by typing this::
|
||||
|
||||
[p]load cleanup
|
||||
|
||||
.. _cleanup-usage:
|
||||
|
||||
-----
|
||||
Usage
|
||||
-----
|
||||
|
||||
This cog contains commands used for "cleaning up" (deleting) messages.
|
||||
|
||||
This is designed as a moderator tool and offers many convenient use cases.
|
||||
All cleanup commands only apply to the channel the command is executed in.
|
||||
|
||||
Messages older than two weeks cannot be mass deleted.
|
||||
This is a limitation of the API.
|
||||
|
||||
|
||||
.. _cleanup-commands:
|
||||
|
||||
--------
|
||||
Commands
|
||||
--------
|
||||
|
||||
.. _cleanup-command-cleanup:
|
||||
|
||||
^^^^^^^
|
||||
cleanup
|
||||
^^^^^^^
|
||||
|
||||
**Syntax**
|
||||
|
||||
.. code-block:: none
|
||||
|
||||
[p]cleanup
|
||||
|
||||
**Description**
|
||||
|
||||
Base command for deleting messages.
|
||||
|
||||
.. _cleanup-command-cleanup-after:
|
||||
|
||||
"""""""""""""
|
||||
cleanup after
|
||||
"""""""""""""
|
||||
|
||||
.. note:: |mod-lock|
|
||||
|
||||
**Syntax**
|
||||
|
||||
.. code-block:: none
|
||||
|
||||
[p]cleanup after <message_id> [delete_pinned=False]
|
||||
|
||||
**Description**
|
||||
|
||||
Delete all messages after a specified message.
|
||||
|
||||
To get a message id, enable developer mode in Discord's
|
||||
settings, 'appearance' tab. Then right click a message
|
||||
and copy its id.
|
||||
|
||||
**Arguments:**
|
||||
|
||||
- ``<message_id>`` The id of the message to cleanup after. This message won't be deleted.
|
||||
- ``<delete_pinned>`` Whether to delete pinned messages or not. Defaults to False
|
||||
|
||||
.. _cleanup-command-cleanup-before:
|
||||
|
||||
""""""""""""""
|
||||
cleanup before
|
||||
""""""""""""""
|
||||
|
||||
.. note:: |mod-lock|
|
||||
|
||||
**Syntax**
|
||||
|
||||
.. code-block:: none
|
||||
|
||||
[p]cleanup before <message_id> <number> [delete_pinned=False]
|
||||
|
||||
**Description**
|
||||
|
||||
Deletes X messages before the specified message.
|
||||
|
||||
To get a message id, enable developer mode in Discord's
|
||||
settings, 'appearance' tab. Then right click a message
|
||||
and copy its id.
|
||||
|
||||
**Arguments:**
|
||||
|
||||
- ``<message_id>`` The id of the message to cleanup before. This message won't be deleted.
|
||||
- ``<number>`` The max number of messages to cleanup. Must be a positive integer.
|
||||
- ``<delete_pinned>`` Whether to delete pinned messages or not. Defaults to False
|
||||
|
||||
.. _cleanup-command-cleanup-between:
|
||||
|
||||
"""""""""""""""
|
||||
cleanup between
|
||||
"""""""""""""""
|
||||
|
||||
.. note:: |mod-lock|
|
||||
|
||||
**Syntax**
|
||||
|
||||
.. code-block:: none
|
||||
|
||||
[p]cleanup between <one> <two> [delete_pinned=False]
|
||||
|
||||
**Description**
|
||||
|
||||
Delete the messages between Message One and Message Two, providing the messages IDs.
|
||||
|
||||
The first message ID should be the older message and the second one the newer.
|
||||
|
||||
Example:
|
||||
- ``[p]cleanup between 123456789123456789 987654321987654321``
|
||||
|
||||
**Arguments:**
|
||||
|
||||
- ``<one>`` The id of the message to cleanup after. This message won't be deleted.
|
||||
- ``<two>`` The id of the message to cleanup before. This message won't be deleted.
|
||||
- ``<delete_pinned>`` Whether to delete pinned messages or not. Defaults to False
|
||||
|
||||
.. _cleanup-command-cleanup-bot:
|
||||
|
||||
"""""""""""
|
||||
cleanup bot
|
||||
"""""""""""
|
||||
|
||||
.. note:: |mod-lock|
|
||||
|
||||
**Syntax**
|
||||
|
||||
.. code-block:: none
|
||||
|
||||
[p]cleanup bot <number> [delete_pinned=False]
|
||||
|
||||
**Description**
|
||||
|
||||
Clean up command messages and messages from the bot in the current channel.
|
||||
|
||||
Can only cleanup custom commands and alias commands if those cogs are loaded.
|
||||
|
||||
**Arguments:**
|
||||
|
||||
- ``<number>`` The max number of messages to cleanup. Must be a positive integer.
|
||||
- ``<delete_pinned>`` Whether to delete pinned messages or not. Defaults to False
|
||||
|
||||
.. _cleanup-command-cleanup-messages:
|
||||
|
||||
""""""""""""""""
|
||||
cleanup messages
|
||||
""""""""""""""""
|
||||
|
||||
.. note:: |mod-lock|
|
||||
|
||||
**Syntax**
|
||||
|
||||
.. code-block:: none
|
||||
|
||||
[p]cleanup messages <number> [delete_pinned=False]
|
||||
|
||||
**Description**
|
||||
|
||||
Delete the last X messages in the current channel.
|
||||
|
||||
Example:
|
||||
- ``[p]cleanup messages 26``
|
||||
|
||||
**Arguments:**
|
||||
|
||||
- ``<number>`` The max number of messages to cleanup. Must be a positive integer.
|
||||
- ``<delete_pinned>`` Whether to delete pinned messages or not. Defaults to False
|
||||
|
||||
.. _cleanup-command-cleanup-self:
|
||||
|
||||
""""""""""""
|
||||
cleanup self
|
||||
""""""""""""
|
||||
|
||||
**Syntax**
|
||||
|
||||
.. code-block:: none
|
||||
|
||||
[p]cleanup self <number> [match_pattern] [delete_pinned=False]
|
||||
|
||||
**Description**
|
||||
|
||||
Clean up messages owned by the bot in the current channel.
|
||||
|
||||
By default, all messages are cleaned. If a second argument is specified,
|
||||
it is used for pattern matching - only messages containing the given text will be deleted.
|
||||
|
||||
Examples:
|
||||
- ``[p]cleanup self 6``
|
||||
- ``[p]cleanup self 10 Pong``
|
||||
- ``[p]cleanup self 7 "" True``
|
||||
|
||||
**Arguments:**
|
||||
|
||||
- ``<number>`` The max number of messages to cleanup. Must be a positive integer.
|
||||
- ``<match_pattern>`` The text that messages must contain to be deleted. Use "" to skip this.
|
||||
- ``<delete_pinned>`` Whether to delete pinned messages or not. Defaults to False
|
||||
|
||||
.. _cleanup-command-cleanup-spam:
|
||||
|
||||
""""""""""""
|
||||
cleanup spam
|
||||
""""""""""""
|
||||
|
||||
.. note:: |mod-lock|
|
||||
|
||||
**Syntax**
|
||||
|
||||
.. code-block:: none
|
||||
|
||||
[p]cleanup spam [number=50]
|
||||
|
||||
**Description**
|
||||
|
||||
Deletes duplicate messages in the channel from the last X messages and keeps only one copy.
|
||||
|
||||
Defaults to 50.
|
||||
|
||||
**Arguments:**
|
||||
|
||||
- ``<number>`` The number of messages to check for duplicates. Must be a positive integer.
|
||||
|
||||
.. _cleanup-command-cleanup-text:
|
||||
|
||||
""""""""""""
|
||||
cleanup text
|
||||
""""""""""""
|
||||
|
||||
.. note:: |mod-lock|
|
||||
|
||||
**Syntax**
|
||||
|
||||
.. code-block:: none
|
||||
|
||||
[p]cleanup text <text> <number> [delete_pinned=False]
|
||||
|
||||
**Description**
|
||||
|
||||
Delete the last X messages matching the specified text in the current channel.
|
||||
|
||||
Example:
|
||||
- ``[p]cleanup text "test" 5``
|
||||
|
||||
Remember to use double quotes.
|
||||
|
||||
**Arguments:**
|
||||
|
||||
- ``<number>`` The max number of messages to cleanup. Must be a positive integer.
|
||||
- ``<delete_pinned>`` Whether to delete pinned messages or not. Defaults to False
|
||||
|
||||
.. _cleanup-command-cleanup-user:
|
||||
|
||||
""""""""""""
|
||||
cleanup user
|
||||
""""""""""""
|
||||
|
||||
.. note:: |mod-lock|
|
||||
|
||||
**Syntax**
|
||||
|
||||
.. code-block:: none
|
||||
|
||||
[p]cleanup user <user> <number> [delete_pinned=False]
|
||||
|
||||
**Description**
|
||||
|
||||
Delete the last X messages from a specified user in the current channel.
|
||||
|
||||
Examples:
|
||||
- ``[p]cleanup user @Twentysix 2``
|
||||
- ``[p]cleanup user Red 6``
|
||||
|
||||
**Arguments:**
|
||||
|
||||
- ``<user>`` The user whose messages are to be cleaned up.
|
||||
- ``<number>`` The max number of messages to cleanup. Must be a positive integer.
|
||||
- ``<delete_pinned>`` Whether to delete pinned messages or not. Defaults to False
|
||||
|
||||
.. _cleanup-command-cleanupset:
|
||||
|
||||
^^^^^^^^^^
|
||||
cleanupset
|
||||
^^^^^^^^^^
|
||||
|
||||
.. note:: |admin-lock|
|
||||
|
||||
**Syntax**
|
||||
|
||||
.. code-block:: none
|
||||
|
||||
[p]cleanupset
|
||||
|
||||
**Description**
|
||||
|
||||
Manage the settings for the cleanup command.
|
||||
|
||||
.. _cleanup-command-cleanupset-notify:
|
||||
|
||||
"""""""""""""""""
|
||||
cleanupset notify
|
||||
"""""""""""""""""
|
||||
|
||||
**Syntax**
|
||||
|
||||
.. code-block:: none
|
||||
|
||||
[p]cleanupset notify
|
||||
|
||||
**Description**
|
||||
|
||||
Toggle clean up notification settings.
|
||||
|
||||
When enabled, a message will be sent per cleanup, showing how many messages were deleted.
|
||||
This message will be deleted after 5 seconds.
|
||||
@@ -1,251 +0,0 @@
|
||||
.. _cogmanagerui:
|
||||
|
||||
==============
|
||||
Cog Manager UI
|
||||
==============
|
||||
|
||||
This is the cog guide for the core cog. You will
|
||||
find detailed docs about usage and commands.
|
||||
|
||||
``[p]`` is considered as your prefix.
|
||||
|
||||
.. note:: This cog is not like the other cogs. It is loaded by default, not
|
||||
included in the cogs paths and it cannot be unloaded. It contains needed
|
||||
commands for cog management.
|
||||
|
||||
.. _cogmanagerui-usage:
|
||||
|
||||
-----
|
||||
Usage
|
||||
-----
|
||||
|
||||
This cog allows you to manage your cogs and where you can install them. Unlike
|
||||
V2, which had a ``cogs`` folder where everything was installed, you can
|
||||
install V3 cogs everywhere, and also make them cross-compatible with other
|
||||
instances!
|
||||
|
||||
If you want to install your cogs using a Github repo (usually what you will
|
||||
always be looking for), you need to use the downloader cog. However, if you
|
||||
have the files of a cog or want to code one, this cog is what you should be
|
||||
looking for.
|
||||
|
||||
The most basic command is :ref:`paths <cogmanagerui-command-paths>`, which
|
||||
will list you all of the currently set paths.
|
||||
|
||||
You can add a path by using the :ref:`addpath <cogmanagerui-command-addpath>`
|
||||
command. All cogs in that path will be available for the bot and listed in
|
||||
the :ref:`cogs <cogmanagerui-command-cogs>`. You can then load
|
||||
or unload them.
|
||||
|
||||
.. TODO add ref to load and unload commands
|
||||
|
||||
.. _cogmanagerui-usage-installation:
|
||||
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
How to install a local package without using downloader
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
Let's suppose you made a cog request on the `cog board <https://cogboard.discord.red>`_
|
||||
and now you want to add your own cog to Red. You should have a folder that
|
||||
looks like this:
|
||||
|
||||
.. image:: ../.resources/cog_manager_ui/custom-cog-example.png
|
||||
|
||||
You will first need to add a cog path to your instance. For that, use the
|
||||
:ref:`addpath <cogmanagerui-command-addpath>` command with a new directory.
|
||||
|
||||
Create a folder somewhere (should stay accessible) and copy its path. A path
|
||||
looks like this:
|
||||
|
||||
* Windows: ``C:\Users\username\Documents\MyCogs``
|
||||
* macOS: ``/Users/username/Documents/MyCogs``
|
||||
* Linux: ``/home/username/Documents/MyCogs``
|
||||
|
||||
You can now use the command we talked about before: type ``[p]addpath
|
||||
<your_path>``.
|
||||
|
||||
.. attention:: A path shouldn't have spaces in it. If it does, add quotation
|
||||
marks around the path, or a backslash before the space.
|
||||
|
||||
In that ``MyCogs`` folder, you can drop your cog folder. You should now have
|
||||
something that looks like this:
|
||||
|
||||
.. image:: ../.resources/cog_manager_ui/cog-path.png
|
||||
|
||||
Now if you type ``[p]cogs``, your new cog should be listed, and you will be
|
||||
able to load it!
|
||||
|
||||
.. _cogmanagerui-commands:
|
||||
|
||||
--------
|
||||
Commands
|
||||
--------
|
||||
|
||||
.. note:: The whole cog is locked to the
|
||||
:ref:`bot owner <getting-started-permissions>`. If you are not the owner
|
||||
of the instance, you can ignore this.
|
||||
|
||||
.. _cogmanagerui-command-cogs:
|
||||
|
||||
^^^^
|
||||
cogs
|
||||
^^^^
|
||||
|
||||
**Syntax**
|
||||
|
||||
.. code-block:: none
|
||||
|
||||
[p]cogs
|
||||
|
||||
**Description**
|
||||
|
||||
Returns a list of loaded and unloaded cogs on the bot.
|
||||
|
||||
Cogs are unloaded by default. This is where you can find your cogs if you
|
||||
installed some recently.
|
||||
|
||||
All of the cogs located inside a cog path will be listed here. You can see a
|
||||
list of the paths with the :ref:`paths <cogmanagerui-command-paths>` command.
|
||||
|
||||
.. _cogmanagerui-command-paths:
|
||||
|
||||
^^^^^
|
||||
paths
|
||||
^^^^^
|
||||
|
||||
**Syntax**
|
||||
|
||||
.. code-block:: none
|
||||
|
||||
[p]paths
|
||||
|
||||
**Description**
|
||||
|
||||
Lists the registered cog paths, with the install path for the downloader and
|
||||
the core path for the core cogs.
|
||||
|
||||
.. TODO add ref to downloader
|
||||
|
||||
You can use the :ref:`reorderpath <cogmanagerui-command-reorderpath>` command
|
||||
to reorder the listed paths.
|
||||
|
||||
.. tip:: The number before a cog path can be used for the
|
||||
:ref:`removepath <cogmanagerui-command-removepath>` command.
|
||||
|
||||
.. _cogmanagerui-command-addpath:
|
||||
|
||||
^^^^^^^
|
||||
addpath
|
||||
^^^^^^^
|
||||
|
||||
**Syntax**
|
||||
|
||||
.. code-block:: none
|
||||
|
||||
[p]addpath <path>
|
||||
|
||||
**Description**
|
||||
|
||||
Adds a path to the list of available cog paths. This means that all valid cogs
|
||||
under the path will be added to the list of available cogs, listed in
|
||||
:ref:`cogs <cogmanagerui-command-cogs>`.
|
||||
|
||||
**Arguments**
|
||||
|
||||
* ``<path>``: A path that should look like this and point to a folder:
|
||||
|
||||
* Windows: ``C:\Users\username\Documents\MyCogs``
|
||||
* macOS: ``/Users/username/Documents/MyCogs``
|
||||
* Linux: ``/home/username/Documents/MyCogs``
|
||||
|
||||
Try to avoid paths with spaces. If there are spaces, add a backslash before
|
||||
the space on Linux. Add quotation marks around the path if needed.
|
||||
|
||||
.. _cogmanagerui-command-removepath:
|
||||
|
||||
^^^^^^^^^^
|
||||
removepath
|
||||
^^^^^^^^^^
|
||||
|
||||
**Syntax**
|
||||
|
||||
.. code-block:: none
|
||||
|
||||
[p]removepath <path_numbers...>
|
||||
|
||||
**Description**
|
||||
|
||||
Removes one or more paths from the list of available paths. Its cogs won't be
|
||||
accessible anymore.
|
||||
|
||||
**Arguments**
|
||||
|
||||
* ``<path_numbers>``: The number of the path(s) to remove. You can get it with
|
||||
the :ref:`paths <cogmanagerui-command-paths>` command.
|
||||
|
||||
.. _cogmanagerui-command-reorderpath:
|
||||
|
||||
^^^^^^^^^^^
|
||||
reorderpath
|
||||
^^^^^^^^^^^
|
||||
|
||||
**Syntax**
|
||||
|
||||
.. code-block:: none
|
||||
|
||||
[p]reorderpath <from> <to>
|
||||
|
||||
**Description**
|
||||
|
||||
Reorders the paths listed with the :ref:`paths <cogmanagerui-command-paths>`
|
||||
command. The goal of this command is to allow the discovery of different cogs.
|
||||
If there are multiple packages with the same names, the one that is inside the
|
||||
highest folder in the list will be kept and the other ones will be ignored.
|
||||
|
||||
For example, let's suppose this is the output of
|
||||
:ref:`paths <cogmanagerui-command-paths>`:
|
||||
|
||||
1. ``/usr/local/lib/python3.7/site-packages/redbot/cogs``
|
||||
2. ``/home/laggron/custom_cogs``
|
||||
3. ``/mnt/not_suspicious_usb_drive/not_suspicious_cogs``
|
||||
|
||||
The folders 2 and 3 both have a package named ``leveler`` while being different
|
||||
cogs, and you want to load the one located in the 3rd folder. To do that, you
|
||||
have to put the 3rd path higher than the 2nd path, let's swap them! Type
|
||||
``[p]reorderpath 2 3`` and the output of
|
||||
:ref:`paths <cogmanagerui-command-paths>` will then be the following:
|
||||
|
||||
1. ``/usr/local/lib/python3.7/site-packages/redbot/cogs``
|
||||
2. ``/mnt/not_suspicious_usb_drive/not_suspicious_cogs``
|
||||
3. ``/home/laggron/custom_cogs``
|
||||
|
||||
**Arguments**
|
||||
|
||||
* ``<from>``: The index of the path you want to move.
|
||||
* ``<to>``: The location where you want to insert the path.
|
||||
|
||||
.. _cogmanagerui-command-installpath:
|
||||
|
||||
^^^^^^^^^^^
|
||||
installpath
|
||||
^^^^^^^^^^^
|
||||
|
||||
**Syntax**
|
||||
|
||||
.. code-block:: none
|
||||
|
||||
[p]installpath [path]
|
||||
|
||||
**Description**
|
||||
|
||||
Shows the install path, or sets a new one.
|
||||
|
||||
If you want to set a new path, the same rules as for
|
||||
:ref:`addpath <cogmanagerui-command-addpath>` apply
|
||||
|
||||
.. warning:: If you edit the install path, the cogs won't be transferred.
|
||||
|
||||
**Arguments**
|
||||
|
||||
* ``[path]``: The absolute path to set. If omitted, the current path will
|
||||
be returned instead.
|
||||