├── .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 |
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 |
--------------------------------------------------------------------------------