├── .github ├── dependabot.yml └── workflows │ ├── deploy.yml │ └── format-and-lint.yml ├── .gitignore ├── .pre-commit-config.yaml ├── LICENSE ├── README.md ├── docs ├── assets │ ├── application.png │ ├── audio-playback │ │ ├── 1.png │ │ ├── 10.png │ │ ├── 2.png │ │ ├── 3.png │ │ ├── 4.png │ │ ├── 5.png │ │ ├── 6.png │ │ ├── 7.png │ │ ├── 8.png │ │ └── 9.png │ ├── bot.png │ ├── checks │ │ ├── 1.png │ │ ├── 10.png │ │ ├── 11.png │ │ ├── 2.png │ │ ├── 3.png │ │ ├── 4.png │ │ ├── 5.png │ │ ├── 6.png │ │ ├── 7.png │ │ ├── 8.png │ │ └── 9.png │ ├── cogs │ │ ├── hybrid-group.png │ │ ├── prefix-group.png │ │ └── slash-group.png │ ├── converters │ │ ├── double.png │ │ ├── function-1.png │ │ ├── function-2.png │ │ ├── greedy.png │ │ ├── greet.png │ │ ├── inline-1.png │ │ ├── inline-2.png │ │ ├── optional-1.png │ │ ├── optional-2.png │ │ ├── square.png │ │ ├── timeout-1.png │ │ └── timeout-2.png │ ├── creating-a-bot │ │ ├── files.png │ │ ├── hybrid-commands.png │ │ ├── poetry-files.png │ │ ├── poetry.png │ │ ├── prefix-commands.png │ │ ├── slash-commands.png │ │ ├── token.png │ │ ├── venv-files.png │ │ └── virtual-environment.png │ ├── custom-context │ │ ├── 1.png │ │ ├── 2.png │ │ └── 3.png │ ├── embeds │ │ ├── 1.png │ │ ├── 2.png │ │ └── 3.png │ ├── error-handling │ │ ├── 1.png │ │ ├── 2.png │ │ ├── 3.png │ │ ├── 4.png │ │ ├── 5.png │ │ ├── 6.png │ │ ├── 7.png │ │ └── 8.png │ ├── examples │ │ ├── help-command │ │ │ ├── default-cog-help.png │ │ │ ├── default-command-help.png │ │ │ ├── default-group-help.png │ │ │ ├── default-help-command.png │ │ │ ├── flowchart.png │ │ │ ├── help-command-in-cog.png │ │ │ ├── minimal-cog-help.png │ │ │ ├── minimal-command-help.png │ │ │ ├── minimal-group-help.png │ │ │ ├── minimal-help-command.png │ │ │ ├── prefix-bot-help-command.gif │ │ │ ├── prefix-cog-help-command.gif │ │ │ ├── prefix-command-help-command.png │ │ │ ├── prefix-error-message.png │ │ │ ├── prefix-group-help-command.png │ │ │ ├── slash-help-command-autocomplete.png │ │ │ ├── slash-help-command-describe.png │ │ │ └── slash-help-command.png │ │ └── pagination │ │ │ ├── button_paginator_embeds.gif │ │ │ ├── button_paginator_embeds_attachments.gif │ │ │ ├── button_paginator_files.gif │ │ │ ├── button_paginator_strings.gif │ │ │ ├── category_paginator_embeds.gif │ │ │ ├── category_paginator_embeds_attachments.gif │ │ │ ├── category_paginator_files.gif │ │ │ ├── category_paginator_strings.gif │ │ │ ├── select_paginator_embeds.gif │ │ │ ├── select_paginator_embeds_attachments.gif │ │ │ ├── select_paginator_files.gif │ │ │ └── select_paginator_strings.gif │ ├── hybrid-commands │ │ ├── attachment.png │ │ ├── autocomplete.png │ │ ├── boolean.png │ │ ├── channel.png │ │ ├── choices.png │ │ ├── command-desc.png │ │ ├── demo.png │ │ ├── ephemeral.png │ │ ├── float-range.png │ │ ├── float.png │ │ ├── group-fallback.png │ │ ├── group.png │ │ ├── integer-range.png │ │ ├── integer.png │ │ ├── param-desc.png │ │ ├── role.png │ │ ├── string-range.png │ │ ├── string.png │ │ └── user.png │ ├── in_app_authorization.png │ ├── installation.png │ ├── intents.png │ ├── logo.png │ ├── markdown-and-ansi │ │ ├── ansi256.png │ │ ├── background-codes.png │ │ ├── background.png │ │ ├── blockquote-multi.png │ │ ├── blockquote-single.png │ │ ├── code-block-code.png │ │ ├── code-block.png │ │ ├── combo.png │ │ ├── diff.png │ │ ├── foreground-codes.png │ │ ├── foreground.png │ │ ├── headers.png │ │ ├── html.png │ │ ├── inline-code.png │ │ ├── links.png │ │ ├── ordered-lists.png │ │ ├── rust.png │ │ ├── spoiler.png │ │ ├── sql.png │ │ ├── style-codes.png │ │ ├── style-combo.png │ │ ├── style.png │ │ ├── text-formatting.png │ │ └── unordered-lists.png │ ├── permissions.png │ ├── python.png │ ├── slash-commands │ │ ├── cog.png │ │ ├── defer.png │ │ ├── edited-message.png │ │ ├── failed-interaction.png │ │ ├── followup.png │ │ ├── followups.png │ │ ├── group.png │ │ ├── localized-command.png │ │ ├── localized-options.png │ │ ├── message-command.png │ │ ├── message-menu.png │ │ ├── nested-groups.png │ │ ├── transformers.png │ │ ├── types.png │ │ ├── user-command.png │ │ └── user-menu.png │ ├── tutorial_bot.png │ └── views │ │ ├── all-buttons.png │ │ ├── basic-view-counter.png │ │ ├── buttons.png │ │ ├── channel-select.png │ │ ├── confirm.gif │ │ ├── counter.gif │ │ ├── custom-emoji.gif │ │ ├── custom-id-button.png │ │ ├── dynamic-item.png │ │ ├── dynamic-menu.png │ │ ├── emoji-buttons.png │ │ ├── error-modal.png │ │ ├── interaction-check.gif │ │ ├── link-button.png │ │ ├── mentionable-select.png │ │ ├── modal-error.png │ │ ├── modal-timeout.png │ │ ├── normal-select.png │ │ ├── on-error.gif │ │ ├── on-timeout.gif │ │ ├── persistent-menu.png │ │ ├── persistent.png │ │ ├── regex.png │ │ ├── role-select.png │ │ ├── select-menus.png │ │ ├── tag-message.png │ │ ├── tag-modal.png │ │ ├── timeout-modal.png │ │ └── user-select.png ├── audio-playback.md ├── checks.md ├── cogs.md ├── converters.md ├── creating-a-bot.md ├── custom-context.md ├── embeds.md ├── error-handling.md ├── help-command.md ├── hybrid-commands.md ├── index.md ├── markdown-and-ansi.md ├── overrides │ └── main.html ├── pagination.md ├── slash-commands.md ├── tasks.md └── views.md ├── examples ├── creating-a-bot │ └── main.py ├── hot-reload │ ├── cogs │ │ ├── sub_cogs │ │ │ └── sub_cog.py │ │ └── super_cog.py │ └── main.py ├── hybrid-commands │ ├── __init__.py │ ├── cogs │ │ └── general.py │ ├── main.py │ ├── paginators │ │ ├── __init__.py │ │ ├── advanced_paginator.py │ │ ├── button_paginator.py │ │ └── select_paginator.py │ ├── utils │ │ └── help.py │ └── views │ │ └── __init__.py ├── markdow-and-ansi │ └── main.py ├── slash-commands │ ├── __init__.py │ ├── cogs │ │ ├── cog.py │ │ └── groupcog.py │ ├── main.py │ ├── paginators │ │ ├── __init__.py │ │ ├── advanced_paginator.py │ │ ├── button_paginator.py │ │ └── select_paginator.py │ ├── utils │ │ ├── help.py │ │ ├── translator.py │ │ └── tree.py │ └── views │ │ └── __init__.py ├── smart-sync │ ├── README.md │ ├── __init__.py │ ├── cogs │ │ ├── cog.py │ │ └── groupcog.py │ ├── main.py │ ├── translations.sh │ ├── translations │ │ └── locales │ │ │ ├── bg │ │ │ └── LC_MESSAGES │ │ │ │ └── dpygt.po │ │ │ ├── cs │ │ │ └── LC_MESSAGES │ │ │ │ └── dpygt.po │ │ │ ├── da │ │ │ └── LC_MESSAGES │ │ │ │ └── dpygt.po │ │ │ ├── de │ │ │ └── LC_MESSAGES │ │ │ │ └── dpygt.po │ │ │ ├── el │ │ │ └── LC_MESSAGES │ │ │ │ └── dpygt.po │ │ │ ├── en_GB │ │ │ └── LC_MESSAGES │ │ │ │ └── dpygt.po │ │ │ ├── en_US │ │ │ └── LC_MESSAGES │ │ │ │ └── dpygt.po │ │ │ ├── es_ES │ │ │ └── LC_MESSAGES │ │ │ │ └── dpygt.po │ │ │ ├── fi │ │ │ └── LC_MESSAGES │ │ │ │ └── dpygt.po │ │ │ ├── fr │ │ │ └── LC_MESSAGES │ │ │ │ └── dpygt.po │ │ │ ├── hi │ │ │ └── LC_MESSAGES │ │ │ │ └── dpygt.po │ │ │ ├── hr │ │ │ └── LC_MESSAGES │ │ │ │ └── dpygt.po │ │ │ ├── hu │ │ │ └── LC_MESSAGES │ │ │ │ └── dpygt.po │ │ │ ├── id │ │ │ └── LC_MESSAGES │ │ │ │ └── dpygt.po │ │ │ ├── it │ │ │ └── LC_MESSAGES │ │ │ │ └── dpygt.po │ │ │ ├── ja │ │ │ └── LC_MESSAGES │ │ │ │ └── dpygt.po │ │ │ ├── ko │ │ │ └── LC_MESSAGES │ │ │ │ └── dpygt.po │ │ │ ├── lt │ │ │ └── LC_MESSAGES │ │ │ │ └── dpygt.po │ │ │ ├── nl │ │ │ └── LC_MESSAGES │ │ │ │ └── dpygt.po │ │ │ ├── no │ │ │ └── LC_MESSAGES │ │ │ │ └── dpygt.po │ │ │ ├── pl │ │ │ └── LC_MESSAGES │ │ │ │ └── dpygt.po │ │ │ ├── pt_BR │ │ │ └── LC_MESSAGES │ │ │ │ └── dpygt.po │ │ │ ├── ro │ │ │ └── LC_MESSAGES │ │ │ │ └── dpygt.po │ │ │ ├── ru │ │ │ └── LC_MESSAGES │ │ │ │ └── dpygt.po │ │ │ ├── sv_SE │ │ │ └── LC_MESSAGES │ │ │ │ └── dpygt.po │ │ │ ├── th │ │ │ └── LC_MESSAGES │ │ │ │ └── dpygt.po │ │ │ ├── tr │ │ │ └── LC_MESSAGES │ │ │ │ └── dpygt.po │ │ │ ├── uk │ │ │ └── LC_MESSAGES │ │ │ │ └── dpygt.po │ │ │ ├── vi │ │ │ └── LC_MESSAGES │ │ │ │ └── dpygt.po │ │ │ ├── zh_CN │ │ │ └── LC_MESSAGES │ │ │ │ └── dpygt.po │ │ │ └── zh_TW │ │ │ └── LC_MESSAGES │ │ │ └── dpygt.po │ ├── translator.py │ └── utils │ │ ├── __init__.py │ │ ├── translator.py │ │ └── tree.py └── views │ ├── assets │ ├── 1.png │ ├── 2.png │ ├── 3.png │ ├── 4.png │ ├── 5.png │ ├── 6.png │ ├── 7.png │ ├── 8.png │ └── 9.png │ ├── main.py │ ├── paginators │ ├── __init__.py │ ├── advanced_paginator.py │ ├── button_paginator.py │ └── select_paginator.py │ └── views │ └── __init__.py ├── mkdocs.yml └── pyproject.toml /.github/dependabot.yml: -------------------------------------------------------------------------------- 1 | version: 2 2 | updates: 3 | - package-ecosystem: "pip" 4 | directory: "/" 5 | schedule: 6 | interval: "weekly" 7 | versioning-strategy: increase 8 | -------------------------------------------------------------------------------- /.github/workflows/deploy.yml: -------------------------------------------------------------------------------- 1 | name: Deploy 2 | 3 | on: 4 | workflow_run: 5 | workflows: ["Code formatter and linter"] 6 | types: 7 | - completed 8 | 9 | permissions: 10 | contents: write 11 | 12 | jobs: 13 | deploy: 14 | if: ${{ github.event.workflow_run.conclusion == 'success' && github.event.workflow_run.head_branch == 'master' }} 15 | runs-on: Ubuntu-latest 16 | steps: 17 | - uses: actions/checkout@v3 18 | 19 | - name: Install Python 20 | uses: actions/setup-python@v3 21 | with: 22 | python-version: "3.9" 23 | 24 | - name: Install Dependencies 25 | run: | 26 | python -m pip install --upgrade pip 27 | pip install poetry 28 | poetry install --no-root 29 | 30 | - name: Deploy to GitHub Pages 31 | run: | 32 | poetry run mkdocs gh-deploy --force 33 | -------------------------------------------------------------------------------- /.github/workflows/format-and-lint.yml: -------------------------------------------------------------------------------- 1 | name: Code formatter and linter 2 | 3 | on: 4 | push: 5 | pull_request: 6 | 7 | jobs: 8 | build: 9 | runs-on: Ubuntu-latest 10 | steps: 11 | - uses: actions/checkout@v3 12 | 13 | - name: Install Python 14 | uses: actions/setup-python@v3 15 | with: 16 | python-version: '3.9' 17 | 18 | - name: Install Dependencies 19 | run: | 20 | python -m pip install --upgrade pip 21 | pip install poetry 22 | poetry install --no-root 23 | - name: Format with isort and black 24 | run: | 25 | poetry run isort . 26 | poetry run black . 27 | - name: Linting with ruff 28 | run: | 29 | poetry run ruff check . 30 | - name: Build docs 31 | run: | 32 | poetry run mkdocs build 33 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | ### Python template 2 | # Byte-compiled / optimized / DLL files 3 | __pycache__/ 4 | *.py[cod] 5 | *$py.class 6 | 7 | # C extensions 8 | *.so 9 | 10 | # Distribution / packaging 11 | .Python 12 | build/ 13 | develop-eggs/ 14 | dist/ 15 | downloads/ 16 | eggs/ 17 | .eggs/ 18 | lib/ 19 | lib64/ 20 | parts/ 21 | sdist/ 22 | var/ 23 | wheels/ 24 | share/python-wheels/ 25 | *.egg-info/ 26 | .installed.cfg 27 | *.egg 28 | MANIFEST 29 | *.dylib 30 | 31 | # PyInstaller 32 | # Usually these files are written by a python script from a template 33 | # before PyInstaller builds the exe, so as to inject date/other infos into it. 34 | *.manifest 35 | *.spec 36 | 37 | # Installer logs 38 | pip-log.txt 39 | pip-delete-this-directory.txt 40 | 41 | # Unit test / coverage reports 42 | htmlcov/ 43 | .tox/ 44 | .nox/ 45 | .coverage 46 | .coverage.* 47 | .cache 48 | nosetests.xml 49 | coverage.xml 50 | *.cover 51 | *.py,cover 52 | .hypothesis/ 53 | .pytest_cache/ 54 | cover/ 55 | 56 | # Translations 57 | *.mo 58 | *.pot 59 | 60 | # Django stuff: 61 | *.log 62 | local_settings.py 63 | db.sqlite3 64 | db.sqlite3-journal 65 | 66 | # Flask stuff: 67 | instance/ 68 | .webassets-cache 69 | 70 | # Scrapy stuff: 71 | .scrapy 72 | 73 | # Sphinx documentation 74 | docs/_build/ 75 | 76 | # PyBuilder 77 | .pybuilder/ 78 | target/ 79 | 80 | # Jupyter Notebook 81 | .ipynb_checkpoints 82 | 83 | # IPython 84 | profile_default/ 85 | ipython_config.py 86 | 87 | # pyenv 88 | # For a library or package, you might want to ignore these files since the code is 89 | # intended to run in multiple environments; otherwise, check them in: 90 | # .python-version 91 | 92 | # pipenv 93 | # According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control. 94 | # However, in case of collaboration, if having platform-specific dependencies or dependencies 95 | # having no cross-platform support, pipenv may install dependencies that don't work, or not 96 | # install all needed dependencies. 97 | #Pipfile.lock 98 | 99 | # PEP 582; used by e.g. github.com/David-OConnor/pyflow 100 | __pypackages__/ 101 | 102 | # Celery stuff 103 | celerybeat-schedule 104 | celerybeat.pid 105 | 106 | # SageMath parsed files 107 | *.sage.py 108 | 109 | # Environments 110 | .env 111 | .venv 112 | env/ 113 | venv/ 114 | ENV/ 115 | env.bak/ 116 | venv.bak/ 117 | 118 | # Spyder project settings 119 | .spyderproject 120 | .spyproject 121 | 122 | # Rope project settings 123 | .ropeproject 124 | 125 | # mkdocs documentation 126 | /site 127 | 128 | # mypy 129 | .mypy_cache/ 130 | .dmypy.json 131 | dmypy.json 132 | 133 | # Pyre type checker 134 | .pyre/ 135 | 136 | # pytype static type analyzer 137 | .pytype/ 138 | 139 | # Cython debug symbols 140 | cython_debug/ 141 | 142 | # Pycharm 143 | .idea/ 144 | 145 | # VSCode 146 | .vscode/ 147 | 148 | # Ruff 149 | .ruff_cache/ 150 | 151 | # Poetry 152 | poetry.lock 153 | 154 | # Mkdocs 155 | site/ 156 | -------------------------------------------------------------------------------- /.pre-commit-config.yaml: -------------------------------------------------------------------------------- 1 | repos: 2 | 3 | - repo: https://github.com/pre-commit/pre-commit-hooks 4 | rev: v4.4.0 5 | hooks: 6 | - id: end-of-file-fixer 7 | - id: trailing-whitespace 8 | args: 9 | - --markdown-linebreak-ext=md 10 | - id: check-toml 11 | 12 | - repo: https://github.com/pre-commit/pygrep-hooks 13 | rev: v1.10.0 14 | hooks: 15 | - id: python-use-type-annotations 16 | - id: python-check-blanket-noqa 17 | 18 | - repo: local 19 | hooks: 20 | - id: isort 21 | name: isort 22 | pass_filenames: false 23 | entry: poetry 24 | args: ["run", "isort", "."] 25 | language: python 26 | stages: 27 | - pre-commit 28 | 29 | - repo: local 30 | hooks: 31 | - id: black 32 | name: black 33 | pass_filenames: false 34 | entry: poetry 35 | args: ["run", "black", "."] 36 | language: python 37 | stages: 38 | - pre-commit 39 | 40 | - repo: local 41 | hooks: 42 | - id: ruff 43 | name: ruff 44 | pass_filenames: false 45 | entry: poetry 46 | args: ["run", "ruff", "check", ".", "--fix"] 47 | language: python 48 | stages: 49 | - pre-commit 50 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2022 FallenDeity 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Installation for windows 2 | 3 | Extra steps for windows users 4 | 5 | ```bash 6 | pipwin install cairocffi 7 | ``` 8 | 9 | `pipwin` is a package that installs windows binaries for python packages that require them. `cairo` is a dependency for `mkdocs-material` and is required for it to work on windows. 10 | -------------------------------------------------------------------------------- /docs/assets/application.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FallenDeity/discord.py-masterclass/88db9e6c99f00ea16d0cd4b3017bbc7a810b807e/docs/assets/application.png -------------------------------------------------------------------------------- /docs/assets/audio-playback/1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FallenDeity/discord.py-masterclass/88db9e6c99f00ea16d0cd4b3017bbc7a810b807e/docs/assets/audio-playback/1.png -------------------------------------------------------------------------------- /docs/assets/audio-playback/10.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FallenDeity/discord.py-masterclass/88db9e6c99f00ea16d0cd4b3017bbc7a810b807e/docs/assets/audio-playback/10.png -------------------------------------------------------------------------------- /docs/assets/audio-playback/2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FallenDeity/discord.py-masterclass/88db9e6c99f00ea16d0cd4b3017bbc7a810b807e/docs/assets/audio-playback/2.png -------------------------------------------------------------------------------- /docs/assets/audio-playback/3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FallenDeity/discord.py-masterclass/88db9e6c99f00ea16d0cd4b3017bbc7a810b807e/docs/assets/audio-playback/3.png -------------------------------------------------------------------------------- /docs/assets/audio-playback/4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FallenDeity/discord.py-masterclass/88db9e6c99f00ea16d0cd4b3017bbc7a810b807e/docs/assets/audio-playback/4.png -------------------------------------------------------------------------------- /docs/assets/audio-playback/5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FallenDeity/discord.py-masterclass/88db9e6c99f00ea16d0cd4b3017bbc7a810b807e/docs/assets/audio-playback/5.png -------------------------------------------------------------------------------- /docs/assets/audio-playback/6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FallenDeity/discord.py-masterclass/88db9e6c99f00ea16d0cd4b3017bbc7a810b807e/docs/assets/audio-playback/6.png -------------------------------------------------------------------------------- /docs/assets/audio-playback/7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FallenDeity/discord.py-masterclass/88db9e6c99f00ea16d0cd4b3017bbc7a810b807e/docs/assets/audio-playback/7.png -------------------------------------------------------------------------------- /docs/assets/audio-playback/8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FallenDeity/discord.py-masterclass/88db9e6c99f00ea16d0cd4b3017bbc7a810b807e/docs/assets/audio-playback/8.png -------------------------------------------------------------------------------- /docs/assets/audio-playback/9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FallenDeity/discord.py-masterclass/88db9e6c99f00ea16d0cd4b3017bbc7a810b807e/docs/assets/audio-playback/9.png -------------------------------------------------------------------------------- /docs/assets/bot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FallenDeity/discord.py-masterclass/88db9e6c99f00ea16d0cd4b3017bbc7a810b807e/docs/assets/bot.png -------------------------------------------------------------------------------- /docs/assets/checks/1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FallenDeity/discord.py-masterclass/88db9e6c99f00ea16d0cd4b3017bbc7a810b807e/docs/assets/checks/1.png -------------------------------------------------------------------------------- /docs/assets/checks/10.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FallenDeity/discord.py-masterclass/88db9e6c99f00ea16d0cd4b3017bbc7a810b807e/docs/assets/checks/10.png -------------------------------------------------------------------------------- /docs/assets/checks/11.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FallenDeity/discord.py-masterclass/88db9e6c99f00ea16d0cd4b3017bbc7a810b807e/docs/assets/checks/11.png -------------------------------------------------------------------------------- /docs/assets/checks/2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FallenDeity/discord.py-masterclass/88db9e6c99f00ea16d0cd4b3017bbc7a810b807e/docs/assets/checks/2.png -------------------------------------------------------------------------------- /docs/assets/checks/3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FallenDeity/discord.py-masterclass/88db9e6c99f00ea16d0cd4b3017bbc7a810b807e/docs/assets/checks/3.png -------------------------------------------------------------------------------- /docs/assets/checks/4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FallenDeity/discord.py-masterclass/88db9e6c99f00ea16d0cd4b3017bbc7a810b807e/docs/assets/checks/4.png -------------------------------------------------------------------------------- /docs/assets/checks/5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FallenDeity/discord.py-masterclass/88db9e6c99f00ea16d0cd4b3017bbc7a810b807e/docs/assets/checks/5.png -------------------------------------------------------------------------------- /docs/assets/checks/6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FallenDeity/discord.py-masterclass/88db9e6c99f00ea16d0cd4b3017bbc7a810b807e/docs/assets/checks/6.png -------------------------------------------------------------------------------- /docs/assets/checks/7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FallenDeity/discord.py-masterclass/88db9e6c99f00ea16d0cd4b3017bbc7a810b807e/docs/assets/checks/7.png -------------------------------------------------------------------------------- /docs/assets/checks/8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FallenDeity/discord.py-masterclass/88db9e6c99f00ea16d0cd4b3017bbc7a810b807e/docs/assets/checks/8.png -------------------------------------------------------------------------------- /docs/assets/checks/9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FallenDeity/discord.py-masterclass/88db9e6c99f00ea16d0cd4b3017bbc7a810b807e/docs/assets/checks/9.png -------------------------------------------------------------------------------- /docs/assets/cogs/hybrid-group.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FallenDeity/discord.py-masterclass/88db9e6c99f00ea16d0cd4b3017bbc7a810b807e/docs/assets/cogs/hybrid-group.png -------------------------------------------------------------------------------- /docs/assets/cogs/prefix-group.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FallenDeity/discord.py-masterclass/88db9e6c99f00ea16d0cd4b3017bbc7a810b807e/docs/assets/cogs/prefix-group.png -------------------------------------------------------------------------------- /docs/assets/cogs/slash-group.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FallenDeity/discord.py-masterclass/88db9e6c99f00ea16d0cd4b3017bbc7a810b807e/docs/assets/cogs/slash-group.png -------------------------------------------------------------------------------- /docs/assets/converters/double.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FallenDeity/discord.py-masterclass/88db9e6c99f00ea16d0cd4b3017bbc7a810b807e/docs/assets/converters/double.png -------------------------------------------------------------------------------- /docs/assets/converters/function-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FallenDeity/discord.py-masterclass/88db9e6c99f00ea16d0cd4b3017bbc7a810b807e/docs/assets/converters/function-1.png -------------------------------------------------------------------------------- /docs/assets/converters/function-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FallenDeity/discord.py-masterclass/88db9e6c99f00ea16d0cd4b3017bbc7a810b807e/docs/assets/converters/function-2.png -------------------------------------------------------------------------------- /docs/assets/converters/greedy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FallenDeity/discord.py-masterclass/88db9e6c99f00ea16d0cd4b3017bbc7a810b807e/docs/assets/converters/greedy.png -------------------------------------------------------------------------------- /docs/assets/converters/greet.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FallenDeity/discord.py-masterclass/88db9e6c99f00ea16d0cd4b3017bbc7a810b807e/docs/assets/converters/greet.png -------------------------------------------------------------------------------- /docs/assets/converters/inline-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FallenDeity/discord.py-masterclass/88db9e6c99f00ea16d0cd4b3017bbc7a810b807e/docs/assets/converters/inline-1.png -------------------------------------------------------------------------------- /docs/assets/converters/inline-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FallenDeity/discord.py-masterclass/88db9e6c99f00ea16d0cd4b3017bbc7a810b807e/docs/assets/converters/inline-2.png -------------------------------------------------------------------------------- /docs/assets/converters/optional-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FallenDeity/discord.py-masterclass/88db9e6c99f00ea16d0cd4b3017bbc7a810b807e/docs/assets/converters/optional-1.png -------------------------------------------------------------------------------- /docs/assets/converters/optional-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FallenDeity/discord.py-masterclass/88db9e6c99f00ea16d0cd4b3017bbc7a810b807e/docs/assets/converters/optional-2.png -------------------------------------------------------------------------------- /docs/assets/converters/square.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FallenDeity/discord.py-masterclass/88db9e6c99f00ea16d0cd4b3017bbc7a810b807e/docs/assets/converters/square.png -------------------------------------------------------------------------------- /docs/assets/converters/timeout-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FallenDeity/discord.py-masterclass/88db9e6c99f00ea16d0cd4b3017bbc7a810b807e/docs/assets/converters/timeout-1.png -------------------------------------------------------------------------------- /docs/assets/converters/timeout-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FallenDeity/discord.py-masterclass/88db9e6c99f00ea16d0cd4b3017bbc7a810b807e/docs/assets/converters/timeout-2.png -------------------------------------------------------------------------------- /docs/assets/creating-a-bot/files.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FallenDeity/discord.py-masterclass/88db9e6c99f00ea16d0cd4b3017bbc7a810b807e/docs/assets/creating-a-bot/files.png -------------------------------------------------------------------------------- /docs/assets/creating-a-bot/hybrid-commands.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FallenDeity/discord.py-masterclass/88db9e6c99f00ea16d0cd4b3017bbc7a810b807e/docs/assets/creating-a-bot/hybrid-commands.png -------------------------------------------------------------------------------- /docs/assets/creating-a-bot/poetry-files.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FallenDeity/discord.py-masterclass/88db9e6c99f00ea16d0cd4b3017bbc7a810b807e/docs/assets/creating-a-bot/poetry-files.png -------------------------------------------------------------------------------- /docs/assets/creating-a-bot/poetry.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FallenDeity/discord.py-masterclass/88db9e6c99f00ea16d0cd4b3017bbc7a810b807e/docs/assets/creating-a-bot/poetry.png -------------------------------------------------------------------------------- /docs/assets/creating-a-bot/prefix-commands.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FallenDeity/discord.py-masterclass/88db9e6c99f00ea16d0cd4b3017bbc7a810b807e/docs/assets/creating-a-bot/prefix-commands.png -------------------------------------------------------------------------------- /docs/assets/creating-a-bot/slash-commands.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FallenDeity/discord.py-masterclass/88db9e6c99f00ea16d0cd4b3017bbc7a810b807e/docs/assets/creating-a-bot/slash-commands.png -------------------------------------------------------------------------------- /docs/assets/creating-a-bot/token.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FallenDeity/discord.py-masterclass/88db9e6c99f00ea16d0cd4b3017bbc7a810b807e/docs/assets/creating-a-bot/token.png -------------------------------------------------------------------------------- /docs/assets/creating-a-bot/venv-files.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FallenDeity/discord.py-masterclass/88db9e6c99f00ea16d0cd4b3017bbc7a810b807e/docs/assets/creating-a-bot/venv-files.png -------------------------------------------------------------------------------- /docs/assets/creating-a-bot/virtual-environment.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FallenDeity/discord.py-masterclass/88db9e6c99f00ea16d0cd4b3017bbc7a810b807e/docs/assets/creating-a-bot/virtual-environment.png -------------------------------------------------------------------------------- /docs/assets/custom-context/1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FallenDeity/discord.py-masterclass/88db9e6c99f00ea16d0cd4b3017bbc7a810b807e/docs/assets/custom-context/1.png -------------------------------------------------------------------------------- /docs/assets/custom-context/2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FallenDeity/discord.py-masterclass/88db9e6c99f00ea16d0cd4b3017bbc7a810b807e/docs/assets/custom-context/2.png -------------------------------------------------------------------------------- /docs/assets/custom-context/3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FallenDeity/discord.py-masterclass/88db9e6c99f00ea16d0cd4b3017bbc7a810b807e/docs/assets/custom-context/3.png -------------------------------------------------------------------------------- /docs/assets/embeds/1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FallenDeity/discord.py-masterclass/88db9e6c99f00ea16d0cd4b3017bbc7a810b807e/docs/assets/embeds/1.png -------------------------------------------------------------------------------- /docs/assets/embeds/2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FallenDeity/discord.py-masterclass/88db9e6c99f00ea16d0cd4b3017bbc7a810b807e/docs/assets/embeds/2.png -------------------------------------------------------------------------------- /docs/assets/embeds/3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FallenDeity/discord.py-masterclass/88db9e6c99f00ea16d0cd4b3017bbc7a810b807e/docs/assets/embeds/3.png -------------------------------------------------------------------------------- /docs/assets/error-handling/1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FallenDeity/discord.py-masterclass/88db9e6c99f00ea16d0cd4b3017bbc7a810b807e/docs/assets/error-handling/1.png -------------------------------------------------------------------------------- /docs/assets/error-handling/2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FallenDeity/discord.py-masterclass/88db9e6c99f00ea16d0cd4b3017bbc7a810b807e/docs/assets/error-handling/2.png -------------------------------------------------------------------------------- /docs/assets/error-handling/3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FallenDeity/discord.py-masterclass/88db9e6c99f00ea16d0cd4b3017bbc7a810b807e/docs/assets/error-handling/3.png -------------------------------------------------------------------------------- /docs/assets/error-handling/4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FallenDeity/discord.py-masterclass/88db9e6c99f00ea16d0cd4b3017bbc7a810b807e/docs/assets/error-handling/4.png -------------------------------------------------------------------------------- /docs/assets/error-handling/5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FallenDeity/discord.py-masterclass/88db9e6c99f00ea16d0cd4b3017bbc7a810b807e/docs/assets/error-handling/5.png -------------------------------------------------------------------------------- /docs/assets/error-handling/6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FallenDeity/discord.py-masterclass/88db9e6c99f00ea16d0cd4b3017bbc7a810b807e/docs/assets/error-handling/6.png -------------------------------------------------------------------------------- /docs/assets/error-handling/7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FallenDeity/discord.py-masterclass/88db9e6c99f00ea16d0cd4b3017bbc7a810b807e/docs/assets/error-handling/7.png -------------------------------------------------------------------------------- /docs/assets/error-handling/8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FallenDeity/discord.py-masterclass/88db9e6c99f00ea16d0cd4b3017bbc7a810b807e/docs/assets/error-handling/8.png -------------------------------------------------------------------------------- /docs/assets/examples/help-command/default-cog-help.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FallenDeity/discord.py-masterclass/88db9e6c99f00ea16d0cd4b3017bbc7a810b807e/docs/assets/examples/help-command/default-cog-help.png -------------------------------------------------------------------------------- /docs/assets/examples/help-command/default-command-help.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FallenDeity/discord.py-masterclass/88db9e6c99f00ea16d0cd4b3017bbc7a810b807e/docs/assets/examples/help-command/default-command-help.png -------------------------------------------------------------------------------- /docs/assets/examples/help-command/default-group-help.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FallenDeity/discord.py-masterclass/88db9e6c99f00ea16d0cd4b3017bbc7a810b807e/docs/assets/examples/help-command/default-group-help.png -------------------------------------------------------------------------------- /docs/assets/examples/help-command/default-help-command.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FallenDeity/discord.py-masterclass/88db9e6c99f00ea16d0cd4b3017bbc7a810b807e/docs/assets/examples/help-command/default-help-command.png -------------------------------------------------------------------------------- /docs/assets/examples/help-command/flowchart.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FallenDeity/discord.py-masterclass/88db9e6c99f00ea16d0cd4b3017bbc7a810b807e/docs/assets/examples/help-command/flowchart.png -------------------------------------------------------------------------------- /docs/assets/examples/help-command/help-command-in-cog.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FallenDeity/discord.py-masterclass/88db9e6c99f00ea16d0cd4b3017bbc7a810b807e/docs/assets/examples/help-command/help-command-in-cog.png -------------------------------------------------------------------------------- /docs/assets/examples/help-command/minimal-cog-help.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FallenDeity/discord.py-masterclass/88db9e6c99f00ea16d0cd4b3017bbc7a810b807e/docs/assets/examples/help-command/minimal-cog-help.png -------------------------------------------------------------------------------- /docs/assets/examples/help-command/minimal-command-help.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FallenDeity/discord.py-masterclass/88db9e6c99f00ea16d0cd4b3017bbc7a810b807e/docs/assets/examples/help-command/minimal-command-help.png -------------------------------------------------------------------------------- /docs/assets/examples/help-command/minimal-group-help.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FallenDeity/discord.py-masterclass/88db9e6c99f00ea16d0cd4b3017bbc7a810b807e/docs/assets/examples/help-command/minimal-group-help.png -------------------------------------------------------------------------------- /docs/assets/examples/help-command/minimal-help-command.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FallenDeity/discord.py-masterclass/88db9e6c99f00ea16d0cd4b3017bbc7a810b807e/docs/assets/examples/help-command/minimal-help-command.png -------------------------------------------------------------------------------- /docs/assets/examples/help-command/prefix-bot-help-command.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FallenDeity/discord.py-masterclass/88db9e6c99f00ea16d0cd4b3017bbc7a810b807e/docs/assets/examples/help-command/prefix-bot-help-command.gif -------------------------------------------------------------------------------- /docs/assets/examples/help-command/prefix-cog-help-command.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FallenDeity/discord.py-masterclass/88db9e6c99f00ea16d0cd4b3017bbc7a810b807e/docs/assets/examples/help-command/prefix-cog-help-command.gif -------------------------------------------------------------------------------- /docs/assets/examples/help-command/prefix-command-help-command.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FallenDeity/discord.py-masterclass/88db9e6c99f00ea16d0cd4b3017bbc7a810b807e/docs/assets/examples/help-command/prefix-command-help-command.png -------------------------------------------------------------------------------- /docs/assets/examples/help-command/prefix-error-message.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FallenDeity/discord.py-masterclass/88db9e6c99f00ea16d0cd4b3017bbc7a810b807e/docs/assets/examples/help-command/prefix-error-message.png -------------------------------------------------------------------------------- /docs/assets/examples/help-command/prefix-group-help-command.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FallenDeity/discord.py-masterclass/88db9e6c99f00ea16d0cd4b3017bbc7a810b807e/docs/assets/examples/help-command/prefix-group-help-command.png -------------------------------------------------------------------------------- /docs/assets/examples/help-command/slash-help-command-autocomplete.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FallenDeity/discord.py-masterclass/88db9e6c99f00ea16d0cd4b3017bbc7a810b807e/docs/assets/examples/help-command/slash-help-command-autocomplete.png -------------------------------------------------------------------------------- /docs/assets/examples/help-command/slash-help-command-describe.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FallenDeity/discord.py-masterclass/88db9e6c99f00ea16d0cd4b3017bbc7a810b807e/docs/assets/examples/help-command/slash-help-command-describe.png -------------------------------------------------------------------------------- /docs/assets/examples/help-command/slash-help-command.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FallenDeity/discord.py-masterclass/88db9e6c99f00ea16d0cd4b3017bbc7a810b807e/docs/assets/examples/help-command/slash-help-command.png -------------------------------------------------------------------------------- /docs/assets/examples/pagination/button_paginator_embeds.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FallenDeity/discord.py-masterclass/88db9e6c99f00ea16d0cd4b3017bbc7a810b807e/docs/assets/examples/pagination/button_paginator_embeds.gif -------------------------------------------------------------------------------- /docs/assets/examples/pagination/button_paginator_embeds_attachments.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FallenDeity/discord.py-masterclass/88db9e6c99f00ea16d0cd4b3017bbc7a810b807e/docs/assets/examples/pagination/button_paginator_embeds_attachments.gif -------------------------------------------------------------------------------- /docs/assets/examples/pagination/button_paginator_files.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FallenDeity/discord.py-masterclass/88db9e6c99f00ea16d0cd4b3017bbc7a810b807e/docs/assets/examples/pagination/button_paginator_files.gif -------------------------------------------------------------------------------- /docs/assets/examples/pagination/button_paginator_strings.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FallenDeity/discord.py-masterclass/88db9e6c99f00ea16d0cd4b3017bbc7a810b807e/docs/assets/examples/pagination/button_paginator_strings.gif -------------------------------------------------------------------------------- /docs/assets/examples/pagination/category_paginator_embeds.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FallenDeity/discord.py-masterclass/88db9e6c99f00ea16d0cd4b3017bbc7a810b807e/docs/assets/examples/pagination/category_paginator_embeds.gif -------------------------------------------------------------------------------- /docs/assets/examples/pagination/category_paginator_embeds_attachments.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FallenDeity/discord.py-masterclass/88db9e6c99f00ea16d0cd4b3017bbc7a810b807e/docs/assets/examples/pagination/category_paginator_embeds_attachments.gif -------------------------------------------------------------------------------- /docs/assets/examples/pagination/category_paginator_files.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FallenDeity/discord.py-masterclass/88db9e6c99f00ea16d0cd4b3017bbc7a810b807e/docs/assets/examples/pagination/category_paginator_files.gif -------------------------------------------------------------------------------- /docs/assets/examples/pagination/category_paginator_strings.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FallenDeity/discord.py-masterclass/88db9e6c99f00ea16d0cd4b3017bbc7a810b807e/docs/assets/examples/pagination/category_paginator_strings.gif -------------------------------------------------------------------------------- /docs/assets/examples/pagination/select_paginator_embeds.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FallenDeity/discord.py-masterclass/88db9e6c99f00ea16d0cd4b3017bbc7a810b807e/docs/assets/examples/pagination/select_paginator_embeds.gif -------------------------------------------------------------------------------- /docs/assets/examples/pagination/select_paginator_embeds_attachments.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FallenDeity/discord.py-masterclass/88db9e6c99f00ea16d0cd4b3017bbc7a810b807e/docs/assets/examples/pagination/select_paginator_embeds_attachments.gif -------------------------------------------------------------------------------- /docs/assets/examples/pagination/select_paginator_files.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FallenDeity/discord.py-masterclass/88db9e6c99f00ea16d0cd4b3017bbc7a810b807e/docs/assets/examples/pagination/select_paginator_files.gif -------------------------------------------------------------------------------- /docs/assets/examples/pagination/select_paginator_strings.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FallenDeity/discord.py-masterclass/88db9e6c99f00ea16d0cd4b3017bbc7a810b807e/docs/assets/examples/pagination/select_paginator_strings.gif -------------------------------------------------------------------------------- /docs/assets/hybrid-commands/attachment.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FallenDeity/discord.py-masterclass/88db9e6c99f00ea16d0cd4b3017bbc7a810b807e/docs/assets/hybrid-commands/attachment.png -------------------------------------------------------------------------------- /docs/assets/hybrid-commands/autocomplete.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FallenDeity/discord.py-masterclass/88db9e6c99f00ea16d0cd4b3017bbc7a810b807e/docs/assets/hybrid-commands/autocomplete.png -------------------------------------------------------------------------------- /docs/assets/hybrid-commands/boolean.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FallenDeity/discord.py-masterclass/88db9e6c99f00ea16d0cd4b3017bbc7a810b807e/docs/assets/hybrid-commands/boolean.png -------------------------------------------------------------------------------- /docs/assets/hybrid-commands/channel.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FallenDeity/discord.py-masterclass/88db9e6c99f00ea16d0cd4b3017bbc7a810b807e/docs/assets/hybrid-commands/channel.png -------------------------------------------------------------------------------- /docs/assets/hybrid-commands/choices.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FallenDeity/discord.py-masterclass/88db9e6c99f00ea16d0cd4b3017bbc7a810b807e/docs/assets/hybrid-commands/choices.png -------------------------------------------------------------------------------- /docs/assets/hybrid-commands/command-desc.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FallenDeity/discord.py-masterclass/88db9e6c99f00ea16d0cd4b3017bbc7a810b807e/docs/assets/hybrid-commands/command-desc.png -------------------------------------------------------------------------------- /docs/assets/hybrid-commands/demo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FallenDeity/discord.py-masterclass/88db9e6c99f00ea16d0cd4b3017bbc7a810b807e/docs/assets/hybrid-commands/demo.png -------------------------------------------------------------------------------- /docs/assets/hybrid-commands/ephemeral.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FallenDeity/discord.py-masterclass/88db9e6c99f00ea16d0cd4b3017bbc7a810b807e/docs/assets/hybrid-commands/ephemeral.png -------------------------------------------------------------------------------- /docs/assets/hybrid-commands/float-range.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FallenDeity/discord.py-masterclass/88db9e6c99f00ea16d0cd4b3017bbc7a810b807e/docs/assets/hybrid-commands/float-range.png -------------------------------------------------------------------------------- /docs/assets/hybrid-commands/float.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FallenDeity/discord.py-masterclass/88db9e6c99f00ea16d0cd4b3017bbc7a810b807e/docs/assets/hybrid-commands/float.png -------------------------------------------------------------------------------- /docs/assets/hybrid-commands/group-fallback.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FallenDeity/discord.py-masterclass/88db9e6c99f00ea16d0cd4b3017bbc7a810b807e/docs/assets/hybrid-commands/group-fallback.png -------------------------------------------------------------------------------- /docs/assets/hybrid-commands/group.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FallenDeity/discord.py-masterclass/88db9e6c99f00ea16d0cd4b3017bbc7a810b807e/docs/assets/hybrid-commands/group.png -------------------------------------------------------------------------------- /docs/assets/hybrid-commands/integer-range.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FallenDeity/discord.py-masterclass/88db9e6c99f00ea16d0cd4b3017bbc7a810b807e/docs/assets/hybrid-commands/integer-range.png -------------------------------------------------------------------------------- /docs/assets/hybrid-commands/integer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FallenDeity/discord.py-masterclass/88db9e6c99f00ea16d0cd4b3017bbc7a810b807e/docs/assets/hybrid-commands/integer.png -------------------------------------------------------------------------------- /docs/assets/hybrid-commands/param-desc.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FallenDeity/discord.py-masterclass/88db9e6c99f00ea16d0cd4b3017bbc7a810b807e/docs/assets/hybrid-commands/param-desc.png -------------------------------------------------------------------------------- /docs/assets/hybrid-commands/role.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FallenDeity/discord.py-masterclass/88db9e6c99f00ea16d0cd4b3017bbc7a810b807e/docs/assets/hybrid-commands/role.png -------------------------------------------------------------------------------- /docs/assets/hybrid-commands/string-range.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FallenDeity/discord.py-masterclass/88db9e6c99f00ea16d0cd4b3017bbc7a810b807e/docs/assets/hybrid-commands/string-range.png -------------------------------------------------------------------------------- /docs/assets/hybrid-commands/string.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FallenDeity/discord.py-masterclass/88db9e6c99f00ea16d0cd4b3017bbc7a810b807e/docs/assets/hybrid-commands/string.png -------------------------------------------------------------------------------- /docs/assets/hybrid-commands/user.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FallenDeity/discord.py-masterclass/88db9e6c99f00ea16d0cd4b3017bbc7a810b807e/docs/assets/hybrid-commands/user.png -------------------------------------------------------------------------------- /docs/assets/in_app_authorization.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FallenDeity/discord.py-masterclass/88db9e6c99f00ea16d0cd4b3017bbc7a810b807e/docs/assets/in_app_authorization.png -------------------------------------------------------------------------------- /docs/assets/installation.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FallenDeity/discord.py-masterclass/88db9e6c99f00ea16d0cd4b3017bbc7a810b807e/docs/assets/installation.png -------------------------------------------------------------------------------- /docs/assets/intents.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FallenDeity/discord.py-masterclass/88db9e6c99f00ea16d0cd4b3017bbc7a810b807e/docs/assets/intents.png -------------------------------------------------------------------------------- /docs/assets/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FallenDeity/discord.py-masterclass/88db9e6c99f00ea16d0cd4b3017bbc7a810b807e/docs/assets/logo.png -------------------------------------------------------------------------------- /docs/assets/markdown-and-ansi/ansi256.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FallenDeity/discord.py-masterclass/88db9e6c99f00ea16d0cd4b3017bbc7a810b807e/docs/assets/markdown-and-ansi/ansi256.png -------------------------------------------------------------------------------- /docs/assets/markdown-and-ansi/background-codes.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FallenDeity/discord.py-masterclass/88db9e6c99f00ea16d0cd4b3017bbc7a810b807e/docs/assets/markdown-and-ansi/background-codes.png -------------------------------------------------------------------------------- /docs/assets/markdown-and-ansi/background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FallenDeity/discord.py-masterclass/88db9e6c99f00ea16d0cd4b3017bbc7a810b807e/docs/assets/markdown-and-ansi/background.png -------------------------------------------------------------------------------- /docs/assets/markdown-and-ansi/blockquote-multi.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FallenDeity/discord.py-masterclass/88db9e6c99f00ea16d0cd4b3017bbc7a810b807e/docs/assets/markdown-and-ansi/blockquote-multi.png -------------------------------------------------------------------------------- /docs/assets/markdown-and-ansi/blockquote-single.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FallenDeity/discord.py-masterclass/88db9e6c99f00ea16d0cd4b3017bbc7a810b807e/docs/assets/markdown-and-ansi/blockquote-single.png -------------------------------------------------------------------------------- /docs/assets/markdown-and-ansi/code-block-code.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FallenDeity/discord.py-masterclass/88db9e6c99f00ea16d0cd4b3017bbc7a810b807e/docs/assets/markdown-and-ansi/code-block-code.png -------------------------------------------------------------------------------- /docs/assets/markdown-and-ansi/code-block.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FallenDeity/discord.py-masterclass/88db9e6c99f00ea16d0cd4b3017bbc7a810b807e/docs/assets/markdown-and-ansi/code-block.png -------------------------------------------------------------------------------- /docs/assets/markdown-and-ansi/combo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FallenDeity/discord.py-masterclass/88db9e6c99f00ea16d0cd4b3017bbc7a810b807e/docs/assets/markdown-and-ansi/combo.png -------------------------------------------------------------------------------- /docs/assets/markdown-and-ansi/diff.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FallenDeity/discord.py-masterclass/88db9e6c99f00ea16d0cd4b3017bbc7a810b807e/docs/assets/markdown-and-ansi/diff.png -------------------------------------------------------------------------------- /docs/assets/markdown-and-ansi/foreground-codes.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FallenDeity/discord.py-masterclass/88db9e6c99f00ea16d0cd4b3017bbc7a810b807e/docs/assets/markdown-and-ansi/foreground-codes.png -------------------------------------------------------------------------------- /docs/assets/markdown-and-ansi/foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FallenDeity/discord.py-masterclass/88db9e6c99f00ea16d0cd4b3017bbc7a810b807e/docs/assets/markdown-and-ansi/foreground.png -------------------------------------------------------------------------------- /docs/assets/markdown-and-ansi/headers.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FallenDeity/discord.py-masterclass/88db9e6c99f00ea16d0cd4b3017bbc7a810b807e/docs/assets/markdown-and-ansi/headers.png -------------------------------------------------------------------------------- /docs/assets/markdown-and-ansi/html.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FallenDeity/discord.py-masterclass/88db9e6c99f00ea16d0cd4b3017bbc7a810b807e/docs/assets/markdown-and-ansi/html.png -------------------------------------------------------------------------------- /docs/assets/markdown-and-ansi/inline-code.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FallenDeity/discord.py-masterclass/88db9e6c99f00ea16d0cd4b3017bbc7a810b807e/docs/assets/markdown-and-ansi/inline-code.png -------------------------------------------------------------------------------- /docs/assets/markdown-and-ansi/links.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FallenDeity/discord.py-masterclass/88db9e6c99f00ea16d0cd4b3017bbc7a810b807e/docs/assets/markdown-and-ansi/links.png -------------------------------------------------------------------------------- /docs/assets/markdown-and-ansi/ordered-lists.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FallenDeity/discord.py-masterclass/88db9e6c99f00ea16d0cd4b3017bbc7a810b807e/docs/assets/markdown-and-ansi/ordered-lists.png -------------------------------------------------------------------------------- /docs/assets/markdown-and-ansi/rust.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FallenDeity/discord.py-masterclass/88db9e6c99f00ea16d0cd4b3017bbc7a810b807e/docs/assets/markdown-and-ansi/rust.png -------------------------------------------------------------------------------- /docs/assets/markdown-and-ansi/spoiler.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FallenDeity/discord.py-masterclass/88db9e6c99f00ea16d0cd4b3017bbc7a810b807e/docs/assets/markdown-and-ansi/spoiler.png -------------------------------------------------------------------------------- /docs/assets/markdown-and-ansi/sql.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FallenDeity/discord.py-masterclass/88db9e6c99f00ea16d0cd4b3017bbc7a810b807e/docs/assets/markdown-and-ansi/sql.png -------------------------------------------------------------------------------- /docs/assets/markdown-and-ansi/style-codes.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FallenDeity/discord.py-masterclass/88db9e6c99f00ea16d0cd4b3017bbc7a810b807e/docs/assets/markdown-and-ansi/style-codes.png -------------------------------------------------------------------------------- /docs/assets/markdown-and-ansi/style-combo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FallenDeity/discord.py-masterclass/88db9e6c99f00ea16d0cd4b3017bbc7a810b807e/docs/assets/markdown-and-ansi/style-combo.png -------------------------------------------------------------------------------- /docs/assets/markdown-and-ansi/style.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FallenDeity/discord.py-masterclass/88db9e6c99f00ea16d0cd4b3017bbc7a810b807e/docs/assets/markdown-and-ansi/style.png -------------------------------------------------------------------------------- /docs/assets/markdown-and-ansi/text-formatting.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FallenDeity/discord.py-masterclass/88db9e6c99f00ea16d0cd4b3017bbc7a810b807e/docs/assets/markdown-and-ansi/text-formatting.png -------------------------------------------------------------------------------- /docs/assets/markdown-and-ansi/unordered-lists.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FallenDeity/discord.py-masterclass/88db9e6c99f00ea16d0cd4b3017bbc7a810b807e/docs/assets/markdown-and-ansi/unordered-lists.png -------------------------------------------------------------------------------- /docs/assets/permissions.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FallenDeity/discord.py-masterclass/88db9e6c99f00ea16d0cd4b3017bbc7a810b807e/docs/assets/permissions.png -------------------------------------------------------------------------------- /docs/assets/python.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FallenDeity/discord.py-masterclass/88db9e6c99f00ea16d0cd4b3017bbc7a810b807e/docs/assets/python.png -------------------------------------------------------------------------------- /docs/assets/slash-commands/cog.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FallenDeity/discord.py-masterclass/88db9e6c99f00ea16d0cd4b3017bbc7a810b807e/docs/assets/slash-commands/cog.png -------------------------------------------------------------------------------- /docs/assets/slash-commands/defer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FallenDeity/discord.py-masterclass/88db9e6c99f00ea16d0cd4b3017bbc7a810b807e/docs/assets/slash-commands/defer.png -------------------------------------------------------------------------------- /docs/assets/slash-commands/edited-message.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FallenDeity/discord.py-masterclass/88db9e6c99f00ea16d0cd4b3017bbc7a810b807e/docs/assets/slash-commands/edited-message.png -------------------------------------------------------------------------------- /docs/assets/slash-commands/failed-interaction.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FallenDeity/discord.py-masterclass/88db9e6c99f00ea16d0cd4b3017bbc7a810b807e/docs/assets/slash-commands/failed-interaction.png -------------------------------------------------------------------------------- /docs/assets/slash-commands/followup.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FallenDeity/discord.py-masterclass/88db9e6c99f00ea16d0cd4b3017bbc7a810b807e/docs/assets/slash-commands/followup.png -------------------------------------------------------------------------------- /docs/assets/slash-commands/followups.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FallenDeity/discord.py-masterclass/88db9e6c99f00ea16d0cd4b3017bbc7a810b807e/docs/assets/slash-commands/followups.png -------------------------------------------------------------------------------- /docs/assets/slash-commands/group.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FallenDeity/discord.py-masterclass/88db9e6c99f00ea16d0cd4b3017bbc7a810b807e/docs/assets/slash-commands/group.png -------------------------------------------------------------------------------- /docs/assets/slash-commands/localized-command.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FallenDeity/discord.py-masterclass/88db9e6c99f00ea16d0cd4b3017bbc7a810b807e/docs/assets/slash-commands/localized-command.png -------------------------------------------------------------------------------- /docs/assets/slash-commands/localized-options.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FallenDeity/discord.py-masterclass/88db9e6c99f00ea16d0cd4b3017bbc7a810b807e/docs/assets/slash-commands/localized-options.png -------------------------------------------------------------------------------- /docs/assets/slash-commands/message-command.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FallenDeity/discord.py-masterclass/88db9e6c99f00ea16d0cd4b3017bbc7a810b807e/docs/assets/slash-commands/message-command.png -------------------------------------------------------------------------------- /docs/assets/slash-commands/message-menu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FallenDeity/discord.py-masterclass/88db9e6c99f00ea16d0cd4b3017bbc7a810b807e/docs/assets/slash-commands/message-menu.png -------------------------------------------------------------------------------- /docs/assets/slash-commands/nested-groups.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FallenDeity/discord.py-masterclass/88db9e6c99f00ea16d0cd4b3017bbc7a810b807e/docs/assets/slash-commands/nested-groups.png -------------------------------------------------------------------------------- /docs/assets/slash-commands/transformers.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FallenDeity/discord.py-masterclass/88db9e6c99f00ea16d0cd4b3017bbc7a810b807e/docs/assets/slash-commands/transformers.png -------------------------------------------------------------------------------- /docs/assets/slash-commands/types.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FallenDeity/discord.py-masterclass/88db9e6c99f00ea16d0cd4b3017bbc7a810b807e/docs/assets/slash-commands/types.png -------------------------------------------------------------------------------- /docs/assets/slash-commands/user-command.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FallenDeity/discord.py-masterclass/88db9e6c99f00ea16d0cd4b3017bbc7a810b807e/docs/assets/slash-commands/user-command.png -------------------------------------------------------------------------------- /docs/assets/slash-commands/user-menu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FallenDeity/discord.py-masterclass/88db9e6c99f00ea16d0cd4b3017bbc7a810b807e/docs/assets/slash-commands/user-menu.png -------------------------------------------------------------------------------- /docs/assets/tutorial_bot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FallenDeity/discord.py-masterclass/88db9e6c99f00ea16d0cd4b3017bbc7a810b807e/docs/assets/tutorial_bot.png -------------------------------------------------------------------------------- /docs/assets/views/all-buttons.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FallenDeity/discord.py-masterclass/88db9e6c99f00ea16d0cd4b3017bbc7a810b807e/docs/assets/views/all-buttons.png -------------------------------------------------------------------------------- /docs/assets/views/basic-view-counter.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FallenDeity/discord.py-masterclass/88db9e6c99f00ea16d0cd4b3017bbc7a810b807e/docs/assets/views/basic-view-counter.png -------------------------------------------------------------------------------- /docs/assets/views/buttons.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FallenDeity/discord.py-masterclass/88db9e6c99f00ea16d0cd4b3017bbc7a810b807e/docs/assets/views/buttons.png -------------------------------------------------------------------------------- /docs/assets/views/channel-select.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FallenDeity/discord.py-masterclass/88db9e6c99f00ea16d0cd4b3017bbc7a810b807e/docs/assets/views/channel-select.png -------------------------------------------------------------------------------- /docs/assets/views/confirm.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FallenDeity/discord.py-masterclass/88db9e6c99f00ea16d0cd4b3017bbc7a810b807e/docs/assets/views/confirm.gif -------------------------------------------------------------------------------- /docs/assets/views/counter.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FallenDeity/discord.py-masterclass/88db9e6c99f00ea16d0cd4b3017bbc7a810b807e/docs/assets/views/counter.gif -------------------------------------------------------------------------------- /docs/assets/views/custom-emoji.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FallenDeity/discord.py-masterclass/88db9e6c99f00ea16d0cd4b3017bbc7a810b807e/docs/assets/views/custom-emoji.gif -------------------------------------------------------------------------------- /docs/assets/views/custom-id-button.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FallenDeity/discord.py-masterclass/88db9e6c99f00ea16d0cd4b3017bbc7a810b807e/docs/assets/views/custom-id-button.png -------------------------------------------------------------------------------- /docs/assets/views/dynamic-item.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FallenDeity/discord.py-masterclass/88db9e6c99f00ea16d0cd4b3017bbc7a810b807e/docs/assets/views/dynamic-item.png -------------------------------------------------------------------------------- /docs/assets/views/dynamic-menu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FallenDeity/discord.py-masterclass/88db9e6c99f00ea16d0cd4b3017bbc7a810b807e/docs/assets/views/dynamic-menu.png -------------------------------------------------------------------------------- /docs/assets/views/emoji-buttons.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FallenDeity/discord.py-masterclass/88db9e6c99f00ea16d0cd4b3017bbc7a810b807e/docs/assets/views/emoji-buttons.png -------------------------------------------------------------------------------- /docs/assets/views/error-modal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FallenDeity/discord.py-masterclass/88db9e6c99f00ea16d0cd4b3017bbc7a810b807e/docs/assets/views/error-modal.png -------------------------------------------------------------------------------- /docs/assets/views/interaction-check.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FallenDeity/discord.py-masterclass/88db9e6c99f00ea16d0cd4b3017bbc7a810b807e/docs/assets/views/interaction-check.gif -------------------------------------------------------------------------------- /docs/assets/views/link-button.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FallenDeity/discord.py-masterclass/88db9e6c99f00ea16d0cd4b3017bbc7a810b807e/docs/assets/views/link-button.png -------------------------------------------------------------------------------- /docs/assets/views/mentionable-select.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FallenDeity/discord.py-masterclass/88db9e6c99f00ea16d0cd4b3017bbc7a810b807e/docs/assets/views/mentionable-select.png -------------------------------------------------------------------------------- /docs/assets/views/modal-error.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FallenDeity/discord.py-masterclass/88db9e6c99f00ea16d0cd4b3017bbc7a810b807e/docs/assets/views/modal-error.png -------------------------------------------------------------------------------- /docs/assets/views/modal-timeout.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FallenDeity/discord.py-masterclass/88db9e6c99f00ea16d0cd4b3017bbc7a810b807e/docs/assets/views/modal-timeout.png -------------------------------------------------------------------------------- /docs/assets/views/normal-select.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FallenDeity/discord.py-masterclass/88db9e6c99f00ea16d0cd4b3017bbc7a810b807e/docs/assets/views/normal-select.png -------------------------------------------------------------------------------- /docs/assets/views/on-error.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FallenDeity/discord.py-masterclass/88db9e6c99f00ea16d0cd4b3017bbc7a810b807e/docs/assets/views/on-error.gif -------------------------------------------------------------------------------- /docs/assets/views/on-timeout.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FallenDeity/discord.py-masterclass/88db9e6c99f00ea16d0cd4b3017bbc7a810b807e/docs/assets/views/on-timeout.gif -------------------------------------------------------------------------------- /docs/assets/views/persistent-menu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FallenDeity/discord.py-masterclass/88db9e6c99f00ea16d0cd4b3017bbc7a810b807e/docs/assets/views/persistent-menu.png -------------------------------------------------------------------------------- /docs/assets/views/persistent.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FallenDeity/discord.py-masterclass/88db9e6c99f00ea16d0cd4b3017bbc7a810b807e/docs/assets/views/persistent.png -------------------------------------------------------------------------------- /docs/assets/views/regex.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FallenDeity/discord.py-masterclass/88db9e6c99f00ea16d0cd4b3017bbc7a810b807e/docs/assets/views/regex.png -------------------------------------------------------------------------------- /docs/assets/views/role-select.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FallenDeity/discord.py-masterclass/88db9e6c99f00ea16d0cd4b3017bbc7a810b807e/docs/assets/views/role-select.png -------------------------------------------------------------------------------- /docs/assets/views/select-menus.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FallenDeity/discord.py-masterclass/88db9e6c99f00ea16d0cd4b3017bbc7a810b807e/docs/assets/views/select-menus.png -------------------------------------------------------------------------------- /docs/assets/views/tag-message.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FallenDeity/discord.py-masterclass/88db9e6c99f00ea16d0cd4b3017bbc7a810b807e/docs/assets/views/tag-message.png -------------------------------------------------------------------------------- /docs/assets/views/tag-modal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FallenDeity/discord.py-masterclass/88db9e6c99f00ea16d0cd4b3017bbc7a810b807e/docs/assets/views/tag-modal.png -------------------------------------------------------------------------------- /docs/assets/views/timeout-modal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FallenDeity/discord.py-masterclass/88db9e6c99f00ea16d0cd4b3017bbc7a810b807e/docs/assets/views/timeout-modal.png -------------------------------------------------------------------------------- /docs/assets/views/user-select.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FallenDeity/discord.py-masterclass/88db9e6c99f00ea16d0cd4b3017bbc7a810b807e/docs/assets/views/user-select.png -------------------------------------------------------------------------------- /docs/overrides/main.html: -------------------------------------------------------------------------------- 1 | {% extends "base.html" %} 2 | {% block content %} 3 | {{ super() }} 4 | {% if config.extra.comments.enabled %} 5 |

{{ lang.t("meta.comments") }}

6 | {% if config.extra.comments.mode == "giscus" %} 7 | 23 | {% else %} 24 | 31 | {% endif %} 32 | 33 | 71 | {% endif %} 72 | {% endblock %} 73 | -------------------------------------------------------------------------------- /examples/creating-a-bot/main.py: -------------------------------------------------------------------------------- 1 | import datetime 2 | import logging 3 | import os 4 | import traceback 5 | import typing 6 | 7 | import aiohttp 8 | import discord 9 | from discord.ext import commands 10 | from dotenv import load_dotenv 11 | 12 | 13 | class CustomBot(commands.Bot): 14 | client: aiohttp.ClientSession 15 | _uptime: datetime.datetime 16 | 17 | def __init__(self, prefix: str, ext_dir: str, *args: typing.Any, **kwargs: typing.Any) -> None: 18 | intents = discord.Intents.default() 19 | intents.members = True 20 | intents.message_content = True 21 | super().__init__(*args, **kwargs, command_prefix=commands.when_mentioned_or(prefix), intents=intents) 22 | self.logger = logging.getLogger(self.__class__.__name__) 23 | self.ext_dir = ext_dir 24 | self.synced = False 25 | 26 | async def _load_extensions(self) -> None: 27 | if not os.path.isdir(self.ext_dir): 28 | self.logger.error(f"Extension directory {self.ext_dir} does not exist.") 29 | return 30 | for filename in os.listdir(self.ext_dir): 31 | if filename.endswith(".py") and not filename.startswith("_"): 32 | try: 33 | await self.load_extension(f"{self.ext_dir}.{filename[:-3]}") 34 | self.logger.info(f"Loaded extension {filename[:-3]}") 35 | except commands.ExtensionError: 36 | self.logger.error(f"Failed to load extension {filename[:-3]}\n{traceback.format_exc()}") 37 | 38 | async def on_error(self, event_method: str, *args: typing.Any, **kwargs: typing.Any) -> None: 39 | self.logger.error(f"An error occurred in {event_method}.\n{traceback.format_exc()}") 40 | 41 | async def on_ready(self) -> None: 42 | self.logger.info(f"Logged in as {self.user} ({self.user.id})") 43 | 44 | async def setup_hook(self) -> None: 45 | self.client = aiohttp.ClientSession() 46 | await self._load_extensions() 47 | if not self.synced: 48 | await self.tree.sync() 49 | self.synced = not self.synced 50 | self.logger.info("Synced command tree") 51 | 52 | async def close(self) -> None: 53 | await super().close() 54 | await self.client.close() 55 | 56 | def run(self, *args: typing.Any, **kwargs: typing.Any) -> None: 57 | load_dotenv() 58 | try: 59 | super().run(str(os.getenv("TOKEN")), *args, **kwargs) 60 | except (discord.LoginFailure, KeyboardInterrupt): 61 | self.logger.info("Exiting...") 62 | exit() 63 | 64 | @property 65 | def user(self) -> discord.ClientUser: 66 | assert super().user, "Bot is not ready yet" 67 | return typing.cast(discord.ClientUser, super().user) 68 | 69 | @property 70 | def uptime(self) -> datetime.timedelta: 71 | return datetime.datetime.utcnow() - self._uptime 72 | 73 | 74 | def main() -> None: 75 | logging.basicConfig(level=logging.INFO, format="[%(asctime)s] %(levelname)s: %(message)s") 76 | bot = CustomBot(prefix="!", ext_dir="cogs") 77 | 78 | @bot.listen("on_message") 79 | async def on_message(_: discord.Message) -> None: # type: ignore 80 | print("Message received") 81 | 82 | bot.run() 83 | 84 | 85 | if __name__ == "__main__": 86 | main() 87 | -------------------------------------------------------------------------------- /examples/hot-reload/cogs/sub_cogs/sub_cog.py: -------------------------------------------------------------------------------- 1 | from discord.ext import commands 2 | 3 | 4 | class SubCog(commands.Cog): ... 5 | 6 | 7 | async def setup(bot: commands.Bot): 8 | await bot.add_cog(SubCog()) 9 | -------------------------------------------------------------------------------- /examples/hot-reload/cogs/super_cog.py: -------------------------------------------------------------------------------- 1 | import discord 2 | from discord import app_commands 3 | from discord.ext import commands 4 | 5 | 6 | class SuperCog(commands.GroupCog, name="foo", description="A super cog"): 7 | _bar = app_commands.Group(name="bar", description="A bar group") 8 | 9 | @app_commands.command() 10 | async def foo(self, inter: discord.Interaction): 11 | await inter.response.send_message("foo") 12 | 13 | @_bar.command() 14 | async def baz(self, inter: discord.Interaction): 15 | await inter.response.send_message("baz") 16 | 17 | 18 | async def setup(bot: commands.Bot): 19 | await bot.add_cog(SuperCog()) 20 | -------------------------------------------------------------------------------- /examples/hot-reload/main.py: -------------------------------------------------------------------------------- 1 | import asyncio 2 | import os 3 | import pathlib 4 | import time 5 | 6 | import discord 7 | from discord.ext import commands 8 | from dotenv import load_dotenv 9 | 10 | 11 | class MyBot(commands.Bot): 12 | _watcher: asyncio.Task 13 | 14 | def __init__(self, ext_dir: str, *args, **kwargs): 15 | super().__init__(*args, **kwargs) 16 | self.ext_dir = pathlib.Path(ext_dir) 17 | 18 | async def _load_extensions(self): 19 | print("Loading extensions...") 20 | for file in self.ext_dir.rglob("*.py"): 21 | if file.stem.startswith("_"): 22 | continue 23 | try: 24 | await self.load_extension(".".join(file.with_suffix("").parts)) 25 | print(f"Loaded {file}") 26 | except commands.ExtensionError as e: 27 | print(f"Failed to load {file}: {e}") 28 | 29 | async def setup_hook(self): 30 | await self._load_extensions() 31 | self._watcher = self.loop.create_task(self._cog_watcher()) 32 | await self.tree.sync() 33 | 34 | async def _cog_watcher(self): 35 | print("Watching for changes...") 36 | last = time.time() 37 | while True: 38 | extensions: set[str] = set() 39 | for name, module in self.extensions.items(): 40 | if module.__file__ and os.stat(module.__file__).st_mtime > last: 41 | extensions.add(name) 42 | for ext in extensions: 43 | try: 44 | await self.reload_extension(ext) 45 | print(f"Reloaded {ext}") 46 | except commands.ExtensionError as e: 47 | print(f"Failed to reload {ext}: {e}") 48 | last = time.time() 49 | await asyncio.sleep(1) 50 | 51 | 52 | if __name__ == "__main__": 53 | load_dotenv() 54 | bot = MyBot("cogs", command_prefix="!", intents=discord.Intents.all()) 55 | bot.run(str(os.getenv("TOKEN"))) 56 | -------------------------------------------------------------------------------- /examples/hybrid-commands/__init__.py: -------------------------------------------------------------------------------- 1 | from .main import CustomBot 2 | 3 | __all__ = ("CustomBot",) 4 | -------------------------------------------------------------------------------- /examples/hybrid-commands/cogs/general.py: -------------------------------------------------------------------------------- 1 | from __future__ import annotations 2 | 3 | import typing 4 | 5 | from discord.ext import commands 6 | from utils.help import CustomHelpCommand 7 | 8 | if typing.TYPE_CHECKING: 9 | from .. import CustomBot 10 | 11 | 12 | class General(commands.Cog): 13 | """General commands""" 14 | 15 | def __init__(self, bot: CustomBot) -> None: 16 | self.bot = bot 17 | self._help_command = CustomHelpCommand() 18 | self._help_command.cog = self 19 | self._original_help_command = bot.help_command 20 | bot.help_command = self._help_command 21 | 22 | def cog_unload(self) -> None: 23 | self.bot.help_command = self._original_help_command 24 | 25 | @commands.hybrid_command(name="ping") 26 | async def ping(self, ctx: commands.Context[CustomBot]) -> None: 27 | """Pong!""" 28 | await ctx.defer(ephemeral=True) 29 | await ctx.send(f"Pong! ({self.bot.latency * 1000:.2f}ms)") 30 | 31 | @commands.hybrid_group(name="math") 32 | async def math(self, ctx: commands.Context[CustomBot]) -> None: 33 | """Math commands""" 34 | pass 35 | 36 | @math.command(name="add") 37 | async def add(self, ctx: commands.Context[CustomBot], a: int, b: int) -> None: 38 | """Add two numbers""" 39 | await ctx.send(f"{a} + {b} = {a + b}") 40 | 41 | @math.command(name="subtract") 42 | async def subtract(self, ctx: commands.Context[CustomBot], a: int, b: int = 0) -> None: 43 | """Subtract two numbers""" 44 | await ctx.send(f"{a} - {b} = {a - b}") 45 | 46 | 47 | async def setup(bot: CustomBot) -> None: 48 | await bot.add_cog(General(bot)) 49 | -------------------------------------------------------------------------------- /examples/hybrid-commands/paginators/advanced_paginator.py: -------------------------------------------------------------------------------- 1 | from __future__ import annotations 2 | 3 | from typing import Generic, List, Optional, TypeVar, Union 4 | 5 | import discord 6 | from discord import File, Member, User 7 | from paginators import FileLike, PageLike 8 | from paginators.button_paginator import ButtonBasedPaginator 9 | 10 | T = TypeVar("T", bound=PageLike) 11 | 12 | 13 | class CategoryEntry(Generic[T]): 14 | def __init__( 15 | self, 16 | *, 17 | category_title: str, 18 | category_description: Optional[str] = None, 19 | pages: Optional[List[T]] = None, 20 | attachments: Optional[List[File]] = None, 21 | ) -> None: 22 | self.category_title = category_title 23 | self.category_description = category_description 24 | self.pages = pages or [] 25 | self.attachments = attachments or [] 26 | 27 | def add_page(self, page: T) -> None: 28 | self.pages.append(page) 29 | 30 | 31 | class CategoryBasedPaginator(Generic[T], ButtonBasedPaginator[T]): 32 | def __init__( 33 | self, 34 | user: Union[User, Member], 35 | *, 36 | pages: List[CategoryEntry[T]], 37 | ) -> None: 38 | self.categories = pages 39 | self.current_category: int = 0 40 | 41 | super().__init__(user, pages[self.current_category].pages, attachments=pages[self.current_category].attachments) 42 | 43 | self.select = CategoryPaginatorSelect() 44 | for i, page in enumerate(pages): 45 | self.select.add_option( 46 | label=page.category_title, 47 | value=str(i), 48 | description=page.category_description, 49 | ) 50 | self.add_item(self.select) 51 | 52 | 53 | class CategoryPaginatorSelect(discord.ui.Select[CategoryBasedPaginator[PageLike]]): 54 | def __init__(self) -> None: 55 | super().__init__(min_values=1, max_values=1) 56 | 57 | async def callback(self, interaction: discord.Interaction) -> None: 58 | # the user can only select one value and shoud at least select it 59 | # so this is always fine 60 | await interaction.response.defer() 61 | self.view.current_category = int(self.values[0]) 62 | view: CategoryBasedPaginator[PageLike] = self.view 63 | view.pages = view.categories[self.view.current_category].pages 64 | view.attachments = view.categories[self.view.current_category].attachments 65 | view.current_page = 0 66 | page = view.pages[view.current_page] 67 | await view.send_page(interaction, page) 68 | 69 | async def interaction_check(self, interaction: discord.Interaction) -> bool: 70 | return await self.view.interaction_check(interaction) 71 | 72 | 73 | class EmbedCategoryPaginator(CategoryBasedPaginator[discord.Embed]): 74 | def __init__(self, user: Union[discord.User, discord.Member], *, pages: List[CategoryEntry[discord.Embed]]) -> None: 75 | super().__init__(user, pages=pages) 76 | 77 | 78 | class FileCategoryPaginator(CategoryBasedPaginator[FileLike]): 79 | def __init__(self, user: Union[discord.User, discord.Member], *, pages: List[CategoryEntry[FileLike]]) -> None: 80 | super().__init__(user, pages=pages) 81 | 82 | 83 | class StringCategoryPaginator(CategoryBasedPaginator[str]): 84 | def __init__(self, user: Union[discord.User, discord.Member], *, pages: List[CategoryEntry[str]]) -> None: 85 | super().__init__(user, pages=pages) 86 | -------------------------------------------------------------------------------- /examples/hybrid-commands/paginators/button_paginator.py: -------------------------------------------------------------------------------- 1 | from __future__ import annotations 2 | 3 | from typing import TYPE_CHECKING, Generic, List, TypeVar, Union 4 | 5 | import discord 6 | from discord import PartialEmoji 7 | from paginators import BasePaginator, FileLike, PageLike 8 | 9 | if TYPE_CHECKING: 10 | from views import BaseView 11 | 12 | 13 | T = TypeVar("T", bound=PageLike) 14 | 15 | 16 | class ButtonBasedPaginator(Generic[T], BasePaginator[T]): 17 | @discord.ui.button(emoji=PartialEmoji.from_str("⏪")) 18 | async def goto_first_page_callback(self, inter: discord.Interaction, _: discord.ui.Button[BaseView]) -> None: 19 | await inter.response.defer() 20 | self.current_page = 0 21 | page = self.pages[self.current_page] 22 | await self.send_page(inter, page) 23 | 24 | @discord.ui.button(emoji=PartialEmoji.from_str("◀️")) 25 | async def previous_page_callback(self, inter: discord.Interaction, _: discord.ui.Button[BaseView]) -> None: 26 | await inter.response.defer() 27 | await self.previous_page(inter) 28 | 29 | @discord.ui.button(emoji=PartialEmoji.from_str("▶️")) 30 | async def next_page_callback(self, inter: discord.Interaction, _: discord.ui.Button[BaseView]) -> None: 31 | await inter.response.defer() 32 | await self.next_page(inter) 33 | 34 | @discord.ui.button(emoji=PartialEmoji.from_str("⏩")) 35 | async def goto_last_page_callback(self, inter: discord.Interaction, _: discord.ui.Button[BaseView]) -> None: 36 | await inter.response.defer() 37 | self.current_page = len(self.pages) - 1 38 | page = self.pages[self.current_page] 39 | await self.send_page(inter, page) 40 | 41 | @discord.ui.button(emoji=PartialEmoji.from_str("🗑️")) 42 | async def stop_paginator_callback(self, inter: discord.Interaction, _: discord.ui.Button[BaseView]) -> None: 43 | await inter.response.defer() 44 | await self.stop_paginator() 45 | 46 | 47 | class EmbedButtonPaginator(ButtonBasedPaginator[discord.Embed]): 48 | def __init__( 49 | self, 50 | user: Union[discord.User, discord.Member], 51 | pages: List[discord.Embed], 52 | *, 53 | attachments: List[discord.File] = None, 54 | ) -> None: 55 | super().__init__(user, pages, attachments=attachments) 56 | 57 | 58 | class FileButtonPaginator(ButtonBasedPaginator[FileLike]): 59 | def __init__(self, user: Union[discord.User, discord.Member], pages: List[FileLike]) -> None: 60 | super().__init__(user, pages) 61 | 62 | 63 | class StringButtonPaginator(ButtonBasedPaginator[str]): 64 | def __init__( 65 | self, 66 | user: Union[discord.User, discord.Member], 67 | pages: List[str], 68 | *, 69 | attachments: List[discord.File] = None, 70 | ) -> None: 71 | super().__init__(user, pages, attachments=attachments) 72 | -------------------------------------------------------------------------------- /examples/hybrid-commands/paginators/select_paginator.py: -------------------------------------------------------------------------------- 1 | from __future__ import annotations 2 | 3 | from typing import Generic, List, Optional, TypeVar, Union 4 | 5 | import discord 6 | from paginators import BasePaginator, FileLike, PageLike 7 | 8 | T = TypeVar("T", bound=PageLike) 9 | 10 | 11 | class PageEntry(Generic[T]): 12 | def __init__( 13 | self, 14 | value: T, 15 | *, 16 | page_title: str, 17 | page_description: Optional[str] = None, 18 | attachment: discord.File = None, 19 | ) -> None: 20 | self.page_title = page_title 21 | self.page_description = page_description 22 | self.value = value 23 | self.attachment = attachment 24 | 25 | 26 | class SelectMenuBasedPaginator(Generic[T], BasePaginator[T]): 27 | def __init__( 28 | self, 29 | user: Union[discord.User, discord.Member], 30 | *, 31 | pages: List[PageEntry[T]], 32 | ) -> None: 33 | self.select = PaginatorSelect(view=self) 34 | pages_: List[T] = [] 35 | attachments_: List[discord.File] = [] 36 | for i, page in enumerate(pages): 37 | pages_.append(page.value) 38 | if page.attachment: 39 | attachments_.append(page.attachment) 40 | self.select.add_option( 41 | label=page.page_title, 42 | value=str(i), 43 | description=page.page_description, 44 | ) 45 | super().__init__(user, pages=pages_, attachments=attachments_) 46 | self.add_item(self.select) 47 | 48 | 49 | class PaginatorSelect(discord.ui.Select[SelectMenuBasedPaginator[PageLike]]): 50 | def __init__(self, view: SelectMenuBasedPaginator[PageLike]) -> None: 51 | super().__init__(min_values=1, max_values=1) 52 | self.base_view = view 53 | 54 | async def callback(self, interaction: discord.Interaction) -> None: 55 | # the user can only select one value and shoud at least select it 56 | # so this is always fine 57 | await interaction.response.defer() 58 | self.base_view.current_page = int(self.values[0]) 59 | page = self.base_view.pages[self.base_view.current_page] 60 | await self.base_view.send_page(interaction, page) 61 | 62 | async def interaction_check(self, interaction: discord.Interaction) -> bool: 63 | return await self.base_view.interaction_check(interaction) 64 | 65 | 66 | class EmbedSelectPaginator(SelectMenuBasedPaginator[discord.Embed]): 67 | def __init__(self, user: Union[discord.User, discord.Member], *, pages: List[PageEntry[discord.Embed]]) -> None: 68 | super().__init__(user, pages=pages) 69 | 70 | 71 | class FileSelectPaginator(SelectMenuBasedPaginator[FileLike]): 72 | def __init__(self, user: Union[discord.User, discord.Member], *, pages: List[PageEntry[FileLike]]) -> None: 73 | super().__init__(user, pages=pages) 74 | 75 | 76 | class StringSelectPaginator(SelectMenuBasedPaginator[str]): 77 | def __init__(self, user: Union[discord.User, discord.Member], *, pages: List[PageEntry[str]]) -> None: 78 | super().__init__(user, pages=pages) 79 | -------------------------------------------------------------------------------- /examples/markdow-and-ansi/main.py: -------------------------------------------------------------------------------- 1 | import enum 2 | import os 3 | 4 | import discord 5 | from discord.ext import commands 6 | from dotenv import load_dotenv 7 | 8 | 9 | class Style(enum.IntEnum): 10 | def __str__(self) -> str: 11 | return f"{self.value}" 12 | 13 | 14 | class Colors(Style): 15 | GRAY = 30 16 | RED = 31 17 | GREEN = 32 18 | YELLOW = 33 19 | BLUE = 34 20 | MAGENTA = 35 21 | CYAN = 36 22 | WHITE = 37 23 | 24 | 25 | class BackgroundColors(Style): 26 | FIREFLY_DARK_BLUE = 40 27 | ORANGE = 41 28 | MARBLE_BLUE = 42 29 | GREYISH_TURQUOISE = 43 30 | GRAY = 44 31 | INDIGO = 45 32 | LIGHT_GRAY = 46 33 | WHITE = 47 34 | 35 | 36 | class Styles(Style): 37 | NORMAL = 0 38 | BOLD = 1 39 | UNDERLINE = 4 40 | 41 | 42 | class AnsiBuilder: 43 | def __init__(self, text: str = "", *styles: Style) -> None: 44 | self.styles = styles 45 | self.cursor = len(text) 46 | self.text = f"\033[{';'.join(map(str, styles))}m{text}\033[0m" if styles and text else text 47 | 48 | def __add__(self, other: str) -> "AnsiBuilder": 49 | self.text += other 50 | self.cursor += len(other) 51 | return self 52 | 53 | def write(self, cursor: int, text: str) -> "AnsiBuilder": 54 | if cursor > self.cursor or cursor > len(self.text): 55 | raise ValueError("Cursor cannot be greater than the length of the text") 56 | if cursor < 0: 57 | raise ValueError("Cursor cannot be less than 0") 58 | self.text = self.text[:cursor] + text + self.text[cursor:] 59 | self.cursor += len(text) 60 | return self 61 | 62 | def __str__(self) -> str: 63 | return self.text 64 | 65 | @classmethod 66 | def to_ansi(cls, text: str, *styles: Style) -> str: 67 | return str(cls(text, *styles)) 68 | 69 | @property 70 | def block(self) -> str: 71 | return f"```ansi\n{self.text}```" 72 | 73 | 74 | bot = commands.Bot(command_prefix="!", intents=discord.Intents.all()) 75 | load_dotenv() 76 | 77 | 78 | @bot.command() 79 | async def foreground(ctx: commands.Context[commands.Bot]) -> None: 80 | fg = AnsiBuilder("Foreground Colors\n", Styles.BOLD) 81 | for color in Colors: 82 | fg += AnsiBuilder.to_ansi(f"{color.name}\n", color) 83 | await ctx.send(fg.block) 84 | 85 | 86 | @bot.command() 87 | async def background(ctx: commands.Context[commands.Bot]) -> None: 88 | bg = AnsiBuilder("Background Colors\n", Styles.BOLD) 89 | for color in BackgroundColors: 90 | bg += AnsiBuilder.to_ansi(f"{color.name}\n", color) 91 | await ctx.send(bg.block) 92 | 93 | 94 | @bot.command() 95 | async def style(ctx: commands.Context[commands.Bot]) -> None: 96 | _style = AnsiBuilder("Styles\n", Styles.BOLD) 97 | for s in Styles: 98 | _style += AnsiBuilder.to_ansi(f"{s.name}\n", s) 99 | await ctx.send(_style.block) 100 | 101 | 102 | @bot.command() 103 | async def combo(ctx: commands.Context[commands.Bot]) -> None: 104 | # combination of all foreground colors on all background colors 105 | for bg in BackgroundColors: 106 | combined = AnsiBuilder() 107 | for fg in Colors: 108 | combined += f"{AnsiBuilder.to_ansi('Sample', fg, bg)} " 109 | await ctx.send(combined.block) 110 | 111 | 112 | @bot.command() 113 | async def style_combo(ctx: commands.Context[commands.Bot], style_: str) -> None: 114 | if style_ not in Styles.__members__: 115 | await ctx.send("Invalid style") 116 | return 117 | _style = Styles[style_] 118 | combined = AnsiBuilder() 119 | for fg in Colors: 120 | combined += f"{AnsiBuilder.to_ansi('Sample', fg, _style)} " 121 | await ctx.send(combined.block) 122 | 123 | 124 | bot.run(str(os.getenv("TOKEN"))) 125 | -------------------------------------------------------------------------------- /examples/slash-commands/__init__.py: -------------------------------------------------------------------------------- 1 | from .main import CustomBot 2 | 3 | __all__ = ("CustomBot",) 4 | -------------------------------------------------------------------------------- /examples/slash-commands/cogs/cog.py: -------------------------------------------------------------------------------- 1 | from __future__ import annotations 2 | 3 | import datetime 4 | import typing 5 | 6 | import discord 7 | from discord import app_commands 8 | from discord.ext import commands 9 | 10 | if typing.TYPE_CHECKING: 11 | from .. import CustomBot 12 | 13 | 14 | def is_owner(): 15 | async def predicate(inter: discord.Interaction) -> bool: 16 | return inter.user.id == 1234567890 17 | 18 | return app_commands.check(predicate) 19 | 20 | 21 | class DurationConverter(app_commands.Transformer): 22 | async def transform(self, inter: discord.Interaction, argument: str) -> datetime.timedelta: 23 | multipliers = { 24 | "s": 1, # seconds 25 | "m": 60, # minutes 26 | "h": 3600, # hours 27 | "d": 86400, # days 28 | "w": 604800, # weeks 29 | } 30 | try: 31 | amount = int(argument[:-1]) 32 | unit = argument[-1] 33 | seconds = amount * multipliers[unit] 34 | delta = datetime.timedelta(seconds=seconds) 35 | return delta 36 | except (ValueError, KeyError): 37 | raise commands.BadArgument("Invalid duration provided.") 38 | 39 | 40 | class General(commands.Cog): 41 | group = app_commands.Group(name="utility", description="Utility commands") 42 | 43 | def __init__(self, bot: CustomBot) -> None: 44 | self.bot = bot 45 | 46 | @group.command(name="duration", description="Convert a duration to a timedelta") 47 | @is_owner() 48 | async def duration( 49 | self, inter: discord.Interaction, duration: app_commands.Transform[datetime.timedelta, DurationConverter] 50 | ) -> None: 51 | await inter.response.send_message(f"Duration: {duration}") 52 | 53 | @group.command(name="ping", description="Get the bot's latency") 54 | async def ping(self, inter: discord.Interaction) -> None: 55 | await inter.response.send_message(f"Pong! {round(self.bot.latency * 1000)}ms") 56 | 57 | @app_commands.command(name="echo", description="Echo a message") 58 | async def echo(self, inter: discord.Interaction, message: str) -> None: 59 | """ 60 | Echo a message back to the user. 61 | 62 | Parameters 63 | ---------- 64 | inter : discord.Interaction 65 | The interaction 66 | message : str 67 | The message to echo 68 | """ 69 | await inter.response.send_message(message) 70 | 71 | 72 | async def setup(bot: CustomBot) -> None: 73 | await bot.add_cog(General(bot)) 74 | -------------------------------------------------------------------------------- /examples/slash-commands/cogs/groupcog.py: -------------------------------------------------------------------------------- 1 | from __future__ import annotations 2 | 3 | import typing 4 | 5 | import discord 6 | from discord import app_commands 7 | from discord.ext import commands 8 | 9 | if typing.TYPE_CHECKING: 10 | from .. import CustomBot 11 | 12 | 13 | class MathGroup(commands.GroupCog, name="math", description="Math commands"): 14 | group = app_commands.Group(name="functions", description="Math functions") 15 | 16 | def __init__(self, bot: CustomBot) -> None: 17 | self.bot = bot 18 | super().__init__() 19 | 20 | @group.command(name="pow", description="Raise a number to a power") 21 | async def power(self, inter: discord.Interaction, a: int, b: int) -> None: 22 | """ 23 | Raise a number to a power. 24 | 25 | Parameters 26 | ---------- 27 | inter : discord.Interaction 28 | The interaction. 29 | a : int 30 | The number. 31 | b : int 32 | The power. 33 | """ 34 | await inter.response.send_message(f"{a} ^ {b} = {a ** b}") 35 | 36 | @app_commands.command(name="add", description="Add two numbers") 37 | async def add(self, inter: discord.Interaction, a: int, b: int) -> None: 38 | """ 39 | Add two numbers. 40 | 41 | Parameters 42 | ---------- 43 | inter : discord.Interaction 44 | The interaction. 45 | a : int 46 | The first number. 47 | b : int 48 | The second number. 49 | """ 50 | await inter.response.send_message(f"{a} + {b} = {a + b}") 51 | 52 | @app_commands.command(name="subtract", description="Subtract two numbers") 53 | async def subtract(self, inter: discord.Interaction, a: int, b: int) -> None: 54 | """ 55 | Subtract two numbers. 56 | 57 | Parameters 58 | ---------- 59 | inter : discord.Interaction 60 | The interaction. 61 | a : int 62 | The first number. 63 | b : int 64 | The second number. 65 | """ 66 | await inter.response.send_message(f"{a} - {b} = {a - b}") 67 | 68 | @commands.hybrid_command(name="multiply", description="Multiply two numbers") 69 | async def multiply(self, ctx: commands.Context[CustomBot], a: int, b: int) -> None: 70 | """ 71 | Multiply two numbers. 72 | 73 | Parameters 74 | ---------- 75 | ctx : commands.Context 76 | The context. 77 | a : int 78 | The first number. 79 | b : int 80 | The second number. 81 | """ 82 | await ctx.send(f"{a} * {b} = {a * b}") 83 | 84 | @commands.command(name="divide", description="Divide two numbers") 85 | async def divide(self, ctx: commands.Context[CustomBot], a: int, b: int) -> None: 86 | """ 87 | Divide two numbers. 88 | 89 | Parameters 90 | ---------- 91 | ctx : commands.Context 92 | The context. 93 | a : int 94 | The first number. 95 | b : int 96 | The second number. 97 | """ 98 | await ctx.send(f"{a} / {b} = {a / b}") 99 | 100 | 101 | async def setup(bot: CustomBot) -> None: 102 | await bot.add_cog(MathGroup(bot)) 103 | -------------------------------------------------------------------------------- /examples/slash-commands/paginators/advanced_paginator.py: -------------------------------------------------------------------------------- 1 | from __future__ import annotations 2 | 3 | from typing import Generic, List, Optional, TypeVar, Union 4 | 5 | import discord 6 | from discord import File, Member, User 7 | from paginators import FileLike, PageLike 8 | from paginators.button_paginator import ButtonBasedPaginator 9 | 10 | T = TypeVar("T", bound=PageLike) 11 | 12 | 13 | class CategoryEntry(Generic[T]): 14 | def __init__( 15 | self, 16 | *, 17 | category_title: str, 18 | category_description: Optional[str] = None, 19 | pages: Optional[List[T]] = None, 20 | attachments: Optional[List[File]] = None, 21 | ) -> None: 22 | self.category_title = category_title 23 | self.category_description = category_description 24 | self.pages = pages or [] 25 | self.attachments = attachments or [] 26 | 27 | def add_page(self, page: T) -> None: 28 | self.pages.append(page) 29 | 30 | 31 | class CategoryBasedPaginator(Generic[T], ButtonBasedPaginator[T]): 32 | def __init__( 33 | self, 34 | user: Union[User, Member], 35 | *, 36 | pages: List[CategoryEntry[T]], 37 | ) -> None: 38 | self.categories = pages 39 | self.current_category: int = 0 40 | 41 | super().__init__(user, pages[self.current_category].pages, attachments=pages[self.current_category].attachments) 42 | 43 | self.select = CategoryPaginatorSelect() 44 | for i, page in enumerate(pages): 45 | self.select.add_option( 46 | label=page.category_title, 47 | value=str(i), 48 | description=page.category_description, 49 | ) 50 | self.add_item(self.select) 51 | 52 | 53 | class CategoryPaginatorSelect(discord.ui.Select[CategoryBasedPaginator[PageLike]]): 54 | def __init__(self) -> None: 55 | super().__init__(min_values=1, max_values=1) 56 | 57 | async def callback(self, interaction: discord.Interaction) -> None: 58 | # the user can only select one value and shoud at least select it 59 | # so this is always fine 60 | await interaction.response.defer() 61 | self.view.current_category = int(self.values[0]) 62 | view: CategoryBasedPaginator[PageLike] = self.view 63 | view.pages = view.categories[self.view.current_category].pages 64 | view.attachments = view.categories[self.view.current_category].attachments 65 | view.current_page = 0 66 | page = view.pages[view.current_page] 67 | await view.send_page(interaction, page) 68 | 69 | async def interaction_check(self, interaction: discord.Interaction) -> bool: 70 | return await self.view.interaction_check(interaction) 71 | 72 | 73 | class EmbedCategoryPaginator(CategoryBasedPaginator[discord.Embed]): 74 | def __init__(self, user: Union[discord.User, discord.Member], *, pages: List[CategoryEntry[discord.Embed]]) -> None: 75 | super().__init__(user, pages=pages) 76 | 77 | 78 | class FileCategoryPaginator(CategoryBasedPaginator[FileLike]): 79 | def __init__(self, user: Union[discord.User, discord.Member], *, pages: List[CategoryEntry[FileLike]]) -> None: 80 | super().__init__(user, pages=pages) 81 | 82 | 83 | class StringCategoryPaginator(CategoryBasedPaginator[str]): 84 | def __init__(self, user: Union[discord.User, discord.Member], *, pages: List[CategoryEntry[str]]) -> None: 85 | super().__init__(user, pages=pages) 86 | -------------------------------------------------------------------------------- /examples/slash-commands/paginators/button_paginator.py: -------------------------------------------------------------------------------- 1 | from __future__ import annotations 2 | 3 | from typing import TYPE_CHECKING, Generic, List, TypeVar, Union 4 | 5 | import discord 6 | from discord import PartialEmoji 7 | from paginators import BasePaginator, FileLike, PageLike 8 | 9 | if TYPE_CHECKING: 10 | from views import BaseView 11 | 12 | 13 | T = TypeVar("T", bound=PageLike) 14 | 15 | 16 | class ButtonBasedPaginator(Generic[T], BasePaginator[T]): 17 | @discord.ui.button(emoji=PartialEmoji.from_str("⏪")) 18 | async def goto_first_page_callback(self, inter: discord.Interaction, _: discord.ui.Button[BaseView]) -> None: 19 | await inter.response.defer() 20 | self.current_page = 0 21 | page = self.pages[self.current_page] 22 | await self.send_page(inter, page) 23 | 24 | @discord.ui.button(emoji=PartialEmoji.from_str("◀️")) 25 | async def previous_page_callback(self, inter: discord.Interaction, _: discord.ui.Button[BaseView]) -> None: 26 | await inter.response.defer() 27 | await self.previous_page(inter) 28 | 29 | @discord.ui.button(emoji=PartialEmoji.from_str("▶️")) 30 | async def next_page_callback(self, inter: discord.Interaction, _: discord.ui.Button[BaseView]) -> None: 31 | await inter.response.defer() 32 | await self.next_page(inter) 33 | 34 | @discord.ui.button(emoji=PartialEmoji.from_str("⏩")) 35 | async def goto_last_page_callback(self, inter: discord.Interaction, _: discord.ui.Button[BaseView]) -> None: 36 | await inter.response.defer() 37 | self.current_page = len(self.pages) - 1 38 | page = self.pages[self.current_page] 39 | await self.send_page(inter, page) 40 | 41 | @discord.ui.button(emoji=PartialEmoji.from_str("🗑️")) 42 | async def stop_paginator_callback(self, inter: discord.Interaction, _: discord.ui.Button[BaseView]) -> None: 43 | await inter.response.defer() 44 | await self.stop_paginator() 45 | 46 | 47 | class EmbedButtonPaginator(ButtonBasedPaginator[discord.Embed]): 48 | def __init__( 49 | self, 50 | user: Union[discord.User, discord.Member], 51 | pages: List[discord.Embed], 52 | *, 53 | attachments: List[discord.File] = None, 54 | ) -> None: 55 | super().__init__(user, pages, attachments=attachments) 56 | 57 | 58 | class FileButtonPaginator(ButtonBasedPaginator[FileLike]): 59 | def __init__(self, user: Union[discord.User, discord.Member], pages: List[FileLike]) -> None: 60 | super().__init__(user, pages) 61 | 62 | 63 | class StringButtonPaginator(ButtonBasedPaginator[str]): 64 | def __init__( 65 | self, 66 | user: Union[discord.User, discord.Member], 67 | pages: List[str], 68 | *, 69 | attachments: List[discord.File] = None, 70 | ) -> None: 71 | super().__init__(user, pages, attachments=attachments) 72 | -------------------------------------------------------------------------------- /examples/slash-commands/paginators/select_paginator.py: -------------------------------------------------------------------------------- 1 | from __future__ import annotations 2 | 3 | from typing import Generic, List, Optional, TypeVar, Union 4 | 5 | import discord 6 | from paginators import BasePaginator, FileLike, PageLike 7 | 8 | T = TypeVar("T", bound=PageLike) 9 | 10 | 11 | class PageEntry(Generic[T]): 12 | def __init__( 13 | self, 14 | value: T, 15 | *, 16 | page_title: str, 17 | page_description: Optional[str] = None, 18 | attachment: discord.File = None, 19 | ) -> None: 20 | self.page_title = page_title 21 | self.page_description = page_description 22 | self.value = value 23 | self.attachment = attachment 24 | 25 | 26 | class SelectMenuBasedPaginator(Generic[T], BasePaginator[T]): 27 | def __init__( 28 | self, 29 | user: Union[discord.User, discord.Member], 30 | *, 31 | pages: List[PageEntry[T]], 32 | ) -> None: 33 | self.select = PaginatorSelect(view=self) 34 | pages_: List[T] = [] 35 | attachments_: List[discord.File] = [] 36 | for i, page in enumerate(pages): 37 | pages_.append(page.value) 38 | if page.attachment: 39 | attachments_.append(page.attachment) 40 | self.select.add_option( 41 | label=page.page_title, 42 | value=str(i), 43 | description=page.page_description, 44 | ) 45 | super().__init__(user, pages=pages_, attachments=attachments_) 46 | self.add_item(self.select) 47 | 48 | 49 | class PaginatorSelect(discord.ui.Select[SelectMenuBasedPaginator[PageLike]]): 50 | def __init__(self, view: SelectMenuBasedPaginator[PageLike]) -> None: 51 | super().__init__(min_values=1, max_values=1) 52 | self.base_view = view 53 | 54 | async def callback(self, interaction: discord.Interaction) -> None: 55 | # the user can only select one value and shoud at least select it 56 | # so this is always fine 57 | await interaction.response.defer() 58 | self.base_view.current_page = int(self.values[0]) 59 | page = self.base_view.pages[self.base_view.current_page] 60 | await self.base_view.send_page(interaction, page) 61 | 62 | async def interaction_check(self, interaction: discord.Interaction) -> bool: 63 | return await self.base_view.interaction_check(interaction) 64 | 65 | 66 | class EmbedSelectPaginator(SelectMenuBasedPaginator[discord.Embed]): 67 | def __init__(self, user: Union[discord.User, discord.Member], *, pages: List[PageEntry[discord.Embed]]) -> None: 68 | super().__init__(user, pages=pages) 69 | 70 | 71 | class FileSelectPaginator(SelectMenuBasedPaginator[FileLike]): 72 | def __init__(self, user: Union[discord.User, discord.Member], *, pages: List[PageEntry[FileLike]]) -> None: 73 | super().__init__(user, pages=pages) 74 | 75 | 76 | class StringSelectPaginator(SelectMenuBasedPaginator[str]): 77 | def __init__(self, user: Union[discord.User, discord.Member], *, pages: List[PageEntry[str]]) -> None: 78 | super().__init__(user, pages=pages) 79 | -------------------------------------------------------------------------------- /examples/slash-commands/utils/translator.py: -------------------------------------------------------------------------------- 1 | from __future__ import annotations 2 | 3 | from discord import app_commands 4 | from discord.app_commands.translator import TranslationContextTypes, locale_str 5 | from discord.enums import Locale 6 | from gpytranslate import Translator as GoogleTranslator 7 | 8 | 9 | class Translator(app_commands.Translator): 10 | translator = GoogleTranslator() 11 | 12 | async def translate(self, string: locale_str, locale: Locale, context: TranslationContextTypes) -> str | None: 13 | try: 14 | translation = await self.translator.translate(string.message, sourcelang="en", targetlang=locale.value) 15 | return str(translation.text) # type: ignore 16 | except Exception: 17 | return None 18 | -------------------------------------------------------------------------------- /examples/slash-commands/utils/tree.py: -------------------------------------------------------------------------------- 1 | from __future__ import annotations 2 | 3 | import discord 4 | from discord import app_commands 5 | from discord.app_commands.errors import AppCommandError 6 | from discord.interactions import Interaction 7 | 8 | 9 | class SlashCommandTree(app_commands.CommandTree): 10 | async def on_error(self, interaction: Interaction[discord.Client], error: AppCommandError | Exception) -> None: 11 | if isinstance(error, app_commands.errors.CommandInvokeError): 12 | error = error.original 13 | message = f""" 14 | \nException: {error.__class__.__name__}, 15 | Command: {interaction.command.qualified_name if interaction.command else None}, 16 | User: {interaction.user}, 17 | Time: {discord.utils.format_dt(interaction.created_at, style='F')}\n 18 | """ 19 | try: 20 | await interaction.response.send_message(f"An error occurred: {message}") 21 | except discord.InteractionResponded: 22 | await interaction.followup.send(f"An error occurred: {message}") 23 | -------------------------------------------------------------------------------- /examples/smart-sync/README.md: -------------------------------------------------------------------------------- 1 | # Make Directory translations 2 | 3 | ```bash 4 | mkdir -p translations 5 | ``` 6 | 7 | # Message POT generation 8 | 9 | ```bash 10 | find . -iname "*.py" | xargs xgettext --from-code=UTF-8 --language=Python -o translations/dpygt.pot --add-comments 11 | sed -i 's/CHARSET/UTF-8/' translations/dpygt.pot 12 | ``` 13 | 14 | # Message PO generation 15 | 16 | ```bash 17 | locales=(id da de en_GB en_US en_ES fr hr it lt hu nl no pl pt_BR ro fi sv_SE vi tr cs el bg ru uk hi th zh_CN ja ko zh_TW) 18 | pot=translations/dpygt.pot 19 | po=translations/locales/%s/LC_MESSAGES/dpygt.po 20 | 21 | for locale in ${locales[@]}; do 22 | mkdir -p $(dirname $(printf $po $locale)) 23 | if [ -f $(printf $po $locale) ]; then 24 | msgmerge --update --backup=none --no-fuzzy-matching --no-wrap --sort-output --force-po $(printf $po $locale) $pot 25 | else 26 | msginit --no-translator --locale=$locale --input=$pot --output-file=$(printf $po $locale) 27 | fi 28 | done 29 | ``` 30 | 31 | # Adding automatic translations 32 | 33 | ```bash 34 | for locale in ${locales[@]}; do 35 | echo $(printf $po $locale) 36 | python -m translator $(printf $po $locale) # uses the custom translator.py script written for this project 37 | done 38 | ``` 39 | 40 | # Message MO generation 41 | 42 | ```bash 43 | find . -iname "*.po" | xargs -I {} sh -c 'msgfmt -o $(dirname {})/$(basename {} .po).mo {}' 44 | ``` 45 | 46 | # Usage 47 | 48 | As of now, localizations are automated, they are generated smartly whenever a diff is detected in the source code. Just make sure `translations.sh` and `translator.py` are in the same directory root directory as your bot. 49 | -------------------------------------------------------------------------------- /examples/smart-sync/__init__.py: -------------------------------------------------------------------------------- 1 | from .main import CustomBot 2 | 3 | __all__ = ("CustomBot",) 4 | -------------------------------------------------------------------------------- /examples/smart-sync/cogs/cog.py: -------------------------------------------------------------------------------- 1 | from __future__ import annotations 2 | 3 | import datetime 4 | import typing 5 | from gettext import gettext as _ 6 | 7 | import discord 8 | from discord import app_commands 9 | from discord.ext import commands 10 | 11 | if typing.TYPE_CHECKING: 12 | from .. import CustomBot 13 | 14 | 15 | def is_owner(): 16 | async def predicate(inter: discord.Interaction) -> bool: 17 | return inter.user.id == 1234567890 18 | 19 | return app_commands.check(predicate) 20 | 21 | 22 | class DurationConverter(app_commands.Transformer): 23 | async def transform(self, inter: discord.Interaction, argument: str) -> datetime.timedelta: 24 | multipliers = { 25 | "s": 1, # seconds 26 | "m": 60, # minutes 27 | "h": 3600, # hours 28 | "d": 86400, # days 29 | "w": 604800, # weeks 30 | } 31 | try: 32 | amount = int(argument[:-1]) 33 | unit = argument[-1] 34 | seconds = amount * multipliers[unit] 35 | delta = datetime.timedelta(seconds=seconds) 36 | return delta 37 | except (ValueError, KeyError): 38 | raise commands.BadArgument("Invalid duration provided.") 39 | 40 | 41 | class General(commands.Cog): 42 | group = app_commands.Group(name=_("utility"), description=_("Utility commands")) 43 | 44 | def __init__(self, bot: CustomBot) -> None: 45 | self.bot = bot 46 | 47 | @group.command(name=_("duration"), description=_("Convert a duration to a timedelta")) 48 | @is_owner() 49 | async def duration( 50 | self, inter: discord.Interaction, duration: app_commands.Transform[datetime.timedelta, DurationConverter] 51 | ) -> None: 52 | await inter.response.send_message(f"Duration: {duration}") 53 | 54 | @group.command(name=_("ping"), description=_("Get the bot's latency")) 55 | async def ping(self, inter: discord.Interaction) -> None: 56 | await inter.response.send_message(f"Pong! {round(self.bot.latency * 1000)}ms") 57 | 58 | @app_commands.command(name=_("echo"), description=_("Echo a message"), extras={"params": (_("message"),)}) 59 | async def echo(self, inter: discord.Interaction, message: str) -> None: 60 | await inter.response.send_message(message) 61 | 62 | @app_commands.command(name=_("info"), description=_("Get info about a user"), extras={"params": (_("user"),)}) 63 | async def info(self, inter: discord.Interaction, user: discord.User) -> None: 64 | await inter.response.send_message(f"User: {user}") 65 | 66 | @commands.hybrid_command(name=_("tell"), description=_("Tell a message"), extras={"params": (_("message"),)}) 67 | @app_commands.choices( 68 | message=[ 69 | app_commands.Choice(name=_("hello"), value="Hello!"), 70 | app_commands.Choice(name=_("goodbye"), value="Goodbye!"), 71 | app_commands.Choice(name=_("how are you?"), value="I'm doing well, thanks!"), 72 | ] 73 | ) 74 | async def say(self, ctx: commands.Context[CustomBot], message: str) -> None: 75 | await ctx.send(message) 76 | 77 | 78 | async def setup(bot: CustomBot) -> None: 79 | await bot.add_cog(General(bot)) 80 | -------------------------------------------------------------------------------- /examples/smart-sync/cogs/groupcog.py: -------------------------------------------------------------------------------- 1 | from __future__ import annotations 2 | 3 | import typing 4 | from gettext import gettext as _ 5 | 6 | import discord 7 | from discord import app_commands 8 | from discord.ext import commands 9 | 10 | if typing.TYPE_CHECKING: 11 | from .. import CustomBot 12 | 13 | 14 | class MathGroup(commands.GroupCog, name=_("math"), description=_("Math Commands")): 15 | group = app_commands.Group(name=_("functions"), description=_("Math Functions")) 16 | 17 | def __init__(self, bot: CustomBot) -> None: 18 | self.bot = bot 19 | super().__init__() 20 | 21 | @group.command(name=_("power"), description=_("Raise a number to a power"), extras={"params": (_("a"), _("b"))}) 22 | async def power(self, inter: discord.Interaction, a: int, b: int) -> None: 23 | await inter.response.send_message(f"{a} ^ {b} = {a ** b}") 24 | 25 | @group.command(name=_("sqrt"), description=_("Get the square root of a number"), extras={"params": (_("a"),)}) 26 | async def sqrt(self, inter: discord.Interaction, a: int) -> None: 27 | await inter.response.send_message(f"sqrt({a}) = {a ** 0.5}") 28 | 29 | @app_commands.command(name=_("add"), description=_("Add two numbers"), extras={"params": (_("a"), _("b"))}) 30 | async def add(self, inter: discord.Interaction, a: int, b: int) -> None: 31 | await inter.response.send_message(f"{a} + {b} = {a + b}") 32 | 33 | @app_commands.command( 34 | name=_("subtract"), description=_("Subtract two numbers"), extras={"params": (_("a"), _("b"))} 35 | ) 36 | async def subtract(self, inter: discord.Interaction, a: int, b: int) -> None: 37 | await inter.response.send_message(f"{a} - {b} = {a - b}") 38 | 39 | @app_commands.command( 40 | name=_("multiply"), description=_("Multiply two numbers"), extras={"params": (_("a"), _("b"))} 41 | ) 42 | async def multiply(self, inter: discord.Interaction, a: int, b: int) -> None: 43 | await inter.response.send_message(f"{a} * {b} = {a * b}") 44 | 45 | @app_commands.command(name=_("divide"), description=_("Divide two numbers"), extras={"params": (_("a"), _("b"))}) 46 | async def divide(self, inter: discord.Interaction, a: int, b: int) -> None: 47 | await inter.response.send_message(f"{a} / {b} = {a / b}") 48 | 49 | 50 | async def setup(bot: CustomBot) -> None: 51 | await bot.add_cog(MathGroup(bot)) 52 | -------------------------------------------------------------------------------- /examples/smart-sync/translations.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | translation_dir=translations 4 | domain=dpygt 5 | 6 | mkdir -p $translation_dir/locales 7 | 8 | echo "Generating $domain.pot" 9 | find . -iname "*.py" | xargs xgettext --from-code=UTF-8 --language=Python -o $translation_dir/$domain.pot 10 | sed -i 's/CHARSET/UTF-8/' $translation_dir/$domain.pot 11 | 12 | locales=(id da de en_GB en_US es_ES fr hr it lt hu nl no pl pt_BR ro fi sv_SE vi tr cs el bg ru uk hi th zh_CN ja ko zh_TW) 13 | pot=$translation_dir/$domain.pot 14 | po=$translation_dir/locales/%s/LC_MESSAGES/$domain.po 15 | 16 | echo "Generating .po files" 17 | for locale in ${locales[@]}; do 18 | mkdir -p $(dirname $(printf $po $locale)) 19 | if [ -f $(printf $po $locale) ]; then 20 | msgmerge --update --backup=none --no-fuzzy-matching --no-wrap --sort-output --force-po $(printf $po $locale) $pot 21 | else 22 | msginit --no-translator --locale=$locale --input=$pot --output-file=$(printf $po $locale) 23 | fi 24 | done 25 | 26 | echo "Translating .po files" 27 | for locale in ${locales[@]}; do 28 | echo $(printf $po $locale) 29 | python -m translator $(printf $po $locale) 30 | done 31 | 32 | echo "Compiling .mo files" 33 | find . -iname "*.po" | xargs -I {} sh -c 'msgfmt -o $(dirname {})/$(basename {} .po).mo {}' 34 | -------------------------------------------------------------------------------- /examples/smart-sync/translations/locales/bg/LC_MESSAGES/dpygt.po: -------------------------------------------------------------------------------- 1 | # Bulgarian translations for PACKAGE package. 2 | # Copyright (C) 2023 THE PACKAGE'S COPYRIGHT HOLDER 3 | # This file is distributed under the same license as the PACKAGE package. 4 | # Automatically generated, 2023. 5 | # 6 | msgid "" 7 | msgstr "" 8 | "Project-Id-Version: PACKAGE VERSION\n" 9 | "Report-Msgid-Bugs-To: \n" 10 | "POT-Creation-Date: 2023-12-09 20:43+0530\n" 11 | "PO-Revision-Date: 2023-12-09 18:06+0530\n" 12 | "Last-Translator: Automatically generated\n" 13 | "Language-Team: none\n" 14 | "Language: bg\n" 15 | "MIME-Version: 1.0\n" 16 | "Content-Type: text/plain; charset=UTF-8\n" 17 | "Content-Transfer-Encoding: 8bit\n" 18 | "Plural-Forms: nplurals=2; plural=(n != 1);\n" 19 | 20 | #: cogs/groupcog.py:29 21 | msgid "Add two numbers" 22 | msgstr "Добавете две числа" 23 | 24 | #: cogs/cog.py:47 25 | msgid "Convert a duration to a timedelta" 26 | msgstr "Преобразувайте продължителност във времеделта" 27 | 28 | #: cogs/groupcog.py:45 29 | msgid "Divide two numbers" 30 | msgstr "Разделете две числа" 31 | 32 | #: cogs/cog.py:58 33 | msgid "Echo a message" 34 | msgstr "Ехото на съобщение" 35 | 36 | #: cogs/cog.py:62 37 | msgid "Get info about a user" 38 | msgstr "Вземете информация за потребител" 39 | 40 | #: cogs/cog.py:54 41 | msgid "Get the bot's latency" 42 | msgstr "Вземете латентността на бота" 43 | 44 | #: cogs/groupcog.py:25 45 | msgid "Get the square root of a number" 46 | msgstr "Вземете корен квадратен от число" 47 | 48 | #: cogs/groupcog.py:14 49 | msgid "Math Commands" 50 | msgstr "Математически команди" 51 | 52 | #: cogs/groupcog.py:15 53 | msgid "Math Functions" 54 | msgstr "Математически функции" 55 | 56 | #: cogs/groupcog.py:40 57 | msgid "Multiply two numbers" 58 | msgstr "Умножете две числа" 59 | 60 | #: cogs/groupcog.py:21 61 | msgid "Raise a number to a power" 62 | msgstr "Повдигнете число на степен" 63 | 64 | #: cogs/groupcog.py:34 65 | msgid "Subtract two numbers" 66 | msgstr "Извадете две числа" 67 | 68 | #: cogs/cog.py:66 69 | msgid "Tell a message" 70 | msgstr "Кажете съобщение" 71 | 72 | #: cogs/cog.py:42 73 | msgid "Utility commands" 74 | msgstr "Помощни команди" 75 | 76 | #: cogs/groupcog.py:21 cogs/groupcog.py:25 cogs/groupcog.py:29 77 | #: cogs/groupcog.py:34 cogs/groupcog.py:40 cogs/groupcog.py:45 78 | msgid "a" 79 | msgstr "а" 80 | 81 | #: cogs/groupcog.py:29 82 | msgid "add" 83 | msgstr "добавете" 84 | 85 | #: cogs/groupcog.py:21 cogs/groupcog.py:29 cogs/groupcog.py:34 86 | #: cogs/groupcog.py:40 cogs/groupcog.py:45 87 | msgid "b" 88 | msgstr "b" 89 | 90 | #: cogs/groupcog.py:45 91 | msgid "divide" 92 | msgstr "разделям" 93 | 94 | #: cogs/cog.py:47 95 | msgid "duration" 96 | msgstr "продължителност" 97 | 98 | #: cogs/cog.py:58 99 | msgid "echo" 100 | msgstr "ехо" 101 | 102 | #: cogs/groupcog.py:15 103 | msgid "functions" 104 | msgstr "функции" 105 | 106 | #: cogs/cog.py:70 107 | msgid "goodbye" 108 | msgstr "довиждане" 109 | 110 | #: cogs/cog.py:69 111 | msgid "hello" 112 | msgstr "здравейте" 113 | 114 | #: cogs/cog.py:71 115 | msgid "how are you?" 116 | msgstr "как си?" 117 | 118 | #: cogs/cog.py:62 119 | msgid "info" 120 | msgstr "инфо" 121 | 122 | #: cogs/groupcog.py:14 123 | msgid "math" 124 | msgstr "математика" 125 | 126 | #: cogs/cog.py:58 cogs/cog.py:66 127 | msgid "message" 128 | msgstr "съобщение" 129 | 130 | #: cogs/groupcog.py:40 131 | msgid "multiply" 132 | msgstr "умножават_се" 133 | 134 | #: cogs/cog.py:54 135 | msgid "ping" 136 | msgstr "пинг" 137 | 138 | #: cogs/groupcog.py:21 139 | msgid "power" 140 | msgstr "мощност" 141 | 142 | #: cogs/groupcog.py:25 143 | msgid "sqrt" 144 | msgstr "sqrt" 145 | 146 | #: cogs/groupcog.py:34 147 | msgid "subtract" 148 | msgstr "изваждам" 149 | 150 | #: cogs/cog.py:66 151 | msgid "tell" 152 | msgstr "казвам" 153 | 154 | #: cogs/cog.py:62 155 | msgid "user" 156 | msgstr "потребител" 157 | 158 | #: main.py:122 159 | msgid "user_ping" 160 | msgstr "user_ping" 161 | 162 | #: cogs/cog.py:42 163 | msgid "utility" 164 | msgstr "полезност" 165 | -------------------------------------------------------------------------------- /examples/smart-sync/translations/locales/cs/LC_MESSAGES/dpygt.po: -------------------------------------------------------------------------------- 1 | # Czech translations for PACKAGE package. 2 | # Copyright (C) 2023 THE PACKAGE'S COPYRIGHT HOLDER 3 | # This file is distributed under the same license as the PACKAGE package. 4 | # Automatically generated, 2023. 5 | # 6 | msgid "" 7 | msgstr "" 8 | "Project-Id-Version: PACKAGE VERSION\n" 9 | "Report-Msgid-Bugs-To: \n" 10 | "POT-Creation-Date: 2023-12-09 20:43+0530\n" 11 | "PO-Revision-Date: 2023-12-09 18:06+0530\n" 12 | "Last-Translator: Automatically generated\n" 13 | "Language-Team: none\n" 14 | "Language: cs\n" 15 | "MIME-Version: 1.0\n" 16 | "Content-Type: text/plain; charset=UTF-8\n" 17 | "Content-Transfer-Encoding: 8bit\n" 18 | "Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" 19 | 20 | #: cogs/groupcog.py:29 21 | msgid "Add two numbers" 22 | msgstr "Přidejte dvě čísla" 23 | 24 | #: cogs/cog.py:47 25 | msgid "Convert a duration to a timedelta" 26 | msgstr "Převeďte dobu trvání na časovou deltu" 27 | 28 | #: cogs/groupcog.py:45 29 | msgid "Divide two numbers" 30 | msgstr "Rozdělte dvě čísla" 31 | 32 | #: cogs/cog.py:58 33 | msgid "Echo a message" 34 | msgstr "Ozvěte zprávu" 35 | 36 | #: cogs/cog.py:62 37 | msgid "Get info about a user" 38 | msgstr "Získejte informace o uživateli" 39 | 40 | #: cogs/cog.py:54 41 | msgid "Get the bot's latency" 42 | msgstr "Získejte latenci robota" 43 | 44 | #: cogs/groupcog.py:25 45 | msgid "Get the square root of a number" 46 | msgstr "Získejte druhou odmocninu čísla" 47 | 48 | #: cogs/groupcog.py:14 49 | msgid "Math Commands" 50 | msgstr "Matematické příkazy" 51 | 52 | #: cogs/groupcog.py:15 53 | msgid "Math Functions" 54 | msgstr "Matematické funkce" 55 | 56 | #: cogs/groupcog.py:40 57 | msgid "Multiply two numbers" 58 | msgstr "Vynásobte dvě čísla" 59 | 60 | #: cogs/groupcog.py:21 61 | msgid "Raise a number to a power" 62 | msgstr "Zvyšte číslo na mocninu" 63 | 64 | #: cogs/groupcog.py:34 65 | msgid "Subtract two numbers" 66 | msgstr "Odečtěte dvě čísla" 67 | 68 | #: cogs/cog.py:66 69 | msgid "Tell a message" 70 | msgstr "Řekněte zprávu" 71 | 72 | #: cogs/cog.py:42 73 | msgid "Utility commands" 74 | msgstr "Obslužné příkazy" 75 | 76 | #: cogs/groupcog.py:21 cogs/groupcog.py:25 cogs/groupcog.py:29 77 | #: cogs/groupcog.py:34 cogs/groupcog.py:40 cogs/groupcog.py:45 78 | msgid "a" 79 | msgstr "a" 80 | 81 | #: cogs/groupcog.py:29 82 | msgid "add" 83 | msgstr "přidat" 84 | 85 | #: cogs/groupcog.py:21 cogs/groupcog.py:29 cogs/groupcog.py:34 86 | #: cogs/groupcog.py:40 cogs/groupcog.py:45 87 | msgid "b" 88 | msgstr "b" 89 | 90 | #: cogs/groupcog.py:45 91 | msgid "divide" 92 | msgstr "rozdělit" 93 | 94 | #: cogs/cog.py:47 95 | msgid "duration" 96 | msgstr "doba_trvání" 97 | 98 | #: cogs/cog.py:58 99 | msgid "echo" 100 | msgstr "echo" 101 | 102 | #: cogs/groupcog.py:15 103 | msgid "functions" 104 | msgstr "funkcí" 105 | 106 | #: cogs/cog.py:70 107 | msgid "goodbye" 108 | msgstr "ahoj" 109 | 110 | #: cogs/cog.py:69 111 | msgid "hello" 112 | msgstr "ahoj" 113 | 114 | #: cogs/cog.py:71 115 | msgid "how are you?" 116 | msgstr "jak se máte?" 117 | 118 | #: cogs/cog.py:62 119 | msgid "info" 120 | msgstr "info" 121 | 122 | #: cogs/groupcog.py:14 123 | msgid "math" 124 | msgstr "matematika" 125 | 126 | #: cogs/cog.py:58 cogs/cog.py:66 127 | msgid "message" 128 | msgstr "zpráva" 129 | 130 | #: cogs/groupcog.py:40 131 | msgid "multiply" 132 | msgstr "násobit" 133 | 134 | #: cogs/cog.py:54 135 | msgid "ping" 136 | msgstr "ping" 137 | 138 | #: cogs/groupcog.py:21 139 | msgid "power" 140 | msgstr "napájení" 141 | 142 | #: cogs/groupcog.py:25 143 | msgid "sqrt" 144 | msgstr "sqrt" 145 | 146 | #: cogs/groupcog.py:34 147 | msgid "subtract" 148 | msgstr "odčítat" 149 | 150 | #: cogs/cog.py:66 151 | msgid "tell" 152 | msgstr "sdělit" 153 | 154 | #: cogs/cog.py:62 155 | msgid "user" 156 | msgstr "uživatel" 157 | 158 | #: main.py:122 159 | msgid "user_ping" 160 | msgstr "user_ping" 161 | 162 | #: cogs/cog.py:42 163 | msgid "utility" 164 | msgstr "utility" 165 | -------------------------------------------------------------------------------- /examples/smart-sync/translations/locales/da/LC_MESSAGES/dpygt.po: -------------------------------------------------------------------------------- 1 | # Danish translations for PACKAGE package. 2 | # Copyright (C) 2023 THE PACKAGE'S COPYRIGHT HOLDER 3 | # This file is distributed under the same license as the PACKAGE package. 4 | # Automatically generated, 2023. 5 | # 6 | msgid "" 7 | msgstr "" 8 | "Project-Id-Version: PACKAGE VERSION\n" 9 | "Report-Msgid-Bugs-To: \n" 10 | "POT-Creation-Date: 2023-12-09 20:43+0530\n" 11 | "PO-Revision-Date: 2023-12-09 18:06+0530\n" 12 | "Last-Translator: Automatically generated\n" 13 | "Language-Team: none\n" 14 | "Language: da\n" 15 | "MIME-Version: 1.0\n" 16 | "Content-Type: text/plain; charset=UTF-8\n" 17 | "Content-Transfer-Encoding: 8bit\n" 18 | "Plural-Forms: nplurals=2; plural=(n != 1);\n" 19 | 20 | #: cogs/groupcog.py:29 21 | msgid "Add two numbers" 22 | msgstr "Tilføj to tal" 23 | 24 | #: cogs/cog.py:47 25 | msgid "Convert a duration to a timedelta" 26 | msgstr "Konverter en varighed til et tidsdelta" 27 | 28 | #: cogs/groupcog.py:45 29 | msgid "Divide two numbers" 30 | msgstr "Del to tal" 31 | 32 | #: cogs/cog.py:58 33 | msgid "Echo a message" 34 | msgstr "Ekko en besked" 35 | 36 | #: cogs/cog.py:62 37 | msgid "Get info about a user" 38 | msgstr "Få information om en bruger" 39 | 40 | #: cogs/cog.py:54 41 | msgid "Get the bot's latency" 42 | msgstr "Få bots latency" 43 | 44 | #: cogs/groupcog.py:25 45 | msgid "Get the square root of a number" 46 | msgstr "Få kvadratroden af et tal" 47 | 48 | #: cogs/groupcog.py:14 49 | msgid "Math Commands" 50 | msgstr "Matematiske kommandoer" 51 | 52 | #: cogs/groupcog.py:15 53 | msgid "Math Functions" 54 | msgstr "Matematiske funktioner" 55 | 56 | #: cogs/groupcog.py:40 57 | msgid "Multiply two numbers" 58 | msgstr "Gang to tal" 59 | 60 | #: cogs/groupcog.py:21 61 | msgid "Raise a number to a power" 62 | msgstr "Hæv et tal til en potens" 63 | 64 | #: cogs/groupcog.py:34 65 | msgid "Subtract two numbers" 66 | msgstr "Træk to tal fra" 67 | 68 | #: cogs/cog.py:66 69 | msgid "Tell a message" 70 | msgstr "Fortæl en besked" 71 | 72 | #: cogs/cog.py:42 73 | msgid "Utility commands" 74 | msgstr "Utility kommandoer" 75 | 76 | #: cogs/groupcog.py:21 cogs/groupcog.py:25 cogs/groupcog.py:29 77 | #: cogs/groupcog.py:34 cogs/groupcog.py:40 cogs/groupcog.py:45 78 | msgid "a" 79 | msgstr "en" 80 | 81 | #: cogs/groupcog.py:29 82 | msgid "add" 83 | msgstr "tilføje" 84 | 85 | #: cogs/groupcog.py:21 cogs/groupcog.py:29 cogs/groupcog.py:34 86 | #: cogs/groupcog.py:40 cogs/groupcog.py:45 87 | msgid "b" 88 | msgstr "b" 89 | 90 | #: cogs/groupcog.py:45 91 | msgid "divide" 92 | msgstr "dele" 93 | 94 | #: cogs/cog.py:47 95 | msgid "duration" 96 | msgstr "varighed" 97 | 98 | #: cogs/cog.py:58 99 | msgid "echo" 100 | msgstr "ekko" 101 | 102 | #: cogs/groupcog.py:15 103 | msgid "functions" 104 | msgstr "funktioner" 105 | 106 | #: cogs/cog.py:70 107 | msgid "goodbye" 108 | msgstr "farvel" 109 | 110 | #: cogs/cog.py:69 111 | msgid "hello" 112 | msgstr "hej" 113 | 114 | #: cogs/cog.py:71 115 | msgid "how are you?" 116 | msgstr "hvordan har du det?" 117 | 118 | #: cogs/cog.py:62 119 | msgid "info" 120 | msgstr "info" 121 | 122 | #: cogs/groupcog.py:14 123 | msgid "math" 124 | msgstr "matematik" 125 | 126 | #: cogs/cog.py:58 cogs/cog.py:66 127 | msgid "message" 128 | msgstr "besked" 129 | 130 | #: cogs/groupcog.py:40 131 | msgid "multiply" 132 | msgstr "formere_sig" 133 | 134 | #: cogs/cog.py:54 135 | msgid "ping" 136 | msgstr "ping" 137 | 138 | #: cogs/groupcog.py:21 139 | msgid "power" 140 | msgstr "strøm" 141 | 142 | #: cogs/groupcog.py:25 143 | msgid "sqrt" 144 | msgstr "sqrt" 145 | 146 | #: cogs/groupcog.py:34 147 | msgid "subtract" 148 | msgstr "trække_fra" 149 | 150 | #: cogs/cog.py:66 151 | msgid "tell" 152 | msgstr "fortælle" 153 | 154 | #: cogs/cog.py:62 155 | msgid "user" 156 | msgstr "bruger" 157 | 158 | #: main.py:122 159 | msgid "user_ping" 160 | msgstr "bruger_ping" 161 | 162 | #: cogs/cog.py:42 163 | msgid "utility" 164 | msgstr "nytte" 165 | -------------------------------------------------------------------------------- /examples/smart-sync/translations/locales/en_GB/LC_MESSAGES/dpygt.po: -------------------------------------------------------------------------------- 1 | # English translations for PACKAGE package. 2 | # Copyright (C) 2023 THE PACKAGE'S COPYRIGHT HOLDER 3 | # This file is distributed under the same license as the PACKAGE package. 4 | # Automatically generated, 2023. 5 | # 6 | msgid "" 7 | msgstr "" 8 | "Project-Id-Version: PACKAGE VERSION\n" 9 | "Report-Msgid-Bugs-To: \n" 10 | "POT-Creation-Date: 2023-12-09 20:43+0530\n" 11 | "PO-Revision-Date: 2023-12-09 18:06+0530\n" 12 | "Last-Translator: Automatically generated\n" 13 | "Language-Team: none\n" 14 | "Language: en_GB\n" 15 | "MIME-Version: 1.0\n" 16 | "Content-Type: text/plain; charset=UTF-8\n" 17 | "Content-Transfer-Encoding: 8bit\n" 18 | "Plural-Forms: nplurals=2; plural=(n != 1);\n" 19 | 20 | #: cogs/groupcog.py:29 21 | msgid "Add two numbers" 22 | msgstr "Add two numbers" 23 | 24 | #: cogs/cog.py:47 25 | msgid "Convert a duration to a timedelta" 26 | msgstr "Convert a duration to a timedelta" 27 | 28 | #: cogs/groupcog.py:45 29 | msgid "Divide two numbers" 30 | msgstr "Divide two numbers" 31 | 32 | #: cogs/cog.py:58 33 | msgid "Echo a message" 34 | msgstr "Echo a message" 35 | 36 | #: cogs/cog.py:62 37 | msgid "Get info about a user" 38 | msgstr "Get info about a user" 39 | 40 | #: cogs/cog.py:54 41 | msgid "Get the bot's latency" 42 | msgstr "Get the bot's latency" 43 | 44 | #: cogs/groupcog.py:25 45 | msgid "Get the square root of a number" 46 | msgstr "Get the square root of a number" 47 | 48 | #: cogs/groupcog.py:14 49 | msgid "Math Commands" 50 | msgstr "Math Commands" 51 | 52 | #: cogs/groupcog.py:15 53 | msgid "Math Functions" 54 | msgstr "Math Functions" 55 | 56 | #: cogs/groupcog.py:40 57 | msgid "Multiply two numbers" 58 | msgstr "Multiply two numbers" 59 | 60 | #: cogs/groupcog.py:21 61 | msgid "Raise a number to a power" 62 | msgstr "Raise a number to a power" 63 | 64 | #: cogs/groupcog.py:34 65 | msgid "Subtract two numbers" 66 | msgstr "Subtract two numbers" 67 | 68 | #: cogs/cog.py:66 69 | msgid "Tell a message" 70 | msgstr "Tell a message" 71 | 72 | #: cogs/cog.py:42 73 | msgid "Utility commands" 74 | msgstr "Utility commands" 75 | 76 | #: cogs/groupcog.py:21 cogs/groupcog.py:25 cogs/groupcog.py:29 77 | #: cogs/groupcog.py:34 cogs/groupcog.py:40 cogs/groupcog.py:45 78 | msgid "a" 79 | msgstr "a" 80 | 81 | #: cogs/groupcog.py:29 82 | msgid "add" 83 | msgstr "add" 84 | 85 | #: cogs/groupcog.py:21 cogs/groupcog.py:29 cogs/groupcog.py:34 86 | #: cogs/groupcog.py:40 cogs/groupcog.py:45 87 | msgid "b" 88 | msgstr "b" 89 | 90 | #: cogs/groupcog.py:45 91 | msgid "divide" 92 | msgstr "divide" 93 | 94 | #: cogs/cog.py:47 95 | msgid "duration" 96 | msgstr "duration" 97 | 98 | #: cogs/cog.py:58 99 | msgid "echo" 100 | msgstr "echo" 101 | 102 | #: cogs/groupcog.py:15 103 | msgid "functions" 104 | msgstr "functions" 105 | 106 | #: cogs/cog.py:70 107 | msgid "goodbye" 108 | msgstr "goodbye" 109 | 110 | #: cogs/cog.py:69 111 | msgid "hello" 112 | msgstr "hello" 113 | 114 | #: cogs/cog.py:71 115 | msgid "how are you?" 116 | msgstr "how are you?" 117 | 118 | #: cogs/cog.py:62 119 | msgid "info" 120 | msgstr "info" 121 | 122 | #: cogs/groupcog.py:14 123 | msgid "math" 124 | msgstr "math" 125 | 126 | #: cogs/cog.py:58 cogs/cog.py:66 127 | msgid "message" 128 | msgstr "message" 129 | 130 | #: cogs/groupcog.py:40 131 | msgid "multiply" 132 | msgstr "multiply" 133 | 134 | #: cogs/cog.py:54 135 | msgid "ping" 136 | msgstr "ping" 137 | 138 | #: cogs/groupcog.py:21 139 | msgid "power" 140 | msgstr "power" 141 | 142 | #: cogs/groupcog.py:25 143 | msgid "sqrt" 144 | msgstr "sqrt" 145 | 146 | #: cogs/groupcog.py:34 147 | msgid "subtract" 148 | msgstr "subtract" 149 | 150 | #: cogs/cog.py:66 151 | msgid "tell" 152 | msgstr "tell" 153 | 154 | #: cogs/cog.py:62 155 | msgid "user" 156 | msgstr "user" 157 | 158 | #: main.py:122 159 | msgid "user_ping" 160 | msgstr "user_ping" 161 | 162 | #: cogs/cog.py:42 163 | msgid "utility" 164 | msgstr "utility" 165 | -------------------------------------------------------------------------------- /examples/smart-sync/translations/locales/en_US/LC_MESSAGES/dpygt.po: -------------------------------------------------------------------------------- 1 | # English translations for PACKAGE package. 2 | # Copyright (C) 2023 THE PACKAGE'S COPYRIGHT HOLDER 3 | # This file is distributed under the same license as the PACKAGE package. 4 | # Automatically generated, 2023. 5 | # 6 | msgid "" 7 | msgstr "" 8 | "Project-Id-Version: PACKAGE VERSION\n" 9 | "Report-Msgid-Bugs-To: \n" 10 | "POT-Creation-Date: 2023-12-09 20:43+0530\n" 11 | "PO-Revision-Date: 2023-12-09 18:06+0530\n" 12 | "Last-Translator: Automatically generated\n" 13 | "Language-Team: none\n" 14 | "Language: en_US\n" 15 | "MIME-Version: 1.0\n" 16 | "Content-Type: text/plain; charset=UTF-8\n" 17 | "Content-Transfer-Encoding: 8bit\n" 18 | "Plural-Forms: nplurals=2; plural=(n != 1);\n" 19 | 20 | #: cogs/groupcog.py:29 21 | msgid "Add two numbers" 22 | msgstr "Add two numbers" 23 | 24 | #: cogs/cog.py:47 25 | msgid "Convert a duration to a timedelta" 26 | msgstr "Convert a duration to a timedelta" 27 | 28 | #: cogs/groupcog.py:45 29 | msgid "Divide two numbers" 30 | msgstr "Divide two numbers" 31 | 32 | #: cogs/cog.py:58 33 | msgid "Echo a message" 34 | msgstr "Echo a message" 35 | 36 | #: cogs/cog.py:62 37 | msgid "Get info about a user" 38 | msgstr "Get info about a user" 39 | 40 | #: cogs/cog.py:54 41 | msgid "Get the bot's latency" 42 | msgstr "Get the bot's latency" 43 | 44 | #: cogs/groupcog.py:25 45 | msgid "Get the square root of a number" 46 | msgstr "Get the square root of a number" 47 | 48 | #: cogs/groupcog.py:14 49 | msgid "Math Commands" 50 | msgstr "Math Commands" 51 | 52 | #: cogs/groupcog.py:15 53 | msgid "Math Functions" 54 | msgstr "Math Functions" 55 | 56 | #: cogs/groupcog.py:40 57 | msgid "Multiply two numbers" 58 | msgstr "Multiply two numbers" 59 | 60 | #: cogs/groupcog.py:21 61 | msgid "Raise a number to a power" 62 | msgstr "Raise a number to a power" 63 | 64 | #: cogs/groupcog.py:34 65 | msgid "Subtract two numbers" 66 | msgstr "Subtract two numbers" 67 | 68 | #: cogs/cog.py:66 69 | msgid "Tell a message" 70 | msgstr "Tell a message" 71 | 72 | #: cogs/cog.py:42 73 | msgid "Utility commands" 74 | msgstr "Utility commands" 75 | 76 | #: cogs/groupcog.py:21 cogs/groupcog.py:25 cogs/groupcog.py:29 77 | #: cogs/groupcog.py:34 cogs/groupcog.py:40 cogs/groupcog.py:45 78 | msgid "a" 79 | msgstr "a" 80 | 81 | #: cogs/groupcog.py:29 82 | msgid "add" 83 | msgstr "add" 84 | 85 | #: cogs/groupcog.py:21 cogs/groupcog.py:29 cogs/groupcog.py:34 86 | #: cogs/groupcog.py:40 cogs/groupcog.py:45 87 | msgid "b" 88 | msgstr "b" 89 | 90 | #: cogs/groupcog.py:45 91 | msgid "divide" 92 | msgstr "divide" 93 | 94 | #: cogs/cog.py:47 95 | msgid "duration" 96 | msgstr "duration" 97 | 98 | #: cogs/cog.py:58 99 | msgid "echo" 100 | msgstr "echo" 101 | 102 | #: cogs/groupcog.py:15 103 | msgid "functions" 104 | msgstr "functions" 105 | 106 | #: cogs/cog.py:70 107 | msgid "goodbye" 108 | msgstr "goodbye" 109 | 110 | #: cogs/cog.py:69 111 | msgid "hello" 112 | msgstr "hello" 113 | 114 | #: cogs/cog.py:71 115 | msgid "how are you?" 116 | msgstr "how are you?" 117 | 118 | #: cogs/cog.py:62 119 | msgid "info" 120 | msgstr "info" 121 | 122 | #: cogs/groupcog.py:14 123 | msgid "math" 124 | msgstr "math" 125 | 126 | #: cogs/cog.py:58 cogs/cog.py:66 127 | msgid "message" 128 | msgstr "message" 129 | 130 | #: cogs/groupcog.py:40 131 | msgid "multiply" 132 | msgstr "multiply" 133 | 134 | #: cogs/cog.py:54 135 | msgid "ping" 136 | msgstr "ping" 137 | 138 | #: cogs/groupcog.py:21 139 | msgid "power" 140 | msgstr "power" 141 | 142 | #: cogs/groupcog.py:25 143 | msgid "sqrt" 144 | msgstr "sqrt" 145 | 146 | #: cogs/groupcog.py:34 147 | msgid "subtract" 148 | msgstr "subtract" 149 | 150 | #: cogs/cog.py:66 151 | msgid "tell" 152 | msgstr "tell" 153 | 154 | #: cogs/cog.py:62 155 | msgid "user" 156 | msgstr "user" 157 | 158 | #: main.py:122 159 | msgid "user_ping" 160 | msgstr "user_ping" 161 | 162 | #: cogs/cog.py:42 163 | msgid "utility" 164 | msgstr "utility" 165 | -------------------------------------------------------------------------------- /examples/smart-sync/translations/locales/fi/LC_MESSAGES/dpygt.po: -------------------------------------------------------------------------------- 1 | # Finnish translations for PACKAGE package. 2 | # Copyright (C) 2023 THE PACKAGE'S COPYRIGHT HOLDER 3 | # This file is distributed under the same license as the PACKAGE package. 4 | # Automatically generated, 2023. 5 | # 6 | msgid "" 7 | msgstr "" 8 | "Project-Id-Version: PACKAGE VERSION\n" 9 | "Report-Msgid-Bugs-To: \n" 10 | "POT-Creation-Date: 2023-12-09 20:43+0530\n" 11 | "PO-Revision-Date: 2023-12-09 18:06+0530\n" 12 | "Last-Translator: Automatically generated\n" 13 | "Language-Team: none\n" 14 | "Language: fi\n" 15 | "MIME-Version: 1.0\n" 16 | "Content-Type: text/plain; charset=UTF-8\n" 17 | "Content-Transfer-Encoding: 8bit\n" 18 | "Plural-Forms: nplurals=2; plural=(n != 1);\n" 19 | 20 | #: cogs/groupcog.py:29 21 | msgid "Add two numbers" 22 | msgstr "Lisää kaksi numeroa" 23 | 24 | #: cogs/cog.py:47 25 | msgid "Convert a duration to a timedelta" 26 | msgstr "Muunna kesto aikadeltaksi" 27 | 28 | #: cogs/groupcog.py:45 29 | msgid "Divide two numbers" 30 | msgstr "Jaa kaksi numeroa" 31 | 32 | #: cogs/cog.py:58 33 | msgid "Echo a message" 34 | msgstr "Toista viesti" 35 | 36 | #: cogs/cog.py:62 37 | msgid "Get info about a user" 38 | msgstr "Hanki tietoja käyttäjästä" 39 | 40 | #: cogs/cog.py:54 41 | msgid "Get the bot's latency" 42 | msgstr "Ota botin latenssi" 43 | 44 | #: cogs/groupcog.py:25 45 | msgid "Get the square root of a number" 46 | msgstr "Hanki luvun neliöjuuri" 47 | 48 | #: cogs/groupcog.py:14 49 | msgid "Math Commands" 50 | msgstr "Matemaattiset komennot" 51 | 52 | #: cogs/groupcog.py:15 53 | msgid "Math Functions" 54 | msgstr "Matemaattiset funktiot" 55 | 56 | #: cogs/groupcog.py:40 57 | msgid "Multiply two numbers" 58 | msgstr "Kerro kaksi numeroa" 59 | 60 | #: cogs/groupcog.py:21 61 | msgid "Raise a number to a power" 62 | msgstr "Nosta luku potenssiin" 63 | 64 | #: cogs/groupcog.py:34 65 | msgid "Subtract two numbers" 66 | msgstr "Vähennä kaksi numeroa" 67 | 68 | #: cogs/cog.py:66 69 | msgid "Tell a message" 70 | msgstr "Kerro viesti" 71 | 72 | #: cogs/cog.py:42 73 | msgid "Utility commands" 74 | msgstr "Apuohjelman komennot" 75 | 76 | #: cogs/groupcog.py:21 cogs/groupcog.py:25 cogs/groupcog.py:29 77 | #: cogs/groupcog.py:34 cogs/groupcog.py:40 cogs/groupcog.py:45 78 | msgid "a" 79 | msgstr "a" 80 | 81 | #: cogs/groupcog.py:29 82 | msgid "add" 83 | msgstr "lisätä" 84 | 85 | #: cogs/groupcog.py:21 cogs/groupcog.py:29 cogs/groupcog.py:34 86 | #: cogs/groupcog.py:40 cogs/groupcog.py:45 87 | msgid "b" 88 | msgstr "b" 89 | 90 | #: cogs/groupcog.py:45 91 | msgid "divide" 92 | msgstr "jakaa" 93 | 94 | #: cogs/cog.py:47 95 | msgid "duration" 96 | msgstr "kesto" 97 | 98 | #: cogs/cog.py:58 99 | msgid "echo" 100 | msgstr "kaiku" 101 | 102 | #: cogs/groupcog.py:15 103 | msgid "functions" 104 | msgstr "toimintoja" 105 | 106 | #: cogs/cog.py:70 107 | msgid "goodbye" 108 | msgstr "hyvästi" 109 | 110 | #: cogs/cog.py:69 111 | msgid "hello" 112 | msgstr "hei" 113 | 114 | #: cogs/cog.py:71 115 | msgid "how are you?" 116 | msgstr "mitä kuuluu?" 117 | 118 | #: cogs/cog.py:62 119 | msgid "info" 120 | msgstr "tiedot" 121 | 122 | #: cogs/groupcog.py:14 123 | msgid "math" 124 | msgstr "matematiikka" 125 | 126 | #: cogs/cog.py:58 cogs/cog.py:66 127 | msgid "message" 128 | msgstr "viesti" 129 | 130 | #: cogs/groupcog.py:40 131 | msgid "multiply" 132 | msgstr "moninkertaistaa" 133 | 134 | #: cogs/cog.py:54 135 | msgid "ping" 136 | msgstr "ping" 137 | 138 | #: cogs/groupcog.py:21 139 | msgid "power" 140 | msgstr "tehoa" 141 | 142 | #: cogs/groupcog.py:25 143 | msgid "sqrt" 144 | msgstr "sqrt" 145 | 146 | #: cogs/groupcog.py:34 147 | msgid "subtract" 148 | msgstr "vähentää" 149 | 150 | #: cogs/cog.py:66 151 | msgid "tell" 152 | msgstr "kertoa" 153 | 154 | #: cogs/cog.py:62 155 | msgid "user" 156 | msgstr "käyttäjä" 157 | 158 | #: main.py:122 159 | msgid "user_ping" 160 | msgstr "user_ping" 161 | 162 | #: cogs/cog.py:42 163 | msgid "utility" 164 | msgstr "apuohjelma" 165 | -------------------------------------------------------------------------------- /examples/smart-sync/translations/locales/hi/LC_MESSAGES/dpygt.po: -------------------------------------------------------------------------------- 1 | # Hindi translations for PACKAGE package. 2 | # Copyright (C) 2023 THE PACKAGE'S COPYRIGHT HOLDER 3 | # This file is distributed under the same license as the PACKAGE package. 4 | # Automatically generated, 2023. 5 | # 6 | msgid "" 7 | msgstr "" 8 | "Project-Id-Version: PACKAGE VERSION\n" 9 | "Report-Msgid-Bugs-To: \n" 10 | "POT-Creation-Date: 2023-12-09 20:43+0530\n" 11 | "PO-Revision-Date: 2023-12-09 18:06+0530\n" 12 | "Last-Translator: Automatically generated\n" 13 | "Language-Team: none\n" 14 | "Language: hi\n" 15 | "MIME-Version: 1.0\n" 16 | "Content-Type: text/plain; charset=UTF-8\n" 17 | "Content-Transfer-Encoding: 8bit\n" 18 | 19 | #: cogs/groupcog.py:29 20 | msgid "Add two numbers" 21 | msgstr "द नबर जड" 22 | 23 | #: cogs/cog.py:47 24 | msgid "Convert a duration to a timedelta" 25 | msgstr "कस अवध क टइमडलट म बदल" 26 | 27 | #: cogs/groupcog.py:45 28 | msgid "Divide two numbers" 29 | msgstr "द सखयओ क वभजत कर" 30 | 31 | #: cogs/cog.py:58 32 | msgid "Echo a message" 33 | msgstr "एक सदश परतधवनत कर" 34 | 35 | #: cogs/cog.py:62 36 | msgid "Get info about a user" 37 | msgstr "कस उपयगकरत क बर म जनकर परपत कर" 38 | 39 | #: cogs/cog.py:54 40 | msgid "Get the bot's latency" 41 | msgstr "बॉट की विलंबता प्राप्त करें" 42 | 43 | #: cogs/groupcog.py:25 44 | msgid "Get the square root of a number" 45 | msgstr "कस सखय क वरगमल परपत कर" 46 | 47 | #: cogs/groupcog.py:14 48 | msgid "Math Commands" 49 | msgstr "गणत आदश" 50 | 51 | #: cogs/groupcog.py:15 52 | msgid "Math Functions" 53 | msgstr "गणत क करय" 54 | 55 | #: cogs/groupcog.py:40 56 | msgid "Multiply two numbers" 57 | msgstr "द सखयओ क गण कर" 58 | 59 | #: cogs/groupcog.py:21 60 | msgid "Raise a number to a power" 61 | msgstr "कस सखय क घत तक बढए" 62 | 63 | #: cogs/groupcog.py:34 64 | msgid "Subtract two numbers" 65 | msgstr "द सखयए घटए" 66 | 67 | #: cogs/cog.py:66 68 | msgid "Tell a message" 69 | msgstr "एक सदश बतओ" 70 | 71 | #: cogs/cog.py:42 72 | msgid "Utility commands" 73 | msgstr "उपयगत आदश" 74 | 75 | #: cogs/groupcog.py:21 cogs/groupcog.py:25 cogs/groupcog.py:29 76 | #: cogs/groupcog.py:34 cogs/groupcog.py:40 cogs/groupcog.py:45 77 | msgid "a" 78 | msgstr "ए" 79 | 80 | #: cogs/groupcog.py:29 81 | msgid "add" 82 | msgstr "जडन" 83 | 84 | #: cogs/groupcog.py:21 cogs/groupcog.py:29 cogs/groupcog.py:34 85 | #: cogs/groupcog.py:40 cogs/groupcog.py:45 86 | msgid "b" 87 | msgstr "ब" 88 | 89 | #: cogs/groupcog.py:45 90 | msgid "divide" 91 | msgstr "वभजत_करन" 92 | 93 | #: cogs/cog.py:47 94 | msgid "duration" 95 | msgstr "अवध" 96 | 97 | #: cogs/cog.py:58 98 | msgid "echo" 99 | msgstr "गज" 100 | 101 | #: cogs/groupcog.py:15 102 | msgid "functions" 103 | msgstr "करय" 104 | 105 | #: cogs/cog.py:70 106 | msgid "goodbye" 107 | msgstr "अलवद" 108 | 109 | #: cogs/cog.py:69 110 | msgid "hello" 111 | msgstr "नमसत" 112 | 113 | #: cogs/cog.py:71 114 | msgid "how are you?" 115 | msgstr "आप कैसे हैं?" 116 | 117 | #: cogs/cog.py:62 118 | msgid "info" 119 | msgstr "जनकर" 120 | 121 | #: cogs/groupcog.py:14 122 | msgid "math" 123 | msgstr "गणत" 124 | 125 | #: cogs/cog.py:58 cogs/cog.py:66 126 | msgid "message" 127 | msgstr "सदश" 128 | 129 | #: cogs/groupcog.py:40 130 | msgid "multiply" 131 | msgstr "गण" 132 | 133 | #: cogs/cog.py:54 134 | msgid "ping" 135 | msgstr "गनगनहट" 136 | 137 | #: cogs/groupcog.py:21 138 | msgid "power" 139 | msgstr "शकत" 140 | 141 | #: cogs/groupcog.py:25 142 | msgid "sqrt" 143 | msgstr "sqrt" 144 | 145 | #: cogs/groupcog.py:34 146 | msgid "subtract" 147 | msgstr "घटन" 148 | 149 | #: cogs/cog.py:66 150 | msgid "tell" 151 | msgstr "कहन" 152 | 153 | #: cogs/cog.py:62 154 | msgid "user" 155 | msgstr "उपयगकरत" 156 | 157 | #: main.py:122 158 | msgid "user_ping" 159 | msgstr "उपयगकरत_पग" 160 | 161 | #: cogs/cog.py:42 162 | msgid "utility" 163 | msgstr "उपयगत" 164 | -------------------------------------------------------------------------------- /examples/smart-sync/translations/locales/hr/LC_MESSAGES/dpygt.po: -------------------------------------------------------------------------------- 1 | # Croatian translations for PACKAGE package. 2 | # Copyright (C) 2023 THE PACKAGE'S COPYRIGHT HOLDER 3 | # This file is distributed under the same license as the PACKAGE package. 4 | # Automatically generated, 2023. 5 | # 6 | msgid "" 7 | msgstr "" 8 | "Project-Id-Version: PACKAGE VERSION\n" 9 | "Report-Msgid-Bugs-To: \n" 10 | "POT-Creation-Date: 2023-12-09 20:43+0530\n" 11 | "PO-Revision-Date: 2023-12-09 18:06+0530\n" 12 | "Last-Translator: Automatically generated\n" 13 | "Language-Team: none\n" 14 | "Language: hr\n" 15 | "MIME-Version: 1.0\n" 16 | "Content-Type: text/plain; charset=UTF-8\n" 17 | "Content-Transfer-Encoding: 8bit\n" 18 | "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" 19 | 20 | #: cogs/groupcog.py:29 21 | msgid "Add two numbers" 22 | msgstr "Zbrojite dva broja" 23 | 24 | #: cogs/cog.py:47 25 | msgid "Convert a duration to a timedelta" 26 | msgstr "Pretvorite trajanje u deltu vremena" 27 | 28 | #: cogs/groupcog.py:45 29 | msgid "Divide two numbers" 30 | msgstr "Podijeli dva broja" 31 | 32 | #: cogs/cog.py:58 33 | msgid "Echo a message" 34 | msgstr "Eho poruke" 35 | 36 | #: cogs/cog.py:62 37 | msgid "Get info about a user" 38 | msgstr "Dobiti informacije o korisniku" 39 | 40 | #: cogs/cog.py:54 41 | msgid "Get the bot's latency" 42 | msgstr "Dobijte latenciju bota" 43 | 44 | #: cogs/groupcog.py:25 45 | msgid "Get the square root of a number" 46 | msgstr "Dobijte kvadratni korijen broja" 47 | 48 | #: cogs/groupcog.py:14 49 | msgid "Math Commands" 50 | msgstr "Matematičke naredbe" 51 | 52 | #: cogs/groupcog.py:15 53 | msgid "Math Functions" 54 | msgstr "Matematičke funkcije" 55 | 56 | #: cogs/groupcog.py:40 57 | msgid "Multiply two numbers" 58 | msgstr "Pomnožite dva broja" 59 | 60 | #: cogs/groupcog.py:21 61 | msgid "Raise a number to a power" 62 | msgstr "Podignite broj na potenciju" 63 | 64 | #: cogs/groupcog.py:34 65 | msgid "Subtract two numbers" 66 | msgstr "Oduzmi dva broja" 67 | 68 | #: cogs/cog.py:66 69 | msgid "Tell a message" 70 | msgstr "Reci poruku" 71 | 72 | #: cogs/cog.py:42 73 | msgid "Utility commands" 74 | msgstr "Pomoćne naredbe" 75 | 76 | #: cogs/groupcog.py:21 cogs/groupcog.py:25 cogs/groupcog.py:29 77 | #: cogs/groupcog.py:34 cogs/groupcog.py:40 cogs/groupcog.py:45 78 | msgid "a" 79 | msgstr "a" 80 | 81 | #: cogs/groupcog.py:29 82 | msgid "add" 83 | msgstr "dodati" 84 | 85 | #: cogs/groupcog.py:21 cogs/groupcog.py:29 cogs/groupcog.py:34 86 | #: cogs/groupcog.py:40 cogs/groupcog.py:45 87 | msgid "b" 88 | msgstr "b" 89 | 90 | #: cogs/groupcog.py:45 91 | msgid "divide" 92 | msgstr "podijeliti" 93 | 94 | #: cogs/cog.py:47 95 | msgid "duration" 96 | msgstr "trajanje" 97 | 98 | #: cogs/cog.py:58 99 | msgid "echo" 100 | msgstr "jeka" 101 | 102 | #: cogs/groupcog.py:15 103 | msgid "functions" 104 | msgstr "funkcije" 105 | 106 | #: cogs/cog.py:70 107 | msgid "goodbye" 108 | msgstr "doviđenja" 109 | 110 | #: cogs/cog.py:69 111 | msgid "hello" 112 | msgstr "zdravo" 113 | 114 | #: cogs/cog.py:71 115 | msgid "how are you?" 116 | msgstr "kako si?" 117 | 118 | #: cogs/cog.py:62 119 | msgid "info" 120 | msgstr "info" 121 | 122 | #: cogs/groupcog.py:14 123 | msgid "math" 124 | msgstr "matematika" 125 | 126 | #: cogs/cog.py:58 cogs/cog.py:66 127 | msgid "message" 128 | msgstr "poruka" 129 | 130 | #: cogs/groupcog.py:40 131 | msgid "multiply" 132 | msgstr "pomnožiti" 133 | 134 | #: cogs/cog.py:54 135 | msgid "ping" 136 | msgstr "ping" 137 | 138 | #: cogs/groupcog.py:21 139 | msgid "power" 140 | msgstr "vlast" 141 | 142 | #: cogs/groupcog.py:25 143 | msgid "sqrt" 144 | msgstr "sqrt" 145 | 146 | #: cogs/groupcog.py:34 147 | msgid "subtract" 148 | msgstr "oduzeti" 149 | 150 | #: cogs/cog.py:66 151 | msgid "tell" 152 | msgstr "reći" 153 | 154 | #: cogs/cog.py:62 155 | msgid "user" 156 | msgstr "korisnik" 157 | 158 | #: main.py:122 159 | msgid "user_ping" 160 | msgstr "korisnički_ping" 161 | 162 | #: cogs/cog.py:42 163 | msgid "utility" 164 | msgstr "korisnost" 165 | -------------------------------------------------------------------------------- /examples/smart-sync/translations/locales/hu/LC_MESSAGES/dpygt.po: -------------------------------------------------------------------------------- 1 | # Hungarian translations for PACKAGE package. 2 | # Copyright (C) 2023 THE PACKAGE'S COPYRIGHT HOLDER 3 | # This file is distributed under the same license as the PACKAGE package. 4 | # Automatically generated, 2023. 5 | # 6 | msgid "" 7 | msgstr "" 8 | "Project-Id-Version: PACKAGE VERSION\n" 9 | "Report-Msgid-Bugs-To: \n" 10 | "POT-Creation-Date: 2023-12-09 20:43+0530\n" 11 | "PO-Revision-Date: 2023-12-09 18:06+0530\n" 12 | "Last-Translator: Automatically generated\n" 13 | "Language-Team: none\n" 14 | "Language: hu\n" 15 | "MIME-Version: 1.0\n" 16 | "Content-Type: text/plain; charset=UTF-8\n" 17 | "Content-Transfer-Encoding: 8bit\n" 18 | "Plural-Forms: nplurals=2; plural=(n != 1);\n" 19 | 20 | #: cogs/groupcog.py:29 21 | msgid "Add two numbers" 22 | msgstr "Adjon hozzá két számot" 23 | 24 | #: cogs/cog.py:47 25 | msgid "Convert a duration to a timedelta" 26 | msgstr "Időtartam konvertálása idődeltává" 27 | 28 | #: cogs/groupcog.py:45 29 | msgid "Divide two numbers" 30 | msgstr "Ossz el két számot" 31 | 32 | #: cogs/cog.py:58 33 | msgid "Echo a message" 34 | msgstr "Üzenet visszhangja" 35 | 36 | #: cogs/cog.py:62 37 | msgid "Get info about a user" 38 | msgstr "Információt kaphat egy felhasználóról" 39 | 40 | #: cogs/cog.py:54 41 | msgid "Get the bot's latency" 42 | msgstr "Szerezze meg a bot késleltetési idejét" 43 | 44 | #: cogs/groupcog.py:25 45 | msgid "Get the square root of a number" 46 | msgstr "Szerezd meg egy szám négyzetgyökét" 47 | 48 | #: cogs/groupcog.py:14 49 | msgid "Math Commands" 50 | msgstr "Matematikai parancsok" 51 | 52 | #: cogs/groupcog.py:15 53 | msgid "Math Functions" 54 | msgstr "Matematikai függvények" 55 | 56 | #: cogs/groupcog.py:40 57 | msgid "Multiply two numbers" 58 | msgstr "Szorozz meg két számot" 59 | 60 | #: cogs/groupcog.py:21 61 | msgid "Raise a number to a power" 62 | msgstr "Emelj egy számot hatványra" 63 | 64 | #: cogs/groupcog.py:34 65 | msgid "Subtract two numbers" 66 | msgstr "Vonjunk ki két számot" 67 | 68 | #: cogs/cog.py:66 69 | msgid "Tell a message" 70 | msgstr "Mondjon üzenetet" 71 | 72 | #: cogs/cog.py:42 73 | msgid "Utility commands" 74 | msgstr "Segédprogram parancsok" 75 | 76 | #: cogs/groupcog.py:21 cogs/groupcog.py:25 cogs/groupcog.py:29 77 | #: cogs/groupcog.py:34 cogs/groupcog.py:40 cogs/groupcog.py:45 78 | msgid "a" 79 | msgstr "a" 80 | 81 | #: cogs/groupcog.py:29 82 | msgid "add" 83 | msgstr "add_hozzá" 84 | 85 | #: cogs/groupcog.py:21 cogs/groupcog.py:29 cogs/groupcog.py:34 86 | #: cogs/groupcog.py:40 cogs/groupcog.py:45 87 | msgid "b" 88 | msgstr "b" 89 | 90 | #: cogs/groupcog.py:45 91 | msgid "divide" 92 | msgstr "feloszt" 93 | 94 | #: cogs/cog.py:47 95 | msgid "duration" 96 | msgstr "időtartama" 97 | 98 | #: cogs/cog.py:58 99 | msgid "echo" 100 | msgstr "visszhang" 101 | 102 | #: cogs/groupcog.py:15 103 | msgid "functions" 104 | msgstr "funkciókat" 105 | 106 | #: cogs/cog.py:70 107 | msgid "goodbye" 108 | msgstr "viszontlátásra" 109 | 110 | #: cogs/cog.py:69 111 | msgid "hello" 112 | msgstr "helló" 113 | 114 | #: cogs/cog.py:71 115 | msgid "how are you?" 116 | msgstr "hogy vagy?" 117 | 118 | #: cogs/cog.py:62 119 | msgid "info" 120 | msgstr "info" 121 | 122 | #: cogs/groupcog.py:14 123 | msgid "math" 124 | msgstr "matematika" 125 | 126 | #: cogs/cog.py:58 cogs/cog.py:66 127 | msgid "message" 128 | msgstr "üzenet" 129 | 130 | #: cogs/groupcog.py:40 131 | msgid "multiply" 132 | msgstr "szaporodnak" 133 | 134 | #: cogs/cog.py:54 135 | msgid "ping" 136 | msgstr "ping" 137 | 138 | #: cogs/groupcog.py:21 139 | msgid "power" 140 | msgstr "erő" 141 | 142 | #: cogs/groupcog.py:25 143 | msgid "sqrt" 144 | msgstr "sqrt" 145 | 146 | #: cogs/groupcog.py:34 147 | msgid "subtract" 148 | msgstr "kivonni" 149 | 150 | #: cogs/cog.py:66 151 | msgid "tell" 152 | msgstr "mondd" 153 | 154 | #: cogs/cog.py:62 155 | msgid "user" 156 | msgstr "felhasználó" 157 | 158 | #: main.py:122 159 | msgid "user_ping" 160 | msgstr "user_ping" 161 | 162 | #: cogs/cog.py:42 163 | msgid "utility" 164 | msgstr "hasznosság" 165 | -------------------------------------------------------------------------------- /examples/smart-sync/translations/locales/id/LC_MESSAGES/dpygt.po: -------------------------------------------------------------------------------- 1 | # Indonesian translations for PACKAGE package. 2 | # Copyright (C) 2023 THE PACKAGE'S COPYRIGHT HOLDER 3 | # This file is distributed under the same license as the PACKAGE package. 4 | # Automatically generated, 2023. 5 | # 6 | msgid "" 7 | msgstr "" 8 | "Project-Id-Version: PACKAGE VERSION\n" 9 | "Report-Msgid-Bugs-To: \n" 10 | "POT-Creation-Date: 2023-12-09 20:43+0530\n" 11 | "PO-Revision-Date: 2023-12-09 18:06+0530\n" 12 | "Last-Translator: Automatically generated\n" 13 | "Language-Team: none\n" 14 | "Language: id\n" 15 | "MIME-Version: 1.0\n" 16 | "Content-Type: text/plain; charset=UTF-8\n" 17 | "Content-Transfer-Encoding: 8bit\n" 18 | 19 | #: cogs/groupcog.py:29 20 | msgid "Add two numbers" 21 | msgstr "Tambahkan dua angka" 22 | 23 | #: cogs/cog.py:47 24 | msgid "Convert a duration to a timedelta" 25 | msgstr "Ubah durasi menjadi delta waktu" 26 | 27 | #: cogs/groupcog.py:45 28 | msgid "Divide two numbers" 29 | msgstr "Bagilah dua angka" 30 | 31 | #: cogs/cog.py:58 32 | msgid "Echo a message" 33 | msgstr "Gema pesan" 34 | 35 | #: cogs/cog.py:62 36 | msgid "Get info about a user" 37 | msgstr "Dapatkan info tentang pengguna" 38 | 39 | #: cogs/cog.py:54 40 | msgid "Get the bot's latency" 41 | msgstr "Dapatkan latensi bot" 42 | 43 | #: cogs/groupcog.py:25 44 | msgid "Get the square root of a number" 45 | msgstr "Dapatkan akar kuadrat dari sebuah angka" 46 | 47 | #: cogs/groupcog.py:14 48 | msgid "Math Commands" 49 | msgstr "Perintah Matematika" 50 | 51 | #: cogs/groupcog.py:15 52 | msgid "Math Functions" 53 | msgstr "Fungsi Matematika" 54 | 55 | #: cogs/groupcog.py:40 56 | msgid "Multiply two numbers" 57 | msgstr "Kalikan dua angka" 58 | 59 | #: cogs/groupcog.py:21 60 | msgid "Raise a number to a power" 61 | msgstr "Naikkan angka menjadi pangkat" 62 | 63 | #: cogs/groupcog.py:34 64 | msgid "Subtract two numbers" 65 | msgstr "Kurangi dua angka" 66 | 67 | #: cogs/cog.py:66 68 | msgid "Tell a message" 69 | msgstr "Sampaikan sebuah pesan" 70 | 71 | #: cogs/cog.py:42 72 | msgid "Utility commands" 73 | msgstr "Perintah utilitas" 74 | 75 | #: cogs/groupcog.py:21 cogs/groupcog.py:25 cogs/groupcog.py:29 76 | #: cogs/groupcog.py:34 cogs/groupcog.py:40 cogs/groupcog.py:45 77 | msgid "a" 78 | msgstr "a" 79 | 80 | #: cogs/groupcog.py:29 81 | msgid "add" 82 | msgstr "menambahkan" 83 | 84 | #: cogs/groupcog.py:21 cogs/groupcog.py:29 cogs/groupcog.py:34 85 | #: cogs/groupcog.py:40 cogs/groupcog.py:45 86 | msgid "b" 87 | msgstr "b" 88 | 89 | #: cogs/groupcog.py:45 90 | msgid "divide" 91 | msgstr "membagi" 92 | 93 | #: cogs/cog.py:47 94 | msgid "duration" 95 | msgstr "durasi" 96 | 97 | #: cogs/cog.py:58 98 | msgid "echo" 99 | msgstr "gema" 100 | 101 | #: cogs/groupcog.py:15 102 | msgid "functions" 103 | msgstr "fungsi" 104 | 105 | #: cogs/cog.py:70 106 | msgid "goodbye" 107 | msgstr "selamat_tinggal" 108 | 109 | #: cogs/cog.py:69 110 | msgid "hello" 111 | msgstr "halo" 112 | 113 | #: cogs/cog.py:71 114 | msgid "how are you?" 115 | msgstr "apa kabarmu?" 116 | 117 | #: cogs/cog.py:62 118 | msgid "info" 119 | msgstr "info" 120 | 121 | #: cogs/groupcog.py:14 122 | msgid "math" 123 | msgstr "matematika" 124 | 125 | #: cogs/cog.py:58 cogs/cog.py:66 126 | msgid "message" 127 | msgstr "pesan" 128 | 129 | #: cogs/groupcog.py:40 130 | msgid "multiply" 131 | msgstr "berkembang_biak" 132 | 133 | #: cogs/cog.py:54 134 | msgid "ping" 135 | msgstr "ping" 136 | 137 | #: cogs/groupcog.py:21 138 | msgid "power" 139 | msgstr "kekuatan" 140 | 141 | #: cogs/groupcog.py:25 142 | msgid "sqrt" 143 | msgstr "persegi" 144 | 145 | #: cogs/groupcog.py:34 146 | msgid "subtract" 147 | msgstr "mengurangi" 148 | 149 | #: cogs/cog.py:66 150 | msgid "tell" 151 | msgstr "memberi_tahu" 152 | 153 | #: cogs/cog.py:62 154 | msgid "user" 155 | msgstr "pengguna" 156 | 157 | #: main.py:122 158 | msgid "user_ping" 159 | msgstr "pengguna_ping" 160 | 161 | #: cogs/cog.py:42 162 | msgid "utility" 163 | msgstr "kegunaan" 164 | -------------------------------------------------------------------------------- /examples/smart-sync/translations/locales/it/LC_MESSAGES/dpygt.po: -------------------------------------------------------------------------------- 1 | # Italian translations for PACKAGE package. 2 | # Copyright (C) 2023 THE PACKAGE'S COPYRIGHT HOLDER 3 | # This file is distributed under the same license as the PACKAGE package. 4 | # Automatically generated, 2023. 5 | # 6 | msgid "" 7 | msgstr "" 8 | "Project-Id-Version: PACKAGE VERSION\n" 9 | "Report-Msgid-Bugs-To: \n" 10 | "POT-Creation-Date: 2023-12-09 20:43+0530\n" 11 | "PO-Revision-Date: 2023-12-09 18:06+0530\n" 12 | "Last-Translator: Automatically generated\n" 13 | "Language-Team: none\n" 14 | "Language: it\n" 15 | "MIME-Version: 1.0\n" 16 | "Content-Type: text/plain; charset=UTF-8\n" 17 | "Content-Transfer-Encoding: 8bit\n" 18 | "Plural-Forms: nplurals=2; plural=(n != 1);\n" 19 | 20 | #: cogs/groupcog.py:29 21 | msgid "Add two numbers" 22 | msgstr "Aggiungi due numeri" 23 | 24 | #: cogs/cog.py:47 25 | msgid "Convert a duration to a timedelta" 26 | msgstr "Converti una durata in un delta temporale" 27 | 28 | #: cogs/groupcog.py:45 29 | msgid "Divide two numbers" 30 | msgstr "Dividere due numeri" 31 | 32 | #: cogs/cog.py:58 33 | msgid "Echo a message" 34 | msgstr "Riecheggia un messaggio" 35 | 36 | #: cogs/cog.py:62 37 | msgid "Get info about a user" 38 | msgstr "Ottieni informazioni su un utente" 39 | 40 | #: cogs/cog.py:54 41 | msgid "Get the bot's latency" 42 | msgstr "Ottieni la latenza del bot" 43 | 44 | #: cogs/groupcog.py:25 45 | msgid "Get the square root of a number" 46 | msgstr "Ottieni la radice quadrata di un numero" 47 | 48 | #: cogs/groupcog.py:14 49 | msgid "Math Commands" 50 | msgstr "Comandi matematici" 51 | 52 | #: cogs/groupcog.py:15 53 | msgid "Math Functions" 54 | msgstr "Funzioni matematiche" 55 | 56 | #: cogs/groupcog.py:40 57 | msgid "Multiply two numbers" 58 | msgstr "Moltiplica due numeri" 59 | 60 | #: cogs/groupcog.py:21 61 | msgid "Raise a number to a power" 62 | msgstr "Elevare un numero a una potenza" 63 | 64 | #: cogs/groupcog.py:34 65 | msgid "Subtract two numbers" 66 | msgstr "Sottrai due numeri" 67 | 68 | #: cogs/cog.py:66 69 | msgid "Tell a message" 70 | msgstr "Racconta un messaggio" 71 | 72 | #: cogs/cog.py:42 73 | msgid "Utility commands" 74 | msgstr "Comandi di utilità" 75 | 76 | #: cogs/groupcog.py:21 cogs/groupcog.py:25 cogs/groupcog.py:29 77 | #: cogs/groupcog.py:34 cogs/groupcog.py:40 cogs/groupcog.py:45 78 | msgid "a" 79 | msgstr "un" 80 | 81 | #: cogs/groupcog.py:29 82 | msgid "add" 83 | msgstr "aggiungere" 84 | 85 | #: cogs/groupcog.py:21 cogs/groupcog.py:29 cogs/groupcog.py:34 86 | #: cogs/groupcog.py:40 cogs/groupcog.py:45 87 | msgid "b" 88 | msgstr "b" 89 | 90 | #: cogs/groupcog.py:45 91 | msgid "divide" 92 | msgstr "dividere" 93 | 94 | #: cogs/cog.py:47 95 | msgid "duration" 96 | msgstr "durata" 97 | 98 | #: cogs/cog.py:58 99 | msgid "echo" 100 | msgstr "eco" 101 | 102 | #: cogs/groupcog.py:15 103 | msgid "functions" 104 | msgstr "funzioni" 105 | 106 | #: cogs/cog.py:70 107 | msgid "goodbye" 108 | msgstr "arrivederci" 109 | 110 | #: cogs/cog.py:69 111 | msgid "hello" 112 | msgstr "ciao" 113 | 114 | #: cogs/cog.py:71 115 | msgid "how are you?" 116 | msgstr "come stai?" 117 | 118 | #: cogs/cog.py:62 119 | msgid "info" 120 | msgstr "informazioni" 121 | 122 | #: cogs/groupcog.py:14 123 | msgid "math" 124 | msgstr "matematica" 125 | 126 | #: cogs/cog.py:58 cogs/cog.py:66 127 | msgid "message" 128 | msgstr "messaggio" 129 | 130 | #: cogs/groupcog.py:40 131 | msgid "multiply" 132 | msgstr "moltiplicare" 133 | 134 | #: cogs/cog.py:54 135 | msgid "ping" 136 | msgstr "ping" 137 | 138 | #: cogs/groupcog.py:21 139 | msgid "power" 140 | msgstr "energia" 141 | 142 | #: cogs/groupcog.py:25 143 | msgid "sqrt" 144 | msgstr "mq" 145 | 146 | #: cogs/groupcog.py:34 147 | msgid "subtract" 148 | msgstr "sottrarre" 149 | 150 | #: cogs/cog.py:66 151 | msgid "tell" 152 | msgstr "raccontare" 153 | 154 | #: cogs/cog.py:62 155 | msgid "user" 156 | msgstr "utente" 157 | 158 | #: main.py:122 159 | msgid "user_ping" 160 | msgstr "utente_ping" 161 | 162 | #: cogs/cog.py:42 163 | msgid "utility" 164 | msgstr "utilità" 165 | -------------------------------------------------------------------------------- /examples/smart-sync/translations/locales/ja/LC_MESSAGES/dpygt.po: -------------------------------------------------------------------------------- 1 | # Japanese translations for PACKAGE package. 2 | # Copyright (C) 2023 THE PACKAGE'S COPYRIGHT HOLDER 3 | # This file is distributed under the same license as the PACKAGE package. 4 | # Automatically generated, 2023. 5 | # 6 | msgid "" 7 | msgstr "" 8 | "Project-Id-Version: PACKAGE VERSION\n" 9 | "Report-Msgid-Bugs-To: \n" 10 | "POT-Creation-Date: 2023-12-09 20:43+0530\n" 11 | "PO-Revision-Date: 2023-12-09 18:06+0530\n" 12 | "Last-Translator: Automatically generated\n" 13 | "Language-Team: none\n" 14 | "Language: ja\n" 15 | "MIME-Version: 1.0\n" 16 | "Content-Type: text/plain; charset=UTF-8\n" 17 | "Content-Transfer-Encoding: 8bit\n" 18 | "Plural-Forms: nplurals=1; plural=0;\n" 19 | 20 | #: cogs/groupcog.py:29 21 | msgid "Add two numbers" 22 | msgstr "2 つの数字を加算する" 23 | 24 | #: cogs/cog.py:47 25 | msgid "Convert a duration to a timedelta" 26 | msgstr "期間をタイムデルタに変換する" 27 | 28 | #: cogs/groupcog.py:45 29 | msgid "Divide two numbers" 30 | msgstr "2 つの数値を除算する" 31 | 32 | #: cogs/cog.py:58 33 | msgid "Echo a message" 34 | msgstr "メッセージをエコーする" 35 | 36 | #: cogs/cog.py:62 37 | msgid "Get info about a user" 38 | msgstr "ユーザーに関する情報を取得する" 39 | 40 | #: cogs/cog.py:54 41 | msgid "Get the bot's latency" 42 | msgstr "ボットのレイテンシを取得する" 43 | 44 | #: cogs/groupcog.py:25 45 | msgid "Get the square root of a number" 46 | msgstr "数値の平方根を取得します" 47 | 48 | #: cogs/groupcog.py:14 49 | msgid "Math Commands" 50 | msgstr "数学コマンド" 51 | 52 | #: cogs/groupcog.py:15 53 | msgid "Math Functions" 54 | msgstr "数学関数" 55 | 56 | #: cogs/groupcog.py:40 57 | msgid "Multiply two numbers" 58 | msgstr "2 つの数値を掛けます" 59 | 60 | #: cogs/groupcog.py:21 61 | msgid "Raise a number to a power" 62 | msgstr "数値の累乗" 63 | 64 | #: cogs/groupcog.py:34 65 | msgid "Subtract two numbers" 66 | msgstr "2 つの数値を引きます" 67 | 68 | #: cogs/cog.py:66 69 | msgid "Tell a message" 70 | msgstr "メッセージを伝える" 71 | 72 | #: cogs/cog.py:42 73 | msgid "Utility commands" 74 | msgstr "ユーティリティコマンド" 75 | 76 | #: cogs/groupcog.py:21 cogs/groupcog.py:25 cogs/groupcog.py:29 77 | #: cogs/groupcog.py:34 cogs/groupcog.py:40 cogs/groupcog.py:45 78 | msgid "a" 79 | msgstr "ある" 80 | 81 | #: cogs/groupcog.py:29 82 | msgid "add" 83 | msgstr "追加" 84 | 85 | #: cogs/groupcog.py:21 cogs/groupcog.py:29 cogs/groupcog.py:34 86 | #: cogs/groupcog.py:40 cogs/groupcog.py:45 87 | msgid "b" 88 | msgstr "b" 89 | 90 | #: cogs/groupcog.py:45 91 | msgid "divide" 92 | msgstr "分ける" 93 | 94 | #: cogs/cog.py:47 95 | msgid "duration" 96 | msgstr "間隔" 97 | 98 | #: cogs/cog.py:58 99 | msgid "echo" 100 | msgstr "エコー" 101 | 102 | #: cogs/groupcog.py:15 103 | msgid "functions" 104 | msgstr "機能" 105 | 106 | #: cogs/cog.py:70 107 | msgid "goodbye" 108 | msgstr "さようなら" 109 | 110 | #: cogs/cog.py:69 111 | msgid "hello" 112 | msgstr "こんにちは" 113 | 114 | #: cogs/cog.py:71 115 | msgid "how are you?" 116 | msgstr "元気ですか?" 117 | 118 | #: cogs/cog.py:62 119 | msgid "info" 120 | msgstr "情報" 121 | 122 | #: cogs/groupcog.py:14 123 | msgid "math" 124 | msgstr "数学" 125 | 126 | #: cogs/cog.py:58 cogs/cog.py:66 127 | msgid "message" 128 | msgstr "メッセージ" 129 | 130 | #: cogs/groupcog.py:40 131 | msgid "multiply" 132 | msgstr "かける" 133 | 134 | #: cogs/cog.py:54 135 | msgid "ping" 136 | msgstr "ピング" 137 | 138 | #: cogs/groupcog.py:21 139 | msgid "power" 140 | msgstr "力" 141 | 142 | #: cogs/groupcog.py:25 143 | msgid "sqrt" 144 | msgstr "平方メートル" 145 | 146 | #: cogs/groupcog.py:34 147 | msgid "subtract" 148 | msgstr "引き算" 149 | 150 | #: cogs/cog.py:66 151 | msgid "tell" 152 | msgstr "教えて" 153 | 154 | #: cogs/cog.py:62 155 | msgid "user" 156 | msgstr "ユーザー" 157 | 158 | #: main.py:122 159 | msgid "user_ping" 160 | msgstr "user_ping" 161 | 162 | #: cogs/cog.py:42 163 | msgid "utility" 164 | msgstr "ユーティリティ" 165 | -------------------------------------------------------------------------------- /examples/smart-sync/translations/locales/ko/LC_MESSAGES/dpygt.po: -------------------------------------------------------------------------------- 1 | # Korean translations for PACKAGE package. 2 | # Copyright (C) 2023 THE PACKAGE'S COPYRIGHT HOLDER 3 | # This file is distributed under the same license as the PACKAGE package. 4 | # Automatically generated, 2023. 5 | # 6 | msgid "" 7 | msgstr "" 8 | "Project-Id-Version: PACKAGE VERSION\n" 9 | "Report-Msgid-Bugs-To: \n" 10 | "POT-Creation-Date: 2023-12-09 20:43+0530\n" 11 | "PO-Revision-Date: 2023-12-09 18:06+0530\n" 12 | "Last-Translator: Automatically generated\n" 13 | "Language-Team: none\n" 14 | "Language: ko\n" 15 | "MIME-Version: 1.0\n" 16 | "Content-Type: text/plain; charset=UTF-8\n" 17 | "Content-Transfer-Encoding: 8bit\n" 18 | "Plural-Forms: nplurals=1; plural=0;\n" 19 | 20 | #: cogs/groupcog.py:29 21 | msgid "Add two numbers" 22 | msgstr "두 개의 숫자를 추가" 23 | 24 | #: cogs/cog.py:47 25 | msgid "Convert a duration to a timedelta" 26 | msgstr "기간을 타임델타로 변환" 27 | 28 | #: cogs/groupcog.py:45 29 | msgid "Divide two numbers" 30 | msgstr "두 숫자 나누기" 31 | 32 | #: cogs/cog.py:58 33 | msgid "Echo a message" 34 | msgstr "메시지 에코" 35 | 36 | #: cogs/cog.py:62 37 | msgid "Get info about a user" 38 | msgstr "사용자에 대한 정보 얻기" 39 | 40 | #: cogs/cog.py:54 41 | msgid "Get the bot's latency" 42 | msgstr "봇의 대기 시간 가져오기" 43 | 44 | #: cogs/groupcog.py:25 45 | msgid "Get the square root of a number" 46 | msgstr "숫자의 제곱근 구하기" 47 | 48 | #: cogs/groupcog.py:14 49 | msgid "Math Commands" 50 | msgstr "수학 명령" 51 | 52 | #: cogs/groupcog.py:15 53 | msgid "Math Functions" 54 | msgstr "수학 함수" 55 | 56 | #: cogs/groupcog.py:40 57 | msgid "Multiply two numbers" 58 | msgstr "두 숫자 곱하기" 59 | 60 | #: cogs/groupcog.py:21 61 | msgid "Raise a number to a power" 62 | msgstr "숫자를 거듭제곱하세요" 63 | 64 | #: cogs/groupcog.py:34 65 | msgid "Subtract two numbers" 66 | msgstr "두 숫자 빼기" 67 | 68 | #: cogs/cog.py:66 69 | msgid "Tell a message" 70 | msgstr "메시지를 전하세요" 71 | 72 | #: cogs/cog.py:42 73 | msgid "Utility commands" 74 | msgstr "유틸리티 명령" 75 | 76 | #: cogs/groupcog.py:21 cogs/groupcog.py:25 cogs/groupcog.py:29 77 | #: cogs/groupcog.py:34 cogs/groupcog.py:40 cogs/groupcog.py:45 78 | msgid "a" 79 | msgstr "ㅏ" 80 | 81 | #: cogs/groupcog.py:29 82 | msgid "add" 83 | msgstr "추가하다" 84 | 85 | #: cogs/groupcog.py:21 cogs/groupcog.py:29 cogs/groupcog.py:34 86 | #: cogs/groupcog.py:40 cogs/groupcog.py:45 87 | msgid "b" 88 | msgstr "비" 89 | 90 | #: cogs/groupcog.py:45 91 | msgid "divide" 92 | msgstr "나누다" 93 | 94 | #: cogs/cog.py:47 95 | msgid "duration" 96 | msgstr "지속" 97 | 98 | #: cogs/cog.py:58 99 | msgid "echo" 100 | msgstr "에코" 101 | 102 | #: cogs/groupcog.py:15 103 | msgid "functions" 104 | msgstr "기능" 105 | 106 | #: cogs/cog.py:70 107 | msgid "goodbye" 108 | msgstr "안녕히_가세요" 109 | 110 | #: cogs/cog.py:69 111 | msgid "hello" 112 | msgstr "안녕하세요" 113 | 114 | #: cogs/cog.py:71 115 | msgid "how are you?" 116 | msgstr "어떻게 지내세요?" 117 | 118 | #: cogs/cog.py:62 119 | msgid "info" 120 | msgstr "정보" 121 | 122 | #: cogs/groupcog.py:14 123 | msgid "math" 124 | msgstr "수학" 125 | 126 | #: cogs/cog.py:58 cogs/cog.py:66 127 | msgid "message" 128 | msgstr "메시지" 129 | 130 | #: cogs/groupcog.py:40 131 | msgid "multiply" 132 | msgstr "곱하다" 133 | 134 | #: cogs/cog.py:54 135 | msgid "ping" 136 | msgstr "핑" 137 | 138 | #: cogs/groupcog.py:21 139 | msgid "power" 140 | msgstr "힘" 141 | 142 | #: cogs/groupcog.py:25 143 | msgid "sqrt" 144 | msgstr "sqrt" 145 | 146 | #: cogs/groupcog.py:34 147 | msgid "subtract" 148 | msgstr "덜다" 149 | 150 | #: cogs/cog.py:66 151 | msgid "tell" 152 | msgstr "말하다" 153 | 154 | #: cogs/cog.py:62 155 | msgid "user" 156 | msgstr "사용자" 157 | 158 | #: main.py:122 159 | msgid "user_ping" 160 | msgstr "user_ping" 161 | 162 | #: cogs/cog.py:42 163 | msgid "utility" 164 | msgstr "공익사업" 165 | -------------------------------------------------------------------------------- /examples/smart-sync/translations/locales/no/LC_MESSAGES/dpygt.po: -------------------------------------------------------------------------------- 1 | # Norwegian translations for PACKAGE package. 2 | # Copyright (C) 2023 THE PACKAGE'S COPYRIGHT HOLDER 3 | # This file is distributed under the same license as the PACKAGE package. 4 | # Automatically generated, 2023. 5 | # 6 | msgid "" 7 | msgstr "" 8 | "Project-Id-Version: PACKAGE VERSION\n" 9 | "Report-Msgid-Bugs-To: \n" 10 | "POT-Creation-Date: 2023-12-09 20:43+0530\n" 11 | "PO-Revision-Date: 2023-12-09 18:06+0530\n" 12 | "Last-Translator: Automatically generated\n" 13 | "Language-Team: none\n" 14 | "Language: no\n" 15 | "MIME-Version: 1.0\n" 16 | "Content-Type: text/plain; charset=UTF-8\n" 17 | "Content-Transfer-Encoding: 8bit\n" 18 | "Plural-Forms: nplurals=2; plural=(n != 1);\n" 19 | 20 | #: cogs/groupcog.py:29 21 | msgid "Add two numbers" 22 | msgstr "Legg til to tall" 23 | 24 | #: cogs/cog.py:47 25 | msgid "Convert a duration to a timedelta" 26 | msgstr "Konverter en varighet til en tidsdelta" 27 | 28 | #: cogs/groupcog.py:45 29 | msgid "Divide two numbers" 30 | msgstr "Del to tall" 31 | 32 | #: cogs/cog.py:58 33 | msgid "Echo a message" 34 | msgstr "Ekko en melding" 35 | 36 | #: cogs/cog.py:62 37 | msgid "Get info about a user" 38 | msgstr "Få informasjon om en bruker" 39 | 40 | #: cogs/cog.py:54 41 | msgid "Get the bot's latency" 42 | msgstr "Få botens latens" 43 | 44 | #: cogs/groupcog.py:25 45 | msgid "Get the square root of a number" 46 | msgstr "Få kvadratroten av et tall" 47 | 48 | #: cogs/groupcog.py:14 49 | msgid "Math Commands" 50 | msgstr "Matematiske kommandoer" 51 | 52 | #: cogs/groupcog.py:15 53 | msgid "Math Functions" 54 | msgstr "Matematiske funksjoner" 55 | 56 | #: cogs/groupcog.py:40 57 | msgid "Multiply two numbers" 58 | msgstr "Multipliser to tall" 59 | 60 | #: cogs/groupcog.py:21 61 | msgid "Raise a number to a power" 62 | msgstr "Hev et tall til en potens" 63 | 64 | #: cogs/groupcog.py:34 65 | msgid "Subtract two numbers" 66 | msgstr "Trekk fra to tall" 67 | 68 | #: cogs/cog.py:66 69 | msgid "Tell a message" 70 | msgstr "Fortell en melding" 71 | 72 | #: cogs/cog.py:42 73 | msgid "Utility commands" 74 | msgstr "Verktøykommandoer" 75 | 76 | #: cogs/groupcog.py:21 cogs/groupcog.py:25 cogs/groupcog.py:29 77 | #: cogs/groupcog.py:34 cogs/groupcog.py:40 cogs/groupcog.py:45 78 | msgid "a" 79 | msgstr "en" 80 | 81 | #: cogs/groupcog.py:29 82 | msgid "add" 83 | msgstr "legg_til" 84 | 85 | #: cogs/groupcog.py:21 cogs/groupcog.py:29 cogs/groupcog.py:34 86 | #: cogs/groupcog.py:40 cogs/groupcog.py:45 87 | msgid "b" 88 | msgstr "b" 89 | 90 | #: cogs/groupcog.py:45 91 | msgid "divide" 92 | msgstr "dele_opp" 93 | 94 | #: cogs/cog.py:47 95 | msgid "duration" 96 | msgstr "varighet" 97 | 98 | #: cogs/cog.py:58 99 | msgid "echo" 100 | msgstr "ekko" 101 | 102 | #: cogs/groupcog.py:15 103 | msgid "functions" 104 | msgstr "funksjoner" 105 | 106 | #: cogs/cog.py:70 107 | msgid "goodbye" 108 | msgstr "ha_det" 109 | 110 | #: cogs/cog.py:69 111 | msgid "hello" 112 | msgstr "hallo" 113 | 114 | #: cogs/cog.py:71 115 | msgid "how are you?" 116 | msgstr "hvordan har du det?" 117 | 118 | #: cogs/cog.py:62 119 | msgid "info" 120 | msgstr "info" 121 | 122 | #: cogs/groupcog.py:14 123 | msgid "math" 124 | msgstr "matte" 125 | 126 | #: cogs/cog.py:58 cogs/cog.py:66 127 | msgid "message" 128 | msgstr "beskjed" 129 | 130 | #: cogs/groupcog.py:40 131 | msgid "multiply" 132 | msgstr "multiplisere" 133 | 134 | #: cogs/cog.py:54 135 | msgid "ping" 136 | msgstr "ping" 137 | 138 | #: cogs/groupcog.py:21 139 | msgid "power" 140 | msgstr "makt" 141 | 142 | #: cogs/groupcog.py:25 143 | msgid "sqrt" 144 | msgstr "sqrt" 145 | 146 | #: cogs/groupcog.py:34 147 | msgid "subtract" 148 | msgstr "trekke_fra" 149 | 150 | #: cogs/cog.py:66 151 | msgid "tell" 152 | msgstr "fortelle" 153 | 154 | #: cogs/cog.py:62 155 | msgid "user" 156 | msgstr "bruker" 157 | 158 | #: main.py:122 159 | msgid "user_ping" 160 | msgstr "user_ping" 161 | 162 | #: cogs/cog.py:42 163 | msgid "utility" 164 | msgstr "nytte" 165 | -------------------------------------------------------------------------------- /examples/smart-sync/translations/locales/pt_BR/LC_MESSAGES/dpygt.po: -------------------------------------------------------------------------------- 1 | # Portuguese translations for PACKAGE package. 2 | # Copyright (C) 2023 THE PACKAGE'S COPYRIGHT HOLDER 3 | # This file is distributed under the same license as the PACKAGE package. 4 | # Automatically generated, 2023. 5 | # 6 | msgid "" 7 | msgstr "" 8 | "Project-Id-Version: PACKAGE VERSION\n" 9 | "Report-Msgid-Bugs-To: \n" 10 | "POT-Creation-Date: 2023-12-09 20:43+0530\n" 11 | "PO-Revision-Date: 2023-12-09 18:06+0530\n" 12 | "Last-Translator: Automatically generated\n" 13 | "Language-Team: none\n" 14 | "Language: pt_BR\n" 15 | "MIME-Version: 1.0\n" 16 | "Content-Type: text/plain; charset=UTF-8\n" 17 | "Content-Transfer-Encoding: 8bit\n" 18 | "Plural-Forms: nplurals=2; plural=(n > 1);\n" 19 | 20 | #: cogs/groupcog.py:29 21 | msgid "Add two numbers" 22 | msgstr "Adicione dois números" 23 | 24 | #: cogs/cog.py:47 25 | msgid "Convert a duration to a timedelta" 26 | msgstr "Converter uma duração em um timedelta" 27 | 28 | #: cogs/groupcog.py:45 29 | msgid "Divide two numbers" 30 | msgstr "Divida dois números" 31 | 32 | #: cogs/cog.py:58 33 | msgid "Echo a message" 34 | msgstr "Ecoar uma mensagem" 35 | 36 | #: cogs/cog.py:62 37 | msgid "Get info about a user" 38 | msgstr "Obter informações sobre um usuário" 39 | 40 | #: cogs/cog.py:54 41 | msgid "Get the bot's latency" 42 | msgstr "Obtenha a latência do bot" 43 | 44 | #: cogs/groupcog.py:25 45 | msgid "Get the square root of a number" 46 | msgstr "Obtenha a raiz quadrada de um número" 47 | 48 | #: cogs/groupcog.py:14 49 | msgid "Math Commands" 50 | msgstr "Comandos matemáticos" 51 | 52 | #: cogs/groupcog.py:15 53 | msgid "Math Functions" 54 | msgstr "Funções matemáticas" 55 | 56 | #: cogs/groupcog.py:40 57 | msgid "Multiply two numbers" 58 | msgstr "Multiplicar dois números" 59 | 60 | #: cogs/groupcog.py:21 61 | msgid "Raise a number to a power" 62 | msgstr "Elevar um número a uma potência" 63 | 64 | #: cogs/groupcog.py:34 65 | msgid "Subtract two numbers" 66 | msgstr "Subtraia dois números" 67 | 68 | #: cogs/cog.py:66 69 | msgid "Tell a message" 70 | msgstr "Diga uma mensagem" 71 | 72 | #: cogs/cog.py:42 73 | msgid "Utility commands" 74 | msgstr "Comandos utilitários" 75 | 76 | #: cogs/groupcog.py:21 cogs/groupcog.py:25 cogs/groupcog.py:29 77 | #: cogs/groupcog.py:34 cogs/groupcog.py:40 cogs/groupcog.py:45 78 | msgid "a" 79 | msgstr "a" 80 | 81 | #: cogs/groupcog.py:29 82 | msgid "add" 83 | msgstr "adicionar" 84 | 85 | #: cogs/groupcog.py:21 cogs/groupcog.py:29 cogs/groupcog.py:34 86 | #: cogs/groupcog.py:40 cogs/groupcog.py:45 87 | msgid "b" 88 | msgstr "b" 89 | 90 | #: cogs/groupcog.py:45 91 | msgid "divide" 92 | msgstr "dividir" 93 | 94 | #: cogs/cog.py:47 95 | msgid "duration" 96 | msgstr "duração" 97 | 98 | #: cogs/cog.py:58 99 | msgid "echo" 100 | msgstr "eco" 101 | 102 | #: cogs/groupcog.py:15 103 | msgid "functions" 104 | msgstr "funções" 105 | 106 | #: cogs/cog.py:70 107 | msgid "goodbye" 108 | msgstr "adeus" 109 | 110 | #: cogs/cog.py:69 111 | msgid "hello" 112 | msgstr "olá" 113 | 114 | #: cogs/cog.py:71 115 | msgid "how are you?" 116 | msgstr "como vai você?" 117 | 118 | #: cogs/cog.py:62 119 | msgid "info" 120 | msgstr "informações" 121 | 122 | #: cogs/groupcog.py:14 123 | msgid "math" 124 | msgstr "matemática" 125 | 126 | #: cogs/cog.py:58 cogs/cog.py:66 127 | msgid "message" 128 | msgstr "mensagem" 129 | 130 | #: cogs/groupcog.py:40 131 | msgid "multiply" 132 | msgstr "multiplicar" 133 | 134 | #: cogs/cog.py:54 135 | msgid "ping" 136 | msgstr "pingar" 137 | 138 | #: cogs/groupcog.py:21 139 | msgid "power" 140 | msgstr "poder" 141 | 142 | #: cogs/groupcog.py:25 143 | msgid "sqrt" 144 | msgstr "quadrado" 145 | 146 | #: cogs/groupcog.py:34 147 | msgid "subtract" 148 | msgstr "subtrair" 149 | 150 | #: cogs/cog.py:66 151 | msgid "tell" 152 | msgstr "dizer" 153 | 154 | #: cogs/cog.py:62 155 | msgid "user" 156 | msgstr "do_utilizador" 157 | 158 | #: main.py:122 159 | msgid "user_ping" 160 | msgstr "user_ping" 161 | 162 | #: cogs/cog.py:42 163 | msgid "utility" 164 | msgstr "utilitário" 165 | -------------------------------------------------------------------------------- /examples/smart-sync/translations/locales/sv_SE/LC_MESSAGES/dpygt.po: -------------------------------------------------------------------------------- 1 | # Swedish translations for PACKAGE package. 2 | # Copyright (C) 2023 THE PACKAGE'S COPYRIGHT HOLDER 3 | # This file is distributed under the same license as the PACKAGE package. 4 | # Automatically generated, 2023. 5 | # 6 | msgid "" 7 | msgstr "" 8 | "Project-Id-Version: PACKAGE VERSION\n" 9 | "Report-Msgid-Bugs-To: \n" 10 | "POT-Creation-Date: 2023-12-09 20:43+0530\n" 11 | "PO-Revision-Date: 2023-12-09 18:06+0530\n" 12 | "Last-Translator: Automatically generated\n" 13 | "Language-Team: none\n" 14 | "Language: sv\n" 15 | "MIME-Version: 1.0\n" 16 | "Content-Type: text/plain; charset=UTF-8\n" 17 | "Content-Transfer-Encoding: 8bit\n" 18 | "Plural-Forms: nplurals=2; plural=(n != 1);\n" 19 | 20 | #: cogs/groupcog.py:29 21 | msgid "Add two numbers" 22 | msgstr "Lägg till två siffror" 23 | 24 | #: cogs/cog.py:47 25 | msgid "Convert a duration to a timedelta" 26 | msgstr "Konvertera en varaktighet till ett tidsdelta" 27 | 28 | #: cogs/groupcog.py:45 29 | msgid "Divide two numbers" 30 | msgstr "Dela två tal" 31 | 32 | #: cogs/cog.py:58 33 | msgid "Echo a message" 34 | msgstr "Eka ett meddelande" 35 | 36 | #: cogs/cog.py:62 37 | msgid "Get info about a user" 38 | msgstr "Få information om en användare" 39 | 40 | #: cogs/cog.py:54 41 | msgid "Get the bot's latency" 42 | msgstr "Få botens latens" 43 | 44 | #: cogs/groupcog.py:25 45 | msgid "Get the square root of a number" 46 | msgstr "Få kvadratroten ur ett tal" 47 | 48 | #: cogs/groupcog.py:14 49 | msgid "Math Commands" 50 | msgstr "Matematiska kommandon" 51 | 52 | #: cogs/groupcog.py:15 53 | msgid "Math Functions" 54 | msgstr "Matematiska funktioner" 55 | 56 | #: cogs/groupcog.py:40 57 | msgid "Multiply two numbers" 58 | msgstr "Multiplicera två tal" 59 | 60 | #: cogs/groupcog.py:21 61 | msgid "Raise a number to a power" 62 | msgstr "Höj en siffra till en makt" 63 | 64 | #: cogs/groupcog.py:34 65 | msgid "Subtract two numbers" 66 | msgstr "Subtrahera två tal" 67 | 68 | #: cogs/cog.py:66 69 | msgid "Tell a message" 70 | msgstr "Berätta ett meddelande" 71 | 72 | #: cogs/cog.py:42 73 | msgid "Utility commands" 74 | msgstr "Verktygskommandon" 75 | 76 | #: cogs/groupcog.py:21 cogs/groupcog.py:25 cogs/groupcog.py:29 77 | #: cogs/groupcog.py:34 cogs/groupcog.py:40 cogs/groupcog.py:45 78 | msgid "a" 79 | msgstr "a" 80 | 81 | #: cogs/groupcog.py:29 82 | msgid "add" 83 | msgstr "lägg_till" 84 | 85 | #: cogs/groupcog.py:21 cogs/groupcog.py:29 cogs/groupcog.py:34 86 | #: cogs/groupcog.py:40 cogs/groupcog.py:45 87 | msgid "b" 88 | msgstr "b" 89 | 90 | #: cogs/groupcog.py:45 91 | msgid "divide" 92 | msgstr "dela_upp" 93 | 94 | #: cogs/cog.py:47 95 | msgid "duration" 96 | msgstr "varaktighet" 97 | 98 | #: cogs/cog.py:58 99 | msgid "echo" 100 | msgstr "eko" 101 | 102 | #: cogs/groupcog.py:15 103 | msgid "functions" 104 | msgstr "funktioner" 105 | 106 | #: cogs/cog.py:70 107 | msgid "goodbye" 108 | msgstr "adjö" 109 | 110 | #: cogs/cog.py:69 111 | msgid "hello" 112 | msgstr "hallå" 113 | 114 | #: cogs/cog.py:71 115 | msgid "how are you?" 116 | msgstr "hur mår du?" 117 | 118 | #: cogs/cog.py:62 119 | msgid "info" 120 | msgstr "info" 121 | 122 | #: cogs/groupcog.py:14 123 | msgid "math" 124 | msgstr "matematik" 125 | 126 | #: cogs/cog.py:58 cogs/cog.py:66 127 | msgid "message" 128 | msgstr "meddelande" 129 | 130 | #: cogs/groupcog.py:40 131 | msgid "multiply" 132 | msgstr "multiplicera" 133 | 134 | #: cogs/cog.py:54 135 | msgid "ping" 136 | msgstr "ping" 137 | 138 | #: cogs/groupcog.py:21 139 | msgid "power" 140 | msgstr "kraft" 141 | 142 | #: cogs/groupcog.py:25 143 | msgid "sqrt" 144 | msgstr "sqrt" 145 | 146 | #: cogs/groupcog.py:34 147 | msgid "subtract" 148 | msgstr "subtrahera" 149 | 150 | #: cogs/cog.py:66 151 | msgid "tell" 152 | msgstr "säga" 153 | 154 | #: cogs/cog.py:62 155 | msgid "user" 156 | msgstr "användare" 157 | 158 | #: main.py:122 159 | msgid "user_ping" 160 | msgstr "user_ping" 161 | 162 | #: cogs/cog.py:42 163 | msgid "utility" 164 | msgstr "verktyg" 165 | -------------------------------------------------------------------------------- /examples/smart-sync/translations/locales/th/LC_MESSAGES/dpygt.po: -------------------------------------------------------------------------------- 1 | # Thai translations for PACKAGE package. 2 | # Copyright (C) 2023 THE PACKAGE'S COPYRIGHT HOLDER 3 | # This file is distributed under the same license as the PACKAGE package. 4 | # Automatically generated, 2023. 5 | # 6 | msgid "" 7 | msgstr "" 8 | "Project-Id-Version: PACKAGE VERSION\n" 9 | "Report-Msgid-Bugs-To: \n" 10 | "POT-Creation-Date: 2023-12-09 20:43+0530\n" 11 | "PO-Revision-Date: 2023-12-09 18:06+0530\n" 12 | "Last-Translator: Automatically generated\n" 13 | "Language-Team: none\n" 14 | "Language: th\n" 15 | "MIME-Version: 1.0\n" 16 | "Content-Type: text/plain; charset=UTF-8\n" 17 | "Content-Transfer-Encoding: 8bit\n" 18 | 19 | #: cogs/groupcog.py:29 20 | msgid "Add two numbers" 21 | msgstr "เพมตวเลขสองตว" 22 | 23 | #: cogs/cog.py:47 24 | msgid "Convert a duration to a timedelta" 25 | msgstr "แปลงระยะเวลาเปนเดลตาเวลา" 26 | 27 | #: cogs/groupcog.py:45 28 | msgid "Divide two numbers" 29 | msgstr "หารสองตวเลข" 30 | 31 | #: cogs/cog.py:58 32 | msgid "Echo a message" 33 | msgstr "สะทอนขอความ" 34 | 35 | #: cogs/cog.py:62 36 | msgid "Get info about a user" 37 | msgstr "รบขอมลเกยวกบผใช" 38 | 39 | #: cogs/cog.py:54 40 | msgid "Get the bot's latency" 41 | msgstr "รับเวลาแฝงของบอท" 42 | 43 | #: cogs/groupcog.py:25 44 | msgid "Get the square root of a number" 45 | msgstr "หารากทสองของตวเลข" 46 | 47 | #: cogs/groupcog.py:14 48 | msgid "Math Commands" 49 | msgstr "คำสงทางคณตศาสตร" 50 | 51 | #: cogs/groupcog.py:15 52 | msgid "Math Functions" 53 | msgstr "ฟงกชนทางคณตศาสตร" 54 | 55 | #: cogs/groupcog.py:40 56 | msgid "Multiply two numbers" 57 | msgstr "คณตวเลขสองตว" 58 | 59 | #: cogs/groupcog.py:21 60 | msgid "Raise a number to a power" 61 | msgstr "ยกเลขยกกำลง" 62 | 63 | #: cogs/groupcog.py:34 64 | msgid "Subtract two numbers" 65 | msgstr "ลบตวเลขสองตว" 66 | 67 | #: cogs/cog.py:66 68 | msgid "Tell a message" 69 | msgstr "บอกขอความ" 70 | 71 | #: cogs/cog.py:42 72 | msgid "Utility commands" 73 | msgstr "คำสงยทลต" 74 | 75 | #: cogs/groupcog.py:21 cogs/groupcog.py:25 cogs/groupcog.py:29 76 | #: cogs/groupcog.py:34 cogs/groupcog.py:40 cogs/groupcog.py:45 77 | msgid "a" 78 | msgstr "ก" 79 | 80 | #: cogs/groupcog.py:29 81 | msgid "add" 82 | msgstr "เพม" 83 | 84 | #: cogs/groupcog.py:21 cogs/groupcog.py:29 cogs/groupcog.py:34 85 | #: cogs/groupcog.py:40 cogs/groupcog.py:45 86 | msgid "b" 87 | msgstr "ข" 88 | 89 | #: cogs/groupcog.py:45 90 | msgid "divide" 91 | msgstr "แบง" 92 | 93 | #: cogs/cog.py:47 94 | msgid "duration" 95 | msgstr "ระยะเวลา" 96 | 97 | #: cogs/cog.py:58 98 | msgid "echo" 99 | msgstr "เสยงสะทอน" 100 | 101 | #: cogs/groupcog.py:15 102 | msgid "functions" 103 | msgstr "ฟงกชน" 104 | 105 | #: cogs/cog.py:70 106 | msgid "goodbye" 107 | msgstr "ลากอน" 108 | 109 | #: cogs/cog.py:69 110 | msgid "hello" 111 | msgstr "สวสด" 112 | 113 | #: cogs/cog.py:71 114 | msgid "how are you?" 115 | msgstr "คุณเป็นอย่างไร?" 116 | 117 | #: cogs/cog.py:62 118 | msgid "info" 119 | msgstr "ขอมล" 120 | 121 | #: cogs/groupcog.py:14 122 | msgid "math" 123 | msgstr "คณตศาสตร" 124 | 125 | #: cogs/cog.py:58 cogs/cog.py:66 126 | msgid "message" 127 | msgstr "ขอความ" 128 | 129 | #: cogs/groupcog.py:40 130 | msgid "multiply" 131 | msgstr "คณ" 132 | 133 | #: cogs/cog.py:54 134 | msgid "ping" 135 | msgstr "ปง" 136 | 137 | #: cogs/groupcog.py:21 138 | msgid "power" 139 | msgstr "พลง" 140 | 141 | #: cogs/groupcog.py:25 142 | msgid "sqrt" 143 | msgstr "ตารางวา" 144 | 145 | #: cogs/groupcog.py:34 146 | msgid "subtract" 147 | msgstr "ลบ" 148 | 149 | #: cogs/cog.py:66 150 | msgid "tell" 151 | msgstr "บอก" 152 | 153 | #: cogs/cog.py:62 154 | msgid "user" 155 | msgstr "ผใช" 156 | 157 | #: main.py:122 158 | msgid "user_ping" 159 | msgstr "user_ping" 160 | 161 | #: cogs/cog.py:42 162 | msgid "utility" 163 | msgstr "คณประโยชน" 164 | -------------------------------------------------------------------------------- /examples/smart-sync/translations/locales/tr/LC_MESSAGES/dpygt.po: -------------------------------------------------------------------------------- 1 | # Turkish translations for PACKAGE package. 2 | # Copyright (C) 2023 THE PACKAGE'S COPYRIGHT HOLDER 3 | # This file is distributed under the same license as the PACKAGE package. 4 | # Automatically generated, 2023. 5 | # 6 | msgid "" 7 | msgstr "" 8 | "Project-Id-Version: PACKAGE VERSION\n" 9 | "Report-Msgid-Bugs-To: \n" 10 | "POT-Creation-Date: 2023-12-09 20:43+0530\n" 11 | "PO-Revision-Date: 2023-12-09 18:06+0530\n" 12 | "Last-Translator: Automatically generated\n" 13 | "Language-Team: none\n" 14 | "Language: tr\n" 15 | "MIME-Version: 1.0\n" 16 | "Content-Type: text/plain; charset=UTF-8\n" 17 | "Content-Transfer-Encoding: 8bit\n" 18 | "Plural-Forms: nplurals=2; plural=(n != 1);\n" 19 | 20 | #: cogs/groupcog.py:29 21 | msgid "Add two numbers" 22 | msgstr "İki sayı ekle" 23 | 24 | #: cogs/cog.py:47 25 | msgid "Convert a duration to a timedelta" 26 | msgstr "Süreyi zaman deltasına dönüştürme" 27 | 28 | #: cogs/groupcog.py:45 29 | msgid "Divide two numbers" 30 | msgstr "İki sayıyı bölme" 31 | 32 | #: cogs/cog.py:58 33 | msgid "Echo a message" 34 | msgstr "Bir mesajı yankılayın" 35 | 36 | #: cogs/cog.py:62 37 | msgid "Get info about a user" 38 | msgstr "Bir kullanıcı hakkında bilgi alma" 39 | 40 | #: cogs/cog.py:54 41 | msgid "Get the bot's latency" 42 | msgstr "Botun gecikmesini alın" 43 | 44 | #: cogs/groupcog.py:25 45 | msgid "Get the square root of a number" 46 | msgstr "Bir sayının karekökünü alma" 47 | 48 | #: cogs/groupcog.py:14 49 | msgid "Math Commands" 50 | msgstr "Matematik Komutları" 51 | 52 | #: cogs/groupcog.py:15 53 | msgid "Math Functions" 54 | msgstr "Matematik Fonksiyonları" 55 | 56 | #: cogs/groupcog.py:40 57 | msgid "Multiply two numbers" 58 | msgstr "İki sayıyı çarpın" 59 | 60 | #: cogs/groupcog.py:21 61 | msgid "Raise a number to a power" 62 | msgstr "Bir sayıyı bir kuvvete yükseltin" 63 | 64 | #: cogs/groupcog.py:34 65 | msgid "Subtract two numbers" 66 | msgstr "İki sayıyı çıkarın" 67 | 68 | #: cogs/cog.py:66 69 | msgid "Tell a message" 70 | msgstr "Bir mesaj söyle" 71 | 72 | #: cogs/cog.py:42 73 | msgid "Utility commands" 74 | msgstr "Yardımcı komutlar" 75 | 76 | #: cogs/groupcog.py:21 cogs/groupcog.py:25 cogs/groupcog.py:29 77 | #: cogs/groupcog.py:34 cogs/groupcog.py:40 cogs/groupcog.py:45 78 | msgid "a" 79 | msgstr "a" 80 | 81 | #: cogs/groupcog.py:29 82 | msgid "add" 83 | msgstr "eklemek" 84 | 85 | #: cogs/groupcog.py:21 cogs/groupcog.py:29 cogs/groupcog.py:34 86 | #: cogs/groupcog.py:40 cogs/groupcog.py:45 87 | msgid "b" 88 | msgstr "b" 89 | 90 | #: cogs/groupcog.py:45 91 | msgid "divide" 92 | msgstr "bölmek" 93 | 94 | #: cogs/cog.py:47 95 | msgid "duration" 96 | msgstr "süre" 97 | 98 | #: cogs/cog.py:58 99 | msgid "echo" 100 | msgstr "eko" 101 | 102 | #: cogs/groupcog.py:15 103 | msgid "functions" 104 | msgstr "işlevler" 105 | 106 | #: cogs/cog.py:70 107 | msgid "goodbye" 108 | msgstr "güle_güle" 109 | 110 | #: cogs/cog.py:69 111 | msgid "hello" 112 | msgstr "merhaba" 113 | 114 | #: cogs/cog.py:71 115 | msgid "how are you?" 116 | msgstr "nasılsın?" 117 | 118 | #: cogs/cog.py:62 119 | msgid "info" 120 | msgstr "bilgi" 121 | 122 | #: cogs/groupcog.py:14 123 | msgid "math" 124 | msgstr "matematik" 125 | 126 | #: cogs/cog.py:58 cogs/cog.py:66 127 | msgid "message" 128 | msgstr "ileti" 129 | 130 | #: cogs/groupcog.py:40 131 | msgid "multiply" 132 | msgstr "çarpmak" 133 | 134 | #: cogs/cog.py:54 135 | msgid "ping" 136 | msgstr "ping" 137 | 138 | #: cogs/groupcog.py:21 139 | msgid "power" 140 | msgstr "güç" 141 | 142 | #: cogs/groupcog.py:25 143 | msgid "sqrt" 144 | msgstr "kare" 145 | 146 | #: cogs/groupcog.py:34 147 | msgid "subtract" 148 | msgstr "çıkarma" 149 | 150 | #: cogs/cog.py:66 151 | msgid "tell" 152 | msgstr "söylemek" 153 | 154 | #: cogs/cog.py:62 155 | msgid "user" 156 | msgstr "kullanıcı" 157 | 158 | #: main.py:122 159 | msgid "user_ping" 160 | msgstr "kullanıcı_pingi" 161 | 162 | #: cogs/cog.py:42 163 | msgid "utility" 164 | msgstr "yarar" 165 | -------------------------------------------------------------------------------- /examples/smart-sync/translations/locales/vi/LC_MESSAGES/dpygt.po: -------------------------------------------------------------------------------- 1 | # Vietnamese translations for PACKAGE package. 2 | # Copyright (C) 2023 THE PACKAGE'S COPYRIGHT HOLDER 3 | # This file is distributed under the same license as the PACKAGE package. 4 | # Automatically generated, 2023. 5 | # 6 | msgid "" 7 | msgstr "" 8 | "Project-Id-Version: PACKAGE VERSION\n" 9 | "Report-Msgid-Bugs-To: \n" 10 | "POT-Creation-Date: 2023-12-09 20:43+0530\n" 11 | "PO-Revision-Date: 2023-12-09 18:06+0530\n" 12 | "Last-Translator: Automatically generated\n" 13 | "Language-Team: none\n" 14 | "Language: vi\n" 15 | "MIME-Version: 1.0\n" 16 | "Content-Type: text/plain; charset=UTF-8\n" 17 | "Content-Transfer-Encoding: 8bit\n" 18 | "Plural-Forms: nplurals=1; plural=0;\n" 19 | 20 | #: cogs/groupcog.py:29 21 | msgid "Add two numbers" 22 | msgstr "Thêm hai số" 23 | 24 | #: cogs/cog.py:47 25 | msgid "Convert a duration to a timedelta" 26 | msgstr "Chuyển đổi thời lượng thành timedelta" 27 | 28 | #: cogs/groupcog.py:45 29 | msgid "Divide two numbers" 30 | msgstr "Chia hai số" 31 | 32 | #: cogs/cog.py:58 33 | msgid "Echo a message" 34 | msgstr "Nhắc lại một tin nhắn" 35 | 36 | #: cogs/cog.py:62 37 | msgid "Get info about a user" 38 | msgstr "Nhận thông tin về người dùng" 39 | 40 | #: cogs/cog.py:54 41 | msgid "Get the bot's latency" 42 | msgstr "Nhận độ trễ của bot" 43 | 44 | #: cogs/groupcog.py:25 45 | msgid "Get the square root of a number" 46 | msgstr "Lấy căn bậc hai của một số" 47 | 48 | #: cogs/groupcog.py:14 49 | msgid "Math Commands" 50 | msgstr "Lệnh toán học" 51 | 52 | #: cogs/groupcog.py:15 53 | msgid "Math Functions" 54 | msgstr "Hàm toán học" 55 | 56 | #: cogs/groupcog.py:40 57 | msgid "Multiply two numbers" 58 | msgstr "Nhân hai số" 59 | 60 | #: cogs/groupcog.py:21 61 | msgid "Raise a number to a power" 62 | msgstr "Nâng một số lên lũy thừa" 63 | 64 | #: cogs/groupcog.py:34 65 | msgid "Subtract two numbers" 66 | msgstr "Trừ hai số" 67 | 68 | #: cogs/cog.py:66 69 | msgid "Tell a message" 70 | msgstr "Kể một tin nhắn" 71 | 72 | #: cogs/cog.py:42 73 | msgid "Utility commands" 74 | msgstr "Các lệnh tiện ích" 75 | 76 | #: cogs/groupcog.py:21 cogs/groupcog.py:25 cogs/groupcog.py:29 77 | #: cogs/groupcog.py:34 cogs/groupcog.py:40 cogs/groupcog.py:45 78 | msgid "a" 79 | msgstr "một" 80 | 81 | #: cogs/groupcog.py:29 82 | msgid "add" 83 | msgstr "thêm_vào" 84 | 85 | #: cogs/groupcog.py:21 cogs/groupcog.py:29 cogs/groupcog.py:34 86 | #: cogs/groupcog.py:40 cogs/groupcog.py:45 87 | msgid "b" 88 | msgstr "b" 89 | 90 | #: cogs/groupcog.py:45 91 | msgid "divide" 92 | msgstr "chia" 93 | 94 | #: cogs/cog.py:47 95 | msgid "duration" 96 | msgstr "khoảng_thời_gian" 97 | 98 | #: cogs/cog.py:58 99 | msgid "echo" 100 | msgstr "tiếng_vọng" 101 | 102 | #: cogs/groupcog.py:15 103 | msgid "functions" 104 | msgstr "chức_năng" 105 | 106 | #: cogs/cog.py:70 107 | msgid "goodbye" 108 | msgstr "tạm_biệt" 109 | 110 | #: cogs/cog.py:69 111 | msgid "hello" 112 | msgstr "xin_chào" 113 | 114 | #: cogs/cog.py:71 115 | msgid "how are you?" 116 | msgstr "bạn khỏe không?" 117 | 118 | #: cogs/cog.py:62 119 | msgid "info" 120 | msgstr "thông_tin" 121 | 122 | #: cogs/groupcog.py:14 123 | msgid "math" 124 | msgstr "toán_học" 125 | 126 | #: cogs/cog.py:58 cogs/cog.py:66 127 | msgid "message" 128 | msgstr "tin_nhắn" 129 | 130 | #: cogs/groupcog.py:40 131 | msgid "multiply" 132 | msgstr "nhân" 133 | 134 | #: cogs/cog.py:54 135 | msgid "ping" 136 | msgstr "ping" 137 | 138 | #: cogs/groupcog.py:21 139 | msgid "power" 140 | msgstr "quyền_lực" 141 | 142 | #: cogs/groupcog.py:25 143 | msgid "sqrt" 144 | msgstr "mét_vuông" 145 | 146 | #: cogs/groupcog.py:34 147 | msgid "subtract" 148 | msgstr "trừ_đi" 149 | 150 | #: cogs/cog.py:66 151 | msgid "tell" 152 | msgstr "kể" 153 | 154 | #: cogs/cog.py:62 155 | msgid "user" 156 | msgstr "người_dùng" 157 | 158 | #: main.py:122 159 | msgid "user_ping" 160 | msgstr "user_ping" 161 | 162 | #: cogs/cog.py:42 163 | msgid "utility" 164 | msgstr "tính_thiết_thực" 165 | -------------------------------------------------------------------------------- /examples/smart-sync/translations/locales/zh_CN/LC_MESSAGES/dpygt.po: -------------------------------------------------------------------------------- 1 | # Chinese translations for PACKAGE package. 2 | # Copyright (C) 2023 THE PACKAGE'S COPYRIGHT HOLDER 3 | # This file is distributed under the same license as the PACKAGE package. 4 | # Automatically generated, 2023. 5 | # 6 | msgid "" 7 | msgstr "" 8 | "Project-Id-Version: PACKAGE VERSION\n" 9 | "Report-Msgid-Bugs-To: \n" 10 | "POT-Creation-Date: 2023-12-09 20:43+0530\n" 11 | "PO-Revision-Date: 2023-12-09 18:06+0530\n" 12 | "Last-Translator: Automatically generated\n" 13 | "Language-Team: none\n" 14 | "Language: zh_CN\n" 15 | "MIME-Version: 1.0\n" 16 | "Content-Type: text/plain; charset=UTF-8\n" 17 | "Content-Transfer-Encoding: 8bit\n" 18 | 19 | #: cogs/groupcog.py:29 20 | msgid "Add two numbers" 21 | msgstr "添加两个数字" 22 | 23 | #: cogs/cog.py:47 24 | msgid "Convert a duration to a timedelta" 25 | msgstr "将持续时间转换为时间增量" 26 | 27 | #: cogs/groupcog.py:45 28 | msgid "Divide two numbers" 29 | msgstr "两个数相除" 30 | 31 | #: cogs/cog.py:58 32 | msgid "Echo a message" 33 | msgstr "回显一条消息" 34 | 35 | #: cogs/cog.py:62 36 | msgid "Get info about a user" 37 | msgstr "获取有关用户的信息" 38 | 39 | #: cogs/cog.py:54 40 | msgid "Get the bot's latency" 41 | msgstr "获取机器人的延迟" 42 | 43 | #: cogs/groupcog.py:25 44 | msgid "Get the square root of a number" 45 | msgstr "求一个数的平方根" 46 | 47 | #: cogs/groupcog.py:14 48 | msgid "Math Commands" 49 | msgstr "数学命令" 50 | 51 | #: cogs/groupcog.py:15 52 | msgid "Math Functions" 53 | msgstr "数学函数" 54 | 55 | #: cogs/groupcog.py:40 56 | msgid "Multiply two numbers" 57 | msgstr "两个数字相乘" 58 | 59 | #: cogs/groupcog.py:21 60 | msgid "Raise a number to a power" 61 | msgstr "计算一个数的幂" 62 | 63 | #: cogs/groupcog.py:34 64 | msgid "Subtract two numbers" 65 | msgstr "两个数相减" 66 | 67 | #: cogs/cog.py:66 68 | msgid "Tell a message" 69 | msgstr "留言告诉我" 70 | 71 | #: cogs/cog.py:42 72 | msgid "Utility commands" 73 | msgstr "实用命令" 74 | 75 | #: cogs/groupcog.py:21 cogs/groupcog.py:25 cogs/groupcog.py:29 76 | #: cogs/groupcog.py:34 cogs/groupcog.py:40 cogs/groupcog.py:45 77 | msgid "a" 78 | msgstr "a" 79 | 80 | #: cogs/groupcog.py:29 81 | msgid "add" 82 | msgstr "添加" 83 | 84 | #: cogs/groupcog.py:21 cogs/groupcog.py:29 cogs/groupcog.py:34 85 | #: cogs/groupcog.py:40 cogs/groupcog.py:45 86 | msgid "b" 87 | msgstr "乙" 88 | 89 | #: cogs/groupcog.py:45 90 | msgid "divide" 91 | msgstr "划分" 92 | 93 | #: cogs/cog.py:47 94 | msgid "duration" 95 | msgstr "期间" 96 | 97 | #: cogs/cog.py:58 98 | msgid "echo" 99 | msgstr "回声" 100 | 101 | #: cogs/groupcog.py:15 102 | msgid "functions" 103 | msgstr "功能" 104 | 105 | #: cogs/cog.py:70 106 | msgid "goodbye" 107 | msgstr "再见" 108 | 109 | #: cogs/cog.py:69 110 | msgid "hello" 111 | msgstr "你好" 112 | 113 | #: cogs/cog.py:71 114 | msgid "how are you?" 115 | msgstr "你好吗?" 116 | 117 | #: cogs/cog.py:62 118 | msgid "info" 119 | msgstr "信息" 120 | 121 | #: cogs/groupcog.py:14 122 | msgid "math" 123 | msgstr "数学" 124 | 125 | #: cogs/cog.py:58 cogs/cog.py:66 126 | msgid "message" 127 | msgstr "信息" 128 | 129 | #: cogs/groupcog.py:40 130 | msgid "multiply" 131 | msgstr "乘" 132 | 133 | #: cogs/cog.py:54 134 | msgid "ping" 135 | msgstr "平" 136 | 137 | #: cogs/groupcog.py:21 138 | msgid "power" 139 | msgstr "力量" 140 | 141 | #: cogs/groupcog.py:25 142 | msgid "sqrt" 143 | msgstr "开方" 144 | 145 | #: cogs/groupcog.py:34 146 | msgid "subtract" 147 | msgstr "减去" 148 | 149 | #: cogs/cog.py:66 150 | msgid "tell" 151 | msgstr "告诉" 152 | 153 | #: cogs/cog.py:62 154 | msgid "user" 155 | msgstr "用户" 156 | 157 | #: main.py:122 158 | msgid "user_ping" 159 | msgstr "用户ping" 160 | 161 | #: cogs/cog.py:42 162 | msgid "utility" 163 | msgstr "公用事业" 164 | -------------------------------------------------------------------------------- /examples/smart-sync/translations/locales/zh_TW/LC_MESSAGES/dpygt.po: -------------------------------------------------------------------------------- 1 | # Chinese translations for PACKAGE package. 2 | # Copyright (C) 2023 THE PACKAGE'S COPYRIGHT HOLDER 3 | # This file is distributed under the same license as the PACKAGE package. 4 | # Automatically generated, 2023. 5 | # 6 | msgid "" 7 | msgstr "" 8 | "Project-Id-Version: PACKAGE VERSION\n" 9 | "Report-Msgid-Bugs-To: \n" 10 | "POT-Creation-Date: 2023-12-09 20:43+0530\n" 11 | "PO-Revision-Date: 2023-12-09 18:06+0530\n" 12 | "Last-Translator: Automatically generated\n" 13 | "Language-Team: none\n" 14 | "Language: zh_TW\n" 15 | "MIME-Version: 1.0\n" 16 | "Content-Type: text/plain; charset=UTF-8\n" 17 | "Content-Transfer-Encoding: 8bit\n" 18 | 19 | #: cogs/groupcog.py:29 20 | msgid "Add two numbers" 21 | msgstr "添加兩個數字" 22 | 23 | #: cogs/cog.py:47 24 | msgid "Convert a duration to a timedelta" 25 | msgstr "將持續時間轉換為時間增量" 26 | 27 | #: cogs/groupcog.py:45 28 | msgid "Divide two numbers" 29 | msgstr "兩個數相除" 30 | 31 | #: cogs/cog.py:58 32 | msgid "Echo a message" 33 | msgstr "回顯一則訊息" 34 | 35 | #: cogs/cog.py:62 36 | msgid "Get info about a user" 37 | msgstr "獲取有關用戶的信息" 38 | 39 | #: cogs/cog.py:54 40 | msgid "Get the bot's latency" 41 | msgstr "取得機器人的延遲" 42 | 43 | #: cogs/groupcog.py:25 44 | msgid "Get the square root of a number" 45 | msgstr "求一個數的平方根" 46 | 47 | #: cogs/groupcog.py:14 48 | msgid "Math Commands" 49 | msgstr "數學命令" 50 | 51 | #: cogs/groupcog.py:15 52 | msgid "Math Functions" 53 | msgstr "數學函數" 54 | 55 | #: cogs/groupcog.py:40 56 | msgid "Multiply two numbers" 57 | msgstr "兩個數字相乘" 58 | 59 | #: cogs/groupcog.py:21 60 | msgid "Raise a number to a power" 61 | msgstr "計算一個數的冪" 62 | 63 | #: cogs/groupcog.py:34 64 | msgid "Subtract two numbers" 65 | msgstr "兩個數相減" 66 | 67 | #: cogs/cog.py:66 68 | msgid "Tell a message" 69 | msgstr "留言告訴我" 70 | 71 | #: cogs/cog.py:42 72 | msgid "Utility commands" 73 | msgstr "實用命令" 74 | 75 | #: cogs/groupcog.py:21 cogs/groupcog.py:25 cogs/groupcog.py:29 76 | #: cogs/groupcog.py:34 cogs/groupcog.py:40 cogs/groupcog.py:45 77 | msgid "a" 78 | msgstr "a" 79 | 80 | #: cogs/groupcog.py:29 81 | msgid "add" 82 | msgstr "添加" 83 | 84 | #: cogs/groupcog.py:21 cogs/groupcog.py:29 cogs/groupcog.py:34 85 | #: cogs/groupcog.py:40 cogs/groupcog.py:45 86 | msgid "b" 87 | msgstr "乙" 88 | 89 | #: cogs/groupcog.py:45 90 | msgid "divide" 91 | msgstr "劃分" 92 | 93 | #: cogs/cog.py:47 94 | msgid "duration" 95 | msgstr "期間" 96 | 97 | #: cogs/cog.py:58 98 | msgid "echo" 99 | msgstr "迴音" 100 | 101 | #: cogs/groupcog.py:15 102 | msgid "functions" 103 | msgstr "功能" 104 | 105 | #: cogs/cog.py:70 106 | msgid "goodbye" 107 | msgstr "再見" 108 | 109 | #: cogs/cog.py:69 110 | msgid "hello" 111 | msgstr "你好" 112 | 113 | #: cogs/cog.py:71 114 | msgid "how are you?" 115 | msgstr "你好嗎?" 116 | 117 | #: cogs/cog.py:62 118 | msgid "info" 119 | msgstr "資訊" 120 | 121 | #: cogs/groupcog.py:14 122 | msgid "math" 123 | msgstr "數學" 124 | 125 | #: cogs/cog.py:58 cogs/cog.py:66 126 | msgid "message" 127 | msgstr "訊息" 128 | 129 | #: cogs/groupcog.py:40 130 | msgid "multiply" 131 | msgstr "乘" 132 | 133 | #: cogs/cog.py:54 134 | msgid "ping" 135 | msgstr "平" 136 | 137 | #: cogs/groupcog.py:21 138 | msgid "power" 139 | msgstr "力量" 140 | 141 | #: cogs/groupcog.py:25 142 | msgid "sqrt" 143 | msgstr "開方" 144 | 145 | #: cogs/groupcog.py:34 146 | msgid "subtract" 147 | msgstr "減去" 148 | 149 | #: cogs/cog.py:66 150 | msgid "tell" 151 | msgstr "告訴" 152 | 153 | #: cogs/cog.py:62 154 | msgid "user" 155 | msgstr "使用者" 156 | 157 | #: main.py:122 158 | msgid "user_ping" 159 | msgstr "使用者ping" 160 | 161 | #: cogs/cog.py:42 162 | msgid "utility" 163 | msgstr "公用事業" 164 | -------------------------------------------------------------------------------- /examples/smart-sync/translator.py: -------------------------------------------------------------------------------- 1 | import argparse 2 | import codecs 3 | import logging 4 | import re 5 | 6 | import polib 7 | from deep_translator import GoogleTranslator 8 | 9 | logging.basicConfig(level=logging.INFO) 10 | logger = logging.getLogger(__name__) 11 | 12 | 13 | def check_for_names_and_args(msg_id: str, msg_str: str) -> str: 14 | string = msg_str 15 | if " " not in msg_id or "_" in msg_id: 16 | string = string.replace(" ", "_") 17 | if msg_id.islower(): 18 | string = string.lower() 19 | if not any(char in msg_id for char in "'!\"#$%&'()*+,-./:;<=>?@[\\]^`{|}~'"): 20 | string = re.sub(r"[^\w\s]", "", string) 21 | return string 22 | 23 | 24 | def get_target_language(language: str) -> str: 25 | LANG_MAP = { 26 | "en_US": "en", 27 | "en_GB": "en", 28 | "pt_BR": "pt", 29 | "zh_CN": "zh-CN", 30 | "zh_TW": "zh-TW", 31 | "sv_SE": "sv", 32 | } 33 | return LANG_MAP.get(language, language) 34 | 35 | 36 | def translate_po_file(po_file: str) -> None: 37 | """Translate a PO file to a target language. 38 | 39 | Args: 40 | po_file: The PO file to translate. 41 | """ 42 | po = polib.pofile(po_file, encoding="utf-8") 43 | target_language = get_target_language(po.metadata["Language"]) 44 | translator = GoogleTranslator(source="en", target=target_language) 45 | for n, entry in enumerate(po, start=1): 46 | if entry.msgstr or not entry.msgid: 47 | entry.msgstr = check_for_names_and_args(entry.msgid, entry.msgstr) 48 | logger.info(f"{n}/{len(po)}: {entry.msgid} -> {entry.msgstr}") 49 | continue 50 | entry.msgstr = translator.translate(entry.msgid) 51 | entry.msgstr = check_for_names_and_args(entry.msgid, entry.msgstr) 52 | try: 53 | entry.msgstr = codecs.decode(entry.msgstr.encode("utf-8"), "utf-8") 54 | except UnicodeEncodeError: 55 | logger.warning(f"Entry {entry.msgid} could not be encoded in {target_language}") 56 | entry.msgstr = "" 57 | logger.info(f"{n}/{len(po)}: {entry.msgid} -> {entry.msgstr}") 58 | logger.info(f"Removing obsolete entries: {[entry.msgid for entry in po if entry.obsolete or entry.fuzzy]}") 59 | new_entries = [entry for entry in po if not entry.obsolete and not entry.fuzzy] 60 | po.clear() 61 | po.extend(new_entries) 62 | po.save() 63 | # po.save_as_mofile(po_file.replace(".po", ".mo")) 64 | 65 | 66 | def main(): 67 | """Main function.""" 68 | parser = argparse.ArgumentParser() 69 | parser.add_argument( 70 | "po_file", 71 | help="The PO file to translate.", 72 | ) 73 | args = parser.parse_args() 74 | translate_po_file(args.po_file) 75 | 76 | 77 | if __name__ == "__main__": 78 | main() 79 | -------------------------------------------------------------------------------- /examples/smart-sync/utils/__init__.py: -------------------------------------------------------------------------------- 1 | import typing 2 | 3 | from .translator import GettextTranslator 4 | from .tree import SlashCommandTree 5 | 6 | __all__: typing.Final[typing.Sequence[str]] = ( 7 | "GettextTranslator", 8 | "SlashCommandTree", 9 | ) 10 | -------------------------------------------------------------------------------- /examples/smart-sync/utils/translator.py: -------------------------------------------------------------------------------- 1 | from __future__ import annotations 2 | 3 | import gettext 4 | import logging 5 | import typing 6 | from pathlib import Path 7 | from typing import Iterator 8 | 9 | import discord 10 | from discord import app_commands 11 | 12 | _LOCALES_PATH = Path("translations/locales") 13 | DOMAIN = "dpygt" 14 | 15 | log = logging.getLogger(__name__) 16 | log.setLevel(logging.INFO) 17 | 18 | 19 | def locale_to_gnu(locale: discord.Locale) -> str: 20 | return str(locale).replace("-", "_") 21 | 22 | 23 | def yield_mo_paths() -> Iterator[Path]: 24 | log.info(f"Looking for compiled localizations in {_LOCALES_PATH}") 25 | if not _LOCALES_PATH.is_dir(): 26 | return 27 | for locale in _LOCALES_PATH.iterdir(): 28 | lc_messages = locale / "LC_MESSAGES" 29 | if not lc_messages.is_dir(): 30 | continue 31 | yield from lc_messages.glob("*.mo") 32 | 33 | 34 | class EmptyTranslations(gettext.NullTranslations): 35 | """Returns an empty message to indicate no translation is available.""" 36 | 37 | def gettext(self, message: str) -> str: 38 | return "" 39 | 40 | def ngettext(self, msgid1: str, msgid2: str, n: int) -> str: 41 | return "" 42 | 43 | def pgettext(self, context: str, message: str) -> str: 44 | return "" 45 | 46 | def npgettext(self, context: str, msgid1: str, msgid2: str, n: int) -> str: 47 | return "" 48 | 49 | 50 | class GettextTranslator(app_commands.Translator): 51 | def __init__(self, *args: typing.Any, **kwargs: typing.Any) -> None: 52 | super().__init__(*args, **kwargs) 53 | 54 | if not any(yield_mo_paths()): 55 | log.warning("No compiled localizations detected") 56 | 57 | async def translate( 58 | self, 59 | string: app_commands.locale_str, 60 | locale: discord.Locale, 61 | context: app_commands.TranslationContextTypes, 62 | ) -> str | None: 63 | try: 64 | t = gettext.translation( 65 | domain=DOMAIN, 66 | localedir=str(_LOCALES_PATH), 67 | languages=(locale_to_gnu(locale), "en_US"), 68 | ) 69 | except OSError: 70 | return 71 | 72 | t.add_fallback(EmptyTranslations()) 73 | 74 | plural: str | None = string.extras.get("plural") 75 | if plural is not None: 76 | assert isinstance(context.data, int) 77 | translated = t.ngettext(string.message, plural, context.data) 78 | else: 79 | translated = t.gettext(string.message) 80 | 81 | return translated or None 82 | -------------------------------------------------------------------------------- /examples/views/assets/1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FallenDeity/discord.py-masterclass/88db9e6c99f00ea16d0cd4b3017bbc7a810b807e/examples/views/assets/1.png -------------------------------------------------------------------------------- /examples/views/assets/2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FallenDeity/discord.py-masterclass/88db9e6c99f00ea16d0cd4b3017bbc7a810b807e/examples/views/assets/2.png -------------------------------------------------------------------------------- /examples/views/assets/3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FallenDeity/discord.py-masterclass/88db9e6c99f00ea16d0cd4b3017bbc7a810b807e/examples/views/assets/3.png -------------------------------------------------------------------------------- /examples/views/assets/4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FallenDeity/discord.py-masterclass/88db9e6c99f00ea16d0cd4b3017bbc7a810b807e/examples/views/assets/4.png -------------------------------------------------------------------------------- /examples/views/assets/5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FallenDeity/discord.py-masterclass/88db9e6c99f00ea16d0cd4b3017bbc7a810b807e/examples/views/assets/5.png -------------------------------------------------------------------------------- /examples/views/assets/6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FallenDeity/discord.py-masterclass/88db9e6c99f00ea16d0cd4b3017bbc7a810b807e/examples/views/assets/6.png -------------------------------------------------------------------------------- /examples/views/assets/7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FallenDeity/discord.py-masterclass/88db9e6c99f00ea16d0cd4b3017bbc7a810b807e/examples/views/assets/7.png -------------------------------------------------------------------------------- /examples/views/assets/8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FallenDeity/discord.py-masterclass/88db9e6c99f00ea16d0cd4b3017bbc7a810b807e/examples/views/assets/8.png -------------------------------------------------------------------------------- /examples/views/assets/9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FallenDeity/discord.py-masterclass/88db9e6c99f00ea16d0cd4b3017bbc7a810b807e/examples/views/assets/9.png -------------------------------------------------------------------------------- /examples/views/paginators/__init__.py: -------------------------------------------------------------------------------- 1 | """Base class for paginators.""" 2 | 3 | from __future__ import annotations 4 | 5 | from io import BufferedIOBase 6 | from os import PathLike 7 | from typing import TYPE_CHECKING, Any, Generic, List, TypeVar, Union 8 | 9 | import discord 10 | from views import BaseView 11 | 12 | if TYPE_CHECKING: 13 | from typing_extensions import TypeAlias 14 | 15 | PageLike: TypeAlias = Union[discord.Embed, str, bytes, PathLike[Any], BufferedIOBase, discord.File] 16 | FileLike: TypeAlias = Union[str, bytes, PathLike[Any], BufferedIOBase] 17 | 18 | T = TypeVar("T", bound=PageLike) 19 | 20 | 21 | class BasePaginator(Generic[T], BaseView): 22 | pages: List[T] 23 | current_page: int 24 | 25 | def __init__( 26 | self, user: Union[discord.User, discord.Member], pages: List[T], *, attachments: List[discord.File] = None 27 | ) -> None: 28 | super().__init__(user=user, timeout=180) 29 | self.pages = pages 30 | self.current_page: int = 0 31 | self.attachments = attachments or [] 32 | 33 | async def send_page(self, inter: discord.Interaction, page: T) -> None: 34 | if isinstance(page, discord.Embed): # Embed 35 | # Check if the embed has an associated attachment and send it along with the embed 36 | attachment = None 37 | if (page.image.url or "").startswith("attachment://") and len(self.attachments) > self.current_page: 38 | attachment = discord.File(self.attachments[self.current_page].fp.name) 39 | attachments = [attachment] if attachment else [] 40 | if self.message is None: 41 | return await inter.response.send_message(embed=page, view=self, files=attachments) 42 | self.message = await inter.edit_original_response(embed=page, view=self, attachments=attachments) 43 | return 44 | 45 | if isinstance(page, str): # String 46 | # Check if the string has an associated attachment and send it along with the string 47 | attachment = None 48 | if len(self.attachments) > self.current_page: 49 | attachment = discord.File(self.attachments[self.current_page].fp.name) 50 | attachments = [attachment] if attachment else [] 51 | if self.message is None: 52 | return await inter.response.send_message(content=page, view=self, files=attachments) 53 | self.message = await inter.edit_original_response(content=page, view=self, attachments=attachments) 54 | return 55 | 56 | # File 57 | file = discord.File(page) if not isinstance(page, discord.File) else discord.File(page.fp.name) 58 | if self.message is None: 59 | return await inter.response.send_message(file=file, view=self) 60 | self.message = await inter.edit_original_response(attachments=[file], view=self) 61 | 62 | async def start_paginator(self, inter: discord.Interaction, *, starting_page: int = 0) -> None: 63 | self.current_page = starting_page 64 | page = self.pages[starting_page] 65 | await self.send_page(inter, page) 66 | self.message = await inter.original_response() 67 | 68 | async def stop_paginator(self) -> None: 69 | self._disable_all() 70 | await self._edit(view=self) 71 | 72 | async def next_page(self, inter: discord.Interaction) -> None: 73 | self.current_page = (self.current_page + 1) % len(self.pages) 74 | page = self.pages[self.current_page] 75 | await self.send_page(inter, page) 76 | 77 | async def previous_page(self, inter: discord.Interaction) -> None: 78 | self.current_page = (self.current_page - 1) % len(self.pages) 79 | page = self.pages[self.current_page] 80 | await self.send_page(inter, page) 81 | -------------------------------------------------------------------------------- /examples/views/paginators/advanced_paginator.py: -------------------------------------------------------------------------------- 1 | from __future__ import annotations 2 | 3 | from typing import Generic, List, Optional, TypeVar, Union 4 | 5 | import discord 6 | from discord import File, Member, User 7 | from paginators import FileLike, PageLike 8 | from paginators.button_paginator import ButtonBasedPaginator 9 | 10 | T = TypeVar("T", bound=PageLike) 11 | 12 | 13 | class CategoryEntry(Generic[T]): 14 | def __init__( 15 | self, 16 | *, 17 | category_title: str, 18 | category_description: Optional[str] = None, 19 | pages: Optional[List[T]] = None, 20 | attachments: Optional[List[File]] = None, 21 | ) -> None: 22 | self.category_title = category_title 23 | self.category_description = category_description 24 | self.pages = pages or [] 25 | self.attachments = attachments or [] 26 | 27 | def add_page(self, page: T) -> None: 28 | self.pages.append(page) 29 | 30 | 31 | class CategoryBasedPaginator(Generic[T], ButtonBasedPaginator[T]): 32 | def __init__( 33 | self, 34 | user: Union[User, Member], 35 | *, 36 | pages: List[CategoryEntry[T]], 37 | ) -> None: 38 | self.categories = pages 39 | self.current_category: int = 0 40 | 41 | super().__init__(user, pages[self.current_category].pages, attachments=pages[self.current_category].attachments) 42 | 43 | self.select = CategoryPaginatorSelect() 44 | for i, page in enumerate(pages): 45 | self.select.add_option( 46 | label=page.category_title, 47 | value=str(i), 48 | description=page.category_description, 49 | ) 50 | self.add_item(self.select) 51 | 52 | 53 | class CategoryPaginatorSelect(discord.ui.Select[CategoryBasedPaginator[PageLike]]): 54 | def __init__(self) -> None: 55 | super().__init__(min_values=1, max_values=1) 56 | 57 | async def callback(self, interaction: discord.Interaction) -> None: 58 | # the user can only select one value and shoud at least select it 59 | # so this is always fine 60 | await interaction.response.defer() 61 | self.view.current_category = int(self.values[0]) 62 | view: CategoryBasedPaginator[PageLike] = self.view 63 | view.pages = view.categories[self.view.current_category].pages 64 | view.attachments = view.categories[self.view.current_category].attachments 65 | view.current_page = 0 66 | page = view.pages[view.current_page] 67 | await view.send_page(interaction, page) 68 | 69 | async def interaction_check(self, interaction: discord.Interaction) -> bool: 70 | return await self.view.interaction_check(interaction) 71 | 72 | 73 | class EmbedCategoryPaginator(CategoryBasedPaginator[discord.Embed]): 74 | def __init__(self, user: Union[discord.User, discord.Member], *, pages: List[CategoryEntry[discord.Embed]]) -> None: 75 | super().__init__(user, pages=pages) 76 | 77 | 78 | class FileCategoryPaginator(CategoryBasedPaginator[FileLike]): 79 | def __init__(self, user: Union[discord.User, discord.Member], *, pages: List[CategoryEntry[FileLike]]) -> None: 80 | super().__init__(user, pages=pages) 81 | 82 | 83 | class StringCategoryPaginator(CategoryBasedPaginator[str]): 84 | def __init__(self, user: Union[discord.User, discord.Member], *, pages: List[CategoryEntry[str]]) -> None: 85 | super().__init__(user, pages=pages) 86 | -------------------------------------------------------------------------------- /examples/views/paginators/button_paginator.py: -------------------------------------------------------------------------------- 1 | from __future__ import annotations 2 | 3 | from typing import TYPE_CHECKING, Generic, List, TypeVar, Union 4 | 5 | import discord 6 | from discord import PartialEmoji 7 | from paginators import BasePaginator, FileLike, PageLike 8 | 9 | if TYPE_CHECKING: 10 | from views import BaseView 11 | 12 | 13 | T = TypeVar("T", bound=PageLike) 14 | 15 | 16 | class ButtonBasedPaginator(Generic[T], BasePaginator[T]): 17 | @discord.ui.button(emoji=PartialEmoji.from_str("⏪")) 18 | async def goto_first_page_callback(self, inter: discord.Interaction, _: discord.ui.Button[BaseView]) -> None: 19 | await inter.response.defer() 20 | self.current_page = 0 21 | page = self.pages[self.current_page] 22 | await self.send_page(inter, page) 23 | 24 | @discord.ui.button(emoji=PartialEmoji.from_str("◀️")) 25 | async def previous_page_callback(self, inter: discord.Interaction, _: discord.ui.Button[BaseView]) -> None: 26 | await inter.response.defer() 27 | await self.previous_page(inter) 28 | 29 | @discord.ui.button(emoji=PartialEmoji.from_str("▶️")) 30 | async def next_page_callback(self, inter: discord.Interaction, _: discord.ui.Button[BaseView]) -> None: 31 | await inter.response.defer() 32 | await self.next_page(inter) 33 | 34 | @discord.ui.button(emoji=PartialEmoji.from_str("⏩")) 35 | async def goto_last_page_callback(self, inter: discord.Interaction, _: discord.ui.Button[BaseView]) -> None: 36 | await inter.response.defer() 37 | self.current_page = len(self.pages) - 1 38 | page = self.pages[self.current_page] 39 | await self.send_page(inter, page) 40 | 41 | @discord.ui.button(emoji=PartialEmoji.from_str("🗑️")) 42 | async def stop_paginator_callback(self, inter: discord.Interaction, _: discord.ui.Button[BaseView]) -> None: 43 | await inter.response.defer() 44 | await self.stop_paginator() 45 | 46 | 47 | class EmbedButtonPaginator(ButtonBasedPaginator[discord.Embed]): 48 | def __init__( 49 | self, 50 | user: Union[discord.User, discord.Member], 51 | pages: List[discord.Embed], 52 | *, 53 | attachments: List[discord.File] = None, 54 | ) -> None: 55 | super().__init__(user, pages, attachments=attachments) 56 | 57 | 58 | class FileButtonPaginator(ButtonBasedPaginator[FileLike]): 59 | def __init__(self, user: Union[discord.User, discord.Member], pages: List[FileLike]) -> None: 60 | super().__init__(user, pages) 61 | 62 | 63 | class StringButtonPaginator(ButtonBasedPaginator[str]): 64 | def __init__( 65 | self, 66 | user: Union[discord.User, discord.Member], 67 | pages: List[str], 68 | *, 69 | attachments: List[discord.File] = None, 70 | ) -> None: 71 | super().__init__(user, pages, attachments=attachments) 72 | -------------------------------------------------------------------------------- /examples/views/paginators/select_paginator.py: -------------------------------------------------------------------------------- 1 | from __future__ import annotations 2 | 3 | from typing import Generic, List, Optional, TypeVar, Union 4 | 5 | import discord 6 | from paginators import BasePaginator, FileLike, PageLike 7 | 8 | T = TypeVar("T", bound=PageLike) 9 | 10 | 11 | class PageEntry(Generic[T]): 12 | def __init__( 13 | self, 14 | value: T, 15 | *, 16 | page_title: str, 17 | page_description: Optional[str] = None, 18 | attachment: discord.File = None, 19 | ) -> None: 20 | self.page_title = page_title 21 | self.page_description = page_description 22 | self.value = value 23 | self.attachment = attachment 24 | 25 | 26 | class SelectMenuBasedPaginator(Generic[T], BasePaginator[T]): 27 | def __init__( 28 | self, 29 | user: Union[discord.User, discord.Member], 30 | *, 31 | pages: List[PageEntry[T]], 32 | ) -> None: 33 | self.select = PaginatorSelect(view=self) 34 | pages_: List[T] = [] 35 | attachments_: List[discord.File] = [] 36 | for i, page in enumerate(pages): 37 | pages_.append(page.value) 38 | if page.attachment: 39 | attachments_.append(page.attachment) 40 | self.select.add_option( 41 | label=page.page_title, 42 | value=str(i), 43 | description=page.page_description, 44 | ) 45 | super().__init__(user, pages=pages_, attachments=attachments_) 46 | self.add_item(self.select) 47 | 48 | 49 | class PaginatorSelect(discord.ui.Select[SelectMenuBasedPaginator[PageLike]]): 50 | def __init__(self, view: SelectMenuBasedPaginator[PageLike]) -> None: 51 | super().__init__(min_values=1, max_values=1) 52 | self.base_view = view 53 | 54 | async def callback(self, interaction: discord.Interaction) -> None: 55 | # the user can only select one value and shoud at least select it 56 | # so this is always fine 57 | await interaction.response.defer() 58 | self.base_view.current_page = int(self.values[0]) 59 | page = self.base_view.pages[self.base_view.current_page] 60 | await self.base_view.send_page(interaction, page) 61 | 62 | async def interaction_check(self, interaction: discord.Interaction) -> bool: 63 | return await self.base_view.interaction_check(interaction) 64 | 65 | 66 | class EmbedSelectPaginator(SelectMenuBasedPaginator[discord.Embed]): 67 | def __init__(self, user: Union[discord.User, discord.Member], *, pages: List[PageEntry[discord.Embed]]) -> None: 68 | super().__init__(user, pages=pages) 69 | 70 | 71 | class FileSelectPaginator(SelectMenuBasedPaginator[FileLike]): 72 | def __init__(self, user: Union[discord.User, discord.Member], *, pages: List[PageEntry[FileLike]]) -> None: 73 | super().__init__(user, pages=pages) 74 | 75 | 76 | class StringSelectPaginator(SelectMenuBasedPaginator[str]): 77 | def __init__(self, user: Union[discord.User, discord.Member], *, pages: List[PageEntry[str]]) -> None: 78 | super().__init__(user, pages=pages) 79 | -------------------------------------------------------------------------------- /pyproject.toml: -------------------------------------------------------------------------------- 1 | [tool.poetry] 2 | name = "discord-py-masterclass" 3 | version = "0.1.0" 4 | description = "" 5 | authors = ["FallenDeity <61227305+FallenDeity@users.noreply.github.com>"] 6 | readme = "README.md" 7 | package-mode = false 8 | 9 | [tool.poetry.dependencies] 10 | python = "^3.9" 11 | "discord.py" = {branch = "master", git = "https://github.com/Rapptz/discord.py.git", extras = ["voice"]} 12 | python-dotenv = "^1.1.0" 13 | tabulate = "^0.9.0" 14 | jishaku = "^2.6.0" 15 | polib = "^1.2.0" 16 | deep-translator = "^1.11.4" 17 | humanfriendly = "^10.0" 18 | 19 | 20 | [tool.poetry.group.dev.dependencies] 21 | black = "^25.1.0" 22 | isort = "^6.0.1" 23 | ruff = "^0.11.7" 24 | pre-commit = "^4.2.0" 25 | pyright = "^1.1.400" 26 | mkdocs-material = "^9.6.12" 27 | pygments = "^2.19.1" 28 | mkdocs = "^1.6.1" 29 | Pillow = "^11.2.1" 30 | CairoSVG = "^2.7.1" 31 | pipwin = "^0.5.2" 32 | mkdocs-glightbox = "^0.4.0" 33 | griffe = "^1.7.3" 34 | mkdocstrings = {extras = ["python"], version = "^0.29.1"} 35 | 36 | [build-system] 37 | requires = ["poetry-core"] 38 | build-backend = "poetry.core.masonry.api" 39 | 40 | [tool.ruff] 41 | line-length = 120 42 | target-version = "py39" 43 | 44 | [tool.black] 45 | line-length = 120 46 | target-version = ['py39'] 47 | 48 | [tool.isort] 49 | line_length = 120 50 | multi_line_output = 3 51 | include_trailing_comma = true 52 | force_grid_wrap = 0 53 | use_parentheses = true 54 | ensure_newline_before_comments = true 55 | 56 | [tool.pyright] 57 | pythonVersion = "3.9" 58 | typeCheckingMode = "strict" 59 | reportImportCycles = false 60 | reportPrivateUsage = false 61 | reportPrivateImportUsage = false 62 | reportMissingModuleSource = false 63 | reportMissingTypeStubs = false 64 | reportUnknownMemberType = false 65 | --------------------------------------------------------------------------------