First off, thanks for taking the time to contribute! It makes the library substantially better. 🎉
The following is a set of guidelines for contributing to the repository. These are not necessarily hard rules, but they streamline the process for everyone involved.
Important
Please try your best not to create new issues in the issue tracker just to ask questions, unless they provide value to a larger audience.
Generally speaking, questions are better suited in our resources below.
- The official Discord server: https://discord.gg/disnake
- The FAQ in the documentation
- The project's discussions section
To report bugs (or to suggest new features), visit our issue tracker. The issue templates will generally walk you through the steps, but please be aware of the following things:
- Don't open duplicate issues. Before you submit an issue, search the issue tracker to see if an issue for your problem already exists. If you find a similar issue, you can add a comment with additional information or context to help us understand the problem better.
- Include the complete traceback when filing a bug report about exceptions or tracebacks. Without the complete traceback, it will be much more difficult for others to understand (and perhaps fix) your issue.
- Add a minimal reproducible code snippet that results in the behavior you're seeing. This helps us quickly confirm a bug or point out a solution to your problem. We cannot reliably investigate bugs without a way to reproduce them.
If the bug report is missing this information, it'll take us longer to fix the issue. We may ask for clarification, and if no response was given, the issue will be closed.
Creating a pull request is fairly straightforward. Make sure it focuses on a single aspect and avoids scope creep, then it's probably good to go.
If you're unsure about some aspect of development, feel free to use existing files as a guide or reach out via the Discord server.
The general workflow can be summarized as follows:
- Fork + clone the repository.
- Initialize the development environment:
pdm run setup_env
. - Create a new branch.
- Commit your changes, update documentation if required.
- Add a changelog entry (e.g.
changelog/1234.feature.rst
). - Push the branch to your fork, and submit a pull request!
Specific development aspects are further explained below.
We use PDM
as our dependency manager. If it isn't already installed on your system, you can follow the installation steps here to get started.
Once PDM is installed, use the following command to initialize a virtual environment, install the necessary development dependencies, and install the pre-commit
hooks.
$ pdm run setup_env
Other tools used in this project include black (formatter), ruff (linter), and pyright (type-checker). For the most part, these automatically run on every commit with no additional action required - see below for details.
All of the following checks also automatically run for every PR on GitHub, so don't worry if you're not sure whether you missed anything. A PR cannot be merged as long as there are any failing checks.
This project uses the commonly known conventional commit format. While not necessarily required (but appreciated) for individual commit messages, please make sure to title your PR according to this schema:
<type>(<scope>)<!>: <short summary>
│ │ │ │
│ │ │ └─⫸ Summary in present tense, not capitalized, no period at the end
│ │ │
│ │ └─⫸ [optional] `!` indicates a breaking change
│ │
│ └─⫸ [optional] Commit Scope: The affected area, e.g. gateway, user, ...
│
└─⫸ Commit Type: feat|fix|docs|style|refactor|perf|test|build|ci|chore|revert
Examples: feat: support new avatar format
or fix(gateway): use correct url for resuming connection
.
Details about the specific commit types can be found here.
This project follows PEP-8 guidelines (mostly) with a column limit of 100 characters, and uses the tools mentioned above to enforce a consistent coding style.
The installed pre-commit
hooks will automatically run before every commit, which will format/lint the code
to match the project's style. Note that you will have to stage and commit again if anything was updated!
Most of the time, running pre-commit will automatically fix any issues that arise.
For type-checking, run pdm run pyright
(append -w
to have it automatically re-check on every file change).
Note
If you're using VSCode and pylance, it will use the same type-checking settings, which generally means that you don't necessarily have to run pyright
separately.
However, since we use a specific version of pyright
(which may not match pylance's version), there can be version differences which may lead to different results.
We use towncrier for managing our changelogs. Each change is required to have at least one file in the changelog/
directory, unless it's a trivial change. There is more documentation in that directory on how to create a changelog entry.
We use Sphinx to build the project's documentation, which includes automatically generating the API Reference from docstrings using the NumPy style.
To build the documentation locally, use pdm run docs
and visit http://127.0.0.1:8009/ once built.